Ejemplo n.º 1
0
        public static void Writer(string InPath, ref TableData InTableData)
        {
            if (InPath == null)
            {
                return;
            }

            FileInfo      info = new FileInfo(InPath);
            List <string> oldContent;

            if (info.Exists)
            {
                oldContent = new List <string>(100);
                using (FileStream stream = info.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string line;
                        bool   isNeedRead = false;
                        while (null != (line = reader.ReadLine()))
                        {
                            if (!isNeedRead && line.Contains("*Self Code Begin*"))
                            {
                                isNeedRead = true;
                            }
                            if (isNeedRead)
                            {
                                oldContent.Add(line);
                            }
                            if (isNeedRead && line.Contains("*Self Code End*"))
                            {
                                isNeedRead = false;
                            }
                        }

                        reader.Close();
                    }
                    stream.Close();
                }
            }
            else
            {
                oldContent = new List <string>(4)
                {
                    "        //-------------------------------*Self Code Begin*-------------------------------",
                    "        //Custom code.",
                    "        //-------------------------------*Self Code End*   -------------------------------"
                };
            }

            string        filename = InTableData.TableName;
            StringBuilder sb       = new StringBuilder(1024);
            int           length   = InTableData.ColumnName.Length;

            sb.Append("/*\n")
            .Append(" * --->SQLite3 dataSyncBase table structure.<---\n")
            .Append(" * --->This class code is automatically generated。<---\n")
            .Append(" * --->If you need to modify, please place the custom code between <Self Code Begin> and <Self Code End>.\n")
            .Append(" *                                                                                    --szn\n")
            .Append(" */\n\n")
            .Append("using Framework.Reflection.SQLite3Helper;\n")
            .Append("using Framework.Reflection.Sync;\n")
            .Append("\n\n")
            .Append("namespace SQLite3TableDataTmp\n")
            .Append("{\n");

            sb.Append("    public enum ").Append(filename).Append("Enum\n")
            .Append("    {\n");
            for (int i = 0; i < length; i++)
            {
                if (InTableData.IsColumnEnables[i])
                {
                    sb.Append("        ").Append(InTableData.ColumnName[i]).Append(",\n");
                }
            }
            //sb.Append("        Max\n");
            sb.Append("    }\n\n");

            sb.Append("    public partial class ").Append(filename).Append(" : SyncBase").Append("\n")
            .Append("    {\n");

            for (int i = 0; i < length; i++)
            {
                if (!InTableData.IsColumnEnables[i])
                {
                    continue;
                }
                if (InTableData.SQLite3Constraints[i] != SQLite3Constraint.Default)
                {
                    sb.Append("        [SQLite3Constraint(")
                    .Append(SQLite3ConstraintAttribute.ConvertToString(InTableData.SQLite3Constraints[i]))
                    .Append(")]\n");
                }

                sb.Append("        [Sync((int)").Append(filename).Append("Enum.").Append(InTableData.ColumnName[i]).Append(")]\n")
                .Append("        public ")
                .Append(InTableData.CSharpTypes[i])
                .Append(" ")
                .Append(InTableData.ColumnName[i])
                .Append(0 == i ? " { get; private set; }" : " { get; set; }");

                if (null == InTableData.ColumnDescribes || string.IsNullOrEmpty(InTableData.ColumnDescribes[i]))
                {
                    sb.Append("\n\n");
                }
                else
                {
                    sb.Append("  //").Append(InTableData.ColumnDescribes[i]).Append("\n\n");
                }
            }

            sb.Append("        public ").Append(filename).Append("()\n")
            .Append("        {\n")
            .Append("        }\n\n");



            sb.Append("        public ").Append(filename).Append("(");
            for (int i = 0; i < length; ++i)
            {
                if (InTableData.IsColumnEnables[i])
                {
                    sb.Append(InTableData.CSharpTypes[i])
                    .Append(" In").Append(InTableData.ColumnName[i])
                    .Append(", ");
                }
            }
            sb.Remove(sb.Length - 2, 2);
            sb.Append(")\n");
            sb.Append("        {\n");

            for (int i = 0; i < length; ++i)
            {
                if (InTableData.IsColumnEnables[i])
                {
                    sb.Append("            ").Append(InTableData.ColumnName[i])
                    .Append(" = In").Append(InTableData.ColumnName[i])
                    .Append(";\n");
                }
            }
            sb.Append("        }\n\n");

            int count = oldContent.Count;

            for (int i = 0; i < count; ++i)
            {
                sb.Append(oldContent[i]).Append("\n");
            }
            sb.Append("        \n\n");

            sb.Append("        public override string ToString()\n")
            .Append("        {\n")
            .Append("            return \"").Append(filename).Append(" : ")
            .Append(InTableData.ColumnName[0])
            .Append(" = \" + ")
            .Append(InTableData.ColumnName[0]);

            for (int i = 1; i < length; ++i)
            {
                if (InTableData.IsColumnEnables[i])
                {
                    sb.Append(" + ").Append("\", ")
                    .Append(InTableData.ColumnName[i]).Append(" = \" + ").
                    Append(InTableData.ColumnName[i]);
                }
            }
            sb.Append(";\n");
            sb.Append("        }\n\n");

            sb.Append("    }\n");
            sb.Append("}\n");

            if (info.Directory != null && !info.Directory.Exists)
            {
                info.Directory.Create();
            }
            if (info.Exists)
            {
                info.Delete();
            }

            File.WriteAllText(InPath, sb.ToString(), Encoding.UTF8);
        }