1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (c) 2001-2004 World Wide Web Consortium,
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (Massachusetts Institute of Technology, Institut National de
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Recherche en Informatique et en Automatique, Keio University). All
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rights Reserved. This program is distributed under the W3C's Software
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Intellectual Property License. This program is distributed in the
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PURPOSE.
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  $Log: DOM4JTestDocumentBuilderFactory.java,v $
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  Revision 1.2  2004/03/11 01:44:21  dom-ts-4
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  Checkstyle fixes (bug 592)
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  Revision 1.1  2002/02/03 07:47:51  dom-ts-4
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  More missing files
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.w3c.domts;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Constructor;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMImplementation;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.XMLReader;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   This class implements the generic parser and configuation
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   abstract class for JAXP supporting parsers.
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class DOM4JTestDocumentBuilderFactory
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    extends DOMTestDocumentBuilderFactory {
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final Object domFactory;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final Object saxReader;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final org.xml.sax.XMLReader xmlReader;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private org.w3c.dom.DOMImplementation domImpl;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final Method readMethod;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * Creates a JAXP implementation of DOMTestDocumentBuilderFactory.
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * @param factory null for default JAXP provider.  If not null,
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * factory will be mutated in constructor and should be released
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * by calling code upon return.
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * @param XMLReader if null use default XMLReader.  If provided,
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * it may be mutated and should be released by the caller immediately
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * after the constructor.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * @param settings array of settings, may be null.
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public DOM4JTestDocumentBuilderFactory(DocumentBuilderSetting[] settings) throws
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      DOMTestIncompatibleException {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    super(settings);
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    try {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //   The following reflection code is trying to accomplish
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //domFactory = org.dom4j.dom.DOMDocumentFactory.getInstance();
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //domImpl = (DOMImplementation) domFactory;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //saxReader = new org.dom4j.io.SAXReader(domFactory);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      //xmlReader = saxReader.getXMLReader();
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      ClassLoader classLoader = ClassLoader.getSystemClassLoader();
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Class domFactoryClass = classLoader.loadClass(
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          "org.dom4j.dom.DOMDocumentFactory");
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method getInstance = domFactoryClass.getMethod("getInstance", new Class[] {});
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      domFactory = getInstance.invoke(null, new Object[] {});
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      domImpl = (DOMImplementation) domFactory;
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Class saxReaderClass = classLoader.loadClass("org.dom4j.io.SAXReader");
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Constructor saxReaderConstructor = saxReaderClass.getConstructor(
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[] {classLoader.loadClass("org.dom4j.DocumentFactory")});
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      saxReader = saxReaderConstructor.newInstance(new Object[] {domFactory});
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method getReaderMethod = saxReaderClass.getMethod("getXMLReader",
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[] {});
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      xmlReader = (XMLReader) getReaderMethod.invoke(saxReader, new Object[0]);
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      readMethod = saxReaderClass.getMethod("read", new Class[] {java.net.URL.class});
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (InvocationTargetException ex) {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestIncompatibleException(ex.getTargetException(), null);
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (Exception ex) {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestIncompatibleException(ex, null);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //   TODO: Process settings
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public DOMTestDocumentBuilderFactory newInstance(DocumentBuilderSetting[]
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      newSettings) throws DOMTestIncompatibleException {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    if (newSettings == null) {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return this;
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    DocumentBuilderSetting[] mergedSettings = mergeSettings(newSettings);
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return new DOM4JTestDocumentBuilderFactory(mergedSettings);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public Document load(java.net.URL url) throws DOMTestLoadException {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    if (url == null) {
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new NullPointerException("url");
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    if (saxReader == null) {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new NullPointerException("saxReader");
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    try {
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return (org.w3c.dom.Document) readMethod.invoke(saxReader,
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Object[] {url});
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (InvocationTargetException ex) {
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      ex.getTargetException().printStackTrace();
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestLoadException(ex.getTargetException());
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (Exception ex) {
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      ex.printStackTrace();
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestLoadException(ex);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public DOMImplementation getDOMImplementation() {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return domImpl;
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean hasFeature(String feature, String version) {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return domImpl.hasFeature(feature, version);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isCoalescing() {
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return false;
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isExpandEntityReferences() {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return false;
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isIgnoringElementContentWhitespace() {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return false;
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isNamespaceAware() {
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return true;
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isValidating() {
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return false;
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
155