public StringBuilder GetProperties(IDataMetadata meta) { var sb = new StringBuilder(); foreach (var fd in meta.Fields) { var fm = fd.Value; String propObj = fm.GetObjectType($"{meta.Name}.{fd.Key}"); if (propObj == "String") { if (fm.IsJson) { propObj = $"{{type:String, len:{fm.Length}, json:true}}"; } else { propObj = $"{{type:String, len:{fm.Length}}}"; } } else if (propObj == "TPeriod") { propObj = $"{{type: uPeriod.constructor}}"; } sb.Append($"'{fd.Key}'") .Append(':') .Append(propObj) .Append(","); } if (sb.Length == 0) { return(sb); } sb.RemoveTailComma(); return(sb); }
String GetSpecialProperties(IDataMetadata meta) { StringBuilder sb = new StringBuilder(); if (!String.IsNullOrEmpty(meta.Id)) { sb.Append($"$id: '{meta.Id}',"); } if (!String.IsNullOrEmpty(meta.Name)) { sb.Append($"$name: '{meta.Name}',"); } if (!String.IsNullOrEmpty(meta.RowNumber)) { sb.Append($"$rowNo: '{meta.RowNumber}',"); } if (!String.IsNullOrEmpty(meta.HasChildren)) { sb.Append($"$hasChildren: '{meta.HasChildren}',"); } if (!String.IsNullOrEmpty(meta.MapItemType)) { sb.Append($"$itemType: {meta.MapItemType},"); } if (!String.IsNullOrEmpty(meta.Permissions)) { sb.Append($"$permissions: '{meta.Permissions}',"); } if (!String.IsNullOrEmpty(meta.Items)) { sb.Append($"$items: '{meta.Items}',"); } if (meta.IsGroup) { sb.Append($"$group: true,"); } StringBuilder lazyFields = new StringBuilder(); foreach (var f in meta.Fields) { if (f.Value.IsLazy) { lazyFields.Append($"'{f.Key}',"); } } if (lazyFields.Length != 0) { lazyFields.RemoveTailComma(); sb.Append($"$lazy: [{lazyFields.ToString()}]"); } if (sb.Length == 0) { return(null); } sb.RemoveTailComma(); return(",\n" + sb.ToString()); }
static String GetCrossProperties(IDataMetadata meta) { var sb = new StringBuilder("{"); foreach (var c in meta.Cross) { sb.Append($"{c.Key}: ["); if (c.Value != null) { sb.Append(String.Join(",", c.Value.Select(s => $"'{s}'"))); } sb.Append("]"); } sb.AppendLine("}"); return(sb.ToString()); }
String GetCrossProperties(IDataMetadata meta) { var sb = new StringBuilder("{"); foreach (var c in meta.Cross) { sb.Append($"{c.Key}: ["); foreach (var s in c.Value) { sb.Append($"'{s}',"); } sb.RemoveTailComma(); sb.Append("]"); } sb.AppendLine("}"); return(sb.ToString()); }
void CheckFields(String typeName, IDataMetadata data, TypeMetadata typeMeta) { foreach (var fv in data.Fields) { if (!typeMeta.ContainsKey(fv.Key)) { throw new TypeCheckerException($"Type '{typeName}'. Field '{fv.Key}' is in the model but not found in the description file"); } var dfm = typeMeta[fv.Key]; CheckType(typeName, dfm, fv.Value); } foreach (var fm in typeMeta.Where(x => !x.Key.StartsWith("$"))) { if (!data.Fields.ContainsKey(fm.Key)) { throw new TypeCheckerException($"Type '{typeName}'. Field '{fm.Key}' is in the description file but not found in the model"); } } }
StringBuilder GetOneConstructor(String name, IDataMetadata ctor) { var sb = new StringBuilder(); String arrItem = ctor.IsArrayType ? "true" : "false"; sb.AppendLine($"function {name}(source, path, parent) {{") .AppendLine("cmn.createObject(this, source, path, parent);") .AppendLine("}") // metadata .Append($"cmn.defineObject({name}, {{props: {{") .Append(GetProperties(ctor)) .Append("}") .Append(GetSpecialProperties(ctor)) .AppendLine($"}}, {arrItem});"); if (ctor.IsArrayType) { sb.AppendLine($"function {name}Array(source, path, parent) {{") .AppendLine($"return cmn.createArray(source, path, {name}, {name}Array, parent);") .AppendLine("}"); } return(sb); }