Index: Application/Application.Ringtoets/App.xaml.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Application/Application.Ringtoets/App.xaml.cs (.../App.xaml.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Application/Application.Ringtoets/App.xaml.cs (.../App.xaml.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -178,21 +178,16 @@ #if INCLUDE_DEMOPROJECT ,new DemoProjectGuiPlugin() #endif - }, - ApplicationCore = - { - Plugins = - { - new CommonToolsApplicationPlugin(), -#if INCLUDE_DEMOPROJECT - new SharpMapGisApplicationPlugin(), -#endif - new RingtoetsApplicationPlugin(), - new PipingApplicationPlugin() - } } }; + gui.ApplicationCore.AddPlugin(new CommonToolsApplicationPlugin()); +#if INCLUDE_DEMOPROJECT + gui.ApplicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); +#endif + gui.ApplicationCore.AddPlugin(new RingtoetsApplicationPlugin()); + gui.ApplicationCore.AddPlugin(new PipingApplicationPlugin()); + var mainWindow = new MainWindow(gui); gui.MainWindow = mainWindow; Index: Core/Common/src/Core.Common.Base/ApplicationCore.cs =================================================================== diff -u -r329979bc2494f0ddf111ef8c1c2801f4c9302962 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/src/Core.Common.Base/ApplicationCore.cs (.../ApplicationCore.cs) (revision 329979bc2494f0ddf111ef8c1c2801f4c9302962) +++ Core/Common/src/Core.Common.Base/ApplicationCore.cs (.../ApplicationCore.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -9,7 +9,6 @@ using Core.Common.Base.Workflow; using Core.Common.Utils; using Core.Common.Utils.Aop; -using Core.Common.Utils.Collections; using Core.Common.Utils.Globalization; using Core.Common.Utils.Reflection; using log4net; @@ -28,24 +27,24 @@ private readonly ILog log = LogManager.GetLogger(typeof(ApplicationCore)); + private readonly List plugins; + public Action WaitMethod; private Project project; private ApplicationCoreSettings userSettings; private bool isRunning; - private bool running; - private bool disposed; public ApplicationCore() { + plugins = new List(); + Settings = ConfigurationManager.AppSettings; UserSettings = Properties.Settings.Default; - Plugins = new List(); - ActivityRunner = new ActivityRunner(); if (RunningActivityLogAppender.Instance != null) @@ -93,7 +92,13 @@ } } - public IList Plugins { get; private set; } + public IEnumerable Plugins + { + get + { + return plugins; + } + } public IActivityRunner ActivityRunner { get; set; } @@ -157,6 +162,24 @@ return SettingsHelper.GetApplicationLocalUserSettingsDirectory(); } + public void AddPlugin(ApplicationPlugin applicationPlugin) + { + plugins.Add(applicationPlugin); + + applicationPlugin.ApplicationCore = this; + + applicationPlugin.Activate(); + } + + public void RemovePlugin(ApplicationPlugin applicationPlugin) + { + plugins.Remove(applicationPlugin); + + applicationPlugin.ApplicationCore = null; + + applicationPlugin.Deactivate(); + } + public void Run(string projectPath) { Run(); @@ -177,13 +200,6 @@ // load all assemblies from current assembly directory AssemblyUtils.LoadAllAssembliesFromDirectory(Path.GetFullPath(Path.GetDirectoryName(GetType().Assembly.Location))).ToList(); - Plugins.ForEach(p => p.ApplicationCore = this); - - log.Info(Properties.Resources.ApplicationCore_Run_Activating_plugins); - ActivatePlugins(); - - log.Info(Properties.Resources.ApplicationCore_Run_Waiting_until_all_plugins_are_activated); - log.Info(Properties.Resources.ApplicationCore_Run_Creating_new_project); Project = new Project(); } @@ -271,32 +287,6 @@ GC.SuppressFinalize(this); } - private void ActivatePlugins() - { - log.Debug(Properties.Resources.ApplicationCore_Run_Activating_plugins); - - // Activate all plugins - foreach (var plugin in Plugins) - { - string cwdOld = "."; - - var assembly = plugin.GetType().Assembly; - if (!assembly.IsDynamic()) - { - cwdOld = Path.GetDirectoryName(assembly.Location); - } - - var cwd = Environment.CurrentDirectory; - Environment.CurrentDirectory = cwdOld; - - plugin.Activate(); - - Environment.CurrentDirectory = cwd; - } - - log.Debug(Properties.Resources.ApplicationCore_ActivatePlugins_All_plugins_were_activated); - } - private static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args) { //HACK : this is needed because of issue 4382...the black boxes in PG. It seem like the assembly for @@ -312,27 +302,24 @@ { CloseProject(); - foreach (var plugin in Plugins) + foreach (var plugin in Plugins.ToList()) { - plugin.Deactivate(); + RemovePlugin(plugin); } foreach (var disposable in Plugins.OfType()) { disposable.Dispose(); } - Plugins.Clear(); - - Plugins = null; - if (RunningActivityLogAppender.Instance != null) { RunningActivityLogAppender.Instance.ActivityRunner = null; RunningActivityLogAppender.Instance = null; } } } + disposed = true; } Index: Core/Common/src/Core.Common.Base/Properties/Resources.Designer.cs =================================================================== diff -u -r329979bc2494f0ddf111ef8c1c2801f4c9302962 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/src/Core.Common.Base/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 329979bc2494f0ddf111ef8c1c2801f4c9302962) +++ Core/Common/src/Core.Common.Base/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -179,15 +179,6 @@ } /// - /// Looks up a localized string similar to Alle plugins zijn geactiveerd.. - /// - internal static string ApplicationCore_ActivatePlugins_All_plugins_were_activated { - get { - return ResourceManager.GetString("ApplicationCore_ActivatePlugins_All_plugins_were_activated", resourceCulture); - } - } - - /// /// Looks up a localized string similar to 'Run()' moet eerst worden aangeroepen voordat het project kan worden geopend.. /// internal static string ApplicationCore_CreateNewProject_Run_must_be_called_first_before_project_can_be_opened { @@ -198,15 +189,6 @@ } /// - /// Looks up a localized string similar to Activeer plugins.... - /// - internal static string ApplicationCore_Run_Activating_plugins { - get { - return ResourceManager.GetString("ApplicationCore_Run_Activating_plugins", resourceCulture); - } - } - - /// /// Looks up a localized string similar to Ringtoets wordt al uitgevoerd en kan daarom niet nog een keer gestart worden.. /// internal static string ApplicationCore_Run_Application_is_already_running { @@ -234,15 +216,6 @@ } /// - /// Looks up a localized string similar to Wachten tot alle plugins zijn geactiveerd.... - /// - internal static string ApplicationCore_Run_Waiting_until_all_plugins_are_activated { - get { - return ResourceManager.GetString("ApplicationCore_Run_Waiting_until_all_plugins_are_activated", resourceCulture); - } - } - - /// /// Looks up a localized string similar to {0} van {1}. /// internal static string FileImportActivity_ImportFromFile_CurrentProgress_0_of_TotalProgress_1_ { Index: Core/Common/src/Core.Common.Base/Properties/Resources.resx =================================================================== diff -u -r329979bc2494f0ddf111ef8c1c2801f4c9302962 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/src/Core.Common.Base/Properties/Resources.resx (.../Resources.resx) (revision 329979bc2494f0ddf111ef8c1c2801f4c9302962) +++ Core/Common/src/Core.Common.Base/Properties/Resources.resx (.../Resources.resx) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -126,18 +126,9 @@ Nieuw project aanmaken... - - Activeer plugins... - - - Wachten tot alle plugins zijn geactiveerd... - 'Run()' moet eerst worden aangeroepen voordat het project kan worden geopend. - - Alle plugins zijn geactiveerd. - Activiteit is '{0}'. 'Initialize()' moet aangeroepen worden voor 'Execute()'. Index: Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/GuiImportHandlerTest.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/GuiImportHandlerTest.cs (.../GuiImportHandlerTest.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/GuiImportHandlerTest.cs (.../GuiImportHandlerTest.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -51,6 +51,7 @@ var fileImporter = mocks.Stub(); var targetItemImporter = mocks.Stub(); + plugin.Expect(p => p.Activate()).Repeat.Once(); plugin.Expect(p => p.GetFileImporters()).Return(new[] { targetItemImporter, @@ -77,8 +78,10 @@ mocks.ReplayAll(); - var applicationCore = new ApplicationCore { Plugins = { plugin } }; + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; var guiImportHandler = new GuiImportHandler(gui); @@ -110,6 +113,7 @@ var targetItemImporter = mocks.Stub(); var targetItemImporter2 = mocks.Stub(); + plugin.Expect(p => p.Activate()).Repeat.Once(); plugin.Expect(p => p.GetFileImporters()).Return(new[] { fileImporter, @@ -123,8 +127,10 @@ mocks.ReplayAll(); - var applicationCore = new ApplicationCore { Plugins = { plugin } }; + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; var guiImportHandler = new GuiImportHandler(gui); @@ -145,6 +151,7 @@ var targetItemImporter = mocks.Stub(); var targetItemImporterWhereCanImportIsFalse = mocks.Stub(); + plugin.Expect(p => p.Activate()).Repeat.Once(); plugin.Expect(p => p.GetFileImporters()).Return(new[] { fileImporter, @@ -172,8 +179,10 @@ mocks.ReplayAll(); - var applicationCore = new ApplicationCore { Plugins = { plugin } }; + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; var guiImportHandler = new GuiImportHandler(gui); @@ -191,6 +200,7 @@ var plugin = mocks.Stub(); var targetItemImporter = mocks.Stub(); + plugin.Expect(p => p.Activate()).Repeat.Once(); plugin.Expect(p => p.GetFileImporters()).Return(new[] { targetItemImporter @@ -204,8 +214,10 @@ mocks.ReplayAll(); - var applicationCore = new ApplicationCore { Plugins = { plugin } }; + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; var guiImportHandler = new GuiImportHandler(gui); @@ -229,6 +241,7 @@ var fileImporter2 = mocks.Stub(); var fileImporter3 = mocks.Stub(); + plugin.Expect(p => p.Activate()).Repeat.Once(); plugin.Expect(p => p.GetFileImporters()).Return(new[] { fileImporter1, @@ -257,8 +270,10 @@ mocks.ReplayAll(); - var applicationCore = new ApplicationCore { Plugins = { plugin } }; + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; var guiImportHandler = new GuiImportHandler(gui); Index: Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs =================================================================== diff -u -r329979bc2494f0ddf111ef8c1c2801f4c9302962 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision 329979bc2494f0ddf111ef8c1c2801f4c9302962) +++ Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -32,8 +32,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new ProjectExplorerGuiPlugin()); gui.Run(); @@ -59,8 +59,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new ProjectExplorerGuiPlugin()); gui.Run(); @@ -116,8 +116,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Run(); } @@ -136,8 +136,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new SharpMapGisGuiPlugin()); gui.Plugins.Add(new CommonToolsGuiPlugin()); gui.Plugins.Add(new ProjectExplorerGuiPlugin()); @@ -157,8 +157,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new ProjectExplorerGuiPlugin()); gui.Run(); @@ -254,8 +254,8 @@ { var applicationCore = gui.ApplicationCore; - applicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); - applicationCore.Plugins.Add(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new CommonToolsApplicationPlugin()); + applicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new ProjectExplorerGuiPlugin()); gui.Run(); Index: Core/Common/test/Core.Common.Tests/Core/ApplicationCoreTest.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/test/Core.Common.Tests/Core/ApplicationCoreTest.cs (.../ApplicationCoreTest.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Common/test/Core.Common.Tests/Core/ApplicationCoreTest.cs (.../ApplicationCoreTest.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -47,18 +47,19 @@ var plugin = mocks.StrictMock(); - Expect.Call(plugin.ApplicationCore = null).IgnoreArguments(); - Expect.Call(plugin.Deactivate); - Expect.Call(plugin.GetDataItemInfos()).Return(new List()).Repeat.Any(); + using (var applicationCore = new ApplicationCore()) + { + Expect.Call(plugin.ApplicationCore = applicationCore).IgnoreArguments(); + Expect.Call(plugin.ApplicationCore = null).IgnoreArguments(); + Expect.Call(plugin.Deactivate); + Expect.Call(plugin.GetDataItemInfos()).Return(new List()).Repeat.Any(); - plugin.Activate(); - LastCall.Repeat.Once(); + plugin.Activate(); - mocks.ReplayAll(); + LastCall.Repeat.Once(); - using (var applicationCore = new ApplicationCore()) - { - applicationCore.Plugins.Add(plugin); + mocks.ReplayAll(); + applicationCore.AddPlugin(plugin); applicationCore.Run(); applicationCore.Dispose(); Index: Core/Common/test/Core.Common.Tests/Gui/RingtoetsGuiTests.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Common/test/Core.Common.Tests/Gui/RingtoetsGuiTests.cs (.../RingtoetsGuiTests.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Common/test/Core.Common.Tests/Gui/RingtoetsGuiTests.cs (.../RingtoetsGuiTests.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -1,8 +1,10 @@ using Core.Common.Base; using Core.Common.Gui; using Core.Common.TestUtils; +using Core.Common.Utils.Collections; using log4net.Core; using NUnit.Framework; +using Rhino.Mocks; namespace Core.Common.Tests.Gui { @@ -41,18 +43,27 @@ public void DisposingGuiDisposesApplication() { // Setup + var mocks = new MockRepository(); + var applicationPlugin = mocks.Stub(); + + mocks.ReplayAll(); + var applicationCore = new ApplicationCore(); + applicationCore.AddPlugin(applicationPlugin); + gui.ApplicationCore = applicationCore; // Precondition - Assert.IsNotNull(applicationCore.Plugins); + Assert.AreEqual(1, applicationCore.Plugins.Count()); // Call gui.Dispose(); // Assert - Assert.IsNull(applicationCore.Plugins); + Assert.AreEqual(0, applicationCore.Plugins.Count()); + + mocks.VerifyAll(); } [Test] Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -53,11 +53,12 @@ applicationCore = new ApplicationCore { Project = new Project(), - Plugins = { plugin }, UserSettings = settings, Settings = new NameValueCollection { { "IsProjectExplorerSorted", "false" } } }; + applicationCore.AddPlugin(plugin); + gui.ApplicationCore = applicationCore; plugin.ApplicationCore = applicationCore; } Index: Core/Plugins/test/Core.Plugins.SharpMapGis.Tests/SharpMapGisPluginGuiIntegrationTest.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcaeb44054bb58aa8c480f86e7922a60ecf0f08ef --- Core/Plugins/test/Core.Plugins.SharpMapGis.Tests/SharpMapGisPluginGuiIntegrationTest.cs (.../SharpMapGisPluginGuiIntegrationTest.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Plugins/test/Core.Plugins.SharpMapGis.Tests/SharpMapGisPluginGuiIntegrationTest.cs (.../SharpMapGisPluginGuiIntegrationTest.cs) (revision caeb44054bb58aa8c480f86e7922a60ecf0f08ef) @@ -1,6 +1,5 @@ using System; using System.Linq; -using Application.Ringtoets; using Core.Common.Gui; using Core.GIS.GeoAPI.Extensions.Feature; using Core.GIS.NetTopologySuite.Extensions.Features; @@ -23,7 +22,7 @@ { using (var gui = new RingtoetsGui()) { - gui.ApplicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + gui.ApplicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new SharpMapGisGuiPlugin()); gui.Run(); @@ -87,7 +86,7 @@ { using (var gui = new RingtoetsGui()) { - gui.ApplicationCore.Plugins.Add(new SharpMapGisApplicationPlugin()); + gui.ApplicationCore.AddPlugin(new SharpMapGisApplicationPlugin()); gui.Plugins.Add(new SharpMapGisGuiPlugin()); gui.Run();