public void CreateFields(ContentType targetContextType)
 {
     if (FieldsList != null && FieldsList.Count != 0)
     {
         FieldsList.ForEach(field =>
         {
             field.TargetContentType = targetContextType;
             field.Create();
         });
     }
 }
Ejemplo n.º 2
0
        private EntityDefinition CreateEntityType(DbSetInfo dbSetInfo, DotNet2TS dotNet2TS)
        {
            EntityDefinition entityDef = new EntityDefinition();

            string dbSetType = GetDbSetTypeName(dbSetInfo.dbSetName);

            entityDef.interfaceName = GetEntityInterfaceName(dbSetInfo.dbSetName);
            entityDef.valsName      = GetValsInterfaceName(dbSetInfo.dbSetName);
            entityDef.entityName    = GetEntityTypeName(dbSetInfo.dbSetName);
            entityDef.aspectName    = string.Format("T{0}Aspect", entityDef.interfaceName);

            FieldsList    fieldInfos   = dbSetInfo.fieldInfos;
            StringBuilder sbFields     = new StringBuilder();
            StringBuilder sbFieldsDef  = new StringBuilder();
            StringBuilder sbFieldsInit = new StringBuilder();

            StringBuilder sbEntityFields = new StringBuilder();
            StringBuilder sbValsFields   = new StringBuilder();

            if (dotNet2TS.IsTypeNameRegistered(entityDef.interfaceName))
            {
                throw new ApplicationException(
                          string.Format("Names collision. Name '{0}' can not be used for an entity type's name because this name is used for a client's type.",
                                        entityDef.interfaceName));
            }

            Action <Field> AddCalculatedField = f =>
            {
                string dataType = GetFieldDataType(f);
                sbFields.AppendFormat("\tget {0}(): {1} {{ return this._aspect._getCalcFieldVal('{0}'); }}", f.fieldName,
                                      dataType);
                sbFields.AppendLine();

                sbEntityFields.AppendFormat("\treadonly {0}: {1};", f.fieldName, dataType);
                sbEntityFields.AppendLine();
            };

            Action <Field> AddNavigationField = f =>
            {
                string dataType = GetFieldDataType(f);
                sbFields.AppendFormat("\tget {0}(): {1} {{ return this._aspect._getNavFieldVal('{0}'); }}", f.fieldName,
                                      dataType);
                sbFields.AppendLine();
                //no writable properties to ParentToChildren navigation fields
                bool isReadonly = dataType.EndsWith("[]");
                if (!isReadonly)
                {
                    sbFields.AppendFormat("\tset {0}(v: {1}) {{ this._aspect._setNavFieldVal('{0}',v); }}", f.fieldName,
                                          dataType);
                    sbFields.AppendLine();
                }

                sbEntityFields.AppendFormat("\t{0}{1}: {2};", isReadonly ? "readonly " : "", f.fieldName, dataType);
                sbEntityFields.AppendLine();
            };

            Action <Field> AddComplexTypeField = f =>
            {
                string dataType   = GetFieldDataType(f);
                string interfName = string.Format("I{0}", dataType);
                sbFields.AppendFormat("\tget {0}(): {2} {{ if (!this._{0}) {{this._{0} = new {1}('{0}', this._aspect);}} return this._{0}; }}",
                                      f.fieldName, dataType, interfName);
                sbFields.AppendLine();
                sbFieldsDef.AppendFormat("\tprivate _{0}: {1};", f.fieldName, dataType);
                sbFieldsDef.AppendLine();
                sbFieldsInit.AppendFormat("\t\tthis._{0} = null;", f.fieldName);
                sbFieldsInit.AppendLine();

                sbValsFields.AppendFormat("\treadonly {0}: {1};", f.fieldName, interfName);
                sbValsFields.AppendLine();
            };

            Action <Field> AddSimpleField = f =>
            {
                string dataType = GetFieldDataType(f);
                sbFields.AppendFormat("\tget {0}(): {1} {{ return this._aspect._getFieldVal('{0}'); }}", f.fieldName,
                                      dataType);
                sbFields.AppendLine();
                if (!f.isReadOnly || f.allowClientDefault)
                {
                    sbFields.AppendFormat("\tset {0}(v: {1}) {{ this._aspect._setFieldVal('{0}',v); }}", f.fieldName,
                                          dataType);
                    sbFields.AppendLine();
                }

                sbValsFields.AppendFormat("\t{0}{1}: {2};", (!f.isReadOnly || f.allowClientDefault) ? "" : "readonly ", f.fieldName, dataType);
                sbValsFields.AppendLine();
            };

            fieldInfos.ForEach(fieldInfo =>
            {
                if (fieldInfo.fieldType == FieldType.Calculated)
                {
                    AddCalculatedField(fieldInfo);
                }
                else if (fieldInfo.fieldType == FieldType.Navigation)
                {
                    AddNavigationField(fieldInfo);
                }
                else if (fieldInfo.fieldType == FieldType.Object)
                {
                    AddComplexTypeField(fieldInfo);
                }
                else
                {
                    AddSimpleField(fieldInfo);
                }
            });

            Dictionary <string, Func <TemplateParser.Context, string> > dic = new Dictionary <string, Func <TemplateParser.Context, string> >
            {
                { "DBSET_NAME", (context) => dbSetInfo.dbSetName },
                { "DBSET_TYPE", (context) => dbSetType },
                { "ENTITY_NAME", (context) => entityDef.entityName },
                { "INTERFACE_NAME", (context) => entityDef.interfaceName },
                { "VALS_NAME", (context) => entityDef.valsName },
                { "ASPECT_NAME", (context) => entityDef.aspectName },
                { "ENTITY_FIELDS", (context) => TrimEnd(sbFields.ToString()) },
                { "FIELDS_DEF", (context) => TrimEnd(sbFieldsDef.ToString()) },
                { "FIELDS_INIT", (context) => TrimEnd(sbFieldsInit.ToString()) }
            };

            entityDef.entityDefinition    = TrimEnd(_entityTemplate.ToString(dic));
            entityDef.interfaceDefinition = CreateEntityInterface(entityDef, TrimEnd(sbValsFields.ToString()), TrimEnd(sbEntityFields.ToString()));

            return(entityDef);
        }