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;
             }
         }
     }
 }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 protected ProjectTemplate(RuntimeAddin addin, string id, ProjectTemplateCodon codon)
     : this(addin, id, codon, null)
 {
 }
Ejemplo n.º 4
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 5
0
 static FileTemplate LoadFileTemplate(RuntimeAddin addin, ProjectTemplateCodon codon)
 {
     return(LoadFileTemplate(addin, codon.GetTemplate(), codon.BaseDirectory, codon.Id));
 }
Ejemplo n.º 6
0
        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);
        }