Index: src/DeltaShell/DeltaShell.Core/DeltaShellApplication.cs =================================================================== diff -u -ra5b1ae6a761e1cafbb0084db15d5526b08a447c9 -r5fc71a385897af92ccb092f2f969b5709afab85a --- src/DeltaShell/DeltaShell.Core/DeltaShellApplication.cs (.../DeltaShellApplication.cs) (revision a5b1ae6a761e1cafbb0084db15d5526b08a447c9) +++ src/DeltaShell/DeltaShell.Core/DeltaShellApplication.cs (.../DeltaShellApplication.cs) (revision 5fc71a385897af92ccb092f2f969b5709afab85a) @@ -28,58 +28,53 @@ { public class DeltaShellApplication : IApplication { + public event Action AfterRun; + + // TODO: migrate into ProjectService + public event Action ProjectOpening; + public event Action ProjectOpened; + + // TODO: migrate into ProjectService + public event Action ProjectClosing; + public event Action ProjectSaving; + public event Action ProjectSaveFailed; + public event Action ProjectSaved; + + public static bool TemporaryProjectBeingSaved; + public static bool TemporaryProjectSaved; + public static bool TemporaryProjectSavedAsynchroneously; private static readonly ILog log = LogManager.GetLogger(typeof(DeltaShellApplication)); + private readonly IList fileImporters = new List(); + private readonly IList fileExporters = new List(); - private PluginConfigurationLoader pluginConfigurationLoader; - private IList plugins; + public Action WaitMethod; private Project project; - private NameValueCollection settings; private DeltaShellApplicationSettings userSettings; - private ResourceManager resources; private IProjectService projectService; - private IProjectRepositoryFactory projectRepositoryFactory; private NotifyingThreadQueue activities; - private readonly IList fileImporters = new List(); - private readonly IList fileExporters = new List(); private string defaultRepositoryTypeName; private bool isRunning; - public Action WaitMethod; + private bool running; - public string PluginVersions - { - get { return String.Join("\n", plugins.Select(p => p.Name + " " + p.Version)); } - } + private Project projectBeingCreated; + private bool initializing; - public event Action AfterRun; - - public bool IsDataAccessSynchronizationDisabled { get; set; } + private bool disposed; - public PluginConfigurationLoader PluginConfigurationLoader - { - get { return pluginConfigurationLoader; } - } - - // TODO: migrate into ProjectService - public IProjectRepositoryFactory ProjectRepositoryFactory - { - get { return projectRepositoryFactory; } - set { projectRepositoryFactory = value; } - } - public DeltaShellApplication() { - projectRepositoryFactory = new ProjectRepositoryFactory(); + ProjectRepositoryFactory = new ProjectRepositoryFactory(); Settings = ConfigurationManager.AppSettings; UserSettings = Properties.Settings.Default; - ProjectService = new ProjectService(projectRepositoryFactory); + ProjectService = new ProjectService(ProjectRepositoryFactory); - plugins = new List(); + Plugins = new List(); ActivityRunner = new ActivityRunner(); @@ -88,42 +83,45 @@ RunningActivityLogAppender.Instance.ActivityRunner = ActivityRunner; } AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainAssemblyResolve; - + InitializeSettingsHelper(); - + Settings = ConfigurationManager.AppSettings; - UserSettings = Properties.Settings.Default; + UserSettings = Properties.Settings.Default; } - static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args) + public PluginConfigurationLoader PluginConfigurationLoader { get; private set; } + + public string ApplicationNameAndVersion { - //HACK : this is needed because of issue 4382...the black boxes in PG. It seem like the assembly for - //enum types like AggregationOptions cannot be found without this - return AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(asm => asm.FullName == args.Name); + get + { + return SettingsHelper.ApplicationNameAndVersion; + } } - public ApplicationPlugin GetPluginForType(Type type) + public bool IsProjectCreatedInTemporaryDirectory { get; set; } + + public string PluginVersions { - foreach (var plugin in plugins) + get { - if (plugin.GetType().Assembly.Equals(type.Assembly)) - { - return plugin; - } - - if (plugin.GetDataItemInfos().Any(dii => dii.ValueType == type)) - { - return plugin; - } + return String.Join("\n", Plugins.Select(p => p.Name + " " + p.Version)); } - - return null; } + public bool IsDataAccessSynchronizationDisabled { get; set; } + + // TODO: migrate into ProjectService + public IProjectRepositoryFactory ProjectRepositoryFactory { get; set; } + public Project Project { - get { return project; } - + get + { + return project; + } + [InvokeRequired] set { @@ -154,100 +152,164 @@ } } - [InvokeRequired] - private void ProjectServiceProjectSaving(object sender, EventArgs e) + public IList Plugins { get; set; } + + public IActivityRunner ActivityRunner { get; set; } + + public ApplicationSettingsBase UserSettings { - if (ProjectSaving != null) + get { - ProjectSaving(Project); + return userSettings; } + set + { + userSettings = new DeltaShellApplicationSettings(value); // small hack, wrap settings so that we will know when they are changed. + } } - [InvokeRequired] - void ProjectServiceProjectSaveFailed(object sender, EventArgs e) + public NameValueCollection Settings { get; set; } + + public string Version { - if (ProjectSaveFailed != null) + get { - ProjectSaveFailed(Project); + return SettingsHelper.ApplicationVersion; + /*var assemblyInfo = AssemblyUtils.GetAssemblyInfo(Assembly.GetExecutingAssembly()); + return assemblyInfo.Version;*/ } } - [InvokeRequired] - void ProjectServiceProjectSaved(object sender, EventArgs e) + // TODO: hide it + public IProjectService ProjectService { - if (ProjectSaved != null) + get { - ProjectSaved(Project); + return projectService; } + set + { + if (projectService != null) + { + projectService.ProjectSaving -= ProjectServiceProjectSaving; + projectService.ProjectSaved -= ProjectServiceProjectSaved; + projectService.ProjectSaveFailed -= ProjectServiceProjectSaveFailed; + } + + projectService = value; + + if (projectService != null) + { + projectService.ProjectSaving += ProjectServiceProjectSaving; + projectService.ProjectSaved += ProjectServiceProjectSaved; + projectService.ProjectSaveFailed += ProjectServiceProjectSaveFailed; + } + } } - public IList Plugins + public string ProjectDataDirectory { - get { return plugins; } - set { plugins = value; } + get + { + return projectService.ProjectDataDirectory; + } } + public string ProjectFilePath + { + get + { + return projectService.ProjectRepository.Path; + } + } + public IEnumerable FileImporters + { + get + { + return fileImporters; + } + } - // TODO: migrate into ProjectService - public event Action ProjectOpening; - public event Action ProjectOpened; - - // TODO: migrate into ProjectService - public event Action ProjectClosing; - public event Action ProjectSaving; - public event Action ProjectSaveFailed; - public event Action ProjectSaved; - - public IActivityRunner ActivityRunner { get; set; } - - public ApplicationSettingsBase UserSettings + public IEnumerable FileExporters { - get { return userSettings; } - set + get { - userSettings = new DeltaShellApplicationSettings(value); // small hack, wrap settings so that we will know when they are changed. + return fileExporters; } } - public string GetUserSettingsDirectoryPath() + public ResourceManager Resources { get; set; } + + public static void SetLanguageAndRegionalSettions(ApplicationSettingsBase tempUserSettings = null) { - return SettingsHelper.GetApplicationLocalUserSettingsDirectory(); + var settings = ConfigurationManager.AppSettings; + + var language = settings["language"]; + + if (language != null) + { + RegionalSettingsManager.Language = language; + } + + if (tempUserSettings != null && tempUserSettings.Properties.Count > 0) + { + var realNumberFormat = tempUserSettings["realNumberFormat"]; + if (realNumberFormat != null) + { + RegionalSettingsManager.RealNumberFormat = (string) realNumberFormat; + } + } + + var culture = Thread.CurrentThread.CurrentCulture.ToString(); + if (culture == "tr-TR" || culture == "az") + { + Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); + } } - public NameValueCollection Settings + /// + /// Sets plugin resources, resource manager will automatically select culture-aware resource file. + /// + /// + public static void InitializePluginResources(IPlugin plugin) { - get { return this.settings; } - set { this.settings = value; } + var resourceName = plugin.GetType().Assembly.FullName.Split(',')[0] + ".Properties.Resources"; + plugin.Resources = new ResourceManager(resourceName, plugin.GetType().Assembly); } - public string Version + public ApplicationPlugin GetPluginForType(Type type) { - get + foreach (var plugin in Plugins) { - return SettingsHelper.ApplicationVersion; - /*var assemblyInfo = AssemblyUtils.GetAssemblyInfo(Assembly.GetExecutingAssembly()); - return assemblyInfo.Version;*/ + if (plugin.GetType().Assembly.Equals(type.Assembly)) + { + return plugin; + } + + if (plugin.GetDataItemInfos().Any(dii => dii.ValueType == type)) + { + return plugin; + } } + + return null; } - public string ApplicationNameAndVersion + public string GetUserSettingsDirectoryPath() { - get { return SettingsHelper.ApplicationNameAndVersion; } + return SettingsHelper.GetApplicationLocalUserSettingsDirectory(); } - public bool IsProjectCreatedInTemporaryDirectory { get; set; } - public void Run(string projectPath) { Run(); OpenProject(projectPath); } - private bool running; public void Run() { - if(isRunning) + if (isRunning) { throw new InvalidOperationException(Properties.Resources.DeltaShellApplication_Run_You_can_call_Run___only_once_per_application); } @@ -256,10 +318,10 @@ var stopwatch = new Stopwatch(); stopwatch.Start(); - + log.Info(Properties.Resources.DeltaShellApplication_Run_Starting_Delta_Shell____); - if(running) + if (running) { throw new InvalidOperationException(Properties.Resources.DeltaShellApplication_Run_Application_is_already_running); } @@ -280,9 +342,9 @@ InitializeLicense(); - log.Info(Properties.Resources.DeltaShellApplication_Run_Initializing_plugins____); + log.Info(Properties.Resources.DeltaShellApplication_Run_Initializing_plugins____); InitializePlugins(); - + log.Info(Properties.Resources.DeltaShellApplication_Run_Initializing_project_repository____); InitializeProjectRepositoryFactory(); @@ -305,7 +367,7 @@ if (!TemporaryProjectSavedAsynchroneously) { // wait until all plugins are activated - while(Plugins.Any(p => !p.IsActive)) + while (Plugins.Any(p => !p.IsActive)) { Thread.Sleep(250); } @@ -317,52 +379,14 @@ stopwatch.Stop(); - log.InfoFormat(Properties.Resources.DeltaShellApplication_Run_Delta_Shell_is_ready__started_in__0_F3__sec_, stopwatch.ElapsedMilliseconds / 1000.0); + log.InfoFormat(Properties.Resources.DeltaShellApplication_Run_Delta_Shell_is_ready__started_in__0_F3__sec_, stopwatch.ElapsedMilliseconds/1000.0); if (AfterRun != null) { AfterRun(); } } - private void InitializeSettingsHelper() - { - //read settings from app.config and update the settings helper. - if (Settings.AllKeys.Contains("applicationName")) - { - SettingsHelper.ApplicationName = Settings["applicationName"]; - SettingsHelper.ApplicationVersion = Settings["fullVersion"]; - } - } - - public static void SetLanguageAndRegionalSettions(ApplicationSettingsBase tempUserSettings = null) - { - var settings = ConfigurationManager.AppSettings; - - var language = settings["language"]; - - if (language != null) - { - RegionalSettingsManager.Language = language; - } - - if (tempUserSettings != null && tempUserSettings.Properties.Count > 0) - { - var realNumberFormat = tempUserSettings["realNumberFormat"]; - if (realNumberFormat != null) - { - RegionalSettingsManager.RealNumberFormat = (string)realNumberFormat; - } - } - - var culture = Thread.CurrentThread.CurrentCulture.ToString(); - if (culture == "tr-TR" || culture == "az") - { - Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); - } - } - - public void CloseProject() { Project = null; @@ -413,59 +437,84 @@ } } - private Project projectBeingCreated; - private bool initializing; - - private void SaveTemporaryProjectThread() - { - ProjectService.SaveProjectInTemporaryFolder(projectBeingCreated); - TemporaryProjectSaved = true; - TemporaryProjectBeingSaved = false; - } - - public static bool TemporaryProjectBeingSaved; - public static bool TemporaryProjectSaved; - public static bool TemporaryProjectSavedAsynchroneously; - public bool OpenProject(string path) { - if(!isRunning) + if (!isRunning) { throw new InvalidOperationException(Properties.Resources.DeltaShellApplication_CreateNewProject_Run___must_be_called_first_before_project_can_be_opened); } - if(Project != null) + if (Project != null) { CloseProject(); } var retrievedProject = ProjectService.Open(path); if (retrievedProject != null) { - Project = retrievedProject; + Project = retrievedProject; } return retrievedProject != null; } - - private static void LogSystemInfo() + + public void Exit() { - log.DebugFormat(Properties.Resources.DeltaShellApplication_LogSystemInfo_Environmental_variables_); + Trace.Listeners.Clear(); - var culture = Thread.CurrentThread.CurrentCulture; - log.DebugFormat("{0} = {1}", "CURRENT_THREAD_CULTURE" , culture.EnglishName); - log.DebugFormat("{0} = {1}", "NUMBER_DECIMAL_DIGITS" , culture.NumberFormat.NumberDecimalDigits); - log.DebugFormat("{0} = {1}", "NUMBER_DECIMAL_SEPARATOR" , culture.NumberFormat.NumberDecimalSeparator); - log.DebugFormat("{0} = {1}", "FULL_DATE_TIME_PATTERN" , culture.DateTimeFormat.FullDateTimePattern); - log.DebugFormat("{0} = {1}", "DATE_SEPARATOR" , culture.DateTimeFormat.DateSeparator); - log.DebugFormat("{0} = {1}", "OS_VERSION" , Environment.OSVersion); - log.DebugFormat("{0} = {1}", "OS_VERSION_NUMBER" , Environment.Version); + if (Project != null && Project.IsChanged) + { + CloseProject(); + } - foreach(DictionaryEntry pair in Environment.GetEnvironmentVariables()) + if (userSettings.IsDirty) { - log.DebugFormat("{0} = {1}", pair.Key, pair.Value); + UserSettings.Save(); } } + public bool IsActivityRunning() + { + return ActivityRunner.IsRunning; + } + + public void RunActivity(IActivity activity) + { + if (WaitMethod == null) //typically in console + { + DelftTools.Shell.Core.Workflow.ActivityRunner.RunActivity(activity); //run sync + return; + } + + RunActivityInBackground(activity); + while (ActivityRunner.IsRunningActivity(activity)) + { + WaitMethod(); + } + } + + public void RunActivityInBackground(IActivity activity) + { + ActivityRunner.Enqueue(activity); + } + + public void StopActivity(IActivity activity) + { + ActivityRunner.Cancel(activity); + //CurrentActivities.Abort(activity); + activity.Cancel(); + } + + public bool IsActivityRunningOrWaiting(IActivity activity) + { + return ActivityRunner.Activities.Contains(activity); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + protected void ActivatePlugins() { log.Debug(Properties.Resources.DeltaShellApplication_Run_Activating_plugins____); @@ -482,13 +531,13 @@ */ // activate all plugins - foreach (var plugin in plugins) + foreach (var plugin in Plugins) { log.DebugFormat(Properties.Resources.DeltaShellApplication_ActivatePlugins_Activating_plugin__0_____, plugin.Name); string cwdOld = "."; var assembly = plugin.GetType().Assembly; - if(!assembly.IsDynamic()) + if (!assembly.IsDynamic()) { cwdOld = Path.GetDirectoryName(assembly.Location); } @@ -504,199 +553,183 @@ log.Debug(Properties.Resources.DeltaShellApplication_ActivatePlugins_All_plugins_were_activated_); } - /// - /// Set license environmental variables to path of the license file. - /// - private void InitializeLicense() - { - string licenseFilePath = null; - - if (Settings != null && Settings["licenseFilePath"] != null) - { - licenseFilePath = Settings["licenseFilePath"]; - } - - if(string.IsNullOrEmpty(licenseFilePath)) - { - return; - } - - log.Debug(Properties.Resources.DeltaShellApplication_InitializeLicense_Initializing_license____); - - if (!File.Exists(licenseFilePath)) - { - log.WarnFormat(Properties.Resources.DeltaShellApplication_InitializeLicense_License_file_does_not_exist___0_, licenseFilePath); - } - else - { - Environment.SetEnvironmentVariable("DHSDELFT_LICENSE_FILE", Path.GetFullPath(licenseFilePath)); - } - - log.Debug(Properties.Resources.DeltaShellApplication_InitializeLicense_License_is_initialized_); - } - protected void InitializePlugins() { log.Debug(Properties.Resources.DeltaShellApplication_InitializePlugins_Searching_for_plugins____); var pluginsDirectory = GetPluginDirectory(); - + PluginManager.RegisterAdditionalPlugins(Plugins); PluginManager.Initialize(pluginsDirectory); - + var newApplicationPlugins = PluginManager.GetPlugins().Except(Plugins).ToList(); foreach (var plugin in newApplicationPlugins) { - plugins.Add(plugin); + Plugins.Add(plugin); } Plugins.ForEach(p => p.Application = this); - + log.InfoFormat(Properties.Resources.DeltaShellApplication_InitializePlugins__0__plugin_s__were_loaded, Plugins.Count); } - private string GetPluginDirectory() + /// + /// Initialize the log4net part + /// + protected static void InitializeLogging() { - // load plugins from a configured folder - if (Settings != null) + if (!Trace.Listeners.Cast().Any(tl => tl is DeltaShellTraceListener)) { - string pluginsDirectory = Settings["pluginsDirectory"]; - - if (Directory.Exists(pluginsDirectory)) - { - return pluginsDirectory; - } + Trace.Listeners.Add(new DeltaShellTraceListener()); } - return null; } - private void InitializePluginResources() + private static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args) { - if (plugins.Count > 0) - { - string s = ""; - foreach (var p in plugins) - { - InitializePluginResources(p); + //HACK : this is needed because of issue 4382...the black boxes in PG. It seem like the assembly for + //enum types like AggregationOptions cannot be found without this + return AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(asm => asm.FullName == args.Name); + } - s += p.Name + ", "; - } - log.Debug(Properties.Resources.DeltaShellApplication_InitializePluginResources_DeltaShell_application_started__active_plugins__ + s.Substring(0, s.Length - 2)); + [InvokeRequired] + private void ProjectServiceProjectSaving(object sender, EventArgs e) + { + if (ProjectSaving != null) + { + ProjectSaving(Project); } - else + } + + [InvokeRequired] + private void ProjectServiceProjectSaveFailed(object sender, EventArgs e) + { + if (ProjectSaveFailed != null) { - log.Warn(Properties.Resources.DeltaShellApplication_InitializePluginResources_No_plugins_found__most_probably_there_is_a_configuration_problem_); - log.Warn(Properties.Resources.DeltaShellApplication_InitializePluginResources_Please_check_your_configuration_and_plugins_folder_); + ProjectSaveFailed(Project); } } - /// - /// Sets plugin resources, resource manager will automatically select culture-aware resource file. - /// - /// - public static void InitializePluginResources(IPlugin plugin) + [InvokeRequired] + private void ProjectServiceProjectSaved(object sender, EventArgs e) { - var resourceName = plugin.GetType().Assembly.FullName.Split(',')[0] + ".Properties.Resources"; - plugin.Resources = new ResourceManager(resourceName, plugin.GetType().Assembly); + if (ProjectSaved != null) + { + ProjectSaved(Project); + } } - /// - /// Initialize the log4net part - /// - protected static void InitializeLogging() + private void InitializeSettingsHelper() { - if (!Trace.Listeners.Cast().Any(tl => tl is DeltaShellTraceListener)) + //read settings from app.config and update the settings helper. + if (Settings.AllKeys.Contains("applicationName")) { - Trace.Listeners.Add(new DeltaShellTraceListener()); + SettingsHelper.ApplicationName = Settings["applicationName"]; + SettingsHelper.ApplicationVersion = Settings["fullVersion"]; } } - #region Nested type: DeltaShellTraceListener + private void SaveTemporaryProjectThread() + { + ProjectService.SaveProjectInTemporaryFolder(projectBeingCreated); + TemporaryProjectSaved = true; + TemporaryProjectBeingSaved = false; + } - internal class DeltaShellTraceListener : TraceListener + private static void LogSystemInfo() { - private static ILog log; - private static bool logTraceMessages = true; + log.DebugFormat(Properties.Resources.DeltaShellApplication_LogSystemInfo_Environmental_variables_); - public DeltaShellTraceListener() - { - log = LogManager.GetLogger(GetType()); - } + var culture = Thread.CurrentThread.CurrentCulture; + log.DebugFormat("{0} = {1}", "CURRENT_THREAD_CULTURE", culture.EnglishName); + log.DebugFormat("{0} = {1}", "NUMBER_DECIMAL_DIGITS", culture.NumberFormat.NumberDecimalDigits); + log.DebugFormat("{0} = {1}", "NUMBER_DECIMAL_SEPARATOR", culture.NumberFormat.NumberDecimalSeparator); + log.DebugFormat("{0} = {1}", "FULL_DATE_TIME_PATTERN", culture.DateTimeFormat.FullDateTimePattern); + log.DebugFormat("{0} = {1}", "DATE_SEPARATOR", culture.DateTimeFormat.DateSeparator); + log.DebugFormat("{0} = {1}", "OS_VERSION", Environment.OSVersion); + log.DebugFormat("{0} = {1}", "OS_VERSION_NUMBER", Environment.Version); - public static bool LogTraceMessages + foreach (DictionaryEntry pair in Environment.GetEnvironmentVariables()) { - get { return logTraceMessages; } - set { logTraceMessages = value; } + log.DebugFormat("{0} = {1}", pair.Key, pair.Value); } + } - public override void Write(string message) + /// + /// Set license environmental variables to path of the license file. + /// + private void InitializeLicense() + { + string licenseFilePath = null; + + if (Settings != null && Settings["licenseFilePath"] != null) { - if (logTraceMessages) - { - WriteLine(message); - } + licenseFilePath = Settings["licenseFilePath"]; } - public override void WriteLine(string message) + if (string.IsNullOrEmpty(licenseFilePath)) { - if (logTraceMessages) - { - log.Debug(message); - } + return; } - } - #endregion + log.Debug(Properties.Resources.DeltaShellApplication_InitializeLicense_Initializing_license____); - public void Exit() - { - Trace.Listeners.Clear(); - - if (Project != null && Project.IsChanged) + if (!File.Exists(licenseFilePath)) { - CloseProject(); + log.WarnFormat(Properties.Resources.DeltaShellApplication_InitializeLicense_License_file_does_not_exist___0_, licenseFilePath); } - - if (userSettings.IsDirty) + else { - UserSettings.Save(); + Environment.SetEnvironmentVariable("DHSDELFT_LICENSE_FILE", Path.GetFullPath(licenseFilePath)); } + + log.Debug(Properties.Resources.DeltaShellApplication_InitializeLicense_License_is_initialized_); } - // TODO: hide it - public IProjectService ProjectService + private string GetPluginDirectory() { - get { return projectService; } - set + // load plugins from a configured folder + if (Settings != null) { - if(projectService != null) + string pluginsDirectory = Settings["pluginsDirectory"]; + + if (Directory.Exists(pluginsDirectory)) { - projectService.ProjectSaving -= ProjectServiceProjectSaving; - projectService.ProjectSaved -= ProjectServiceProjectSaved; - projectService.ProjectSaveFailed -= ProjectServiceProjectSaveFailed; + return pluginsDirectory; } + } + return null; + } - projectService = value; - - if (projectService != null) + private void InitializePluginResources() + { + if (Plugins.Count > 0) + { + string s = ""; + foreach (var p in Plugins) { - projectService.ProjectSaving += ProjectServiceProjectSaving; - projectService.ProjectSaved += ProjectServiceProjectSaved; - projectService.ProjectSaveFailed += ProjectServiceProjectSaveFailed; + InitializePluginResources(p); + + s += p.Name + ", "; } + log.Debug(Properties.Resources.DeltaShellApplication_InitializePluginResources_DeltaShell_application_started__active_plugins__ + s.Substring(0, s.Length - 2)); } + else + { + log.Warn(Properties.Resources.DeltaShellApplication_InitializePluginResources_No_plugins_found__most_probably_there_is_a_configuration_problem_); + log.Warn(Properties.Resources.DeltaShellApplication_InitializePluginResources_Please_check_your_configuration_and_plugins_folder_); + } } // TODO: migrate into ProjectService private void InitializeProjectRepositoryFactory() { //File.WriteAllText(@"d:\check.graphml", new PluginPersistencyGraphMlExporter().GetGraphML(Plugins)); RegisterPersistentAssemblies(ProjectRepositoryFactory); - + // add data access listeners from plugins foreach (var plugin in Plugins) { var dataAccessListenersProvider = plugin as IDataAccessListenersProvider; - if(dataAccessListenersProvider != null) + if (dataAccessListenersProvider != null) { foreach (var listener in dataAccessListenersProvider.CreateDataAccessListeners()) { @@ -712,7 +745,7 @@ { log.Debug(Properties.Resources.DeltaShellApplication_RegisterDataTypes_Registering_persistent_data_types____); - foreach (var dataName in plugins.SelectMany(plugin => plugin.GetDataItemInfos().Select(dii => dii.Name))) + foreach (var dataName in Plugins.SelectMany(plugin => plugin.GetDataItemInfos().Select(dii => dii.Name))) { log.DebugFormat(Properties.Resources.DeltaShellApplication_RegisterDataTypes_Registering_data_type__0_, dataName); } @@ -722,7 +755,7 @@ { log.Debug(Properties.Resources.DeltaShellApplication_RegisterImporters_Registering_importers____); - foreach (var fileImporter in plugins.SelectMany(plugin => plugin.GetFileImporters())) + foreach (var fileImporter in Plugins.SelectMany(plugin => plugin.GetFileImporters())) { var projectImporter = fileImporter as IProjectImporter; if (projectImporter != null) @@ -740,7 +773,7 @@ { log.Debug(Properties.Resources.DeltaShellApplication_RegisterExporters_Registering_exporters____); - foreach (var fileExporter in plugins.SelectMany(plugin => plugin.GetFileExporters())) + foreach (var fileExporter in Plugins.SelectMany(plugin => plugin.GetFileExporters())) { var projectExporter = fileExporter as IProjectItemExporter; if (projectExporter != null) @@ -764,79 +797,14 @@ } } - public string ProjectDataDirectory - { - get { return projectService.ProjectDataDirectory; } - } - - public string ProjectFilePath - { - get { return projectService.ProjectRepository.Path; } - } - - public IEnumerable FileImporters - { - get { return fileImporters; } - } - - public IEnumerable FileExporters - { - get { return fileExporters; } - } - - public ResourceManager Resources - { - get { return this.resources; } - set { this.resources = value; } - } - - public bool IsActivityRunning() - { - return this.ActivityRunner.IsRunning; - } - - public void RunActivity(IActivity activity) - { - if (WaitMethod == null) //typically in console - { - DelftTools.Shell.Core.Workflow.ActivityRunner.RunActivity(activity); //run sync - return; - } - - RunActivityInBackground(activity); - while(ActivityRunner.IsRunningActivity(activity)) - { - WaitMethod(); - } - } - - public void RunActivityInBackground(IActivity activity) - { - ActivityRunner.Enqueue(activity); - } - - public void StopActivity(IActivity activity) - { - ActivityRunner.Cancel(activity); - //CurrentActivities.Abort(activity); - activity.Cancel(); - } - - public bool IsActivityRunningOrWaiting(IActivity activity) - { - return ActivityRunner.Activities.Contains(activity); - } - - private bool disposed; - private void Dispose(bool disposing) { if (!disposed) { if (disposing) { - CloseProject(); - + CloseProject(); + projectBeingCreated = null; RegularExpression.ClearExpressionsCache(); @@ -858,9 +826,9 @@ disposable.Dispose(); } - plugins.Clear(); + Plugins.Clear(); - plugins = null; + Plugins = null; PluginManager.Reset(); @@ -874,15 +842,52 @@ disposed = true; } - public void Dispose() + ~DeltaShellApplication() { - Dispose(true); - GC.SuppressFinalize(this); + Dispose(false); } - ~DeltaShellApplication() + #region Nested type: DeltaShellTraceListener + + internal class DeltaShellTraceListener : TraceListener { - Dispose(false); + private static ILog log; + private static bool logTraceMessages = true; + + public DeltaShellTraceListener() + { + log = LogManager.GetLogger(GetType()); + } + + public static bool LogTraceMessages + { + get + { + return logTraceMessages; + } + set + { + logTraceMessages = value; + } + } + + public override void Write(string message) + { + if (logTraceMessages) + { + WriteLine(message); + } + } + + public override void WriteLine(string message) + { + if (logTraceMessages) + { + log.Debug(message); + } + } } + + #endregion } } \ No newline at end of file