diff --git a/Application/ResearchDataManagementPlatform/WindowManagement/ActivateItems.cs b/Application/ResearchDataManagementPlatform/WindowManagement/ActivateItems.cs index e5dc39b02e..32fd647083 100644 --- a/Application/ResearchDataManagementPlatform/WindowManagement/ActivateItems.cs +++ b/Application/ResearchDataManagementPlatform/WindowManagement/ActivateItems.cs @@ -140,7 +140,7 @@ public ActivateItems(ITheme theme, RefreshBus refreshBus, DockPanel mainDockPane new CatalogueProblemProvider() }; RefreshProblemProviders(); - + //TODO //RefreshBus.Subscribe(this); // We can run subprocesses diff --git a/Application/ResearchDataManagementPlatform/WindowManagement/ContentWindowTracking/Persistence/RDMPSingleControlTab.cs b/Application/ResearchDataManagementPlatform/WindowManagement/ContentWindowTracking/Persistence/RDMPSingleControlTab.cs index 4bb3aee95d..cafbeb2cea 100644 --- a/Application/ResearchDataManagementPlatform/WindowManagement/ContentWindowTracking/Persistence/RDMPSingleControlTab.cs +++ b/Application/ResearchDataManagementPlatform/WindowManagement/ContentWindowTracking/Persistence/RDMPSingleControlTab.cs @@ -34,8 +34,6 @@ public class RDMPSingleControlTab : DockContent, IRefreshBusSubscriber protected RDMPSingleControlTab(RefreshBus refreshBus) { - //refreshBus.Subscribe(this); - //FormClosed += (s, e) => refreshBus.Unsubscribe(this); } /// @@ -46,6 +44,7 @@ protected RDMPSingleControlTab(RefreshBus refreshBus) /// public RDMPSingleControlTab(RefreshBus refreshBus, Control c) { + //TODO //refreshBus.Subscribe(this); //FormClosed += (s, e) => refreshBus.Unsubscribe(this); Control = c; diff --git a/Application/ResearchDataManagementPlatform/WindowManagement/HomePane/HomeUI.cs b/Application/ResearchDataManagementPlatform/WindowManagement/HomePane/HomeUI.cs index 471bf95df7..39a2eca378 100644 --- a/Application/ResearchDataManagementPlatform/WindowManagement/HomePane/HomeUI.cs +++ b/Application/ResearchDataManagementPlatform/WindowManagement/HomePane/HomeUI.cs @@ -12,6 +12,7 @@ using Rdmp.Core.Curation.Data; using Rdmp.Core.Curation.Data.Cohort; using Rdmp.Core.Curation.Data.DataLoad; +using Rdmp.Core.Curation.Data.Governance; using Rdmp.Core.DataExport.Data; using Rdmp.UI.CommandExecution.AtomicCommands; using Rdmp.UI.CommandExecution.AtomicCommands.UIFactory; @@ -39,9 +40,12 @@ public HomeUI(IActivateItems activator) InitializeComponent(); } - private void BuildCommandLists() + private void BuildCommandLists(DatabaseEntity singularRefresh = null) { - boxCatalogue.SetUp(Activator, "Catalogue", typeof(Catalogue), _uiFactory, + var singularRefreshType = singularRefresh?.GetType(); + if (singularRefreshType is null || singularRefreshType == typeof(Catalogue)) + { + boxCatalogue.SetUp(Activator, "Catalogue", typeof(Catalogue), _uiFactory, new ExecuteCommandCreateNewCatalogueByImportingFileUI(_activator) { OverrideCommandName = GlobalStrings.FromFile @@ -50,10 +54,15 @@ private void BuildCommandLists() { OverrideCommandName = GlobalStrings.FromDatabase }); - boxProject.SetUp(Activator, "Project", typeof(Project), _uiFactory, + } + if (singularRefreshType is null || singularRefreshType == typeof(Project)) + { + boxProject.SetUp(Activator, "Project", typeof(Project), _uiFactory, new ExecuteCommandCreateNewDataExtractionProject(_activator)); - - boxCohort.SetUp(Activator, "Cohort Builder", typeof(CohortIdentificationConfiguration), _uiFactory, + } + if (singularRefreshType is null || singularRefreshType == typeof(CohortIdentificationConfiguration)) + { + boxCohort.SetUp(Activator, "Cohort Builder", typeof(CohortIdentificationConfiguration), _uiFactory, new ExecuteCommandCreateNewCohortIdentificationConfiguration(_activator) { OverrideCommandName = "Cohort Builder Query", @@ -64,8 +73,12 @@ private void BuildCommandLists() OverrideCommandName = GlobalStrings.FromFile } ); - boxDataLoad.SetUp(Activator, "Data Load", typeof(LoadMetadata), _uiFactory, + } + if (singularRefreshType is null || singularRefreshType == typeof(LoadMetadata)) + { + boxDataLoad.SetUp(Activator, "Data Load", typeof(LoadMetadata), _uiFactory, new ExecuteCommandCreateNewLoadMetadata(_activator)); + } } protected override void OnLoad(EventArgs e) @@ -73,14 +86,16 @@ protected override void OnLoad(EventArgs e) base.OnLoad(e); SetItemActivator(_activator); - + _activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Catalogue).ToString()); + _activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Project).ToString()); + _activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(CohortIdentificationConfiguration).ToString()); + _activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(LoadMetadata).ToString()); BuildCommandLists(); - - //_activator.RefreshBus.EstablishLifetimeSubscription(this); } public void RefreshBus_RefreshObject(object sender, RefreshObjectEventArgs e) { - BuildCommandLists(); + + BuildCommandLists(e.Object); } } \ No newline at end of file diff --git a/Rdmp.UI/CohortUI/ExtractableCohortCollectionUI.cs b/Rdmp.UI/CohortUI/ExtractableCohortCollectionUI.cs index 19b29e70c5..221ed112ae 100644 --- a/Rdmp.UI/CohortUI/ExtractableCohortCollectionUI.cs +++ b/Rdmp.UI/CohortUI/ExtractableCohortCollectionUI.cs @@ -100,7 +100,6 @@ public void SetupForAllCohorts(IActivateItems activator) { if (!haveSubscribed) { - //activator.RefreshBus.EstablishLifetimeSubscription(this); activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(ExtractableCohort).ToString()); activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(ExternalCohortTable).ToString()); haveSubscribed = true; diff --git a/Rdmp.UI/Collections/CohortIdentificationCollectionUI.Designer.cs b/Rdmp.UI/Collections/CohortIdentificationCollectionUI.Designer.cs index f2043e27ba..7788ffec8b 100644 --- a/Rdmp.UI/Collections/CohortIdentificationCollectionUI.Designer.cs +++ b/Rdmp.UI/Collections/CohortIdentificationCollectionUI.Designer.cs @@ -3,7 +3,7 @@ namespace Rdmp.UI.Collections { - partial class CohortIdentificationCollectionUI : ILifetimeSubscriber + partial class CohortIdentificationCollectionUI { /// /// Required designer variable. diff --git a/Rdmp.UI/Collections/CohortIdentificationCollectionUI.cs b/Rdmp.UI/Collections/CohortIdentificationCollectionUI.cs index 9740931c21..ff3919b147 100644 --- a/Rdmp.UI/Collections/CohortIdentificationCollectionUI.cs +++ b/Rdmp.UI/Collections/CohortIdentificationCollectionUI.cs @@ -27,7 +27,7 @@ namespace Rdmp.UI.Collections; /// INTERSECT, EXCEPT) for example Cohort Set 1 '3+ diabetes drug prescriptions' UNION 'hospital admissions for amputations'. Cohort sets can be from the same or different data sets (as /// long as they have a common identifier). /// -public partial class CohortIdentificationCollectionUI : RDMPCollectionUI, ILifetimeSubscriber +public partial class CohortIdentificationCollectionUI : RDMPCollectionUI { private bool _firstTime = true; @@ -98,8 +98,6 @@ public override void SetItemActivator(IActivateItems activator) new ExecuteCommandMergeCohortIdentificationConfigurations(a, null) }; - //Activator.RefreshBus.EstablishLifetimeSubscription(this); - var factory = new AtomicCommandUIFactory(activator); CommonFunctionality.Add( @@ -142,9 +140,6 @@ root is FolderNode f ? f.Name == FolderHelper.Root : root is AllOrphanAggregateConfigurationsNode or AllTemplateAggregateConfigurationsNode; - public void RefreshBus_RefreshObject(object sender, RefreshObjectEventArgs e) - { - } private string FrozenAspectGetter(object o) => o is CohortIdentificationConfiguration cic ? cic.Frozen ? "Yes" : "No" : null; diff --git a/Rdmp.UI/Collections/ConfigurationsCollectionUI.cs b/Rdmp.UI/Collections/ConfigurationsCollectionUI.cs index 7b2bca6726..69514bd962 100644 --- a/Rdmp.UI/Collections/ConfigurationsCollectionUI.cs +++ b/Rdmp.UI/Collections/ConfigurationsCollectionUI.cs @@ -41,7 +41,6 @@ public override void SetItemActivator(IActivateItems activator) CommonTreeFunctionality.SetUp(RDMPCollection.Configurations, tlvConfigurations, activator, olvName, olvName, new RDMPCollectionCommonFunctionalitySettings()); CommonTreeFunctionality.WhitespaceRightClickMenuCommandsGetter = e => GetWhitespaceRightClickMenu(); - //Activator.RefreshBus.EstablishLifetimeSubscription(this); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Dataset).ToString()); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(RegexRedactionConfiguration).ToString()); diff --git a/Rdmp.UI/Collections/DataExportCollectionUI.cs b/Rdmp.UI/Collections/DataExportCollectionUI.cs index 1fc6c42581..1afbae6c78 100644 --- a/Rdmp.UI/Collections/DataExportCollectionUI.cs +++ b/Rdmp.UI/Collections/DataExportCollectionUI.cs @@ -12,6 +12,7 @@ using Rdmp.Core.CommandExecution.AtomicCommands.CatalogueCreationCommands; using Rdmp.Core.CommandExecution.AtomicCommands.CohortCreationCommands; using Rdmp.Core.Curation.Data; +using Rdmp.Core.Curation.Data.Cohort; using Rdmp.Core.DataExport.Data; using Rdmp.Core.Icons.IconProvision; using Rdmp.Core.Providers; @@ -121,7 +122,10 @@ public override void SetItemActivator(IActivateItems activator) SetupToolStrip(); - //Activator.RefreshBus.EstablishLifetimeSubscription(this); + Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Project).ToString()); + Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(CohortIdentificationConfiguration).ToString()); + Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Catalogue).ToString()); + Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(ExternalCohortTable).ToString()); } diff --git a/Rdmp.UI/Collections/FavouritesCollectionUI.cs b/Rdmp.UI/Collections/FavouritesCollectionUI.cs index a5f2d94de2..518b8b311a 100644 --- a/Rdmp.UI/Collections/FavouritesCollectionUI.cs +++ b/Rdmp.UI/Collections/FavouritesCollectionUI.cs @@ -45,7 +45,6 @@ public override void SetItemActivator(IActivateItems activator) new ExecuteCommandAddFavourite(a), new ExecuteCommandClearFavourites(a) }; - //Activator.RefreshBus.EstablishLifetimeSubscription(this); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Favourite).ToString()); diff --git a/Rdmp.UI/Collections/LoadMetadataCollectionUI.cs b/Rdmp.UI/Collections/LoadMetadataCollectionUI.cs index 85a9370657..38dfebece1 100644 --- a/Rdmp.UI/Collections/LoadMetadataCollectionUI.cs +++ b/Rdmp.UI/Collections/LoadMetadataCollectionUI.cs @@ -73,7 +73,6 @@ public LoadMetadataCollectionUI() public override void SetItemActivator(IActivateItems activator) { base.SetItemActivator(activator); - //Activator.RefreshBus.EstablishLifetimeSubscription(this); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(LoadMetadata).ToString()); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(PermissionWindow).ToString()); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(CacheProgress).ToString()); diff --git a/Rdmp.UI/Collections/RDMPCollectionCommonFunctionality.cs b/Rdmp.UI/Collections/RDMPCollectionCommonFunctionality.cs index f27136cfd5..e27f8a3489 100644 --- a/Rdmp.UI/Collections/RDMPCollectionCommonFunctionality.cs +++ b/Rdmp.UI/Collections/RDMPCollectionCommonFunctionality.cs @@ -192,7 +192,16 @@ public void SetUp(RDMPCollection collection, TreeListView tree, IActivateItems a Collection = collection; IsSetup = true; _activator = activator; - //_activator.RefreshBus.Subscribe(this); + switch (collection) + { + case RDMPCollection.Catalogue: + _activator.RefreshBus.Subscribe(this, typeof(Catalogue).ToString()); + break; + //todo the rest + default: + break; + } + //_activator.RefreshBus.Subscribe(this, collection.ToString());//todo check this is right RepositoryLocator = _activator.RepositoryLocator; Filter = filter; @@ -927,7 +936,8 @@ public void TearDown() { if (IsSetup) { - //_activator.RefreshBus.Unsubscribe(this); + _activator.RefreshBus.Unsubscribe(this, Collection.ToString());//todo check this is right + _activator.Emphasise -= _activator_Emphasise; } } diff --git a/Rdmp.UI/Collections/SavedCohortsCollectionUI.cs b/Rdmp.UI/Collections/SavedCohortsCollectionUI.cs index 2d9f06196a..d3e6ea6005 100644 --- a/Rdmp.UI/Collections/SavedCohortsCollectionUI.cs +++ b/Rdmp.UI/Collections/SavedCohortsCollectionUI.cs @@ -50,7 +50,7 @@ public override void SetItemActivator(IActivateItems activator) SetupToolStrip(); - //Activator.RefreshBus.EstablishLifetimeSubscription(this); + Activator.RefreshBus.EstablishLifetimeSubscription(this, RDMPCollection.SavedCohorts.ToString());//to test CommonTreeFunctionality.SetupColumnTracking(olvName, new Guid("6857032b-4b28-4f92-8b38-f532f11c7a44")); CommonTreeFunctionality.SetupColumnTracking(olvVersion, new Guid("637fcb62-8395-4b36-a5ce-76ed3194b4e0")); diff --git a/Rdmp.UI/Collections/TableInfoCollectionUI.cs b/Rdmp.UI/Collections/TableInfoCollectionUI.cs index 8d58701382..5dd1f69e37 100644 --- a/Rdmp.UI/Collections/TableInfoCollectionUI.cs +++ b/Rdmp.UI/Collections/TableInfoCollectionUI.cs @@ -111,7 +111,6 @@ public override void SetItemActivator(IActivateItems activator) new ExecuteCommandBulkImportTableInfos(a) }; - //Activator.RefreshBus.EstablishLifetimeSubscription(this); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(DataAccessCredentials).ToString()); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(Catalogue).ToString()); Activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(TableInfo).ToString()); diff --git a/Rdmp.UI/ProjectUI/Datasets/ConfigureDatasetUI.cs b/Rdmp.UI/ProjectUI/Datasets/ConfigureDatasetUI.cs index ddfe135819..69fd944d37 100644 --- a/Rdmp.UI/ProjectUI/Datasets/ConfigureDatasetUI.cs +++ b/Rdmp.UI/ProjectUI/Datasets/ConfigureDatasetUI.cs @@ -399,7 +399,6 @@ public override void SetDatabaseObject(IActivateItems activator, SelectedDataSet { base.SetDatabaseObject(activator, databaseObject); - //activator.RefreshBus.EstablishLifetimeSubscription(this); activator.RefreshBus.EstablishLifetimeSubscription(this, typeof(ExtractionInformation).ToString()); SelectedDataSet = databaseObject; diff --git a/Rdmp.UI/Refreshing/RefreshBus.cs b/Rdmp.UI/Refreshing/RefreshBus.cs index 3a5a828d72..1926d8e5a8 100644 --- a/Rdmp.UI/Refreshing/RefreshBus.cs +++ b/Rdmp.UI/Refreshing/RefreshBus.cs @@ -80,6 +80,10 @@ public void Publish(object sender, RefreshObjectEventArgs e) private void RefreshSubscriptions(object sender, RefreshObjectEventArgs e) { var o = e.Object; + var x = o.GetType().ToString(); + //todo + // there are a lof of subscriptions to the wrong type i.e. "dataset" not "rdmp.core.dataset" - fix those + //then check that they all update AS EXPECTED if (subscribers.TryGetValue(o.GetType().ToString(), out var subs)) { foreach (var sub in subs) @@ -102,9 +106,9 @@ public void Subscribe(IRefreshBusSubscriber subscriber, string typeToWatch) { RefreshObject += RefreshSubscriptions; } - //RefreshObject += subscriber.RefreshBus_RefreshObject; - if (subs is null) subs = new List(); + subs ??= []; subs.Add(subscriber); + subscribers[typeToWatch]=subs; } public void Unsubscribe(IRefreshBusSubscriber unsubscriber, string typeToWatch) @@ -117,11 +121,8 @@ public void Unsubscribe(IRefreshBusSubscriber unsubscriber, string typeToWatch) } - //RefreshObject -= unsubscriber.RefreshBus_RefreshObject; - if (subs is not null) - { - subs.Remove(unsubscriber); - } + subs?.Remove(unsubscriber); + subscribers[typeToWatch] = subs; } @@ -136,10 +137,6 @@ public void EstablishLifetimeSubscription(ILifetimeSubscriber c, string typeToWa if (subs.Contains(subscriber)) return; } - ////ignore double requests for subscription - //if (subscribers.Contains(subscriber)) - //return; - if (c is not ContainerControl containerControl) throw new ArgumentOutOfRangeException(nameof(c)); diff --git a/Rdmp.UI/SubComponents/CohortIdentificationConfigurationUI.cs b/Rdmp.UI/SubComponents/CohortIdentificationConfigurationUI.cs index cb7af3574c..26aaa41f21 100644 --- a/Rdmp.UI/SubComponents/CohortIdentificationConfigurationUI.cs +++ b/Rdmp.UI/SubComponents/CohortIdentificationConfigurationUI.cs @@ -180,7 +180,8 @@ public override void SetDatabaseObject(IActivateItems activator, CohortIdentific if (_commonFunctionality == null) { - //activator.RefreshBus.Subscribe(this); + activator.RefreshBus.Subscribe(this, typeof(CohortIdentificationConfiguration).ToString()); + //todo this needs the full tree of the CIC _commonFunctionality = new RDMPCollectionCommonFunctionality(); _commonFunctionality.SetUp(RDMPCollection.Cohort, tlvCic, activator, olvNameCol, olvNameCol,