public static void GenLoad(StreamWriter sw, string prefix, BeanDefine beanDefine, Bean bean, Property.DataOutputFlags flags) { sw.WriteLine($"{{"); foreach (var varDefine in beanDefine.Variables) { if (0 == (varDefine.DataOutputFlags & flags)) { continue; } if (bean.VariableMap.TryGetValue(varDefine.Name, out var varData)) { GenLoad(sw, prefix + " ", varDefine, varData, flags); } else if (VarDefine.EType.List == varDefine.TypeNow) { sw.WriteLine($"{prefix} V{varDefine.Name}: ["); sw.WriteLine($"{prefix} ],"); } } sw.Write($"{prefix}}}"); }
public static void GenLoad(StreamWriter sw, string baseTable, BeanDefine beanDefine, Bean bean, Property.DataOutputFlags flags) { foreach (var varDefine in beanDefine.Variables) { if (0 == (varDefine.DataOutputFlags & flags)) { continue; } if (bean.VariableMap.TryGetValue(varDefine.Name, out var varData)) { GenLoad(sw, baseTable, varDefine, varData, flags); } else if (VarDefine.EType.List == varDefine.TypeNow) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {{}}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin}\"] = {GetDefaultInitialize(varDefine)}"); } } }
public static void Gen(StreamWriter sw, Document doc, BeanDefine bean, Property.DataOutputFlags flags) { // gen enum foreach (var e in bean.EnumDefines.Values) { Gen(sw, doc, e, flags); } var beanFullName = bean.FullName().Replace('.', '_'); sw.WriteLine($"export class _{beanFullName} {{"); if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.IdList.PName, out var pid)) { throw new Exception("Property.Id miss!"); } // var property foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } var typeName = TypeHelper.GetName(var); if (var.Type != VarDefine.EType.List) { sw.WriteLine($" public V{var.Name}?: {typeName}{TypeHelper.GetDefaultInitialize(var)};"); } else { sw.WriteLine($" private _V{var.Name}?: {typeName};"); sw.WriteLine($" public get V{var.Name}() {{"); sw.WriteLine($" return this._V{var.Name};"); sw.WriteLine($" }}"); sw.WriteLine($" public set V{var.Name}(value: {typeName}) {{"); sw.WriteLine($" this._V{var.Name} = value;"); sw.WriteLine($" for (var i = 0; i < value.length; ++i) {{"); foreach (var varRef in var.Reference.Variables) { if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } var key = TypeHelper.GetName(varRef); var value = var.Reference.FullName().Replace('.', '_'); sw.WriteLine($" var bean = value[i];"); sw.WriteLine($" this.V{var.Name}Map{varRef.Name}.set(bean.V{varRef.Name}, bean);"); } sw.WriteLine($" }}"); sw.WriteLine($" }}"); foreach (var varRef in var.Reference.Variables) { if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } var key = TypeHelper.GetName(varRef); var value = var.Reference.FullName().Replace('.', '_'); sw.WriteLine($" public V{var.Name}Map{varRef.Name}?: Map<{key}, _{value}> = new Map<{key}, _{value}>();"); } } } sw.WriteLine($"}}"); // end of bean sw.WriteLine(); // sub bean foreach (var sub in bean.BeanDefines.Values) { Gen(sw, doc, sub, flags); } }
public static void Gen(System.IO.StreamWriter sw, Document doc, BeanDefine bean, string prefix, Property.DataOutputFlags flags) { sw.WriteLine($"{prefix}public class {bean.Name}"); sw.WriteLine($"{prefix}{{"); // sub bean foreach (var sub in bean.BeanDefines.Values) { Gen(sw, doc, sub, prefix + " ", flags); } foreach (var e in bean.EnumDefines.Values) { Gen(sw, doc, e, prefix + " ", flags); } if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.IdList.PName, out var pid)) { throw new Exception("Property.Id miss!"); } // var property foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } sw.WriteLine($"{prefix} public {TypeHelper.GetName(var)} V{var.Name} {{ get; set; }}{TypeHelper.GetDefaultInitialize(var)}"); if (var.Type == VarDefine.EType.List) { foreach (var varRef in var.Reference.Variables) { if (0 == (varRef.DataOutputFlags & flags)) { continue; } if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } sw.WriteLine($"{prefix} public Dictionary<{TypeHelper.GetName(varRef)}, {var.Reference.FullName()}> V{var.Name}Map{varRef.Name} {{ get; }} = new Dictionary<{TypeHelper.GetName(varRef)}, {var.Reference.FullName()}>();"); } } } sw.WriteLine(); // load。解析代码都生成吧,虽然有点烦。不过不会代码依赖也好。 sw.WriteLine($"{prefix} public {bean.Name}(XmlElement self)"); sw.WriteLine($"{prefix} {{"); sw.WriteLine($"{prefix} foreach (XmlNode node in self.ChildNodes)"); sw.WriteLine($"{prefix} {{"); sw.WriteLine($"{prefix} if (XmlNodeType.Element != node.NodeType)"); sw.WriteLine($"{prefix} continue;"); sw.WriteLine($"{prefix} XmlElement e = (XmlElement)node;"); sw.WriteLine($"{prefix} switch (e.Name)"); sw.WriteLine($"{prefix} {{"); foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } sw.WriteLine($"{prefix} case \"{var.Name}\":"); TypeHelper.GenLoader(sw, doc, var, prefix + " ", flags); sw.WriteLine($"{prefix} break;"); sw.WriteLine(); } sw.WriteLine($"{prefix} default:"); sw.WriteLine($"{prefix} throw new Exception(\"unkown var name: \" + e.Name);"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix}}}"); // end of bean sw.WriteLine(); }