Example #1
0
        /**
         * Parses the XML representation of a rule and creates a Rule
         * object based on it.
         * @param ruleElt the XML <rule> node and subnodes.
         * @return the rule that was read or null.
         */
        public static Rule readXml(XmlElement ruleElt)
        {
            Rule rule = null;
            Log  log  = Log.getOnly();

            if (ruleElt.Name.Equals("rule"))
            {       // get <when>
                XmlNodeList nodes = ruleElt.ChildNodes;
                if (nodes == null || 0 == nodes.Count)
                {
                    return(rule);
                }
                String    id      = XmlFiler.getStringAttr(ruleElt, "id", NoId);
                String    desc    = XmlFiler.getStringAttr(ruleElt, "desc", NoDesc);
                String    fireA   = XmlFiler.getStringAttr(ruleElt, "fire", NoDesc);
                bool      fire    = fireA.Equals("always");
                ArrayList when    = null;
                ArrayList actions = null;
                for (int n = 0; n < nodes.Count; n++)
                {         // one when and many action elements
                    XmlNode node = nodes.Item(n);
                    if (node.Name.Equals("when") && when == null)
                    {             // process the one when element
                        when = EmptyElement.readEmptyChildren(node);
                    }
                    else if (node.Name.Equals("when"))
                    {             // too many when elements
                        log.writeElt("fail");
                        log.writeAttr("rule", id);
                        log.writeAttr("when", "multiple");
                        log.endElt();
                        when = null;
                    }
                    else
                    {             // an action element
                        if (node.NodeType == XmlNodeType.Element)
                        {
                            EmptyElement empty = EmptyElement.readXml(node);
                            if (actions == null)
                            {
                                actions = new ArrayList();
                            }
                            actions.Add(empty);
                        }
                    }
                }
                rule = new Rule(id, desc, fire, when, actions);
            }
            return(rule);
        }