1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (c) 2002 World Wide Web Consortium,
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (Massachusetts Institute of Technology, Institut National de
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Recherche en Informatique et en Automatique, Keio University). All
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Rights Reserved. This program is distributed under the W3C's Software
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Intellectual Property License. This program is distributed in the
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PURPOSE.
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.w3c.domts;
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Constructor;
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Method;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.xml.parsers.ParserConfigurationException;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.xml.parsers.SAXParser;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.xml.parsers.SAXParserFactory;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.w3c.dom.DOMImplementation;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.w3c.dom.Document;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.AttributeList;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.Attributes;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.DocumentHandler;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.SAXException;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.helpers.DefaultHandler;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *   This class implements the generic parser and configuation
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *   abstract class the HTML DOM implementation in Xerces-J
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class XercesHTMLDocumentBuilderFactory
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    extends DOMTestDocumentBuilderFactory {
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private SAXParserFactory factory;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private Constructor htmlBuilderConstructor;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private Method getHTMLDocumentMethod;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private DOMImplementation domImpl;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private static final Class[] NO_CLASSES = new Class[0];
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private static final Object[] NO_OBJECTS = new Object[0];
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /**
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * Creates a implementation of DOMTestDocumentBuilderFactory
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * using org.apache.html.dom.HTMLBuilder
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * @param settings array of settings, may be null.
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public XercesHTMLDocumentBuilderFactory(DocumentBuilderSetting[] settings) throws
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      DOMTestIncompatibleException {
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    super(settings);
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    try {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      ClassLoader classLoader = ClassLoader.getSystemClassLoader();
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      Class htmlBuilderClass =
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          classLoader.loadClass("org.apache.html.dom.HTMLBuilder");
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilderConstructor =
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          htmlBuilderClass.getConstructor(NO_CLASSES);
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      getHTMLDocumentMethod =
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          htmlBuilderClass.getMethod("getHTMLDocument", NO_CLASSES);
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      Class htmlDOMImpl =
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          classLoader.loadClass(
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          "org.apache.html.dom.HTMLDOMImplementationImpl");
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      Method method =
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          htmlDOMImpl.getMethod("getHTMLDOMImplementation", NO_CLASSES);
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      domImpl = (DOMImplementation) method.invoke(null, NO_OBJECTS);
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      Class saxFactoryClass =
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          classLoader.loadClass(
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          "org.apache.xerces.jaxp.SAXParserFactoryImpl");
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      factory = (SAXParserFactory) saxFactoryClass.newInstance();
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (InvocationTargetException ex) {
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestIncompatibleException(
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          ex.getTargetException(),
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          null);
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (Exception ex) {
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestIncompatibleException(ex, null);
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    apply settings to selected document builder
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         may throw exception if incompatible
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (settings != null) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      for (int i = 0; i < settings.length; i++) {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //        settings[i].applySetting(factory);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    try {
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      factory.newSAXParser();
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (ParserConfigurationException ex) {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestIncompatibleException(ex, null);
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (SAXException ex) {
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestIncompatibleException(ex, null);
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public DOMTestDocumentBuilderFactory newInstance(DocumentBuilderSetting[]
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      newSettings) throws DOMTestIncompatibleException {
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (newSettings == null) {
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return this;
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    DocumentBuilderSetting[] mergedSettings = mergeSettings(newSettings);
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return new XercesHTMLDocumentBuilderFactory(mergedSettings);
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private class HTMLHandler
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      extends DefaultHandler
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      implements AttributeList {
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final DocumentHandler htmlBuilder;
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final Method getHTMLDocumentMethod;
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Attributes currentAttributes;
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public HTMLHandler(
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Constructor htmlBuilderConstructor,
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Method getHTMLDocumentMethod) throws Exception {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder =
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          (DocumentHandler) htmlBuilderConstructor.newInstance(
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          new Object[0]);
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      this.getHTMLDocumentMethod = getHTMLDocumentMethod;
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void startDocument() throws SAXException {
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.startDocument();
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void endDocument() throws SAXException {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.endDocument();
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void startElement(
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String uri,
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String localName,
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String qName,
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Attributes attributes) throws SAXException {
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      currentAttributes = attributes;
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.startElement(qName, this);
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void endElement(String uri, String localName, String qName) throws
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SAXException {
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.endElement(qName);
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void characters(char ch[], int start, int length) throws
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SAXException {
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.characters(ch, start, length);
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void ignorableWhitespace(char ch[], int start, int length) throws
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SAXException {
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.ignorableWhitespace(ch, start, length);
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void processingInstruction(String target, String data) throws
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SAXException {
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      htmlBuilder.processingInstruction(target, data);
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Document getHTMLDocument() throws Exception {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return (Document) getHTMLDocumentMethod.invoke(
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          htmlBuilder,
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          NO_OBJECTS);
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getLength() {
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getLength();
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getName(int i) {
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getQName(i);
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getType(int i) {
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getType(i);
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getValue(int i) {
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getValue(i);
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getType(String name) {
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getType(name);
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getValue(String name) {
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return currentAttributes.getValue(name);
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public Document load(java.net.URL url) throws DOMTestLoadException {
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Document doc = null;
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    try {
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      SAXParser parser = factory.newSAXParser();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      HTMLHandler handler =
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          new HTMLHandler(htmlBuilderConstructor, getHTMLDocumentMethod);
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      parser.parse(url.toString(), handler);
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      doc = handler.getHTMLDocument();
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (Exception ex) {
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestLoadException(ex);
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return doc;
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public DOMImplementation getDOMImplementation() {
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return domImpl;
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean hasFeature(String feature, String version) {
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return domImpl.hasFeature(feature, version);
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean isCoalescing() {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return false;
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean isExpandEntityReferences() {
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return false;
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean isIgnoringElementContentWhitespace() {
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return false;
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean isNamespaceAware() {
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isNamespaceAware();
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean isValidating() {
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isValidating();
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public static DocumentBuilderSetting[] getConfiguration1() {
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return new DocumentBuilderSetting[] {
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notCoalescing,
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notExpandEntityReferences,
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notIgnoringElementContentWhitespace,
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notNamespaceAware,
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notValidating};
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public static DocumentBuilderSetting[] getConfiguration2() {
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return new DocumentBuilderSetting[] {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.notCoalescing,
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.expandEntityReferences,
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.ignoringElementContentWhitespace,
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.namespaceAware,
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DocumentBuilderSetting.validating};
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
262