Class Interpreter


  • public class Interpreter
    extends java.lang.Object
    Interpreter is Joran's main driving class. It extends SAX DefaultHandler which invokes various actions according to predefined patterns.

    Patterns are kept in a RuleStore which is programmed to store and then later produce the applicable actions for a given pattern.

    The pattern corresponding to a top level <a> element is the string "a".

    The pattern corresponding to an element <b> embedded within a top level <a> element is the string "a/b".

    The pattern corresponding to an <b> and any level of nesting is "*/b. Thus, the * character placed at the beginning of a pattern serves as a wildcard for the level of nesting. Conceptually, this is very similar to the API of commons-digester. Joran offers several small advantages. First and foremost, it offers support for implicit actions which result in a significant leap in flexibility. Second, in our opinion better error reporting capability. Third, it is self-reliant. It does not depend on other APIs, in particular commons-logging which is too unreliable. Last but not least, Joran is quite tiny and is expected to remain so.

    • Field Detail

      • EMPTY_LIST

        private static java.util.List<Action> EMPTY_LIST
      • ruleStore

        private final RuleStore ruleStore
      • implicitActions

        private final java.util.ArrayList<ImplicitAction> implicitActions
      • locator

        org.xml.sax.Locator locator
      • actionListStack

        java.util.Stack<java.util.List<Action>> actionListStack
        The actionListStack contains a list of actions that are executing for the given XML element. A list of actions is pushed by the {link #startElement} and popped by endElement(ch.qos.logback.core.joran.event.EndEvent).
      • skip

        ElementPath skip
        If the skip nested is set, then we skip all its nested elements until it is set back to null at when the element's end is reached.
    • Method Detail

      • setInterpretationContextPropertiesMap

        public void setInterpretationContextPropertiesMap​(java.util.Map<java.lang.String,​java.lang.String> propertiesMap)
      • startDocument

        public void startDocument()
      • startElement

        public void startElement​(StartEvent se)
      • startElement

        private void startElement​(java.lang.String namespaceURI,
                                  java.lang.String localName,
                                  java.lang.String qName,
                                  org.xml.sax.Attributes atts)
      • pushEmptyActionList

        private void pushEmptyActionList()
        This method is used to
      • characters

        public void characters​(BodyEvent be)
      • endElement

        public void endElement​(EndEvent endEvent)
      • endElement

        private void endElement​(java.lang.String namespaceURI,
                                java.lang.String localName,
                                java.lang.String qName)
      • getLocator

        public org.xml.sax.Locator getLocator()
      • setDocumentLocator

        public void setDocumentLocator​(org.xml.sax.Locator l)
      • getTagName

        java.lang.String getTagName​(java.lang.String localName,
                                    java.lang.String qName)
      • addImplicitAction

        public void addImplicitAction​(ImplicitAction ia)
      • lookupImplicitAction

        java.util.List<Action> lookupImplicitAction​(ElementPath elementPath,
                                                    org.xml.sax.Attributes attributes,
                                                    InterpretationContext ec)
        Check if any implicit actions are applicable. As soon as an applicable action is found, it is returned. Thus, the returned list will have at most one element.
      • getApplicableActionList

        java.util.List<Action> getApplicableActionList​(ElementPath elementPath,
                                                       org.xml.sax.Attributes attributes)
        Return the list of applicable patterns for this
      • callBeginAction

        void callBeginAction​(java.util.List<Action> applicableActionList,
                             java.lang.String tagName,
                             org.xml.sax.Attributes atts)
      • callBodyAction

        private void callBodyAction​(java.util.List<Action> applicableActionList,
                                    java.lang.String body)
      • callEndAction

        private void callEndAction​(java.util.List<Action> applicableActionList,
                                   java.lang.String tagName)
      • getRuleStore

        public RuleStore getRuleStore()