Beispiel #1
0
        public static Database ConstructDB(string name, string data)
        {
            Dictionary <string, string> dic = new Dictionary <string, string>(); // Color matching
            Database db = new Database();

            db.SetName(name);
            db.tables = new List <Table>();
            data      = data.Substring(10);
            int tableCounter  = -1;
            int columnCounter = -1;

            // Loops through all the tables for this database.
            while (true)
            {
                tableCounter++;
                columnCounter = -1;
                Table tb = new Table();
                tb.SetName(data.Substring(0, data.IndexOf(":")));
                tb.SetId("T" + tableCounter);
                tb.columns = new List <Column>();
                data       = data.Substring(data.IndexOf("{") + 1);

                // Loops through all the columns for this table.
                while (true)
                {
                    columnCounter++;
                    Column col = new Column();
                    col.SetName(data.Substring(0, data.IndexOf(":")));
                    col.SetId("T" + tableCounter + "-C" + columnCounter);
                    // If column exists elsewhere, use same color.
                    if (dic.ContainsKey(tb.GetName()))
                    {
                        col.SetColor(dic[tb.GetName()]);
                    }
                    else
                    {
                        string c = GetRandomColor();
                        dic.Add(tb.GetName(), c);
                        col.SetColor(c);
                    }
                    col.fields = new List <string>();
                    data       = data.Substring(data.IndexOf("[") + 1);

                    // Loops through all the fields for this column.
                    do
                    {
                        if (data.IndexOf(",") != -1 && data.IndexOf(",") < data.IndexOf("]"))
                        {
                            col.AddField(data.Substring(0, data.IndexOf(",")));
                            data = data.Substring(data.IndexOf(",") + 1); // There's a 'next' field
                        }
                        else
                        {
                            col.AddField(data.Substring(0, data.IndexOf("]")));
                            data = data.Substring(data.IndexOf("]") + 1);
                            break;
                        }
                    } while (true);
                    tb.AddColumn(col);
                    if (data.Substring(0, 1).Equals(","))
                    {
                        data = data.Substring(1); // There's a 'next' column
                    }
                    else
                    {
                        data = data.Substring(1);
                        break;
                    }
                }
                db.AddTable(tb);
                if (data.Substring(0, 1).Equals(","))
                {
                    data = data.Substring(1); // There's a 'next' table
                }
                else
                {
                    break;
                }
            }
            return(db);
        }