/// <summary>
        /// Open project from archived project file
        /// </summary>
        /// <param name="projectFilePath">Archived project file path</param>
        /// <returns>Opened flat project</returns>
        public FlatProject OpenProject(string projectFilePath)
        {
            log.In(projectFilePath);

            string tempDirectory = CreateTempDirectory();

            Archiver.Decompress(projectFilePath, tempDirectory);

            currentProject = DeserializeProject(CreateProjectFilePath(tempDirectory));
            currentProject.WorkingDirectory = tempDirectory;

            string logFileName = CreateDatabaseFilePath(currentProject);

            reader = new IntermediateLogReader(logFileName, currentProject.PatternDefinition);

            log.Out(currentProject);
            return(currentProject);
        }
        /// <summary>
        /// Save project to archived project file
        /// </summary>
        /// <param name="projectFilePath">Project file path</param>
        public void SaveProject(string projectFilePath)
        {
            log.In(projectFilePath);

            if (File.Exists(projectFilePath))
            {
                File.Delete(projectFilePath);
            }

            reader.Close();

            SerializeProject(currentProject, CreateProjectFilePath(currentProject.WorkingDirectory));
            Archiver.CompressDirectory(currentProject.WorkingDirectory, projectFilePath);

            string logFileName = CreateDatabaseFilePath(currentProject);

            reader = new IntermediateLogReader(logFileName, currentProject.PatternDefinition);

            log.Out();
        }