private void WriteReportFile(XmlWriter writer, WizardContext wizardContext, ProjectFile projectFile)
        {
            writer.WriteStartElement("file");
            writer.WriteAttributeString("name", Path.Combine(projectFile.Path, projectFile.Name));
            writer.WriteAttributeString("guid", projectFile.FileId);

            WriteAnalysisXml(writer, projectFile.TranslationOriginStatistics?.WordCounts, wizardContext.AnalysisBands, wizardContext.Action);
            WriteConfirmationXml(writer, projectFile.ConfirmationStatistics?.WordCounts, wizardContext.Action);

            writer.WriteEndElement();             //file
        }
        private void ConvertToRelativePaths(Project project, ProjectFile wcProjectFile)
        {
            foreach (var fileActivity in wcProjectFile.ProjectFileActivities)
            {
                fileActivity.Path   = GetRelativePath(project.Path, fileActivity.Path);
                fileActivity.Report = GetRelativePath(project.Path, fileActivity.Report);
            }

            wcProjectFile.XliffFilePath = GetRelativePath(project.Path, wcProjectFile.XliffFilePath);
            wcProjectFile.Location      = GetRelativePath(project.Path, wcProjectFile.Location);
            wcProjectFile.Report        = GetRelativePath(project.Path, wcProjectFile.Report);
        }
        private bool AddNewProjectFiles(FileBasedProject project, Project xliffProject)
        {
            var addedNewFiles = false;
            var projectInfo   = project.GetProjectInfo();

            foreach (var targetLanguage in projectInfo.TargetLanguages)
            {
                var projectFiles = project.GetTargetLanguageFiles(targetLanguage);
                foreach (var projectFile in projectFiles)
                {
                    if (projectFile.Role != FileRole.Translatable)
                    {
                        continue;
                    }

                    var xliffFile = xliffProject.ProjectFiles.FirstOrDefault(a => a.FileId == projectFile.Id.ToString());
                    if (xliffFile == null)
                    {
                        addedNewFiles = true;
                        var file = new ProjectFile
                        {
                            ProjectId      = projectInfo.Id.ToString(),
                            FileId         = projectFile.Id.ToString(),
                            Name           = projectFile.Name,
                            Path           = GetRelativePath(projectInfo.LocalProjectFolder, projectFile.Folder),
                            Location       = GetRelativePath(projectInfo.LocalProjectFolder, projectFile.LocalFilePath),
                            Action         = Enumerators.Action.None,
                            Status         = Enumerators.Status.Ready,
                            Date           = DateTime.MinValue,
                            TargetLanguage = targetLanguage.CultureInfo.Name,
                            Selected       = false,
                            FileType       = projectFile.FileTypeId,
                            Project        = xliffProject
                        };

                        xliffProject.ProjectFiles.Add(file);
                    }
                }
            }

            return(addedNewFiles);
        }
        private ProjectFile GetProjectFile(Project project, ProjectAutomation.Core.ProjectFile projectFile,
                                           Language targetLanguage, IReadOnlyCollection <string> selectedFileIds)
        {
            var projectFileModel = new ProjectFile
            {
                ProjectId      = project.Id,
                FileId         = projectFile.Id.ToString(),
                Name           = projectFile.Name,
                Path           = projectFile.Folder,
                Location       = projectFile.LocalFilePath,
                Action         = Enumerators.Action.None,
                Status         = Enumerators.Status.Ready,
                Date           = DateTime.MinValue,
                TargetLanguage = targetLanguage.CultureInfo.Name,
                Selected       = selectedFileIds != null && selectedFileIds.Any(a => a == projectFile.Id.ToString()),
                FileType       = projectFile.FileTypeId,
                Project        = project
            };

            return(projectFileModel);
        }
        private bool AddNewProjectToContainer(FileBasedProject project)
        {
            if (project == null)
            {
                return(false);
            }

            var projectInfo = project.GetProjectInfo();

            try
            {
                if (_xliffProjects.FirstOrDefault(a => a.Id == projectInfo.Id.ToString()) != null)
                {
                    // allready present in the list
                    return(false);
                }

                var settingsBundle      = project.GetSettings();
                var xliffManagerProject = settingsBundle.GetSettingsGroup <XliffManagerProject>();

                var projectFiles = SerializeProjectFiles(xliffManagerProject.ProjectFilesJson.Value);
                if (projectFiles?.Count > 0)
                {
                    var xliffProjectFiles = new List <ProjectFile>();

                    var xliffProject = new Project
                    {
                        Id              = projectInfo.Id.ToString(),
                        Name            = projectInfo.Name,
                        AbsoluteUri     = projectInfo.Uri.AbsoluteUri,
                        Customer        = _customerProvider.GetProjectCustomer(project),
                        Created         = projectInfo.CreatedAt.ToUniversalTime(),
                        DueDate         = projectInfo.DueDate?.ToUniversalTime() ?? DateTime.MaxValue,
                        Path            = projectInfo.LocalProjectFolder,
                        SourceLanguage  = GetLanguageInfo(projectInfo.SourceLanguage.CultureInfo),
                        TargetLanguages = GetLanguageInfos(projectInfo.TargetLanguages),
                        ProjectType     = GetProjectType(project),
                        ProjectFiles    = xliffProjectFiles
                    };

                    foreach (var projectFile in projectFiles)
                    {
                        var xliffFileActivities = new List <ProjectFileActivity>();

                        var xliffProjectFile = new ProjectFile
                        {
                            Path                        = projectFile.Path,
                            Action                      = GetAction(projectFile.Action),
                            Status                      = GetStatus(projectFile.Status),
                            Date                        = GetDateTime(projectFile.Date),
                            Report                      = GetRelativePath(xliffProject.Path, projectFile.Report),
                            FileId                      = projectFile.FileId,
                            FileType                    = projectFile.FileType,
                            Location                    = GetRelativePath(xliffProject.Path, projectFile.Location),
                            Name                        = projectFile.Name,
                            ProjectId                   = projectInfo.Id.ToString(),
                            ProjectFileActivities       = xliffFileActivities,
                            XliffFilePath               = GetRelativePath(xliffProject.Path, projectFile.XliffFilePath),
                            Project                     = xliffProject,
                            TargetLanguage              = projectFile.TargetLanguage,
                            ConfirmationStatistics      = projectFile.ConfirmationStatistics,
                            TranslationOriginStatistics = projectFile.TranslationOriginStatistics
                        };

                        foreach (var fileActivity in projectFile.Activities)
                        {
                            var xliffFileActivity = new ProjectFileActivity
                            {
                                ProjectFile                 = xliffProjectFile,
                                Path                        = GetRelativePath(xliffProject.Path, fileActivity.Path),
                                Action                      = GetAction(fileActivity.Action),
                                Status                      = GetStatus(fileActivity.Status),
                                ActivityId                  = fileActivity.ActivityId,
                                Date                        = GetDateTime(fileActivity.Date),
                                Report                      = GetRelativePath(xliffProject.Path, fileActivity.Report),
                                Name                        = fileActivity.Name,
                                ProjectFileId               = fileActivity.ProjectFileId,
                                ConfirmationStatistics      = fileActivity.ConfirmationStatistics,
                                TranslationOriginStatistics = fileActivity.TranslationOriginStatistics
                            };

                            xliffFileActivities.Add(xliffFileActivity);
                        }

                        xliffProject.ProjectFiles.Add(xliffProjectFile);
                    }

                    var addedNewFiles = AddNewProjectFiles(project, xliffProject);
                    if (addedNewFiles)
                    {
                        UpdateProjectSettingsBundle(xliffProject);
                    }

                    _xliffProjects.Add(xliffProject);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Unable to load project: {0}", projectInfo.Name)
                                + Environment.NewLine + Environment.NewLine + ex.Message,
                                PluginResources.Plugin_Name, MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }

            return(false);
        }