private void BusinessKeys_CollectionChanged(object?sender, BusinessKeyEventArgs e) { if (e.BusinessKey == null) { throw new InvalidOperationException("BusinessKey was null!"); } if (e.Action == BusinessKeyEventType.Add) { StagingColumn stagingColumn = e.BusinessKey; Mappings.Add(new LinkMapping(stagingColumn)); } else if (e.Action == BusinessKeyEventType.Remove) { StagingColumn stagingColumn = e.BusinessKey; foreach (LinkMapping mapping in Mappings) { if (mapping.LinkColumn == stagingColumn) { Mappings.Remove(mapping); break; } } } // Need to verify Mappings contain same number of HubMapping as there are BusinessKeys, and that each of the BusinessKeys correspond exactly to one HubMapping. // Will write unit tests for this. }
public void AddHubColumn_CreateHubViewModelThenAddBusinessKeyViewModel_SynchronisesWithModel() { MainViewModel MVM = new(); MVM.HubsVM.AddHub($"New Hub"); // Must set the SelectedHub as AddHubColumn() takes no arguments. MVM.HubsVM.SelectedHub = MVM.HubsVM.Hubs[0]; // Add a new HubColumn, passing the HubViewModel that the Column should be added to as an argument. MVM.HubsVM.AddHubColumn(); StagingColumn expected = MVM.HubsVM.Hubs[0].BusinessKeys[0].StagingColumn; StagingColumn actual = MVM.Model.Hubs[0].BusinessKeys[0]; // Ensure that the StagingColumn in the model is the same object as the StagingColumn wrapped by // the BusinessKeyViewModel in the corresponding Hub. Assert.Same(expected, actual); }
public void DeleteLinkColumn_CreateLinkViewModelWithColumnsThenDeleteColumns_SynchronisesWithModel() { MainViewModel MVM = new(); // AddLink sets SelectedLink to the new LinkViewModel that's been created. MVM.LinksVM.AddLink($"New Link"); // Add a new LinkColumn, passing the LinkViewModel that the Column should be added to as an argument. MVM.LinksVM.AddLinkColumn(); // Must set SelectedLinkColumn to be able to remove LinkColumn. MVM.LinksVM.SelectedLinkColumn = MVM.LinksVM.Links[0].BusinessKeys[0]; StagingColumn linkColumnToDelete = MVM.LinksVM.Links[0].BusinessKeys[0].StagingColumn; // Deletes the SelectedLinkColumn. MVM.LinksVM.DeleteLinkColumn(); Assert.DoesNotContain(linkColumnToDelete, MVM.Model.Links[0].BusinessKeys); }
public new void UpdateTables(Dictionary <string, Column> suggestedColumnDict) { if (suggestedColumnDict == null) { throw new ArgumentNullException(nameof(suggestedColumnDict)); } if (LoadTable == null) { LoadTable = new LoadTable(); } if (StagingTable == null) { StagingTable = new StagingTable(); } // Update existing columns foreach (Column stagingColumn in StagingTable.Columns !) { if (!string.IsNullOrEmpty(stagingColumn.Name) && suggestedColumnDict.ContainsKey(stagingColumn.Name !)) { StagingColumn suggestedColumn = (StagingColumn)suggestedColumnDict[stagingColumn.Name !];
public LinkMapping(StagingColumn linkColumn) { _linkColumn = linkColumn; }
public HubMapping(StagingColumn hubColumn) { _hubColumn = hubColumn; }
public override DataSource Clone() { GraphQlDataSource clone = new(string.Empty, Connection, SourceSystem, Tenant) { LoadTable = new LoadTable() }; if (LoadTable != null) { foreach (Column column in LoadTable.Columns) { Column cloneColumn = new(column.Name) { AddedOnBusinessDate = column.AddedOnBusinessDate, DataType = column.DataType, Length = column.Length, Precision = column.Precision, Scale = column.Scale, Nullable = column.Nullable }; cloneColumn.PropertyChanged += (s, e) => { NotifyPropertyChanged("Column"); }; clone.LoadTable.Columns.Add(cloneColumn); } } foreach (Satellite sat in Satellites) { Satellite cloneSat = new(sat.Name) { Type = sat.Type }; clone.Satellites.Add(cloneSat); } clone.StagingTable = new StagingTable(); if (StagingTable != null) { foreach (StagingColumn stagingColumn in StagingTable.Columns) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable, clone.Satellites); stagingColumn.PropertyChanged += (s, e) => { NotifyPropertyChanged("StagingColumn"); }; clone.StagingTable.Columns.Add(cloneColumn); } } if (BusinessKey != null) { if (BusinessKey is Link linkBusinessKey) { Link cloneBusinessKey = new(linkBusinessKey.Name); foreach (StagingColumn stagingColumn in linkBusinessKey.BusinessKeys) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable, clone.Satellites); cloneBusinessKey.BusinessKeys.Add(cloneColumn); } clone.BusinessKey = cloneBusinessKey; } else if (BusinessKey is Hub hubBusinessKey) { Hub cloneBusinessKey = new(hubBusinessKey.Name); foreach (StagingColumn stagingColumn in hubBusinessKey.BusinessKeys) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable, clone.Satellites); cloneBusinessKey.BusinessKeys.Add(cloneColumn); } clone.BusinessKey = cloneBusinessKey; } } foreach (HubRelationship hubRelationship in HubRelationships) { Hub cloneHub = new(hubRelationship.Hub.Name); foreach (StagingColumn stagingColumn in hubRelationship.Hub.BusinessKeys) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable, clone.Satellites); cloneHub.BusinessKeys.Add(cloneColumn); } HubRelationship cloneRelationship = new(cloneHub); foreach (HubMapping hubMapping in hubRelationship.Mappings) { StagingColumn cloneBusinessKeyColumn = clone.BusinessKey !.BusinessKeys.Single(cloneBk => cloneBk.Name == hubMapping.HubColumn.Name); StagingColumn cloneStagingColumn = clone.StagingTable.Columns.Single(cloneStgCol => cloneStgCol.Name == hubMapping.StagingColumn !.Name); HubMapping cloneMapping = new(cloneBusinessKeyColumn) { StagingColumn = cloneStagingColumn }; cloneRelationship.Mappings.Add(cloneMapping); } clone.HubRelationships.Add(cloneRelationship); } foreach (LinkRelationship linkRelationship in LinkRelationships) { Link cloneLink = new(linkRelationship.Link.Name); foreach (StagingColumn stagingColumn in linkRelationship.Link.BusinessKeys) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable, clone.Satellites); cloneLink.BusinessKeys.Add(cloneColumn); } LinkRelationship cloneRelationship = new(cloneLink); foreach (LinkMapping linkMapping in linkRelationship.Mappings) { StagingColumn cloneBusinessKeyColumn = clone.BusinessKey !.BusinessKeys.Single(cloneBk => cloneBk.Name == linkMapping.LinkColumn.Name); StagingColumn cloneStagingColumn = clone.StagingTable.Columns.Single(cloneStgCol => cloneStgCol.Name == linkMapping.StagingColumn !.Name); LinkMapping cloneMapping = new(cloneBusinessKeyColumn) { StagingColumn = cloneStagingColumn }; cloneRelationship.Mappings.Add(cloneMapping); } clone.LinkRelationships.Add(cloneRelationship); } clone.AzureLinkedServiceReference = AzureLinkedServiceReference; clone.Build = Build; clone.BusinessDateColumn = BusinessDateColumn; clone.CollectionReference = CollectionReference; clone.ContainsMultiStructuredJson = ContainsMultiStructuredJson; clone.DataSourceType = DataSourceType; clone.DefaultLoadWidth = DefaultLoadWidth; clone.ErrorHandling = ErrorHandling; clone.FileName = FileName; clone.IncrementalStagingColumn = IncrementalStagingColumn; clone.IncrementalQuery = IncrementalQuery; clone.MergeToBlob = MergeToBlob; clone.DestinationEncoding = DestinationEncoding; clone.QualifiedName = QualifiedName; clone.GraphQlQuery = GraphQlQuery; clone.NumberToFetch = NumberToFetch; clone.Parent = Parent; clone.RelativeUrl = RelativeUrl; clone.SqlSelectQuery = SqlSelectQuery; clone.GenerateLatestViews = GenerateLatestViews; return(clone); }
public BusinessKeyViewModel(StagingColumn stagingColumn) { StagingColumn = stagingColumn; }
public override DataSource Clone() { SqlDataSource clone = new(string.Empty, Connection, SourceSystem, Tenant) { LoadTable = new LoadTable() }; if (LoadTable != null) { foreach (Column column in LoadTable.Columns) { Column cloneColumn = new(column.Name) { DataType = column.DataType, Length = column.Length, Precision = column.Precision, Scale = column.Scale, Nullable = column.Nullable }; cloneColumn.PropertyChanged += (s, e) => { NotifyPropertyChanged("Column"); }; clone.LoadTable !.Columns.Add(cloneColumn); } } foreach (Satellite sat in Satellites) { Satellite cloneSat = new(sat.Name) { Type = sat.Type }; clone.Satellites.Add(cloneSat); } clone.StagingTable = new StagingTable(); if (StagingTable != null) { foreach (StagingColumn stagingColumn in StagingTable.Columns) { StagingColumn cloneColumn = stagingColumn.Clone(clone.LoadTable !, clone.Satellites); stagingColumn.PropertyChanged += (s, e) => { NotifyPropertyChanged("StagingColumn"); }; clone.StagingTable.Columns.Add(cloneColumn); } } if (BusinessKey != null) { if (BusinessKey is Link link) { clone.BusinessKey = link; } else if (BusinessKey is Hub hub) { clone.BusinessKey = hub; } } foreach (HubRelationship hubRelationship in HubRelationships) { Hub hub = hubRelationship.Hub; HubRelationship cloneRelationship = new(hub); foreach (HubMapping hubMapping in hubRelationship.Mappings) { StagingColumn cloneStagingColumn = clone.StagingTable.Columns.Single(cloneStgCol => cloneStgCol.Name == hubMapping.StagingColumn !.Name); HubMapping cloneMapping = new(hubMapping.HubColumn) { StagingColumn = cloneStagingColumn }; cloneRelationship.Mappings.Add(cloneMapping); } clone.HubRelationships.Add(cloneRelationship); } foreach (LinkRelationship linkRelationship in LinkRelationships) { Link cloneLink = linkRelationship.Link; LinkRelationship cloneRelationship = new(cloneLink); foreach (LinkMapping linkMapping in linkRelationship.Mappings) { StagingColumn cloneStagingColumn = clone.StagingTable.Columns.Single(cloneStgCol => cloneStgCol.Name == linkMapping.StagingColumn !.Name); LinkMapping cloneMapping = new(linkMapping.LinkColumn) { StagingColumn = cloneStagingColumn }; cloneRelationship.Mappings.Add(cloneMapping); } clone.LinkRelationships.Add(cloneRelationship); } clone.AzureLinkedServiceReference = AzureLinkedServiceReference; clone.Build = Build; clone.BusinessDateColumn = BusinessDateColumn; clone.ContainsMultiStructuredJson = ContainsMultiStructuredJson; clone.DataSourceType = DataSourceType; clone.DefaultLoadWidth = DefaultLoadWidth; clone.ErrorHandling = ErrorHandling; clone.FileName = FileName; clone.IncrementalStagingColumn = IncrementalStagingColumn; clone.IncrementalQuery = IncrementalQuery; clone.QualifiedName = QualifiedName; clone.SqlSelectQuery = SqlSelectQuery; clone.SqlStatement = SqlStatement; clone.ConnectionRetryAttempts = ConnectionRetryAttempts; clone.ConnectionRetryMinutes = ConnectionRetryMinutes; clone.GenerateLatestViews = GenerateLatestViews; return(clone); }
public StagingColumnViewModel(StagingColumn stagingColumn) { StagingColumn = stagingColumn; }