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; }
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); } } }
protected ProjectTemplate (RuntimeAddin addin, string id, ProjectTemplateCodon codon) : this (addin, id, codon, null) { }
static FileTemplate LoadFileTemplate (RuntimeAddin addin, ProjectTemplateCodon codon) { return LoadFileTemplate (addin, codon.GetTemplate (), codon.BaseDirectory, codon.Id); }