예제 #1
0
 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}}}");
 }
예제 #2
0
 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)}");
         }
     }
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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();
        }