/**
* Copyright (C) 2011 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.xml;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.ext.LexicalHandler;
/**
* Simple XMLReceiver able to forward to another XMLReceiver or ContentHandler.
*/
public class SimpleForwardingXMLReceiver implements XMLReceiver {
private ContentHandler contentHandler;
private LexicalHandler lexicalHandler;
public SimpleForwardingXMLReceiver(XMLReceiver xmlReceiver) {
this.contentHandler = xmlReceiver;
this.lexicalHandler = xmlReceiver;
assert this.contentHandler != null;
}
public SimpleForwardingXMLReceiver(ContentHandler contentHandler) {
this.contentHandler = contentHandler;
this.lexicalHandler = null;
assert this.contentHandler != null;
}
public void characters(char[] chars, int start, int length) throws SAXException {
contentHandler.characters(chars, start, length);
}
public void endDocument() throws SAXException {
contentHandler.endDocument();
contentHandler = null;
lexicalHandler = null;
}
public void endElement(String uri, String localname, String qName) throws SAXException {
contentHandler.endElement(uri, localname, qName);
}
public void endPrefixMapping(String s) throws SAXException {
contentHandler.endPrefixMapping(s);
}
public void ignorableWhitespace(char[] chars, int start, int length) throws SAXException {
contentHandler.ignorableWhitespace(chars, start, length);
}
public void processingInstruction(String s, String s1) throws SAXException {
contentHandler.processingInstruction(s, s1);
}
public void setDocumentLocator(Locator locator) {
contentHandler.setDocumentLocator(locator);
}
public void skippedEntity(String s) throws SAXException {
contentHandler.skippedEntity(s);
}
public void startDocument() throws SAXException {
contentHandler.startDocument();
}
public void startElement(String uri, String localname, String qName, Attributes attributes) throws SAXException {
contentHandler.startElement(uri, localname, qName, attributes);
}
public void startPrefixMapping(String s, String s1) throws SAXException {
contentHandler.startPrefixMapping(s, s1);
}
public void startDTD(String name, String publicId, String systemId) throws SAXException {
if (lexicalHandler != null)
lexicalHandler.startDTD(name, publicId, systemId);
}
public void endDTD() throws SAXException {
if (lexicalHandler != null)
lexicalHandler.endDTD();
}
public void startEntity(String name) throws SAXException {
if (lexicalHandler != null)
lexicalHandler.startEntity(name);
}
public void endEntity(String name) throws SAXException {
if (lexicalHandler != null)
lexicalHandler.endEntity(name);
}
public void startCDATA() throws SAXException {
if (lexicalHandler != null)
lexicalHandler.startCDATA();
}
public void endCDATA() throws SAXException {
if (lexicalHandler != null)
lexicalHandler.endCDATA();
}
public void comment(char[] ch, int start, int length) throws SAXException {
if (lexicalHandler != null)
lexicalHandler.comment(ch, start, length);
}
public boolean endDocumentCalled() {
return contentHandler == null;
}
}