コード例 #1
0
		public bool MoveToFirstPage (SolutionTemplate template, ProjectCreateParameters parameters)
		{
			Reset ();

			if (!template.HasWizard) {
				return false;
			}

			CurrentWizard = GetWizard (template.Wizard);
			if (CurrentWizard == null) {
				LoggingService.LogError ("Unable to find project template wizard '{0}'.", template.Wizard);
				return false;
			}

			CurrentWizard.Parameters = parameters;
			CurrentWizard.UpdateParameters (template);
			IsFirstPage = true;
			CurrentPageNumber = 1;

			if (CurrentWizard.TotalPages == 0) {
				IsLastPage = true;
				return false;
			}

			CurrentWizardPage = GetCurrentWizardPage ();

			IsLastPage = CurrentWizard.TotalPages == 1;

			return true;
		}
		SolutionTemplate AddTemplate (string id, string category)
		{
			var template = new SolutionTemplate (id, id, "icon-id") {
				Category = category
			};
			templates.Add (template);
			return template;
		}
コード例 #3
0
		void CreateProvider ()
		{
			template = new SolutionTemplate ("id", "name", "icon");
			template.Wizard = "wizard-id";
			parameters = new ProjectCreateParameters ();
			wizard = new TestableTemplateWizard ();
			provider = new TestableTemplateWizardProvider ();
			wizard = provider.Wizard;
		}
コード例 #4
0
		public void AddTemplate (SolutionTemplate template)
		{
			SolutionTemplate groupTemplate = templates.Find (t => t.IsGroupMatch (template));
			if (groupTemplate != null) {
				groupTemplate.AddGroupTemplate (template);
			} else {
				templates.Add (template);
			}
		}
コード例 #5
0
        Image GetImageFile(SolutionTemplate template)
        {
            if (template.HasImageFile)
            {
                Image image = Image.FromFile(template.ImageFile);

                if (image != null)
                {
                    fileImages [template.Id] = image;
                    return(image);
                }
            }
            return(null);
        }
コード例 #6
0
        public ProcessedTemplateResult ProcessTemplate(SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
        {
            IProjectTemplatingProvider provider = GetTemplatingProviderForTemplate(template);

            if (provider != null)
            {
                var result = provider.ProcessTemplate(template, config, parentFolder);
                if (result.WorkspaceItems.Any())
                {
                    RecentTemplates.AddTemplate(template);
                }
                return(result);
            }
            return(null);
        }
コード例 #7
0
        public void GetCategorizedTemplates_OneTemplateTwoTopLevelCategories_EmptyTopLevelCategoryIsRemoved()
        {
            CreateCategories("android", "app", "general");
            CreateCategories("ios", "app", "general");
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "android/app/general");

            CategorizeTemplates();

            TemplateCategory appCategory     = categorizedTemplates.First().Categories.First();
            TemplateCategory generalCategory = appCategory.Categories.First();

            Assert.That(generalCategory.Templates.ToList(), Contains.Item(template));
            Assert.AreEqual(1, categorizedTemplates.Count);
            Assert.AreEqual(1, appCategory.Categories.Count());
        }
コード例 #8
0
        RecentItem CreateRecentItem(SolutionTemplate template)
        {
            var mime         = "application/vnd.monodevelop.template";
            var uri          = templateUriScheme;
            var categoryPath = template.Category;

            if (!string.IsNullOrEmpty(categoryPath))
            {
                uri += categoryPath + "/";
            }
            uri += template.Id;
            return(new RecentItem(uri, mime, templateGroup)
            {
                Private = template.Name
            });
        }
コード例 #9
0
        TemplateCategory GetCategory(SolutionTemplate template)
        {
            TemplateCategory match = GetCategory(template, categories);

            if (match != null)
            {
                return(match);
            }
            else if (defaultCategory != null)
            {
                LogUsingDefaultCategory(template);

                return(defaultCategory);
            }
            return(null);
        }
