/// <summary>
        /// Reads the rules xmlNode from the Xml file
        /// </summary>
        /// <param name="rootNode">The root xmlNode of the Xml file</param>
        private static void ReadRulesNode(XmlNode rootNode)
        {
            Rules.Clear();
            RuleHierarchy.Clear();

            foreach (XmlNode ruleNode in rootNode.SelectNodes("rules/*"))
            {
                if (ruleNode.Name == "rule")
                {
                    MAConfig.RuleHierarchy.Add(RuleBase.CreateRuleFromXmlNode(ruleNode));
                }
                else if (ruleNode.Name == "rule-group")
                {
                    MAConfig.RuleHierarchy.Add(new RuleGroup(ruleNode));
                }
            }

            foreach (RuleGroup group in Rules.Where(t => t is RuleGroup))
            {
                group.AddReferencedRulesToCollection();
            }
        }
Exemple #2
0
        /// <summary>
        /// Populates the object based on an XML representation
        /// </summary>
        /// <param name="node">The XML representation of the object</param>
        private void FromXml(XmlNode node)
        {
            this.xmlNode = node;

            XmlAttribute operatorAttribute = node.Attributes["operator"];
            XmlAttribute idAttribute       = node.Attributes["id"];

            if (idAttribute == null || string.IsNullOrWhiteSpace(idAttribute.Value))
            {
                throw new ArgumentNullException("The rule must have an ID");
            }
            else
            {
                this.Id = idAttribute.Value;
                MAConfig.Rules.Add(this);
            }

            if (operatorAttribute == null)
            {
                this.Operator = RuleGroupOperator.And;
            }
            else
            {
                RuleGroupOperator ruleGroupOperator = RuleGroupOperator.And;
                if (Enum.TryParse(operatorAttribute.Value, true, out ruleGroupOperator))
                {
                    this.Operator = ruleGroupOperator;
                }
                else
                {
                    throw new ArgumentException(string.Format("The rule group operator '{0}' is unknown", operatorAttribute.Value));
                }
            }

            XmlNodeList nodes = node.SelectNodes("rule");

            if (nodes == null)
            {
                return;
            }
            else
            {
                foreach (XmlNode child in nodes)
                {
                    this.Rules.Add(RuleBase.CreateRuleFromXmlNode(child));
                }
            }

            nodes = node.SelectNodes("rule-group");

            if (nodes == null)
            {
                return;
            }
            else
            {
                foreach (XmlNode child in nodes)
                {
                    this.RuleGroups.Add(new RuleGroup(child));
                }
            }
        }