/// <summary> /// VSのテンプレートをTreeNodeItemに変換する /// </summary> /// <param name="o_ext">テンプレート</param> /// <param name="forTest">true:変換できるかテストだけをする</param> /// <returns></returns> private TreeNodeTemplateItem CreateTreeNodeItemFromExtension(object o_ext, bool forTest = false) { object o_name = o_ext.GetType().GetProperty("Name")?.GetValue(o_ext); if (o_name == null || o_name?.GetType().Name == "InstallMorePlaceHolderTemplate") { return(null); } TreeNodeTemplateItem node = new TreeNodeTemplateItem(o_ext); foreach (Tag tagTemp in node.TemplateWrapper.GetTemplateTags()) { if (!forTest) { var tag = this.Tags.FirstOrDefault(_ => _.Id == tagTemp.Id && _.Type == tagTemp.Type && _.Value == tagTemp.Value); if (tag == null) { tag = tagTemp; this.Tags.Add(tag); } node.AddTag(tag); } else { node.AddTag(tagTemp); } } if (!forTest) { string[] grpkeys = this.TagTypeOrder.ToArray(); if (!node.Tags.Any(_ => _.Type == TagTypeKey.ProjectType)) { var name = node.TemplateWrapper.NonLocalizedCategoryFullName; Tag tag = this.Tags.FirstOrDefault(_ => _.Type == TagTypeKey.ProjectType && _.Id == name); if (tag == null) { tag = new Tag(); tag.Id = name; tag.Type = TagTypeKey.ProjectType; tag.Value = name; this.Tags.Add(tag); } node.AddTag(tag); } foreach (string grpKey in grpkeys) { if (!node.Tags.Any(_ => _.Type == grpKey)) { var tag = GetOtherTag(grpKey, forTest); node.AddTag(tag); } } } return(node); }
public TemplateWrapper(TreeNodeTemplateItem item) { this.TreeNodeTemplateItem = item; this.template = item.Template; }