Search Results for

    Show / Hide Table of Contents

    Project Creator

    This class transforms a list of ProjectRequests into the corresponding file based projects using a project template.

    This task is carried out by the Execute method. It calls the CreateProject method for each request and using the CreateProject method in the Project Automation API creates a new instance of FileBasedProject and adds files from the ProjectRequest object. It then uses FileBasedProjectReference to run a Scan task on the files followed by a DefaultTaskSequence after which it saves the new project. The sample also illustrates how the ProgressChanged and MessageReported events are handled.

    • C#
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Sdl.TranslationStudioAutomation.IntegrationApi;
    using Sdl.ProjectAutomation.FileBased;
    using System.ComponentModel;
    using Sdl.ProjectAutomation.Core;
    using System.IO;
    
    namespace StudioIntegrationApiSample
    {
        class ProjectCreator
        {
            public event ProgressChangedEventHandler ProgressChanged;
            public event EventHandler<ProjectMessageEventArgs> MessageReported;
            private double _currentProgress;
    
            public ProjectCreator(List<ProjectRequest> requests, ProjectTemplateInfo projectTemplate)
            {
                Requests = requests;
                ProjectTemplate = projectTemplate;
                SuccessfulRequests = new List<Tuple<ProjectRequest, FileBasedProject>>();
            }
    
            List<ProjectRequest> Requests
            {
                get; set;
            }
    
            public List<Tuple<ProjectRequest, FileBasedProject>> SuccessfulRequests
            {
                get;
                private set;
            }
    
            ProjectTemplateInfo ProjectTemplate
            {
                get;
                set;
            }
    
            public void Execute()
            {
                _currentProgress = 0;
                foreach (ProjectRequest request in Requests)
                {
                    CreateProject(request);
                    _currentProgress += 100.0 / Requests.Count;
                    OnProgressChanged(_currentProgress);
                }
    
                OnProgressChanged(100);
            }
    
            private FileBasedProject CreateProject(ProjectRequest request)
            {
                ProjectInfo projectInfo = new ProjectInfo
                {
                    Name = request.Name,
                    LocalProjectFolder = GetProjectFolderPath(request.Name)
                };
                FileBasedProject project = new FileBasedProject(projectInfo, new ProjectTemplateReference(ProjectTemplate.Uri));
    
                OnMessageReported(project, String.Format("Creating project {0}", request.Name));
    
                ProjectFile[] projectFiles = project.AddFiles(request.Files);
                project.RunAutomaticTask(projectFiles.GetIds(), AutomaticTaskTemplateIds.Scan); 
                TaskSequence taskSequence = project.RunDefaultTaskSequence(projectFiles.GetIds(),
                    (sender, e)
                        =>
                    {
                        OnProgressChanged(_currentProgress + (double)e.PercentComplete / Requests.Count);
                    }
                    , (sender, e)
                    =>
                    { 
                       OnMessageReported(project, e.Message);
                    });
    
                project.Save();
    
                if (taskSequence.Status == TaskStatus.Completed)
                {
                    SuccessfulRequests.Add(Tuple.Create(request, project));
                    OnMessageReported(project, String.Format("Project {0} created successfully.", request.Name));
                    return project;
                }
                else
                {
                    OnMessageReported(project, String.Format("Project {0} creation failed.", request.Name));
                    return null;
                }
            }
    
            private string GetProjectFolderPath(string name)
            {
                string rootFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $@"{Versioning.Versions.StudioDocumentsFolderName}\Projects");
                string folder;
                int num = 1;
                do 
                {
                    num++;
                }
                while (Directory.Exists(folder = Path.Combine(rootFolder, name + "-" + num)));
                return folder;
            }
    
    
    
            private void OnProgressChanged(double progress)
            {
                if (ProgressChanged != null)
                {
                    ProgressChanged(this, new ProgressChangedEventArgs((int)progress, null));
                }
            }
    
            private void OnMessageReported(FileBasedProject project, string message)
            {
                if (MessageReported != null)
                {
                    MessageReported(this, new ProjectMessageEventArgs { Project = project, Message = message });
                }
            }
    
            private void OnMessageReported(FileBasedProject project,ExecutionMessage executionMessage)
            {
                 if (MessageReported != null)
                {
                    MessageReported(this, new ProjectMessageEventArgs {Project = project, Message = executionMessage.Level + ": " + executionMessage.Message});
                }
            }
        }
    
        class ProjectMessageEventArgs : EventArgs
        {
            public FileBasedProject Project { get; set; }
    
            public string Message {get; set;}
        }
    
    }
    

    See Also

    Content Connector

    Reference Sample

    Wikipedia Search

    Integrating actions

    Integrating ribbon groups

    Integrating viewparts

    Integrating views

    • Improve this Doc
    In this article
    • See Also
    Back to top Generated by DocFX