コード例 #1
0
        protected virtual IEnumerable <XmlConnectionGroup> ReadConnectionGroup(ComponentDescription description, XElement connectionGroupElement, XmlConnectionGroup parentGroup)
        {
            IConditionTreeItem conditionCollection = ConditionTree.Empty;
            var conditionsAttribute = connectionGroupElement.Attribute("conditions");

            if (conditionsAttribute != null)
            {
                if (!conditionParser.Parse(conditionsAttribute, description, logger, out conditionCollection))
                {
                    yield break;
                }
            }

            var connectionGroup = new XmlConnectionGroup(new ConditionTree(ConditionTree.ConditionOperator.AND, parentGroup.Conditions, conditionCollection));

            autoRotateOptionsReader.TrySetAutoRotateOptions(connectionGroupElement, parentGroup, connectionGroup);

            var childGroups = connectionGroupElement.Elements().SelectMany(x => ReadElement(x, description, connectionGroup));

            yield return(connectionGroup);

            foreach (var child in childGroups)
            {
                yield return(child);
            }
        }
コード例 #2
0
        public void ReadSection(XElement element, ComponentDescription description)
        {
            var groups       = new List <XmlConnectionGroup>();
            var defaultGroup = new XmlConnectionGroup(ConditionTree.Empty);

            autoRotateOptionsReader.TrySetAutoRotateOptions(element, defaultGroup);

            groups.Add(defaultGroup);
            foreach (var child in element.Elements())
            {
                groups.AddRange(ReadElement(child, description, defaultGroup));
            }

            var flatGroups = groups.SelectMany(x => x.FlattenRoot(logger)).ToArray();

            description.Connections = flatGroups.GroupBy(x => ConditionsReducer.SimplifyConditions(x.Conditions)).Select(g => new ConnectionGroup(g.Key, g.SelectMany(x => x.Value).ToArray())).ToArray();
        }
コード例 #3
0
 public virtual IEnumerable <XmlConnectionGroup> ReadElement(XElement element, ComponentDescription description, XmlConnectionGroup groupContext)
 {
     if (element.Name == GroupElementName || element.Name == GElementName)
     {
         return(ReadConnectionGroup(description, element, groupContext));
     }
     else if (element.Name == ConnectionElementName)
     {
         if (ReadConnection(element, out var connection))
         {
             groupContext.Value.Add(connection);
         }
         return(Enumerable.Empty <XmlConnectionGroup>());
     }
     else
     {
         if (element.Name.Namespace == XmlLoader.ComponentNamespace)
         {
             logger.LogWarning(element, $"Unknown connection element '{element.Name.LocalName}'");
         }
         return(Enumerable.Empty <XmlConnectionGroup>());
     }
 }