コード例 #10
0
        public void GetCategorizedTemplates_TemplateUsesGoogleGlassLegacyCategory_TemplateIsMappedToNewCategories()
        {
            TemplateCategory topLevelCategory    = AddTemplateCategory("android");
            TemplateCategory secondLevelCategory = AddTemplateCategory("app", topLevelCategory);
            TemplateCategory category            = AddTemplateCategory("general", secondLevelCategory);

            category.MappedCategories = "C#/Glass";
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "C#/Glass");

            CategorizeTemplates();

            TemplateCategory appCategory     = categorizedTemplates.First().Categories.First();
            TemplateCategory generalCategory = appCategory.Categories.First();

            Assert.That(generalCategory.Templates.ToList(), Contains.Item(template));
        }
コード例 #11
0
        public void GetCategorizedTemplates_OneTemplateOneCategoryWithGroupConditionContainingExtraWhitespace_TemplateFilteredUsingTemplateParameters()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "android/app/general");

            template.GroupId   = "console";
            template.Language  = "C#";
            template.Condition = " Device = MyDevice ";
            ProjectCreateParameters parameters = CreateParameters("Device", "MyDevice");

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate firstTemplate   = generalCategory.Templates.FirstOrDefault();
            SolutionTemplate matchedTemplate = firstTemplate.GetTemplate("C#", parameters);

            Assert.AreEqual(template, matchedTemplate);
        }
コード例 #12
0
        public void GetCategorizedTemplates_TwoLegacyCategoriesMappedToNewCategory_TemplatesAreMappedToNewCategories()
        {
            TemplateCategory topLevelCategory    = AddTemplateCategory("android");
            TemplateCategory secondLevelCategory = AddTemplateCategory("app", topLevelCategory);
            TemplateCategory category            = AddTemplateCategory("general", secondLevelCategory);

            category.MappedCategories = "C#/Android;VBNet/Android";
            CreateCategorizer();
            SolutionTemplate csharpTemplate = AddTemplate("template-id", "C#/Android");
            SolutionTemplate vbnetTemplate  = AddTemplate("template-id2", "VBNet/Android");

            CategorizeTemplates();

            TemplateCategory appCategory     = categorizedTemplates.First().Categories.First();
            TemplateCategory generalCategory = appCategory.Categories.First();

            Assert.That(generalCategory.Templates.ToList(), Contains.Item(csharpTemplate));
            Assert.That(generalCategory.Templates.ToList(), Contains.Item(vbnetTemplate));
        }
コード例 #13
0
        Image GetCachedImage(SolutionTemplate template)
        {
            Image image = null;

            if (template.HasImageFile)
            {
                if (fileImages.TryGetValue(template.Id, out image))
                {
                    return(image);
                }
            }
            else
            {
                if (images.TryGetValue(template.ImageId, out image))
                {
                    return(image);
                }
            }
            return(null);
        }
コード例 #14
0
        public void GetGroupedTemplates_TwoGroupedConsoleProjectTemplates_CanGetOtherTemplatesInGroupFromEitherTemplate()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer();
            SolutionTemplate template1 = AddTemplate("template-id1", "android/app/general");

            template1.GroupId  = "console";
            template1.Language = "C#";
            SolutionTemplate template2 = AddTemplate("template-id2", "android/app/general");

            template2.GroupId  = "console";
            template2.Language = "F#";
            CategorizeTemplates();

            var templatesInGroupForTemplate1 = template1.GetGroupedTemplates().Single();
            var templatesInGroupForTemplate2 = template2.GetGroupedTemplates().Single();

            Assert.AreEqual(template2, templatesInGroupForTemplate1);
            Assert.AreEqual(template1, templatesInGroupForTemplate2);
        }
コード例 #15
0
        public void GetCategorizedTemplates_OneTemplateTwoDifferentSecondLevelCategories_EmptySecondLevelCategoryIsRemoved()
        {
            TemplateCategory topLevelCategory    = AddTemplateCategory("android");
            TemplateCategory secondLevelCategory = AddTemplateCategory("app", topLevelCategory);

            AddTemplateCategory("general", secondLevelCategory);
            secondLevelCategory = AddTemplateCategory("tests", topLevelCategory);
            AddTemplateCategory("general", secondLevelCategory);
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "android/app/general");

            CategorizeTemplates();

            TemplateCategory androidCategory = categorizedTemplates.First();
            TemplateCategory appCategory     = androidCategory.Categories.First();
            TemplateCategory generalCategory = appCategory.Categories.First();

            Assert.That(generalCategory.Templates.ToList(), Contains.Item(template));
            Assert.AreEqual(1, categorizedTemplates.Count);
            Assert.AreEqual(1, androidCategory.Categories.Count());
        }
コード例 #16
0
        public void GetCategorizedTemplates_TwoTemplatesAndFilterShouldRemoveOneTemplate_TemplatesFiltered()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer(solutionTemplate => {
                return(solutionTemplate.Id == "template-id2");
            });
            SolutionTemplate template1 = AddTemplate("template-id1", "android/app/general");

            template1.Language = "C#";
            SolutionTemplate template2 = AddTemplate("template-id2", "android/app/general");

            template2.Language = "C#";

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate firstTemplate   = generalCategory.Templates.FirstOrDefault();

            Assert.AreEqual(1, generalCategory.Templates.Count());
            Assert.AreEqual("template-id2", firstTemplate.Id);
        }
コード例 #17
0
        public void GetCategorizedTemplates_TwoTemplatesAndFilterByNewSolution_TemplatesFiltered()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer(ProjectTemplateCategorizer.MatchNewSolutionTemplates);
            SolutionTemplate template1 = AddTemplate("template-id1", "android/app/general");

            template1.Language   = "C#";
            template1.Visibility = SolutionTemplateVisibility.NewProject;
            SolutionTemplate template2 = AddTemplate("template-id2", "android/app/general");

            template2.Language   = "C#";
            template2.Visibility = SolutionTemplateVisibility.All;

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate firstTemplate   = generalCategory.Templates.FirstOrDefault();

            Assert.AreEqual(1, generalCategory.Templates.Count());
            Assert.AreEqual("template-id2", firstTemplate.Id);
        }
コード例 #18
0
        public void GetCategorizedTemplates_TwoConsoleProjectTemplatesWithSameLanguageInSameGroup_TemplatesCombinedIntoOneGroupWarningLoggedAboutDuplicateLanguageOneLanguageShown()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer();
            SolutionTemplate template1 = AddTemplate("template-id1", "android/app/general");

            template1.GroupId  = "console";
            template1.Language = "C#";
            SolutionTemplate template2 = AddTemplate("template-id2", "android/app/general");

            template2.GroupId  = "console";
            template2.Language = "C#";

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate template        = generalCategory.Templates.FirstOrDefault();

            Assert.That(template.AvailableLanguages, Contains.Item("C#"));
            Assert.AreEqual(1, template.AvailableLanguages.Count);
            Assert.AreEqual(1, generalCategory.Templates.Count());
        }
コード例 #19
0
		public Image GetImage (SolutionTemplate template)
		{
			try {
				Image image = GetCachedImage (template);
				if (image != null) {
					return image;
				}

				image = GetImageFile (template);
				if (image == null) {
					image = GetImageFromId (template.ImageId);
				}

				if (image == null) {
					image = defaultImage;
				}

				return image;
			} catch (Exception ex) {
				LoggingService.LogError (String.Format ("Unable to load image for project template '{0}'.", template.Id), ex);
				return defaultImage;
			}
		}
コード例 #20
0
        public void GetCategorizedTemplates_OneTemplateOneCategoryWithGroupConditionAndParameterIsBoolean_TemplateFilteredUsingTemplateParameters()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "android/app/general");

            template.GroupId   = "console";
            template.Language  = "C#";
            template.Condition = "SupportsSizeClasses=True";
            ProjectCreateParameters parameters = CreateParameters("SupportsSizeClasses", true.ToString());

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate firstTemplate   = generalCategory.Templates.FirstOrDefault();
            SolutionTemplate matchedTemplate = firstTemplate.GetTemplate("C#", parameters);

            Assert.AreEqual(template, matchedTemplate);
            parameters.Clear();
            SolutionTemplate noMatchedTemplate = firstTemplate.GetTemplate("C#", parameters);

            Assert.IsNull(noMatchedTemplate);
        }
コード例 #21
0
        public void GetCategorizedTemplates_OneTemplateOneCategoryWithGroupConditionAndParameterNameAndValueHaveDifferentCase_TemplateFilteredUsingTemplateParametersIgnoringCase()
        {
            CreateCategories("android", "app", "general");
            CreateCategorizer();
            SolutionTemplate template = AddTemplate("template-id", "android/app/general");

            template.GroupId   = "console";
            template.Language  = "C#";
            template.Condition = "Device=MyDevice";
            ProjectCreateParameters parameters = CreateParameters("device", "mydevice");

            CategorizeTemplates();

            TemplateCategory generalCategory = categorizedTemplates.First().Categories.First().Categories.First();
            SolutionTemplate firstTemplate   = generalCategory.Templates.FirstOrDefault();
            SolutionTemplate matchedTemplate = firstTemplate.GetTemplate("C#", parameters);

            Assert.AreEqual(template, matchedTemplate);
            parameters = CreateParameters("device", "no-match");
            SolutionTemplate noMatchedTemplate = firstTemplate.GetTemplate("C#", parameters);

            Assert.IsNull(noMatchedTemplate);
        }
コード例 #22
0
        SolutionTemplate FromRecentItem(RecentItem item)
        {
            var templatePath = item.Uri.StartsWith(templateUriScheme, StringComparison.Ordinal) ? item.Uri.Substring(templateUriScheme.Length) : item.Uri;
            var parts        = templatePath.Split('/');
            var templateId   = parts [parts.Length - 1];
            SolutionTemplate recentTemplate = null;

            if (parts.Length > 1)
            {
                recentTemplate = IdeApp.Services.TemplatingService.GetTemplate(
                    (template) => template.Id == templateId,
                    (category) => parts.Length > 1 ? category.Id == parts[0] : true,
                    (category) => parts.Length > 2 ? category.Id == parts[1] : true
                    );
            }

            // fallback to global template lookup if no category matched
            // in this case the category is not guaranteed if a template is listed in more than one category
            if (recentTemplate == null)
            {
                recentTemplate = IdeApp.Services.TemplatingService.GetTemplate(templateId);
            }
            return(recentTemplate);
        }
コード例 #23
0
        public void GetCategorizedTemplates_TwoTemplateProvidersEachWithOneTemplateForTwoDifferentThirdLevelCategories_ThirdLevelCategoriresAreNotRemoved()
        {
            TemplateCategory topLevelCategory    = AddTemplateCategory("android");
            TemplateCategory secondLevelCategory = AddTemplateCategory("app", topLevelCategory);

            AddTemplateCategory("general", secondLevelCategory);
            AddTemplateCategory("tests", secondLevelCategory);
            CreateCategorizer();
            SolutionTemplate firstTemplateProviderTemplate = AddTemplate("first-provider-template-id", "android/app/general");

            categorizer.CategorizeTemplates(templates);
            templates.Clear();
            SolutionTemplate secondTemplateProviderTemplate = AddTemplate("second-provider-template-id", "android/app/tests");

            CategorizeTemplates();

            TemplateCategory appCategory     = categorizedTemplates.First().Categories.First();
            TemplateCategory generalCategory = appCategory.Categories.First(category => category.Id == "general");
            TemplateCategory testsCategory   = appCategory.Categories.First(category => category.Id == "tests");

            Assert.That(generalCategory.Templates.ToList(), Contains.Item(firstTemplateProviderTemplate));
            Assert.That(testsCategory.Templates.ToList(), Contains.Item(secondTemplateProviderTemplate));
            Assert.AreEqual(2, appCategory.Categories.Count());
        }
コード例 #24
0
		IProjectTemplatingProvider GetTemplatingProviderForTemplate (SolutionTemplate template)
		{
			return templateProviders.FirstOrDefault (provider => provider.CanProcessTemplate (template));
		}
