Exemplo n.º 1
0
        public TableTreeViewItemViewModel(BrowserViewModel browser, DiffDataTable diffTable)
            : base(browser)
        {
            this.diffTable = diffTable;
            this.diffTable.PropertyChanged             += DiffType_PropertyChanged;
            this.diffTable.SourceItem1.PropertyChanged += SourceItem1_PropertyChanged;
            this.diffTable.SourceItem2.PropertyChanged += SourceItem2_PropertyChanged;
            this.header1     = diffTable.Header1;
            this.header2     = diffTable.Header2;
            this.viewCommand = new DelegateCommand(this.View);
            this.isActivated = diffTable.DiffState != DiffState.Unchanged;
            this.Target      = diffTable;

            foreach (var item in diffTable.Childs)
            {
                var viewModel = new TableTreeViewItemViewModel(browser, item);
                viewModel.PropertyChanged += ChildViewModel_PropertyChanged;
                this.Items.Add(viewModel);
                if (this.isActivated == false && viewModel.DiffState != DiffState.Unchanged)
                {
                    this.isActivated = true;
                }
            }
            this.Dispatcher.InvokeAsync(() =>
            {
                if (this.DiffState != DiffState.Unchanged && this.Parent != null)
                {
                    this.Parent.IsExpanded = true;
                }
            });
        }
Exemplo n.º 2
0
 internal DiffDataRow(DiffDataTable diffTable, int index)
 {
     this.diffTable = diffTable;
     this.index     = index;
     this.item1     = index < diffTable.SourceItem1.Rows.Count ? diffTable.SourceItem1.Rows[index] : null;
     this.item2     = index < diffTable.SourceItem2.Rows.Count ? diffTable.SourceItem2.Rows[index] : null;
 }
Exemplo n.º 3
0
        private static void UpdateValidation(InternalDataRow dataRow1, InternalDataRow dataRow2)
        {
            if (dataRow2 != null && (bool)dataRow1[DiffUtility.DiffEnabledKey] == true)
            {
                foreach (var item in dataRow1.Table.Columns)
                {
                    if (item is InternalDataColumn dataColumn)
                    {
                        var field1      = dataRow1[dataColumn.ColumnName];
                        var dataColumn2 = GetColumn(dataRow2, dataColumn.Index);
                        var field2      = dataRow2[dataColumn2];

                        DiffDataTable.Validate((CremaDataRow)dataRow1, (CremaDataColumn)dataColumn);
                    }
                }

                if (dataRow1.GetColumnsInError().Any())
                {
                    dataRow1.RowError = rowError;
                }
                else
                {
                    dataRow1.RowError = string.Empty;
                }
            }
        }
Exemplo n.º 4
0
 public ItemViewModel(DiffDataTable diffTable, DependencyObject parent)
 {
     this.diffTable = diffTable;
     this.parent    = parent;
     this.diffState = DiffUtility.GetDiffState(this.diffTable.SourceItem1) == DiffState.Imaginary ? DiffState.Inserted : DiffUtility.GetDiffState(this.diffTable.SourceItem1);
     BindingOperations.SetBinding(this, ReadOnlyProperty, new Binding("ReadOnly")
     {
         Source = parent,
     });
 }
Exemplo n.º 5
0
        public TableTreeViewItemViewModel(DiffDataTable diffTable)
        {
            this.diffTable = diffTable;
            this.diffTable.PropertyChanged             += DiffType_PropertyChanged;
            this.diffTable.SourceItem1.PropertyChanged += DataTable1_PropertyChanged;
            this.diffTable.SourceItem2.PropertyChanged += DataTable2_PropertyChanged;
            this.viewCommand = new DelegateCommand(this.View);
            this.Target      = diffTable;

            foreach (var item in diffTable.Childs)
            {
                this.Items.Add(new TableTreeViewItemViewModel(item));
            }
        }
Exemplo n.º 6
0
 public DiffDataTableItemViewModel(DiffDataTableViewModel viewModel, DiffDataTable source)
 {
     this.viewModel = viewModel;
     this.Source    = source;
 }
Exemplo n.º 7
0
 public DiffDataTableViewModel(DiffDataTable diffTable)
 {
     this.Source = diffTable;
 }
Exemplo n.º 8
0
        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();
        }
Exemplo n.º 9
0
        private static void Update(InternalDataRow dataRow1, InternalDataRow dataRow2, DiffState defaultState, string[] filters)
        {
            if (dataRow2 == null || (bool)dataRow1[DiffUtility.DiffEnabledKey] == false)
            {
                DiffUtility.SetDiffFields(dataRow1, null);
                DiffUtility.SetDiffState(dataRow1, DiffState.Imaginary);
            }
            else
            {
                var fieldsList = new List <string>(dataRow1.Table.Columns.Count);
                var diffState  = defaultState;

                foreach (var item in dataRow1.Table.Columns)
                {
                    if (item is InternalDataColumn dataColumn)
                    {
                        if (filters.Contains(dataColumn.ColumnName) == true)
                        {
                            continue;
                        }
                        var field1      = dataRow1[dataColumn.ColumnName];
                        var dataColumn2 = GetColumn(dataRow2, dataColumn.Index);
                        var field2      = dataRow2[dataColumn2];

                        if (object.Equals(field1, field2) == false)
                        {
                            fieldsList.Add(dataColumn.ColumnName);
                        }

                        DiffDataTable.Validate((CremaDataRow)dataRow1, (CremaDataColumn)dataColumn);
                    }
                    else if (item is InternalAttribute attribute)
                    {
                        if (attribute.ColumnMapping == MappingType.Hidden || filters.Contains(attribute.AttributeName) == true)
                        {
                            continue;
                        }
                        var field1 = dataRow1[attribute.AttributeName];
                        var field2 = dataRow2[attribute.AttributeName];

                        if (object.Equals(field1, field2) == false)
                        {
                            fieldsList.Add(attribute.AttributeName);
                        }
                    }
                }

                if (dataRow1.GetColumnsInError().Any())
                {
                    dataRow1.RowError = rowError;
                }
                else
                {
                    dataRow1.RowError = string.Empty;
                }

                if ((bool)dataRow2[DiffUtility.DiffEnabledKey] == true)
                {
                    if (fieldsList.Any() == true || object.Equals(dataRow1[CremaSchema.Index], dataRow2[CremaSchema.Index]) == false)
                    {
                        diffState = DiffState.Modified;
                    }
                    else
                    {
                        diffState = DiffState.Unchanged;
                    }

                    DiffUtility.SetDiffFields(dataRow1, fieldsList);
                    DiffUtility.SetDiffState(dataRow1, diffState);
                }
                else
                {
                    DiffUtility.SetDiffFields(dataRow1, null);
                    DiffUtility.SetDiffState(dataRow1, diffState);
                }
            }
        }