public void CreateFields(ContentType targetContextType) { if (FieldsList != null && FieldsList.Count != 0) { FieldsList.ForEach(field => { field.TargetContentType = targetContextType; field.Create(); }); } }
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); }