Index: src/DeltaShell/DeltaShell.Core/Services/ProjectService.cs =================================================================== diff -u -r18f9b18cab9da0c768badb3084415e993a5414ee -r5fc71a385897af92ccb092f2f969b5709afab85a --- src/DeltaShell/DeltaShell.Core/Services/ProjectService.cs (.../ProjectService.cs) (revision 18f9b18cab9da0c768badb3084415e993a5414ee) +++ src/DeltaShell/DeltaShell.Core/Services/ProjectService.cs (.../ProjectService.cs) (revision 5fc71a385897af92ccb092f2f969b5709afab85a) @@ -18,74 +18,75 @@ /// public class ProjectService : IProjectService { + public event EventHandler ProjectSaving; + public event EventHandler ProjectSaved; + public event EventHandler ProjectSaveFailed; + + public event EventHandler ProjectOpening; + public event EventHandler ProjectOpened; private static readonly ILog log = LogManager.GetLogger(typeof(ProjectService)); private IProjectRepositoryFactory projectRepositoryFactory; - + + private IProjectRepository projectRepository; + public ProjectService() - : this(new ProjectRepositoryFactory()) - { - } + : this(new ProjectRepositoryFactory()) {} public ProjectService(IProjectRepositoryFactory projectRepositoryFactory) { this.projectRepositoryFactory = projectRepositoryFactory; } + /// + /// Gets the external data directory. + /// Note that if the directory is not found then it will be created... + /// Maybe this need to be refactored because of the single responsibility principle + /// + public string ProjectExternalDataDirectory + { + get + { + return CreateAndGetExternalDataDirectory(ProjectDataDirectory); + } + } + public IProjectRepositoryFactory ProjectRepositoryFactory { - get { return projectRepositoryFactory; } - set - { + get + { + return projectRepositoryFactory; + } + set + { projectRepositoryFactory = value; projectRepository = null; } } - private IProjectRepository projectRepository; - public IProjectRepository ProjectRepository { get { - if(ProjectRepositoryFactory != null && projectRepository == null) + if (ProjectRepositoryFactory != null && projectRepository == null) { // HACK: new repository should not be created here!! ProjectRepository = projectRepositoryFactory.CreateNew(); } - + return projectRepository; } - private set { projectRepository = value; } + private set + { + projectRepository = value; + } } - public event EventHandler ProjectSaving; - public event EventHandler ProjectSaved; - public event EventHandler ProjectSaveFailed; - - public event EventHandler ProjectOpening; - public event EventHandler ProjectOpened; - public string ProjectDataDirectory { - get { return GetProjectDataDirectory(ProjectRepository.Path); } - } - - private static string GetProjectDataDirectory(string projectRepositoryPath) - { - return projectRepositoryPath != null ? projectRepositoryPath + "_data" : null; - } - - /// - /// Gets the external data directory. - /// Note that if the directory is not found then it will be created... - /// Maybe this need to be refactored because of the single responsibility principle - /// - public string ProjectExternalDataDirectory - { get { - return CreateAndGetExternalDataDirectory(ProjectDataDirectory); + return GetProjectDataDirectory(ProjectRepository.Path); } } @@ -107,20 +108,20 @@ /// public Project CreateNewProjectInTemporaryFolder() { - log.InfoFormat(Resources.ProjectService_CreateNewProjectInTemporaryFolder_Creating_new_empty_project_in_temporary_folder____); + log.InfoFormat(Resources.ProjectService_CreateNewProjectInTemporaryFolder_Creating_new_empty_project_in_temporary_folder____); var path = Path.GetTempFileName(); - + ProjectRepository.Create(path); - log.InfoFormat(Resources.ProjectService_CreateNewProjectInTemporaryFolder_New_empty_project_created); + log.InfoFormat(Resources.ProjectService_CreateNewProjectInTemporaryFolder_New_empty_project_created); var project = ProjectRepository.GetProject(); FileUtils.CreateDirectoryIfNotExists(ProjectDataDirectory); - + project.IsTemporary = true; - + return project; } @@ -152,15 +153,6 @@ } /// - /// Collect all possible memory after Save/Load operation (improve fragmentation) - /// - private void CollectMemory() - { - GC.Collect(); - GC.WaitForPendingFinalizers(); // wait until all collect operations are finished - } - - /// /// Opens an existing repository using provided path. /// /// Path to project repository, usually file with .dsproj extension. @@ -249,6 +241,47 @@ } /// + /// Save a project with all its task's and call savestate on the models + /// + /// the path where the model is saved + /// the project to be saved + /// + public void SaveProjectAs(Project project, string path) + { + SaveProjectAs(project, path, false); + } + + public void Dispose() + { + if (ProjectRepository != null) + { + if (ProjectRepository.IsOpen) + { + Close(ProjectRepository.GetProject()); + } + + ProjectRepository.Dispose(); + ProjectRepository = null; + } + + projectRepositoryFactory = null; + } + + private static string GetProjectDataDirectory(string projectRepositoryPath) + { + return projectRepositoryPath != null ? projectRepositoryPath + "_data" : null; + } + + /// + /// Collect all possible memory after Save/Load operation (improve fragmentation) + /// + private void CollectMemory() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); // wait until all collect operations are finished + } + + /// /// Delete all projectfiles: the projectfile and the dir and files of the data directory( for example if project is temp) /// /// @@ -263,24 +296,13 @@ } } - /// - /// Save a project with all its task's and call savestate on the models - /// - /// the path where the model is saved - /// the project to be saved - /// - public void SaveProjectAs(Project project, string path) - { - SaveProjectAs(project, path, false); - } - private void SaveProjectAs(Project project, string path, bool tempProject) { var oldProjectPath = ProjectRepository.Path; var oldProjectDataDirectory = ProjectDataDirectory; var oldProjectWasTemporary = project.IsTemporary; - if(!string.IsNullOrEmpty(oldProjectPath) && !string.IsNullOrEmpty(path) + if (!string.IsNullOrEmpty(oldProjectPath) && !string.IsNullOrEmpty(path) && Path.GetFullPath(oldProjectPath) == Path.GetFullPath(path)) { Save(project); // path did not change, just save @@ -317,7 +339,6 @@ } p.IsTemporary = false; - }); DoSaving(saveAction, project, path); @@ -329,7 +350,7 @@ { return; } - + try { saveAction(project); @@ -352,13 +373,13 @@ throw new InvalidDataException(Resources.ProjectService_CreateWorkingDirectories_Parameter_projectDataDirectory_should_be_absolute_path); } } - + #region Event firing - + private bool FireProjectSaving(Project project, string path) { - log.InfoFormat(Resources.ProjectService_FireProjectSaving_Saving_project__0__as__1_, project.Name, path); - + log.InfoFormat(Resources.ProjectService_FireProjectSaving_Saving_project__0__as__1_, project.Name, path); + if (ProjectSaving != null) { var cancelEventArgs = new CancelEventArgs(); @@ -391,21 +412,5 @@ } #endregion - - public void Dispose() - { - if (ProjectRepository != null) - { - if (ProjectRepository.IsOpen) - { - Close(ProjectRepository.GetProject()); - } - - ProjectRepository.Dispose(); - ProjectRepository = null; - } - - projectRepositoryFactory = null; - } } } \ No newline at end of file