public SmooksContentHandler(ExecutionContext executionContext, SmooksContentHandler parentContentHandler) { this.executionContext = executionContext; this.parentContentHandler = parentContentHandler; attachHandler(); if(parentContentHandler != null) { parentContentHandler.nestedContentHandler = this; } }
@Override public final void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { getNamespaceDeclarationStack().pushNamespaces(qName, uri, attributes); startEvent.set(uri, localName, qName, attributes); lastEvent = startEvent; depth++; startElement(startEvent); if(nestedContentHandler != null) { // Replay the start element event from the parent handler onto the nested handler... replay(nestedContentHandler); } }
public void startDocument() throws SAXException { super.startDocument(); if(ownerDocument == null) { // Parsing a new ownerDocument from scratch - create the DOM Document // instance and set it as the startNode. ownerDocument = documentBuilder.newDocument(); // Initialise the stack with the Document node. nodeStack.push(ownerDocument); } }
@Override public final void endElement(String uri, String localName, String qName) throws SAXException { try { endEvent.set(uri, localName, qName); lastEvent = endEvent; endElement(endEvent); depth--; } finally { if(!endReplayed && depth == 0 && parentContentHandler != null) { endReplayed = true; // Replay the last sax event from this handler onto the parent handler ... replay(parentContentHandler); // Reinstate the parent handler on the XMLReader so all events are // forwarded to it again ... XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); xmlReader.setContentHandler(parentContentHandler); // Remove the nested handler (this handler) form the parent handler... parentContentHandler.resetNestedContentHandler(); } } getNamespaceDeclarationStack().popNamespaces(); }
public static void addDynamicVisitor(SAXVisitor visitor, ExecutionContext executionContext) { SmooksContentHandler contentHandler = SmooksContentHandler.getHandler(executionContext); SmooksContentHandler nestedContentHandler = contentHandler.getNestedContentHandler(); if(nestedContentHandler == null) { DynamicSAXElementVisitorList list = getList(executionContext); if(visitor instanceof SAXVisitBefore) { list.visitBefores.add((SAXVisitBefore) visitor); } if(visitor instanceof SAXVisitChildren) { list.childVisitors.add((SAXVisitChildren) visitor); } if(visitor instanceof SAXVisitAfter) { list.visitAfters.add((SAXVisitAfter) visitor); } } else { addDynamicVisitor(visitor, nestedContentHandler.getExecutionContext()); } }
public void visitBefore(SAXElement element, ExecutionContext executionContext) throws SmooksException, IOException { Smooks smooks = getSmooksInstance(); ExecutionContext nestedExecutionContext = smooks.createExecutionContext(); // In case there's an attached event listener... nestedExecutionContext.setEventListener(executionContext.getEventListener()); // Copy over the XMLReader stack... AbstractParser.setReaders(AbstractParser.getReaders(executionContext), nestedExecutionContext); // Attach the NamespaceDeclarationStack to the nested execution context... NamespaceDeclarationStack nsStack = NamespaceMappings.getNamespaceDeclarationStack(executionContext); NamespaceMappings.setNamespaceDeclarationStack(nsStack, nestedExecutionContext); SmooksContentHandler parentContentHandler = SmooksContentHandler.getHandler(executionContext); if(parentContentHandler.getNestedContentHandler() != null) { throw new SmooksException("Illegal use of more than one nested content handler fired on the same element."); } SmooksContentHandler nestedContentHandler = new SAXHandler(nestedExecutionContext, element.getWriter(this), parentContentHandler); DynamicSAXElementVisitorList.propogateDynamicVisitors(executionContext, nestedExecutionContext); // Attach the XMLReader instance to the nested ExecutionContext and then swap the content handler on // the XMLReader to be the nested handler created here. All events wll be forwarded to the .. XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); AbstractParser.attachXMLReader(xmlReader, nestedExecutionContext); xmlReader.setContentHandler(nestedContentHandler); executionContext.setAttribute(NestedExecutionVisitor.class, nestedExecutionContext); // Note we do not execute the Smooks filterSource methods for a nested instance... we just install // the content handler and redirect the reader events to it... }
public void replayStartElement() { // Replay the last sax event from the parent handler on this sax handler... parentContentHandler.replay(this); }
@Override public final void endElement(String uri, String localName, String qName) throws SAXException { try { endEvent.set(uri, localName, qName); lastEvent = endEvent; endElement(endEvent); depth--; } finally { if(!endReplayed && depth == 0 && parentContentHandler != null) { endReplayed = true; // Replay the last sax event from this handler onto the parent handler ... replay(parentContentHandler); // Reinstate the parent handler on the XMLReader so all events are // forwarded to it again ... XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); xmlReader.setContentHandler(parentContentHandler); // Remove the nested handler (this handler) form the parent handler... parentContentHandler.resetNestedContentHandler(); } } getNamespaceDeclarationStack().popNamespaces(); }
public static void addDynamicVisitor(SAXVisitor visitor, ExecutionContext executionContext) { SmooksContentHandler contentHandler = SmooksContentHandler.getHandler(executionContext); SmooksContentHandler nestedContentHandler = contentHandler.getNestedContentHandler(); if(nestedContentHandler == null) { DynamicSAXElementVisitorList list = getList(executionContext); if(visitor instanceof SAXVisitBefore) { list.visitBefores.add((SAXVisitBefore) visitor); } if(visitor instanceof SAXVisitChildren) { list.childVisitors.add((SAXVisitChildren) visitor); } if(visitor instanceof SAXVisitAfter) { list.visitAfters.add((SAXVisitAfter) visitor); } } else { addDynamicVisitor(visitor, nestedContentHandler.getExecutionContext()); } }
public void visitBefore(SAXElement element, ExecutionContext executionContext) throws SmooksException, IOException { Smooks smooks = getSmooksInstance(); ExecutionContext nestedExecutionContext = smooks.createExecutionContext(); // In case there's an attached event listener... nestedExecutionContext.setEventListener(executionContext.getEventListener()); // Copy over the XMLReader stack... AbstractParser.setReaders(AbstractParser.getReaders(executionContext), nestedExecutionContext); // Attach the NamespaceDeclarationStack to the nested execution context... NamespaceDeclarationStack nsStack = NamespaceMappings.getNamespaceDeclarationStack(executionContext); NamespaceMappings.setNamespaceDeclarationStack(nsStack, nestedExecutionContext); SmooksContentHandler parentContentHandler = SmooksContentHandler.getHandler(executionContext); if(parentContentHandler.getNestedContentHandler() != null) { throw new SmooksException("Illegal use of more than one nested content handler fired on the same element."); } SmooksContentHandler nestedContentHandler = new SAXHandler(nestedExecutionContext, element.getWriter(this), parentContentHandler); DynamicSAXElementVisitorList.propogateDynamicVisitors(executionContext, nestedExecutionContext); // Attach the XMLReader instance to the nested ExecutionContext and then swap the content handler on // the XMLReader to be the nested handler created here. All events wll be forwarded to the .. XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); AbstractParser.attachXMLReader(xmlReader, nestedExecutionContext); xmlReader.setContentHandler(nestedContentHandler); executionContext.setAttribute(NestedExecutionVisitor.class, nestedExecutionContext); // Note we do not execute the Smooks filterSource methods for a nested instance... we just install // the content handler and redirect the reader events to it... }
public void replayStartElement() { // Replay the last sax event from the parent handler on this sax handler... parentContentHandler.replay(this); }
@Override public final void endElement(String uri, String localName, String qName) throws SAXException { try { endEvent.set(uri, localName, qName); lastEvent = endEvent; endElement(endEvent); depth--; } finally { if(!endReplayed && depth == 0 && parentContentHandler != null) { endReplayed = true; // Replay the last sax event from this handler onto the parent handler ... replay(parentContentHandler); // Reinstate the parent handler on the XMLReader so all events are // forwarded to it again ... XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); xmlReader.setContentHandler(parentContentHandler); // Remove the nested handler (this handler) form the parent handler... parentContentHandler.resetNestedContentHandler(); } } getNamespaceDeclarationStack().popNamespaces(); }
@Override public final void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { getNamespaceDeclarationStack().pushNamespaces(qName, uri, attributes); startEvent.set(uri, localName, qName, attributes); lastEvent = startEvent; depth++; startElement(startEvent); if(nestedContentHandler != null) { // Replay the start element event from the parent handler onto the nested handler... replay(nestedContentHandler); } }
public static void addDynamicVisitor(SAXVisitor visitor, ExecutionContext executionContext) { SmooksContentHandler contentHandler = SmooksContentHandler.getHandler(executionContext); SmooksContentHandler nestedContentHandler = contentHandler.getNestedContentHandler(); if(nestedContentHandler == null) { DynamicSAXElementVisitorList list = getList(executionContext); if(visitor instanceof SAXVisitBefore) { list.visitBefores.add((SAXVisitBefore) visitor); } if(visitor instanceof SAXVisitChildren) { list.childVisitors.add((SAXVisitChildren) visitor); } if(visitor instanceof SAXVisitAfter) { list.visitAfters.add((SAXVisitAfter) visitor); } } else { addDynamicVisitor(visitor, nestedContentHandler.getExecutionContext()); } }
public void visitBefore(SAXElement element, ExecutionContext executionContext) throws SmooksException, IOException { Smooks smooks = getSmooksInstance(); ExecutionContext nestedExecutionContext = smooks.createExecutionContext(); // In case there's an attached event listener... nestedExecutionContext.setEventListener(executionContext.getEventListener()); // Copy over the XMLReader stack... AbstractParser.setReaders(AbstractParser.getReaders(executionContext), nestedExecutionContext); // Attach the NamespaceDeclarationStack to the nested execution context... NamespaceDeclarationStack nsStack = NamespaceMappings.getNamespaceDeclarationStack(executionContext); NamespaceMappings.setNamespaceDeclarationStack(nsStack, nestedExecutionContext); SmooksContentHandler parentContentHandler = SmooksContentHandler.getHandler(executionContext); if(parentContentHandler.getNestedContentHandler() != null) { throw new SmooksException("Illegal use of more than one nested content handler fired on the same element."); } SmooksContentHandler nestedContentHandler = new SAXHandler(nestedExecutionContext, element.getWriter(this), parentContentHandler); DynamicSAXElementVisitorList.propogateDynamicVisitors(executionContext, nestedExecutionContext); // Attach the XMLReader instance to the nested ExecutionContext and then swap the content handler on // the XMLReader to be the nested handler created here. All events wll be forwarded to the .. XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); AbstractParser.attachXMLReader(xmlReader, nestedExecutionContext); xmlReader.setContentHandler(nestedContentHandler); executionContext.setAttribute(NestedExecutionVisitor.class, nestedExecutionContext); // Note we do not execute the Smooks filterSource methods for a nested instance... we just install // the content handler and redirect the reader events to it... }
public SmooksContentHandler(ExecutionContext executionContext, SmooksContentHandler parentContentHandler) { this.executionContext = executionContext; this.parentContentHandler = parentContentHandler; attachHandler(); if(parentContentHandler != null) { parentContentHandler.nestedContentHandler = this; } }
public void replayStartElement() { // Replay the last sax event from the parent handler on this sax handler... parentContentHandler.replay(this); }
public void startDocument() throws SAXException { super.startDocument(); if(ownerDocument == null) { // Parsing a new ownerDocument from scratch - create the DOM Document // instance and set it as the startNode. ownerDocument = documentBuilder.newDocument(); // Initialise the stack with the Document node. nodeStack.push(ownerDocument); } }
@Override public final void endElement(String uri, String localName, String qName) throws SAXException { try { endEvent.set(uri, localName, qName); lastEvent = endEvent; endElement(endEvent); depth--; } finally { if(!endReplayed && depth == 0 && parentContentHandler != null) { endReplayed = true; // Replay the last sax event from this handler onto the parent handler ... replay(parentContentHandler); // Reinstate the parent handler on the XMLReader so all events are // forwarded to it again ... XMLReader xmlReader = AbstractParser.getXMLReader(executionContext); xmlReader.setContentHandler(parentContentHandler); // Remove the nested handler (this handler) form the parent handler... parentContentHandler.resetNestedContentHandler(); } } getNamespaceDeclarationStack().popNamespaces(); }
@Override public final void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { getNamespaceDeclarationStack().pushNamespaces(qName, uri, attributes); startEvent.set(uri, localName, qName, attributes); lastEvent = startEvent; depth++; startElement(startEvent); if(nestedContentHandler != null) { // Replay the start element event from the parent handler onto the nested handler... replay(nestedContentHandler); } }