コード例 #1
0
        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.
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: SqlDataSource.cs プロジェクト: rmodig/daf-meta
        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 !];
コード例 #5
0
 public LinkMapping(StagingColumn linkColumn)
 {
     _linkColumn = linkColumn;
 }
コード例 #6
0
ファイル: HubRelationship.cs プロジェクト: vholmer/daf-meta
 public HubMapping(StagingColumn hubColumn)
 {
     _hubColumn = hubColumn;
 }
コード例 #7
0
        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);
        }
コード例 #8
0
 public BusinessKeyViewModel(StagingColumn stagingColumn)
 {
     StagingColumn = stagingColumn;
 }
コード例 #9
0
ファイル: SqlDataSource.cs プロジェクト: rmodig/daf-meta
        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);
        }
コード例 #10
0
 public StagingColumnViewModel(StagingColumn stagingColumn)
 {
     StagingColumn = stagingColumn;
 }