package org.exist.cocoon; import java.io.IOException; import org.apache.excalibur.xml.sax.SAXParser; import org.exist.Namespaces; import org.xml.sax.ContentHandler; import org.xml.sax.DTDHandler; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; import org.xml.sax.ext.LexicalHandler; /** * Wrapper around SAXParser interface from excalibur to * provide an (excalibur) independend implementation of XMLReader. */ public class XMLReaderWrapper implements XMLReader { private SAXParser saxParser; private ContentHandler contentHandler = null; private LexicalHandler lexicalHandler = null; /** * @param saxParser to wrap around */ public XMLReaderWrapper(SAXParser saxParser) { this.saxParser = saxParser; } /** * @see org.xml.sax.XMLReader#parse(java.lang.String) */ public void parse(String systemId) throws IOException, SAXException { parse(new InputSource(systemId)); } /** * Not supported. * * @see org.xml.sax.XMLReader#getFeature(java.lang.String) */ public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { return false; } /** * Not supported. * * @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean) */ public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { } /** * @see org.xml.sax.XMLReader#getContentHandler() */ public ContentHandler getContentHandler() { return contentHandler; } /** * @see org.xml.sax.XMLReader#setContentHandler(org.xml.sax.ContentHandler) */ public void setContentHandler(ContentHandler handler) { this.contentHandler = handler; } /** * Not supported. * * @see org.xml.sax.XMLReader#getDTDHandler() */ public DTDHandler getDTDHandler() { return null; } /** * Not supported. * * @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler) */ public void setDTDHandler(DTDHandler handler) { } /** * Not supported. * * @see org.xml.sax.XMLReader#getEntityResolver() */ public EntityResolver getEntityResolver() { return null; } /** * Not supported. * * @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver) */ public void setEntityResolver(EntityResolver resolver) { } /** * Not supported. * * @see org.xml.sax.XMLReader#getErrorHandler() */ public ErrorHandler getErrorHandler() { return null; } /** * Not supported. * * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler) */ public void setErrorHandler(ErrorHandler handler) { } /** * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource) */ public void parse(InputSource input) throws IOException, SAXException { if (lexicalHandler != null) { saxParser.parse(input, contentHandler, lexicalHandler); } else { saxParser.parse(input, contentHandler); } } /** * @see org.xml.sax.XMLReader#getProperty(java.lang.String) */ public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { if (name.equals(Namespaces.SAX_LEXICAL_HANDLER)) { return lexicalHandler; } else { throw new SAXNotRecognizedException("Property " + name + " not recognized"); } } /** * Only property <i>http://xml.org/sax/properties/lexical-handler</i> is * supported. * * @see org.xml.sax.XMLReader#setProperty(java.lang.String, java.lang.Object) */ public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException { if (name.equals(Namespaces.SAX_LEXICAL_HANDLER)) { if (!(value instanceof LexicalHandler)) { throw new SAXNotSupportedException("Value not of type LexicalHandler"); } lexicalHandler = (LexicalHandler) value; } else { throw new SAXNotRecognizedException("Property " + name + " not recognized"); } } }