コード例 #25
0
        public async Task <ProcessedTemplateResult> ProcessTemplate(SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
        {
            var solutionTemplate = (MicrosoftTemplateEngineSolutionTemplate)template;
            var parameters       = GetParameters(solutionTemplate, config);
            var templateInfo     = solutionTemplate.templateInfo;
            var workspaceItems   = new List <IWorkspaceFileObject> ();
            var result           = await templateCreator.InstantiateAsync(
                templateInfo,
                config.ProjectName,
                config.GetValidProjectName(),
                config.ProjectLocation,
                parameters,
                true,
                false,
                null
                );

            var filesToOpen = new List <string> ();

            foreach (var postAction in result.ResultInfo.PostActions)
            {
                switch (postAction.ActionId.ToString().ToUpper())
                {
                case "84C0DA21-51C8-4541-9940-6CA19AF04EE6":
                    if (postAction.Args.TryGetValue("files", out var files))
                    {
                        foreach (var fi in files.Split(';'))
                        {
                            if (int.TryParse(fi.Trim(), out var i))
                            {
                                filesToOpen.Add(Path.Combine(config.ProjectLocation, result.ResultInfo.PrimaryOutputs [i].Path));
                            }
                        }
                    }
                    break;

                case "D396686C-DE0E-4DE6-906D-291CD29FC5DE":
                    //TODO: Load project files
                    break;
                }
            }

            //TODO: Once templates support "D396686C-DE0E-4DE6-906D-291CD29FC5DE" use that to load projects
            foreach (var path in Directory.GetFiles(config.ProjectLocation, "*.*proj", SearchOption.AllDirectories))
            {
                if (path.EndsWith(".csproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".fsproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".vbproj", StringComparison.OrdinalIgnoreCase))
                {
                    workspaceItems.Add(await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem(new Core.ProgressMonitor(), path));
                }
            }

            var metadata = new Dictionary <string, string> ();

            metadata ["Id"]       = templateInfo.Identity;
            metadata ["Name"]     = templateInfo.Name;
            metadata ["Language"] = template.Language;
            metadata ["Platform"] = string.Join(";", templateInfo.Classifications);
            TemplateCounter.Inc(1, null, metadata);

            MicrosoftTemplateEngineProcessedTemplateResult processResult;

            if (parentFolder == null)
            {
                var solution = new Solution();
                solution.SetLocation(config.SolutionLocation, config.SolutionName);
                foreach (var item in workspaceItems.Cast <SolutionFolderItem> ())
                {
                    IConfigurationTarget configurationTarget = item as IConfigurationTarget;
                    if (configurationTarget != null)
                    {
                        foreach (ItemConfiguration configuration in configurationTarget.Configurations)
                        {
                            bool flag = false;
                            foreach (SolutionConfiguration solutionCollection in solution.Configurations)
                            {
                                if (solutionCollection.Id == configuration.Id)
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                solution.AddConfiguration(configuration.Id, true);
                            }
                        }
                    }
                    solution.RootFolder.AddItem(item);
                }
                processResult = new MicrosoftTemplateEngineProcessedTemplateResult(new [] { solution }, solution.FileName, config.ProjectLocation);
            }
            else
            {
                processResult = new MicrosoftTemplateEngineProcessedTemplateResult(workspaceItems.ToArray(), parentFolder.ParentSolution.FileName, config.ProjectLocation);
            }

            // Format all source files generated during the project creation
            foreach (var p in workspaceItems.OfType <Project> ())
            {
                foreach (var file in p.Files)
                {
                    await FormatFile(p, file.FilePath);
                }
            }
            processResult.SetFilesToOpen(filesToOpen);
            return(processResult);
        }
コード例 #26
0
 public bool CanProcessTemplate(SolutionTemplate template)
 {
     return(template is MicrosoftTemplateEngineSolutionTemplate);
 }
コード例 #27
0
		TemplateCategory GetCategory (SolutionTemplate template, IEnumerable<TemplateCategory> currentCategories)
		{
			TemplateCategory match = null;

			match = GetMappedCategory (template);
			if (match != null) {
				return match;
			}

			var path = new TemplateCategoryPath (template.Category);
			foreach (string part in path.GetParts ()) {
				match = currentCategories.FirstOrDefault (category => category.IsMatch (part));

				if (match != null) {
					currentCategories = match.Categories;
				} else {
					return null;
				}
			}

			return match;
		}
コード例 #28
0
 IProjectTemplatingProvider GetTemplatingProviderForTemplate(SolutionTemplate template)
 {
     return(templateProviders.FirstOrDefault(provider => provider.CanProcessTemplate(template)));
 }
コード例 #29
0
		public bool IsGroupMatch (SolutionTemplate template)
		{
			if (template.HasGroupId && HasGroupId) {
				return String.Equals (GroupId, template.GroupId, StringComparison.OrdinalIgnoreCase);
			}
			return false;
		}
コード例 #30
0
		void SelectTemplate (SolutionTemplate template)
		{
			TreeIter iter = TreeIter.Zero;
			if (!templatesListStore.GetIterFirst (out iter)) {
				return;
			}

			while (templatesListStore.IterNext (ref iter)) {
				var currentTemplate = templatesListStore.GetValue (iter, TemplateColumn) as SolutionTemplate;
				if (currentTemplate == template) {
					templatesTreeView.Selection.SelectIter (iter);
					TreePath path = templatesListStore.GetPath (iter);
					templatesTreeView.ScrollToCell (path, null, true, 1, 0);
					break;
				}
			}
		}
コード例 #31
0
		Image GetCachedImage (SolutionTemplate template)
		{
			Image image = null;
			if (template.HasImageFile) {
				if (fileImages.TryGetValue (template.Id, out image)) {
					return image;
				}
			} else {
				if (images.TryGetValue (template.ImageId, out image)) {
					return image;
				}
			}
			return null;
		}
コード例 #32
0
		void AddLanguageMenuItems (Menu menu, SolutionTemplate template)
		{
			foreach (string language in template.AvailableLanguages.OrderBy (item => item)) {
				var menuItem = new MenuItem (language);
				menuItem.Activated += (o, e) => {
					templateTextRenderer.SelectedLanguage = language;
					controller.SelectedLanguage = language;
					templatesTreeView.QueueDraw ();
					ShowSelectedTemplate ();
				};
				menu.Append (menuItem);
			}
		}
コード例 #33
0
		public Image GetImage (SolutionTemplate template)
		{
			return imageProvider.GetImage (template);
		}
コード例 #34
0
		TemplateCategory GetMappedCategory (SolutionTemplate template)
		{
			TemplateCategory category = null;
			if (mappedCategories.TryGetValue (template.Category, out category)) {
				return category;
			}
			return null;
		}
コード例 #35
0
		Image GetImageFile (SolutionTemplate template)
		{
			if (template.HasImageFile) {
				Image image = Image.FromFile (template.ImageFile);

				if (image != null) {
					fileImages [template.Id] = image;
					return image;
				}
			}
			return null;
		}
コード例 #36
0
		public void AddGroupTemplate (SolutionTemplate template)
		{
			groupedTemplates.Add (template);

			if (!availableLanguages.Contains (template.Language)) {
				availableLanguages.Add (template.Language);
			}
		}
コード例 #37
0
        public async Task <ProcessedTemplateResult> ProcessTemplate(SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
        {
            var solutionTemplate = (MicrosoftTemplateEngineSolutionTemplate)template;
            var parameters       = GetParameters(solutionTemplate, config);
            var templateInfo     = solutionTemplate.templateInfo;
            var workspaceItems   = new List <IWorkspaceFileObject> ();

            var filesBeforeCreation = Directory.GetFiles(config.ProjectLocation, "*", SearchOption.AllDirectories);

            var result = await MicrosoftTemplateEngine.InstantiateAsync(templateInfo, config, parameters);

            if (result.Status != CreationResultStatus.Success)
            {
                string message = string.Format("Could not create template. Id='{0}' {1} {2}", template.Id, result.Status, result.Message);
                throw new InvalidOperationException(message);
            }

            var filesToOpen = new List <string> ();

            foreach (var postAction in result.ResultInfo.PostActions)
            {
                switch (postAction.ActionId.ToString().ToUpper())
                {
                case "84C0DA21-51C8-4541-9940-6CA19AF04EE6":
                    if (postAction.Args.TryGetValue("files", out var files))
                    {
                        foreach (var fi in files.Split(';'))
                        {
                            if (int.TryParse(fi.Trim(), out var i))
                            {
                                filesToOpen.Add(Path.Combine(config.ProjectLocation, GetPath(result.ResultInfo.PrimaryOutputs [i])));
                            }
                        }
                    }
                    break;

                case "D396686C-DE0E-4DE6-906D-291CD29FC5DE":
                    //TODO: Load project files
                    break;
                }
            }

            //TODO: Once templates support "D396686C-DE0E-4DE6-906D-291CD29FC5DE" use that to load projects
            foreach (var path in result.ResultInfo.PrimaryOutputs)
            {
                var fullPath = Path.Combine(config.ProjectLocation, GetPath(path));
                if (Services.ProjectService.IsSolutionItemFile(fullPath))
                {
                    workspaceItems.Add(await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem(new Core.ProgressMonitor(), fullPath));
                }
            }

            var metadata = new TemplateMetadata {
                Id       = templateInfo.Identity,
                Name     = templateInfo.Name,
                Language = template.Language,
                Platform = string.Join(";", templateInfo.Classifications)
            };

            TemplateCounter.Inc(1, null, metadata);

            MicrosoftTemplateEngineProcessedTemplateResult processResult;

            if (parentFolder == null)
            {
                var solution = new Solution();
                solution.SetLocation(config.SolutionLocation, config.SolutionName);
                foreach (var item in workspaceItems.Cast <SolutionFolderItem> ())
                {
                    IConfigurationTarget configurationTarget = item as IConfigurationTarget;
                    if (configurationTarget != null)
                    {
                        foreach (ItemConfiguration configuration in configurationTarget.Configurations)
                        {
                            bool flag = false;
                            foreach (SolutionConfiguration solutionCollection in solution.Configurations)
                            {
                                if (solutionCollection.Id == configuration.Id)
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                solution.AddConfiguration(configuration.Id, true);
                            }
                        }
                    }
                    solution.RootFolder.AddItem(item);
                }
                processResult = new MicrosoftTemplateEngineProcessedTemplateResult(new [] { solution }, solution.FileName, config.ProjectLocation);
            }
            else
            {
                processResult = new MicrosoftTemplateEngineProcessedTemplateResult(workspaceItems.ToArray(), parentFolder.ParentSolution.FileName, config.ProjectLocation);
            }

            // Format all source files generated during the project creation
            foreach (var p in workspaceItems.OfType <Project> ())
            {
                foreach (var file in p.Files)
                {
                    if (!filesBeforeCreation.Contains((string)file.FilePath, FilePath.PathComparer))                        //Format only newly created files
                    {
                        if (solutionTemplate.ShouldFormatFile(file.FilePath))
                        {
                            await MicrosoftTemplateEngine.FormatFile(parentFolder?.Policies ?? p.Policies, file.FilePath);
                        }
                    }
                }
            }
            processResult.SetFilesToOpen(filesToOpen);
            return(processResult);
        }
コード例 #38
0
ファイル: TemplateWizard.cs プロジェクト: anfroloff/mymonodev
 internal void UpdateParameters(SolutionTemplate template)
 {
     Parameters ["TemplateName"] = template.Name;
     UpdateSupportedParameters(template.SupportedParameters);
     UpdateDefaultParameters(template.DefaultParameters);
 }
コード例 #39
0
		internal void UpdateParameters (SolutionTemplate template)
		{
			Parameters ["TemplateName"] = template.Name;
			UpdateSupportedParameters (template.SupportedParameters);
			UpdateDefaultParameters (template.DefaultParameters);
		}
コード例 #40
0
 public Task <ProcessedTemplateResult> ProcessTemplate(SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
 {
     return(ProcessTemplate((DefaultSolutionTemplate)template, config, parentFolder));
 }
        public async Task <ProcessedTemplateResult> ProcessTemplate(SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
        {
            var templateInfo   = ((MicrosoftTemplateEngineSolutionTemplate)template).templateInfo;
            var workspaceItems = new List <IWorkspaceFileObject> ();
            var result         = await templateCreator.InstantiateAsync(
                templateInfo,
                config.ProjectName,
                config.GetValidProjectName(),
                config.ProjectLocation,
                new Dictionary <string, string> (),
                true,
                false);

            if (result.ResultInfo.PrimaryOutputs.Any())
            {
                foreach (var res in result.ResultInfo.PrimaryOutputs)
                {
                    var fullPath = Path.Combine(config.ProjectLocation, res.Path);
                    //This happens if some project is excluded by modifiers, e.g. Test project disabled in wizard settings by user
                    if (!File.Exists(fullPath))
                    {
                        continue;
                    }
                    workspaceItems.Add(await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem(new Core.ProgressMonitor(), fullPath));
                }
            }
            else
            {
                //TODO: Remove this code once https://github.com/dotnet/templating/pull/342 is released in NuGet feed and we bump NuGet version of templating engine
                foreach (var path in Directory.GetFiles(config.ProjectLocation, "*.*proj", SearchOption.AllDirectories))
                {
                    if (path.EndsWith(".csproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".fsproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".vbproj", StringComparison.OrdinalIgnoreCase))
                    {
                        workspaceItems.Add(await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem(new Core.ProgressMonitor(), path));
                    }
                }
            }

            var metadata = new Dictionary <string, string> ();

            metadata ["Id"]       = templateInfo.Identity;
            metadata ["Name"]     = templateInfo.Name;
            metadata ["Language"] = template.Language;
            metadata ["Platform"] = string.Join(";", templateInfo.Classifications);
            TemplateCounter.Inc(1, null, metadata);

            if (parentFolder == null)
            {
                var solution = new Solution();
                solution.SetLocation(config.SolutionLocation, config.SolutionName);
                foreach (var item in workspaceItems.Cast <SolutionFolderItem> ())
                {
                    IConfigurationTarget configurationTarget = item as IConfigurationTarget;
                    if (configurationTarget != null)
                    {
                        foreach (ItemConfiguration configuration in configurationTarget.Configurations)
                        {
                            bool flag = false;
                            foreach (SolutionConfiguration solutionCollection in solution.Configurations)
                            {
                                if (solutionCollection.Id == configuration.Id)
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                solution.AddConfiguration(configuration.Id, true);
                            }
                        }
                    }
                    solution.RootFolder.AddItem(item);
                }
                return(new MicrosoftTemplateEngineProcessedTemplateResult(new [] { solution }, solution.FileName, config.ProjectLocation));
            }
            else
            {
                return(new MicrosoftTemplateEngineProcessedTemplateResult(workspaceItems.ToArray(), parentFolder.ParentSolution.FileName, config.ProjectLocation));
            }
        }
コード例 #42
0
		TemplateCategory GetCategory (SolutionTemplate template)
		{
			TemplateCategory match = GetCategory (template, categories);

			if (match != null) {
				return match;
			} else if (defaultCategory != null) {
				LogUsingDefaultCategory (template);

				return defaultCategory;
			}
			return null;
		}
コード例 #43
0
		void LogUsingDefaultCategory (SolutionTemplate template)
		{
			string message = String.Format (
				"Invalid category using default category. Template id='{0}', category='{1}'.",
				template.Id,
				template.Category);
			LogWarning (message);
		}
コード例 #44
0
 public bool CanProcessTemplate(SolutionTemplate template)
 {
     return(template is DefaultSolutionTemplate);
 }
		void SelectTemplate (SolutionTemplate template)
		{
			TreeIter iter = TreeIter.Zero;
			if (!templatesListStore.GetIterFirst (out iter)) {
				return;
			}

			while (templatesListStore.IterNext (ref iter)) {
				var currentTemplate = templatesListStore.GetValue (iter, TemplateColumn) as SolutionTemplate;
				if (currentTemplate == template) {
					templatesTreeView.Selection.SelectIter (iter);
					break;
				}
			}
		}
コード例 #46
0
		public ProcessedTemplateResult ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
		{
			IProjectTemplatingProvider provider = GetTemplatingProviderForTemplate (template);
			if (provider != null) {
				return provider.ProcessTemplate (template, config, parentFolder);
			}
			return null;
		}
コード例 #47
0
		void ShowTemplate (SolutionTemplate template)
		{
			templateNameLabel.Markup = MarkupTemplateName (template.Name);
			templateDescriptionLabel.Text = template.Description;
			templateImage.Image = controller.GetImage (template);
			templateVBox.Visible = true;
			templateVBox.ShowAll ();
		}
コード例 #48
0
		public bool CanProcessTemplate (SolutionTemplate template)
		{
			return template is DefaultSolutionTemplate;
		}
コード例 #49
0
		void LogNoCategoryMatch (SolutionTemplate template)
		{
			string message = String.Format (
				"Invalid category. Template id='{0}', category='{1}'.",
				template.Id,
				template.Category);
			LogWarning (message);
		}
コード例 #50
0
		public ProcessedTemplateResult ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
		{
			return ProcessTemplate ((DefaultSolutionTemplate)template, config, parentFolder);
		}