internal DiffTemplateColumn(DiffTemplate diffTemplate, int index) { this.diffTemplate = diffTemplate; this.index = index; this.item1 = index < diffTemplate.SourceItem1.Items.Count ? diffTemplate.SourceItem1.Items[index] : null; this.item2 = index < diffTemplate.SourceItem2.Items.Count ? diffTemplate.SourceItem2.Items[index] : null; }
private void InitializeTables(IProgress progress) { var tables1 = this.dataSet1.Tables.Where(item => item.Parent == null && item.TemplatedParent == null) .OrderBy(item => item.Name) .ToList(); var tables2 = this.dataSet2.Tables.Where(item => item.Parent == null && item.TemplatedParent == null) .OrderBy(item => item.Name) .ToList(); var tableList = new List <DiffDataTable>(); foreach (var item in tables1.ToArray()) { var count = tables2.Count(i => i.TableID == item.TableID); if (count == 1) { var dataTable1 = item; var dataTable2 = tables2.Single(i => i.TableID == item.TableID); var tableName1 = dataTable1.TableName != dataTable2.TableName ? DiffUtility.DiffDummyKey + dataTable1.TableName : dataTable2.TableName; var tableName2 = dataTable2.TableName; var diffTable1 = DiffDataTable.Create(this.diffSet1, tableName1); var diffTable2 = DiffDataTable.Create(this.diffSet2, tableName2); DiffInternalUtility.SyncColumns(diffTable1, diffTable2, dataTable1, dataTable2); var diffTable = new DiffDataTable(diffTable1, diffTable2, dataTable1, dataTable2, this); var diffTemplate = new DiffTemplate(diffTable1, diffTable2, dataTable1, dataTable2) { DiffTable = diffTable }; diffTable.Template = diffTemplate; diffTable.InitializeChilds(); tableList.Add(diffTable); tables1.Remove(dataTable1); tables2.Remove(dataTable2); } } foreach (var item in tables1) { var dataTable1 = item; if (this.dataSet2.Tables.Contains(dataTable1.TableName) == true) { var dataTable2 = this.dataSet2.Tables[dataTable1.TableName]; var diffTable1 = DiffDataTable.Create(this.diffSet1, dataTable1.TableName); var diffTable2 = DiffDataTable.Create(this.diffSet2, dataTable2.TableName); DiffInternalUtility.SyncColumns(diffTable1, diffTable2, dataTable1, dataTable2); var diffTable = new DiffDataTable(diffTable1, diffTable2, dataTable1, dataTable2, this); var diffTemplate = new DiffTemplate(diffTable1, diffTable2, dataTable1, dataTable2) { DiffTable = diffTable }; diffTable.Template = diffTemplate; diffTable.InitializeChilds(); tableList.Add(diffTable); tables2.Remove(dataTable2); } else { var diffTable1 = DiffDataTable.Create(new CremaDataSet(), dataTable1.TableName); var diffTable2 = DiffDataTable.Create(new CremaDataSet(), dataTable1.TableName); DiffInternalUtility.SyncColumns(diffTable1, diffTable2, dataTable1, null); var diffTable = new DiffDataTable(diffTable1, diffTable2, dataTable1, null, this); var diffTemplate = new DiffTemplate(diffTable1, diffTable2, dataTable1, null) { DiffTable = diffTable }; diffTable.Template = diffTemplate; diffTable.InitializeChilds(); tableList.Add(diffTable); } } foreach (var item in tables2) { var dataTable2 = item; var diffTable1 = DiffDataTable.Create(this.diffSet1, dataTable2.TableName); var diffTable2 = DiffDataTable.Create(this.diffSet2, dataTable2.TableName); DiffInternalUtility.SyncColumns(diffTable1, diffTable2, null, dataTable2); var diffTable = new DiffDataTable(diffTable1, diffTable2, null, dataTable2, this); var diffTemplate = new DiffTemplate(diffTable1, diffTable2, null, dataTable2) { DiffTable = diffTable }; diffTable.Template = diffTemplate; diffTable.InitializeChilds(); tableList.Add(diffTable); } foreach (var item in tableList.ToArray()) { item.InitializeDerivedTables(); } foreach (var item in tableList.ToArray()) { tableList.AddRange(item.DerivedTables); } tableList.AsParallel().ForAll(item => item.DiffTemplate()); tableList.AsParallel().ForAll(item => item.Diff()); this.tables = tableList.OrderBy(item => item.SourceItem1.TableName).ToArray(); }