protected void CreateNestedMultivalueOrderedSettingsDiffgramDataSet()

in src/MIMConfigDocumenter/ServiceCommonDocumenter.cs [1113:1188]


        protected void CreateNestedMultivalueOrderedSettingsDiffgramDataSet()
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                var table = new DataTable("Sections") { Locale = CultureInfo.InvariantCulture };

                var column1 = new DataColumn("Section");

                table.Columns.Add(column1);
                table.PrimaryKey = new[] { column1 };

                var table2 = new DataTable("Sub-sections") { Locale = CultureInfo.InvariantCulture };

                var column12 = new DataColumn("Section");
                var column22 = new DataColumn("Sub-section");

                table2.Columns.Add(column12);
                table2.Columns.Add(column22);
                table2.PrimaryKey = new[] { column12, column22 };

                var table3 = new DataTable("Settings") { Locale = CultureInfo.InvariantCulture };

                var column13 = new DataColumn("Section");
                var column23 = new DataColumn("Sub-section");
                var column33 = new DataColumn("ConfigurationIndex", typeof(int)); // needed for multivalue attributes
                var column43 = new DataColumn("Configuration"); // needed for sorting multivalues
                var column53 = new DataColumn("ConfigurationMarkup");

                table3.Columns.Add(column13);
                table3.Columns.Add(column23);
                table3.Columns.Add(column33);
                table3.Columns.Add(column43);
                table3.Columns.Add(column53);
                table3.PrimaryKey = new[] { column13, column23, column33 };

                var printTable = Documenter.GetPrintTable();

                // Table 1
                printTable.Rows.Add((new OrderedDictionary { { "TableIndex", 0 }, { "ColumnIndex", 0 }, { "Hidden", false }, { "SortOrder", -1 }, { "BookmarkIndex", -1 }, { "JumpToBookmarkIndex", -1 }, { "ChangeIgnored", false } }).Values.Cast<object>().ToArray());

                // Table 2
                printTable.Rows.Add((new OrderedDictionary { { "TableIndex", 1 }, { "ColumnIndex", 1 }, { "Hidden", false }, { "SortOrder", -1 }, { "BookmarkIndex", -1 }, { "JumpToBookmarkIndex", -1 }, { "ChangeIgnored", false } }).Values.Cast<object>().ToArray());

                // Table 3
                printTable.Rows.Add((new OrderedDictionary { { "TableIndex", 2 }, { "ColumnIndex", 3 }, { "Hidden", true }, { "SortOrder", 1 }, { "BookmarkIndex", -1 }, { "JumpToBookmarkIndex", -1 }, { "ChangeIgnored", false } }).Values.Cast<object>().ToArray());
                printTable.Rows.Add((new OrderedDictionary { { "TableIndex", 2 }, { "ColumnIndex", 4 }, { "Hidden", false }, { "SortOrder", -1 }, { "BookmarkIndex", -1 }, { "JumpToBookmarkIndex", -1 }, { "ChangeIgnored", false } }).Values.Cast<object>().ToArray());

                var diffgramTable = Documenter.CreateDiffgramTable(table);
                var diffgramTable2 = Documenter.CreateDiffgramTable(table2);
                var diffgramTable3 = Documenter.CreateDiffgramTable(table3);

                this.DiffgramDataSet = new DataSet("Sections") { Locale = CultureInfo.InvariantCulture };
                this.DiffgramDataSet.Tables.Add(diffgramTable);
                this.DiffgramDataSet.Tables.Add(diffgramTable2);
                this.DiffgramDataSet.Tables.Add(diffgramTable3);
                this.DiffgramDataSet.Tables.Add(printTable);

                // set up data relations
                var dataRelation12 = new DataRelation("DataRelation12", new[] { diffgramTable.Columns[0] }, new[] { diffgramTable2.Columns[0] }, false);
                this.DiffgramDataSet.Relations.Add(dataRelation12);

                var dataRelation23 = new DataRelation("DataRelation23", new[] { diffgramTable2.Columns[0], diffgramTable2.Columns[1] }, new[] { diffgramTable3.Columns[0], diffgramTable3.Columns[1] }, false);
                this.DiffgramDataSet.Relations.Add(dataRelation23);

                Documenter.AddRowVisibilityStatusColumn(this.DiffgramDataSet);

                this.DiffgramDataSet.AcceptChanges();
                this.DiffgramDataSets.Add(this.DiffgramDataSet);
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }