static void OnExtensionChanged(object s, ExtensionNodeEventArgs args) { if (args.Change == ExtensionChange.Add) { ProjectTemplateCodon codon = (ProjectTemplateCodon)args.ExtensionNode; try { ProjectTemplates.Add(new ProjectTemplate(codon.Addin, codon.Id, codon, null)); } catch (Exception e) { string extId = null, addinId = null; if (codon != null) { if (codon.HasId) { extId = codon.Id; } if (codon.Addin != null) { addinId = codon.Addin.Id; } } LoggingService.LogError("Error loading template id {0} in addin {1}:\n{2}", extId ?? "(null)", addinId ?? "(null)", e.ToString()); } } else { foreach (ProjectTemplate pt in ProjectTemplates) { ProjectTemplateCodon codon = (ProjectTemplateCodon)args.ExtensionNode; if (pt.Id == codon.Id) { ProjectTemplates.Remove(pt); break; } } } }
static FileTemplate LoadTemplate(ProjectTemplateCodon codon) { try { FileTemplate t = LoadFileTemplate(codon.Addin, codon); t.Id = codon.Id; return(t); } catch (Exception e) { string extId = null, addinId = null; if (codon != null) { if (codon.HasId) { extId = codon.Id; } if (codon.Addin != null) { addinId = codon.Addin.Id; } } LoggingService.LogError("Error loading template id {0} in addin {1}:\n{2}", extId ?? "(null)", addinId ?? "(null)", e.ToString()); } return(null); }
protected ProjectTemplate(RuntimeAddin addin, string id, ProjectTemplateCodon codon) : this(addin, id, codon, null) { }
protected ProjectTemplate(RuntimeAddin addin, string id, ProjectTemplateCodon codon, string overrideLanguage) { XmlDocument xmlDocument = codon.GetTemplate(); XmlElement xmlConfiguration = xmlDocument.DocumentElement ["TemplateConfiguration"]; // Get legacy category. if (xmlConfiguration ["_Category"] != null) { category = xmlConfiguration ["_Category"].InnerText; } if (xmlConfiguration ["Category"] != null) { category = xmlConfiguration ["Category"].InnerText; } else if (category == null) { LoggingService.LogWarning(string.Format("Category missing in project template {0}", codon.Id)); } if (!string.IsNullOrEmpty(overrideLanguage)) { this.languagename = overrideLanguage; this.category = overrideLanguage + "/" + this.category; } else if (xmlConfiguration ["LanguageName"] != null) { List <string> listLanguages = new List <string> (); foreach (string item in xmlConfiguration["LanguageName"].InnerText.Split(',')) { listLanguages.Add(item.Trim()); } ExpandLanguageWildcards(listLanguages); this.languagename = listLanguages [0]; if (listLanguages.Count > 1 && !String.IsNullOrEmpty(languagename) && !category.StartsWith(languagename + "/")) { category = languagename + "/" + category; } for (int i = 1; i < listLanguages.Count; i++) { string language = listLanguages[i]; try { ProjectTemplates.Add(new ProjectTemplate(addin, id, codon, language)); } catch (Exception e) { LoggingService.LogError(GettextCatalog.GetString("Error loading template {0} for language {1}", codon.Id, language), e); } } } this.id = id; this.originator = xmlDocument.DocumentElement.GetAttribute("originator"); this.created = xmlDocument.DocumentElement.GetAttribute("created"); this.lastModified = xmlDocument.DocumentElement.GetAttribute("lastModified"); if (xmlConfiguration ["Wizard"] != null) { this.wizardPath = xmlConfiguration ["Wizard"].InnerText; } if (xmlConfiguration ["_Name"] != null) { this.nonLocalizedName = xmlConfiguration ["_Name"].InnerText; this.name = addin.Localizer.GetString(this.nonLocalizedName); } if (xmlConfiguration ["_Description"] != null) { this.description = addin.Localizer.GetString(xmlConfiguration ["_Description"].InnerText); } if (xmlConfiguration ["Icon"] != null) { this.icon = ImageService.GetStockId(addin, xmlConfiguration ["Icon"].InnerText, Gtk.IconSize.Dnd); } if (xmlConfiguration ["GroupId"] != null) { this.groupId = xmlConfiguration ["GroupId"].InnerText; this.condition = xmlConfiguration ["GroupId"].GetAttribute("condition"); } if (xmlConfiguration ["FileExtension"] != null) { this.fileExtension = xmlConfiguration ["FileExtension"].InnerText; } if (xmlConfiguration ["SupportedParameters"] != null) { this.supportedParameters = xmlConfiguration ["SupportedParameters"].InnerText; } if (xmlConfiguration ["DefaultParameters"] != null) { this.defaultParameters = xmlConfiguration ["DefaultParameters"].InnerText; } if (xmlConfiguration ["Image"] != null) { XmlElement imageElement = xmlConfiguration ["Image"]; imageId = imageElement.GetAttribute("id"); imageFile = imageElement.GetAttribute("file"); if (!String.IsNullOrEmpty(imageFile)) { imageFile = Path.Combine(codon.BaseDirectory, imageFile); } } if (xmlConfiguration ["Visibility"] != null) { visibility = xmlConfiguration ["Visibility"].InnerText; } if (xmlDocument.DocumentElement ["Combine"] == null) { throw new InvalidOperationException("Combine element not found"); } else { solutionDescriptor = SolutionDescriptor.CreateSolutionDescriptor(addin, xmlDocument.DocumentElement ["Combine"], codon.BaseDirectory); } if (xmlDocument.DocumentElement ["Actions"] != null) { foreach (XmlNode xmlElement in xmlDocument.DocumentElement["Actions"]) { if (xmlElement is XmlElement && xmlElement.Attributes ["filename"] != null) { actions.Add(xmlElement.Attributes ["filename"].Value); } } } }
static FileTemplate LoadFileTemplate(RuntimeAddin addin, ProjectTemplateCodon codon) { return(LoadFileTemplate(addin, codon.GetTemplate(), codon.BaseDirectory, codon.Id)); }
private static FileTemplate LoadFileTemplate(RuntimeAddin addin, ProjectTemplateCodon codon) { XmlDocument xmlDocument = codon.GetTemplate(); FilePath baseDirectory = codon.BaseDirectory; //Configuration XmlElement xmlNodeConfig = xmlDocument.DocumentElement["TemplateConfiguration"]; FileTemplate fileTemplate = null; if (xmlNodeConfig["Type"] != null) { Type configType = addin.GetType(xmlNodeConfig["Type"].InnerText); if (typeof(FileTemplate).IsAssignableFrom(configType)) { fileTemplate = (FileTemplate)Activator.CreateInstance(configType); } else { throw new InvalidOperationException(string.Format("The file template class '{0}' must be a subclass of MonoDevelop.Ide.Templates.FileTemplate", xmlNodeConfig["Type"].InnerText)); } } else { fileTemplate = new FileTemplate(); } fileTemplate.originator = xmlDocument.DocumentElement.GetAttribute("Originator"); fileTemplate.created = xmlDocument.DocumentElement.GetAttribute("Created"); fileTemplate.lastModified = xmlDocument.DocumentElement.GetAttribute("LastModified"); if (xmlNodeConfig["_Name"] != null) { fileTemplate.name = xmlNodeConfig["_Name"].InnerText; } else { throw new InvalidOperationException(string.Format("Missing element '_Name' in file template: {0}", codon.Id)); } if (xmlNodeConfig["_Category"] != null) { fileTemplate.category = xmlNodeConfig["_Category"].InnerText; } else { throw new InvalidOperationException(string.Format("Missing element '_Category' in file template: {0}", codon.Id)); } if (xmlNodeConfig["LanguageName"] != null) { fileTemplate.languageName = xmlNodeConfig["LanguageName"].InnerText; } if (xmlNodeConfig["ProjectType"] != null) { fileTemplate.projecttype = xmlNodeConfig["ProjectType"].InnerText; } if (xmlNodeConfig["_Description"] != null) { fileTemplate.description = xmlNodeConfig["_Description"].InnerText; } if (xmlNodeConfig["Icon"] != null) { fileTemplate.icon = ImageService.GetStockId(addin, xmlNodeConfig["Icon"].InnerText, IconSize.Dnd); //xmlNodeConfig["_Description"].InnerText; } if (xmlNodeConfig["Wizard"] != null) { fileTemplate.icon = xmlNodeConfig["Wizard"].Attributes["path"].InnerText; } if (xmlNodeConfig["DefaultFilename"] != null) { fileTemplate.defaultFilename = xmlNodeConfig["DefaultFilename"].InnerText; string isFixed = xmlNodeConfig["DefaultFilename"].GetAttribute("IsFixed"); if (isFixed.Length > 0) { bool bFixed; if (bool.TryParse(isFixed, out bFixed)) { fileTemplate.isFixedFilename = bFixed; } else { throw new InvalidOperationException("Invalid value for IsFixed in template."); } } } //Template files XmlNode xmlNodeTemplates = xmlDocument.DocumentElement["TemplateFiles"]; if (xmlNodeTemplates != null) { foreach (XmlNode xmlNode in xmlNodeTemplates.ChildNodes) { if (xmlNode is XmlElement) { fileTemplate.files.Add( FileDescriptionTemplate.CreateTemplate((XmlElement)xmlNode, baseDirectory)); } } } //Conditions XmlNode xmlNodeConditions = xmlDocument.DocumentElement["Conditions"]; if (xmlNodeConditions != null) { foreach (XmlNode xmlNode in xmlNodeConditions.ChildNodes) { if (xmlNode is XmlElement) { fileTemplate.conditions.Add(FileTemplateCondition.CreateCondition((XmlElement)xmlNode)); } } } return(fileTemplate); }