package org.xmlsmartdoc.SmartDoc.normalizer.hilight;
import java.util.*;
import java.lang.reflect.*;
import java.io.*;
import java.net.URL;
import java.net.MalformedURLException;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.w3c.dom.*;
/**
* UJAXP
*
* @since Feb. 20, 2000
* @version Sep. 11, 2001
* @author ASAMI, Tomoharu (asami@zeomtech.com)
*/
public final class UJAXP {
public final static int FLAG_NONE = 0x00;
public final static int FLAG_VALIDATION = 0x01;
public final static int FLAG_NAMESPACE_AWARE = 0x02;
public final static int FLAG_WHITESPACE = 0x04;
public final static int FLAG_EXPAND_ENTITY_REF = 0x08;
public final static int FLAG_IGNORE_COMMENTS = 0x10;
public final static int FLAG_COALESCING = 0x20;
private static ErrorHandler errorHandler;
private static EntityResolver entityResolver;
private static Map entityMap;
public static Document getDocument(File file, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(file.toURL(), flags));
}
public static Document getDocument(String uri, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(uri, flags, getErrorHandler()));
}
public static Document getDocument(URL url, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(url, flags, getErrorHandler()));
}
public static Document getDocument(InputStream in, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(in, flags, getErrorHandler()));
}
public static Document getDocument(InputSource is, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(is, flags, getErrorHandler()));
}
public static Document getDocument(Reader reader, int flags)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(reader, flags, getErrorHandler()));
}
public static Document getDocument(
File file,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
return (getDocument(file.toURL(), flags, handler));
}
public static Document getDocument(
String uri,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
_setup(factory, flags);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(adjustURI(uri));
return (doc);
}
public static Document getDocument(
URL url,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
_setup(factory, flags);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(url.toString());
return (doc);
}
public static Document getDocument(
InputStream in,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
_setup(factory, flags);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(in);
return (doc);
}
public static Document getDocument(
InputSource is,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
_setup(factory, flags);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(is);
return (doc);
}
public static Document getDocument(
Reader reader,
int flags,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
_setup(factory, flags);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(new InputSource(reader));
return (doc);
}
private static void _setup(DocumentBuilderFactory factory, int flags) {
if ((flags & FLAG_VALIDATION) != 0) {
factory.setValidating(true);
}
if ((flags & FLAG_NAMESPACE_AWARE) != 0) {
factory.setNamespaceAware(true);
}
}
//
public static Document getDocument(File file)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(file.toURL()));
}
public static Document getDocument(String uri)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(uri, getErrorHandler()));
}
public static Document getDocument(URL url)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(url, getErrorHandler()));
}
public static Document getDocument(InputStream in)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(in, getErrorHandler()));
}
public static Document getDocument(InputSource is)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(is, getErrorHandler()));
}
public static Document getDocument(Reader reader)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(reader, getErrorHandler()));
}
public static Document getDocument(File file, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
return (getDocument(file.toURL(), handler));
}
public static Document getDocument(String uri, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(adjustURI(uri));
return (doc);
}
public static Document getDocument(URL url, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(url.toString());
return (doc);
}
public static Document getDocument(InputStream in, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(in);
return (doc);
}
public static Document getDocument(InputSource is, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(is);
return (doc);
}
public static Document getDocument(Reader reader, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(new InputSource(reader));
return (doc);
}
public static Document getValidDocument(File file)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(file.toURL()));
}
public static Document getValidDocument(String uri)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(uri, getErrorHandler()));
}
public static Document getValidDocument(URL url)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(url, getErrorHandler()));
}
public static Document getValidDocument(InputStream in)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(in, getErrorHandler()));
}
public static Document getValidDocument(InputSource is)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(is, getErrorHandler()));
}
public static Document getValidDocument(Reader reader)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(reader, getErrorHandler()));
}
public static Document getValidDocument(File file, ErrorHandler handler)
throws IOException, SAXException, ParserConfigurationException {
return (getValidDocument(file.toURL(), handler));
}
public static Document getValidDocument(
String uri,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(adjustURI(uri));
return (doc);
}
public static Document getValidDocument(
URL url,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(url.toString());
return (doc);
}
public static Document getValidDocument(
InputStream in,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(in);
return (doc);
}
public static Document getValidDocument(
InputSource is,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(is);
return (doc);
}
public static Document getValidDocument(
Reader reader,
ErrorHandler handler
) throws IOException, SAXException, ParserConfigurationException {
if (handler == null) {
handler = getErrorHandler();
}
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.parse(new InputSource(reader));
return (doc);
}
public static Document makeDocument()
throws ParserConfigurationException {
return (makeDocument(getErrorHandler()));
}
public static Document makeDocument(ErrorHandler handler)
throws ParserConfigurationException {
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(handler);
builder.setEntityResolver(getEntityResolver());
Document doc = builder.newDocument();
return (doc);
}
public static ErrorHandler getErrorHandler() {
if (errorHandler == null) {
errorHandler = new DefaultErrorHandler();
}
return (errorHandler);
}
public static EntityResolver getEntityResolver() {
if (entityResolver == null) {
entityResolver = new DefaultEntityResolver();
}
return (entityResolver);
}
static class DefaultErrorHandler implements ErrorHandler {
public void error(SAXParseException e) {
System.err.print("error : ");
System.err.println(e.getMessage());
}
public void fatalError(SAXParseException e) {
System.err.print("fatal error : ");
System.err.println(e.getMessage());
}
public void warning(SAXParseException e) {
System.err.print("warning : ");
System.err.println(e.getMessage());
}
}
static class DefaultEntityResolver implements EntityResolver {
public InputSource resolveEntity(
String publicId,
String systemId
) {
if (!systemId.endsWith(".dtd")) {
URL url = getEntityResource(systemId);
if (url != null) {
return (new InputSource(url.toExternalForm()));
} else {
return (null);
}
}
if (canAccess(systemId)) {
return (new InputSource(systemId));
} else {
URL url = getEntityResource(systemId);
if (url != null) {
return (new InputSource(url.toExternalForm()));
} else {
StringReader reader = new StringReader("");
return (new InputSource(reader));
}
}
}
}
static String adjustURI(String uri) {
try {
URL url = makeURL(uri);
return (url.toExternalForm());
} catch (MalformedURLException e) {
return (uri);
}
}
static URL makeURL(String uri) throws MalformedURLException {
try {
return (new URL(uri));
} catch (MalformedURLException e) {
return (new File(uri).toURL());
}
}
static boolean canAccess(String uri) {
try {
URL url = makeURL(uri);
if ("file".equals(url.getProtocol())) {
String fileName = url.getFile();
return (new File(fileName).exists());
}
return (false); // skip http uri
} catch (IOException e) {
return (false);
}
}
public static void setErrorHandler(ErrorHandler handler) {
errorHandler = handler;
}
public static void setEntityResolver(EntityResolver resolver) {
entityResolver = resolver;
}
public static void setEntityResource(String systemId, URL resource) {
if (entityMap == null) {
entityMap = new HashMap();
}
entityMap.put(systemId, resource);
}
public static URL getEntityResource(String systemId) {
if (entityMap == null) {
return (null);
} else {
return ((URL)entityMap.get(systemId));
}
}
// test driver
public static void main(String[] args) throws Exception {
String className = args[0];
File file = new File(args[1]);
Class clazz = Class.forName(className);
Method setupMethod = clazz.getMethod(
"setup",
new Class[] { File.class }
);
Method makeMethod = clazz.getMethod(
"makeDocument",
new Class[0]
);
Object object = clazz.newInstance();
setupMethod.invoke(object, new Object[] { file });
Document doc = (Document)makeMethod.invoke(object, new Object[0]);
System.out.println(URelaxer.doc2String4Data(doc));
}
}