package org.anodyneos.xpImpl.runtime;
import javax.servlet.jsp.el.ELException;
import org.anodyneos.xp.XpContext;
import org.anodyneos.xp.XpException;
import org.anodyneos.xp.XpOutput;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.XMLReader;
public class XpPageReader implements XMLReader {
private static final Log logger = LogFactory.getLog(XpPageReader.class);
private AbstractXpPage xp;
private XpContext xpContext;
private static final String FEATURE_NAMESPACES = "http://xml.org/sax/features/namespaces";
private static final String FEATURE_NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes";
/**
* current setting for the SAX feature
* "http://xml.org/sax/features/namespace-prefixes".
*/
private boolean namespacePrefixes = false;
public XpPageReader(AbstractXpPage xp, XpContext xpContext) {
this.xp = xp;
this.xpContext = xpContext;
}
public void parse(InputSource input) throws SAXException {
XpOutput out = new XpOutput(getContentHandler(), namespacePrefixes);
// process
getContentHandler().startDocument();
try {
xp.service(xpContext, out);
} catch (XpException e) {
throw new SAXException(e);
} catch (ELException e) {
throw new SAXException(e);
}
getContentHandler().endDocument();
}
public void parse(String systemId) {
throw new java.lang.UnsupportedOperationException();
}
// generic stuff
protected ContentHandler contentHandler;
protected DTDHandler dtdHandler;
protected EntityResolver entityResolver;
protected ErrorHandler errorHandler;
public ContentHandler getContentHandler() {
return contentHandler;
}
public DTDHandler getDTDHandler() {
return dtdHandler;
}
public EntityResolver getEntityResolver() {
return entityResolver;
}
public ErrorHandler getErrorHandler() {
return errorHandler;
}
public boolean getFeature(java.lang.String name) throws SAXNotRecognizedException {
if (FEATURE_NAMESPACE_PREFIXES.equals(name)) {
return this.namespacePrefixes;
} else if (FEATURE_NAMESPACES.equals(name)) {
return true;
} else {
if (logger.isErrorEnabled()) {
logger.error("Feature " + name + " not recognized.");
}
throw new SAXNotRecognizedException("Feature " + name + " not recognized.");
}
}
public java.lang.Object getProperty(java.lang.String name) {
return null;
}
public void setContentHandler(ContentHandler handler) {
this.contentHandler = handler;
}
public void setDTDHandler(DTDHandler handler) {
this.dtdHandler = handler;
}
public void setEntityResolver(EntityResolver resolver) {
this.entityResolver = resolver;
}
public void setErrorHandler(ErrorHandler handler) {
this.errorHandler = handler;
}
public void setFeature(java.lang.String name, boolean value) throws SAXNotRecognizedException {
if (FEATURE_NAMESPACE_PREFIXES.equals(name)) {
if (logger.isDebugEnabled()) {
logger.debug("Setting feature " + name + "=" + value + ".");
}
this.namespacePrefixes = value;
} else if (FEATURE_NAMESPACES.equals(name)) {
if (!value) {
if (logger.isWarnEnabled()) {
logger.warn("Turning off feature " + name + " not supported.");
}
}
} else {
if (logger.isErrorEnabled()) {
logger.error("Feature " + name + "=" + value + " not recognized.");
}
throw new SAXNotRecognizedException("Feature " + name + "=" + value + " not recognized.");
}
}
public void setProperty(java.lang.String name, java.lang.Object value) {
}
}