private static List<DmxRange> ParseDmxRange(XElement source, ConditionalDmxRangeSet rangeSet, IParseResult result) { List<DmxRange> dmxRanges = new List<DmxRange>(); var rangeElements = source.Elements("DmxRange"); if (rangeElements.Any()) { foreach (var rangeElement in rangeElements) { var range = new DmxRange(); ParseResult error = new ParseResult(rangeElement.Name.LocalName); string val; TryExecute( () => { val = ParseAttribute<string>(rangeElement, "Range"); Validate(() => Validator.HasValue(val)); Validate(() => Validator.IsMatch("\\d+.{3}\\d+", val)); range.Range = ParseRangeValue(val); }, "Range", error); TryExecute( () => { if (rangeElement.HaveElement("DmxRangeLabel")) { range.RangeLabel = rangeElement.GetElementValue("DmxRangeLabel"); } }, "DmxRangeLabel", error); TryExecute( () => { range.FeatureRange = ParseFeatureRange(rangeElement, error); }, "FeatureRange", error); range.ConditionalRangeSet = rangeSet; if (error.FieldsWithError.Count == 0) dmxRanges.Add(range); if (error.HaveError) result.ErrorList.Add(error); } } return dmxRanges; }
private static Dictionary<ConditionalDmxRangeSet, List<DmxRange>> ParseConditionalDmxRangeSet(XElement source, IParseResult result) { Dictionary<ConditionalDmxRangeSet,List<DmxRange>> rangeSets = new Dictionary<ConditionalDmxRangeSet, List<DmxRange>>(); var rangeSetElements = source.Elements("ConditionalDmxRangeSet"); if (rangeSetElements.Any()) { string val; foreach (XElement rangeSetElement in rangeSetElements) { var rangeSet = new ConditionalDmxRangeSet(); ParseResult error = new ParseResult(rangeSetElement.Name.LocalName); TryExecute( () => { rangeSet.RangeSetCondition = ParseDmxRangeSetCondition(rangeSetElement, error).FirstOrDefault(); }, "DmxRangeSetCondition", error); if (error.FieldsWithError.Count == 0) { rangeSets[rangeSet] = ParseDmxRange(rangeSetElement, rangeSet, error); } if (error.HaveError) result.ErrorList.Add(error); } } return rangeSets; }