Class DigesterRuleParser

  • All Implemented Interfaces:
    RuleSet

    public class DigesterRuleParser
    extends RuleSetBase
    This is a RuleSet that parses XML into Digester rules, and then adds those rules to a 'target' Digester.
    Since:
    1.2
    • Field Detail

      • DIGESTER_PUBLIC_ID

        public static final java.lang.String DIGESTER_PUBLIC_ID
        See Also:
        Constant Field Values
      • digesterDtdUrl

        private java.lang.String digesterDtdUrl
        path to the DTD
      • targetDigester

        protected Digester targetDigester
        This is the digester to which we are adding the rules that we parse from the Rules XML document.
      • patternStack

        protected DigesterRuleParser.PatternStack patternStack
        A stack used to maintain the current pattern. The Rules XML document type allows nesting of patterns. If an element defines a matching pattern, the resulting pattern is a concatenation of that pattern with all the ancestor elements' patterns. Hence the need for a stack.
      • includedFiles

        private java.util.Set includedFiles
        Used to detect circular includes
    • Constructor Detail

      • DigesterRuleParser

        public DigesterRuleParser()
        Constructs a DigesterRuleParser. This object will be inoperable until the target digester is set, via setTarget(Digester)
      • DigesterRuleParser

        public DigesterRuleParser​(Digester targetDigester)
        Constructs a rule set for converting XML digester rule descriptions into Rule objects, and adding them to the given Digester
        Parameters:
        targetDigester - the Digester to add the rules to
      • DigesterRuleParser

        private DigesterRuleParser​(Digester targetDigester,
                                   DigesterRuleParser.PatternStack stack,
                                   java.util.Set includedFiles)
        Constructs a rule set for parsing an XML digester rule file that has been included within an outer XML digester rule file. In this case, we must pass the pattern stack and the target digester to the rule set, as well as the list of files that have already been included, for cycle detection.
        Parameters:
        targetDigester - the Digester to add the rules to
        stack - Stack containing the prefix pattern string to be prepended to any pattern parsed by this rule set.
    • Method Detail

      • setTarget

        public void setTarget​(Digester d)
        Sets the digester into which to add the parsed rules
        Parameters:
        d - the Digester to add the rules to
      • setBasePath

        public void setBasePath​(java.lang.String path)
        Set a base pattern beneath which all the rules loaded by this object will be registered. If this string is not empty, and does not end in a "/", then one will be added.
        Since:
        1.6
      • setDigesterRulesDTD

        public void setDigesterRulesDTD​(java.lang.String dtdURL)
        Sets the location of the digester rules DTD. This is the DTD used to validate the rules XML file.
      • getDigesterRulesDTD

        protected java.lang.String getDigesterRulesDTD()
        Returns the location of the DTD used to validate the digester rules XML document.
      • add

        public void add​(Rule rule)
        Adds a rule the the target digester. After a rule has been created by parsing the XML, it is added to the digester by calling this method. Typically, this method is called via reflection, when executing a SetNextRule, from the Digester that is parsing the rules XML.
        Parameters:
        rule - a Rule to add to the target digester.
      • addRuleInstances

        public void addRuleInstances​(Digester digester)
        Add to the given digester the set of Rule instances used to parse an XML document defining Digester rules. When the digester parses an XML file, it will add the resulting rules & patterns to the 'target digester' that was passed in this RuleSet's constructor.

        If you extend this class to support additional rules, your implementation should of this method should call this implementation first: i.e. super.addRuleInstances(digester);

        Specified by:
        addRuleInstances in interface RuleSet
        Specified by:
        addRuleInstances in class RuleSetBase
        Parameters:
        digester - Digester instance to which the new Rule instances should be added.