jp.gr.xml.relax.sax.DOMSAXProducer Maven / Gradle / Ivy
package jp.gr.xml.relax.sax;
import jp.gr.xml.relax.dom.DOMVisitorException;
import jp.gr.xml.relax.dom.UDOMVisitor;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.xml.sax.DTDHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.ext.DeclHandler;
import org.xml.sax.ext.LexicalHandler;
/**
* SAX event producer from DOM tree
*
* @since Feb. 18, 2001
* @version Feb. 24, 2001
* @author ASAMI, Tomoharu ([email protected])
*/
public class DOMSAXProducer {
private boolean needDocumentEmulation_ = true;
private Node root_;
private String systemID_;
private String publicID_;
private DTDHandler dtd_;
private ContentHandler content_;
private DeclHandler decl_;
private LexicalHandler lexical_;
private ErrorHandler error_;
public DOMSAXProducer(Node node) {
root_ = node;
}
public void setDocumentEmulation(boolean emulate) {
needDocumentEmulation_ = emulate;
}
public void setDTDHandler(DTDHandler dtd) {
dtd_ = dtd;
}
public void setContentHandler(ContentHandler content) {
content_ = content;
}
public void setLexicalHandler(LexicalHandler lexical) {
lexical_ = lexical;
}
public void setDeclHandler(DeclHandler decl) {
decl_ = decl;
}
public void setErrorHandler(ErrorHandler error) {
error_ = error;
}
public void makeEvent() throws SAXException {
try {
DOMSAXProducerVisitor visitor = new DOMSAXProducerVisitor();
visitor.setSystemID(systemID_);
visitor.setPublicID(publicID_);
visitor.setDTDHandler(dtd_);
visitor.setContentHandler(content_);
visitor.setLexicalHandler(lexical_);
visitor.setDeclHandler(decl_);
visitor.setErrorHandler(error_);
if (!(root_ instanceof Document) && needDocumentEmulation_) {
visitor.emulateStartDocument();
UDOMVisitor.traverse(root_, visitor);
visitor.emulateEndDocument();
} else {
UDOMVisitor.traverse(root_, visitor);
}
} catch (DOMVisitorException e) {
Exception cause = e.getCauseException();
if (cause == null) {
throw (new SAXException(e.getMessage()));
} else if (cause instanceof SAXException) {
throw ((SAXException) cause);
} else {
throw (new SAXException(e.getMessage()));
}
}
}
public void makeEvent(ContentHandler handler) throws SAXException {
setContentHandler(handler);
makeEvent();
}
}