blob: 6fd65502802a61a350164b9fce611cd81721e03f [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.xml.parsers;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Defines a bridge from XML sources (files, stream etc.) to DOM trees. Can be
* used for easily obtaining a {@link org.w3c.dom.Document} for the input. The
* class itself is abstract. The class {@link DocumentBuilderFactory} is able to
* provide instances (of concrete subclasses known to the system).
*
* @since Android 1.0
*/
public abstract class DocumentBuilder {
/**
* Do-nothing constructor. Prevents instantiation. To be overridden by
* concrete subclasses.
*
* @since Android 1.0
*/
protected DocumentBuilder() {
// Does nothing.
}
/**
* Queries the DOM implementation this {@code DocumentBuilder} is working
* on.
*
* @return the DOM implementation
*
* @since Android 1.0
*/
public abstract DOMImplementation getDOMImplementation();
// TODO No XSchema support in Android 1.0. Maybe later.
// /**
// * Queries the XML schema used by the DocumentBuilder.
// *
// * @return The XML schema
// *
// * @throws UnsupportedOperationException when the underlying implementation
// * doesn't support XML schemas.
// */
// public javax.xml.validation.Schema getSchema() throws
// UnsupportedOperationException {
// throw new UnsupportedOperationException();
// }
/**
* Queries whether the {@code DocumentBuilder} has namespace support
* enabled.
*
* @return {@code true} if namespaces are turned on, {@code false}
* otherwise.
*
* @since Android 1.0
*/
public abstract boolean isNamespaceAware();
/**
* Queries whether the {@code DocumentBuilder} has validation support
* enabled.
*
* @return {@code true} if validation is turned on, {@code false} otherwise.
*
* @since Android 1.0
*/
public abstract boolean isValidating();
/**
* Queries whether the {@code DocumentBuilder} has XInclude support enabled.
*
* @return {@code true} if XInclude support is turned on, {@code false}
* otherwise.
*
* @throws UnsupportedOperationException if the underlying implementation
* doesn't support XInclude.
*
* @since Android 1.0
*/
public boolean isXIncludeAware() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
/**
* Creates a new, empty document, serving as the starting point for a DOM
* tree.
*
* @return the document.
*
* @since Android 1.0
*/
public abstract Document newDocument();
/**
* Parses a given XML file and builds a DOM tree from it.
*
* @param file the file to be parsed.
* @return the document element that represents the root of the DOM tree.
*
* @throws SAXException if the XML parsing fails.
* @throws IOException if an input/output error occurs.
*
* @since Android 1.0
*/
public Document parse(File file) throws SAXException, IOException {
if (file == null) {
throw new IllegalArgumentException();
}
return parse(new BufferedInputStream(new FileInputStream(file), 8192));
}
/**
* Parses a given XML input stream and builds a DOM tree from it.
*
* @param stream the stream to be parsed.
* @return the document element that represents the root of the DOM tree.
*
* @throws SAXException if the XML parsing fails.
* @throws IOException if an input/output error occurs.
*
* @since Android 1.0
*/
public Document parse(InputStream stream) throws SAXException, IOException {
if (stream == null) {
throw new IllegalArgumentException();
}
return parse(new InputSource(stream));
}
/**
* Parses a given XML input stream and builds a DOM tree from it.
*
* @param stream the stream to be parsed.
* @param systemId the base for resolving relative URIs.
* @return the document element that represents the root of the DOM tree.
*
* @throws SAXException if the XML parsing fails.
* @throws IOException if an input/output error occurs.
*
* @since Android 1.0
*/
public org.w3c.dom.Document parse(InputStream stream, String systemId)
throws SAXException, IOException {
if (stream == null) {
throw new IllegalArgumentException();
}
InputSource source = new InputSource(stream);
source.setSystemId(systemId);
return parse(source);
}
/**
* Parses an XML input stream from a given URI and builds a DOM tree from
* it.
*
* @param uri the URI to fetch the XML stream from.
* @return the document element that represents the root of the DOM tree.
*
* @throws SAXException if the XML parsing fails.
* @throws IOException if an input/output error occurs.
*
* @since Android 1.0
*/
public org.w3c.dom.Document parse(String uri) throws SAXException,
IOException {
if (uri == null) {
throw new IllegalArgumentException();
}
return parse(new InputSource(uri));
}
/**
* Parses an XML input source and builds a DOM tree from it.
*
* @param source the input source to parse.
* @return the document element that represents the root of the DOM tree.
*
* @throws SAXException if the XML parsing fails.
* @throws IOException if an input/output error occurs.
*
* @since Android 1.0
*/
public abstract org.w3c.dom.Document parse(InputSource source)
throws SAXException, IOException;
/**
* Resets the DocumentBuilder to the same state is was in after its
* creation.
*
* @since Android 1.0
*/
public void reset() {
// Do nothing.
}
/**
* Sets the {@link EntityResolver} used for resolving entities encountered
* during the parse process. Passing {@code null} results in the
* {@code DocumentBuilder}'s own {@code EntityResolver} being used.
*
* @param resolver the {@code EntityResolver} to use, or null for the
* built-in one.
*
* @since Android 1.0
*/
public abstract void setEntityResolver(EntityResolver resolver);
/**
* Sets the {@link ErrorHandler} used for dealing with errors encountered
* during the parse process. Passing {@code null} results in the
* {@code DocumentBuilder}'s own {@code ErrorHandler} being used.
*
* @param handler the {@code ErrorHandler} to use, or {@code null} for the
* built-in one.
*
* @since Android 1.0
*/
public abstract void setErrorHandler(ErrorHandler handler);
}