/// <summary> /// Reads a option's information from the script file. /// </summary> /// <param name="p_xelOption">The script file node corresponding to the option to read.</param> /// <returns>The option information.</returns> protected override Option ParseOption(XElement p_xelOption) { string strName = p_xelOption.Attribute("name").Value; string strDesc = p_xelOption.Element("description").Value.Trim(); IOptionTypeResolver iptType = null; XElement xelTypeDescriptor = p_xelOption.Element("typeDescriptor").Elements().First(); switch (xelTypeDescriptor.Name.LocalName) { case "type": iptType = new StaticOptionTypeResolver((OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Attribute("name").Value)); break; case "dependencyType": OptionType ptpDefaultType = (OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Element("defaultType").Attribute("name").Value); iptType = new ConditionalOptionTypeResolver(ptpDefaultType); ConditionalOptionTypeResolver cotConditionalType = (ConditionalOptionTypeResolver)iptType; IEnumerable <XElement> xeePatterns = xelTypeDescriptor.XPathSelectElements("patterns/*"); foreach (XElement xelPattern in xeePatterns) { OptionType ptpType = (OptionType)Enum.Parse(typeof(OptionType), xelPattern.Element("type").Attribute("name").Value); ICondition cpcCondition = LoadCondition(xelPattern.Element("dependencies")); cotConditionalType.AddPattern(ptpType, cpcCondition); } break; default: throw new ParserException("Invalid option type descriptor node: " + xelTypeDescriptor.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser."); } XElement xelImage = p_xelOption.Element("image"); string strImageFilePath = null; if (xelImage != null) { strImageFilePath = xelImage.Attribute("path").Value; } Option optOption = new Option(strName, strDesc, strImageFilePath, iptType); IEnumerable <XElement> xeeOptionFiles = p_xelOption.XPathSelectElements("files/*"); optOption.Files.AddRange(ReadFileInfo(xeeOptionFiles)); IEnumerable <XElement> xeePluginFlags = p_xelOption.XPathSelectElements("conditionFlags/*"); optOption.Flags.AddRange(ReadFlagInfo(xeePluginFlags)); return(optOption); }
public OptionTypeResolverEditorVM(ConditionalTypeEditorVM p_tvmConditionResolverVM, Option p_optOption) { ConditionalTypeEditorVM = p_tvmConditionResolverVM; Option = p_optOption; OptionTypes = Enum.GetValues(typeof(OptionType)); if (Option.OptionTypeResolver is StaticOptionTypeResolver) { StaticOptionTypeResolver = (StaticOptionTypeResolver)Option.OptionTypeResolver; ConditionalOptionTypeResolver = new ConditionalOptionTypeResolver(OptionType.NotUsable); } if (Option.OptionTypeResolver is ConditionalOptionTypeResolver) { StaticOptionTypeResolver = new StaticOptionTypeResolver(OptionType.NotUsable); ConditionalOptionTypeResolver = (ConditionalOptionTypeResolver)Option.OptionTypeResolver; } p_tvmConditionResolverVM.TypeResolver = ConditionalOptionTypeResolver; }
/// <summary> /// Reads a option's information from the script file. /// </summary> /// <param name="p_xelOption">The script file node corresponding to the option to read.</param> /// <returns>The option information.</returns> protected override Option ParseOption(XElement p_xelOption) { string strName = p_xelOption.Attribute("name").Value; string strDesc = p_xelOption.Element("description").Value.Trim(); IOptionTypeResolver iptType = null; XElement xelTypeDescriptor = p_xelOption.Element("typeDescriptor").Elements().First(); switch (xelTypeDescriptor.Name.LocalName) { case "type": iptType = new StaticOptionTypeResolver((OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Attribute("name").Value)); break; case "dependencyType": OptionType ptpDefaultType = (OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Element("defaultType").Attribute("name").Value); iptType = new ConditionalOptionTypeResolver(ptpDefaultType); ConditionalOptionTypeResolver cotConditionalType = (ConditionalOptionTypeResolver)iptType; IEnumerable<XElement> xeePatterns = xelTypeDescriptor.XPathSelectElements("patterns/*"); foreach (XElement xelPattern in xeePatterns) { OptionType ptpType = (OptionType)Enum.Parse(typeof(OptionType), xelPattern.Element("type").Attribute("name").Value); ICondition cpcCondition = LoadCondition(xelPattern.Element("dependencies")); cotConditionalType.AddPattern(ptpType, cpcCondition); } break; default: throw new ParserException("Invalid option type descriptor node: " + xelTypeDescriptor.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser."); } XElement xelImage = p_xelOption.Element("image"); string strImageFilePath = null; if (xelImage != null) strImageFilePath = xelImage.Attribute("path").Value; Option optOption = new Option(strName, strDesc, strImageFilePath, iptType); IEnumerable<XElement> xeeOptionFiles = p_xelOption.XPathSelectElements("files/*"); optOption.Files.AddRange(ReadFileInfo(xeeOptionFiles)); IEnumerable<XElement> xeePluginFlags = p_xelOption.XPathSelectElements("conditionFlags/*"); optOption.Flags.AddRange(ReadFlagInfo(xeePluginFlags)); return optOption; }