public virtual IProject CreateNewProject(ProjectInfo projectInfo, ProjectTemplateReference projectTemplateReference) { if (projectInfo is null) { return(null); } var newProject = new FileBasedProject(projectInfo, projectTemplateReference); return(newProject); }
public void CreateBasedOnTemplate() { #region "GetTemplate" string templateFile = @"c:\temp\project_template.sdltpl"; ProjectTemplateReference template = new ProjectTemplateReference(templateFile); #endregion #region "TemplateBasedProject" FileBasedProject newProject = new FileBasedProject(GetInfoForTemplateProject(), template); newProject.Save(); #endregion }
protected override void Execute() { var template = new ProjectTemplateReference(@""); var projectInfo = new ProjectInfo { Name = "ProjectCreatedFromTemplateTest", SourceLanguage = new Language(CultureInfo.GetCultureInfo("en-US")), //import Sdl.core.globalization.dll TargetLanguages = new[] { new Language(CultureInfo.GetCultureInfo("de-DE")), new Language(CultureInfo.GetCultureInfo("fr-FR")) }, //file path where you want to save the project LocalProjectFolder = @"" }; //import Sdl.ProjectAutomation.FileBased var fileBasedProject = new FileBasedProject(projectInfo, template); //HERE YOU NEED TO ADD THE PATH FOR FILES YOU WANT TO INCLUDE IN YOUT PROJECT var filesPath = new[] { @"" }; //add files to project var projectFiles = fileBasedProject.AddFiles(filesPath); //we need to run automatic task to create the project in studio fileBasedProject.RunAutomaticTask(projectFiles.GetIds(), AutomaticTaskTemplateIds.Scan); var taskSequence = fileBasedProject.RunDefaultTaskSequence(projectFiles.GetIds()); if (taskSequence.Status == TaskStatus.Completed) { //project was created succesfully } else { //here we'll see the erors } fileBasedProject.Save(); }
/// <summary> /// Executes this instance. /// </summary> protected override void Execute() { string grammarCheckerSettingsId = "GrammarCheckerSettings"; string numberVerifierSettingsId = "NumberVerifierSettings"; IExtensionPoint globalVerifiersExtensionPoint = PluginManager.DefaultPluginRegistry.GetExtensionPoint <GlobalVerifierAttribute>(); foreach (IExtension extension in globalVerifiersExtensionPoint.Extensions) { IGlobalVerifier globalVerifier = (IGlobalVerifier)extension.CreateInstance(); string settingsGroupId = globalVerifier.SettingsId; if (settingsGroupId.Contains("Grammar")) { grammarCheckerSettingsId = settingsGroupId; } if (settingsGroupId.Contains("Number")) { numberVerifierSettingsId = settingsGroupId; } } // Show the dialog ApplyTemplateForm applyTemplateForm = new ApplyTemplateForm(Controller); if (applyTemplateForm.ShowDialog() == DialogResult.OK) { // This is the template that the user selected ApplyTemplate selectedTemplate = applyTemplateForm.ActiveTemplate; // Create list of projects List <FileBasedProject> selectedProjects = new List <FileBasedProject>(); if (applyTemplateForm.ApplyToSelected) { selectedProjects.AddRange(Controller.SelectedProjects); } else { if (Controller.CurrentProject != null) { selectedProjects.Add(Controller.CurrentProject); } } // Check if we have any projects if (selectedProjects.Count == 0) { MessageBox.Show(applyTemplateForm.ApplyToSelected ? PluginResources.No_Projects_Selected : PluginResources.No_Current_Project, PluginResources.Plugin_Name, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // Work through all projects StringBuilder projectsList = new StringBuilder(); projectsList.AppendLine(PluginResources.Settings_Applied); foreach (FileBasedProject targetProject in selectedProjects) { // Temporary folder path string tempFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N")); // This is the current project and it's related information ProjectInfo targetProjectInfo = targetProject.GetProjectInfo(); projectsList.AppendLine(targetProjectInfo.Name); ISettingsBundle targetSettingsBundle = targetProject.GetSettings(); // This is the source project - check if it's a loaded one FileBasedProject sourceProject = Controller.GetAllProjects().FirstOrDefault(loadedProject => String.Compare(loadedProject.FilePath, selectedTemplate.FileLocation, StringComparison.OrdinalIgnoreCase) == 0); // Not found so load it from the filing system if (sourceProject == null) { if (string.IsNullOrEmpty(selectedTemplate.FileLocation)) { if (selectedTemplate.Id != Guid.Empty) { // Create a new project based on a template configured in Studio ProjectTemplateReference projectTemplate = new ProjectTemplateReference(selectedTemplate.Uri); string savedFolder = targetProjectInfo.LocalProjectFolder; targetProjectInfo.LocalProjectFolder = tempFolder; sourceProject = new FileBasedProject(targetProjectInfo, projectTemplate); targetProjectInfo.LocalProjectFolder = savedFolder; } } else { if (Path.GetExtension(selectedTemplate.FileLocation).ToLowerInvariant() == ".sdltpl") { // Create a new project based on a file-based template ProjectTemplateReference projectTemplate = new ProjectTemplateReference(selectedTemplate.FileLocation); string savedFolder = targetProjectInfo.LocalProjectFolder; targetProjectInfo.LocalProjectFolder = tempFolder; sourceProject = new FileBasedProject(targetProjectInfo, projectTemplate); targetProjectInfo.LocalProjectFolder = savedFolder; } else { // Load a project from the filing system sourceProject = new FileBasedProject(selectedTemplate.FileLocation); } } } // Get the information from the source project ProjectInfo sourceProjectInfo = sourceProject.GetProjectInfo(); ISettingsBundle sourceSettingsBundle = sourceProject.GetSettings(); // Copy all languages translation providers if (selectedTemplate.TranslationProvidersAllLanguages != ApplyTemplateOptions.Keep) { try { // Update the "all languages" node TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration(); if (selectedTemplate.TranslationProvidersAllLanguages == ApplyTemplateOptions.Merge) { TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration(); MergeTranslationProviders(sourceProviderConfig, targetProviderConfig); ValidateTranslationProviderConfiguration(targetProviderConfig); targetProject.UpdateTranslationProviderConfiguration(targetProviderConfig); } else { ValidateTranslationProviderConfiguration(sourceProviderConfig); targetProject.UpdateTranslationProviderConfiguration(sourceProviderConfig); } } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.TPAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy language-specific translation providers if (selectedTemplate.TranslationProvidersSpecificLanguages != ApplyTemplateOptions.Keep) { if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage)) { foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages) { foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages) { if (sourceTargetLanguage.Equals(targetTargetLanguage)) { try { // Copy translation providers TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration(sourceTargetLanguage); if (selectedTemplate.TranslationProvidersSpecificLanguages == ApplyTemplateOptions.Merge) { TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration(targetTargetLanguage); MergeTranslationProviders(sourceProviderConfig, targetProviderConfig); ValidateTranslationProviderConfiguration(targetProviderConfig); targetProject.UpdateTranslationProviderConfiguration(targetTargetLanguage, targetProviderConfig); } else { ValidateTranslationProviderConfiguration(sourceProviderConfig); targetProject.UpdateTranslationProviderConfiguration(targetTargetLanguage, sourceProviderConfig); } } catch (Exception e) { MessageBox.Show(e.Message, string.Format(PluginResources.TPSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } } } } // Copy TM settings for all languages if (selectedTemplate.TranslationMemoriesAllLanguages == ApplyTemplateOptions.Overwrite) { try { // Update the translation memory filter settings CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslationMemorySettings", targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.TMAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy TM settings for specific languages if (selectedTemplate.TranslationMemoriesSpecificLanguages == ApplyTemplateOptions.Overwrite) { if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage)) { foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages) { foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages) { if (sourceTargetLanguage.Equals(targetTargetLanguage)) { try { // Now copy translation memory settings - different section ISettingsBundle sourceTmSettings = sourceProject.GetSettings(sourceTargetLanguage); ISettingsBundle targetTmSettings = targetProject.GetSettings(targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslationMemorySettings", targetProject, targetTargetLanguage); } catch (Exception e) { MessageBox.Show(e.Message, string.Format(PluginResources.TMSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } } } } // Copy terminology termbases if (selectedTemplate.TerminologyTermbases != ApplyTemplateOptions.Keep) { TermbaseConfiguration sourceTermbaseConfig = sourceProject.GetTermbaseConfiguration(); TermbaseConfiguration targetTermbaseConfig = targetProject.GetTermbaseConfiguration(); if (selectedTemplate.TerminologyTermbases == ApplyTemplateOptions.Merge) { MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig); } else { targetTermbaseConfig.TermbaseServerUri = sourceTermbaseConfig.TermbaseServerUri; targetTermbaseConfig.Termbases.Clear(); targetTermbaseConfig.LanguageIndexes.Clear(); MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig); } // Updating with zero termbases throws an exception if (targetTermbaseConfig.Termbases.Count > 0) { try { targetProject.UpdateTermbaseConfiguration(targetTermbaseConfig); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.TBTB_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } // Copy terminology settings if (selectedTemplate.TerminologySearchSettings == ApplyTemplateOptions.Overwrite) { TermbaseConfiguration sourceTermbaseConfig = sourceProject.GetTermbaseConfiguration(); TermbaseConfiguration targetTermbaseConfig = targetProject.GetTermbaseConfiguration(); targetTermbaseConfig.TermRecognitionOptions = sourceTermbaseConfig.TermRecognitionOptions; // Updating with zero termbases throws an exception if (targetTermbaseConfig.Termbases.Count > 0) { try { targetProject.UpdateTermbaseConfiguration(targetTermbaseConfig); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.TBSS_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } // Copy QA verification settings where applicable if (selectedTemplate.VerificationQaChecker30 == ApplyTemplateOptions.Overwrite) { try { CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "QAVerificationSettings", targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.QAQA_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy tag verification settings where applicable if (selectedTemplate.VerificationTagVerifier == ApplyTemplateOptions.Overwrite) { try { CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "SettingsTagVerifier", targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.QATG_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy term verification settings where applicable if (selectedTemplate.VerificationTerminologyVerifier == ApplyTemplateOptions.Overwrite) { try { CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "SettingsTermVerifier", targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.QATV_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy number verification settings where applicable if (selectedTemplate.VerificationNumberVerifier == ApplyTemplateOptions.Overwrite) { try { CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, numberVerifierSettingsId, targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.QANV_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy grammar checking settings where applicable if (selectedTemplate.VerificationGrammarChecker == ApplyTemplateOptions.Overwrite) { try { CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, grammarCheckerSettingsId, targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.QAGC_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy file type settings where applicable if (selectedTemplate.FileTypes == ApplyTemplateOptions.Overwrite) { try { var copiedTypes = new List <string>(); foreach (ProjectFile projectFile in targetProject.GetTargetLanguageFiles()) { if (!copiedTypes.Contains(projectFile.FileTypeId)) { copiedTypes.Add(projectFile.FileTypeId); CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, projectFile.FileTypeId, targetProject, null); } } } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.FTTS_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Copy batch tasks settings where applicable if (selectedTemplate.BatchTasksAllLanguages == ApplyTemplateOptions.Overwrite) { try { // Update the translation memory filter settings CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "PseudoTranslateSettings", targetProject, null); CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "AnalysisTaskSettings", targetProject, null); CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "VerificationSettings", targetProject, null); CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslateTaskSettings", targetProject, null); CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslationMemoryUpdateTaskSettings", targetProject, null); } catch (Exception e) { MessageBox.Show(e.Message, PluginResources.BTAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } if (selectedTemplate.BatchTasksSpecificLanguages == ApplyTemplateOptions.Overwrite) { // Update specific language pairs where possible if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage)) { foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages) { foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages) { if (sourceTargetLanguage.Equals(targetTargetLanguage)) { try { // Now copy translation memory settings - different section ISettingsBundle sourceTmSettings = sourceProject.GetSettings(sourceTargetLanguage); ISettingsBundle targetTmSettings = targetProject.GetSettings(targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "PseudoTranslateSettings", targetProject, targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "AnalysisTaskSettings", targetProject, targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "VerificationSettings", targetProject, targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslateTaskSettings", targetProject, targetTargetLanguage); CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslationMemoryUpdateTaskSettings", targetProject, targetTargetLanguage); } catch (Exception e) { MessageBox.Show(e.Message, string.Format(PluginResources.BTSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } } } } // Remove the temporary folder if it exists if (Directory.Exists(tempFolder)) { Directory.Delete(tempFolder, true); } // Use reflection to synch the project to the server try { var project = typeof(FileBasedProject).GetField("_project", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(targetProject); project.GetType().GetMethod("UpdateServerProjectSettings").Invoke(project, null); } catch { } } // Tell the user we're done MessageBox.Show(projectsList.ToString(), PluginResources.Plugin_Name, MessageBoxButtons.OK, MessageBoxIcon.Information); } // Save the project templates anyway applyTemplateForm.SaveProjectTemplates(); }