1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.xml.dom; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMException; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMImplementation; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DocumentType; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Provides a straightforward implementation of the corresponding W3C DOM 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interface. The class is used internally only, thus only notable members that 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are not in the original interface are documented (the W3C docs are quite 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extensive). Hope that's ok. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Some of the fields may have package visibility, so other classes belonging to 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the DOM implementation can easily access them while maintaining the DOM tree 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * structure. 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 34bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilsonpublic final class DOMImplementationImpl implements DOMImplementation { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Singleton instance. 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static DOMImplementationImpl instance; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMImplementationImpl() { 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Document createDocument(String namespaceURI, String qualifiedName, 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DocumentType doctype) throws DOMException { 445213a38431ea28c97d29e76c5b2d8e156c2d1705Jesse Wilson return new DocumentImpl(this, namespaceURI, qualifiedName, doctype, null); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DocumentType createDocumentType(String qualifiedName, 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String publicId, String systemId) throws DOMException { 498b2f7a2b953a0ae4f01f7632fab2f29fe4d14a64Jesse Wilson return new DocumentTypeImpl(null, qualifiedName, publicId, systemId); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasFeature(String feature, String version) { 5335d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson boolean anyVersion = version == null || version.length() == 0; 5435d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson if (feature.startsWith("+")) { 5535d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson feature = feature.substring(1); 5635d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5835d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson // TODO: fully implement these APIs: 5935d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson // "LS" (org.w3c.dom.ls) versions "3.0" 6035d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson // "ElementTraversal" (org.w3c.dom.traversal) versions "1.0" 61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 6235d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson if (feature.equalsIgnoreCase("Core")) { 6335d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson return anyVersion || version.equals("1.0") || version.equals("2.0") || version.equals("3.0"); 6435d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson } else if (feature.equalsIgnoreCase("XML")) { 6535d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson return anyVersion || version.equals("1.0") || version.equals("2.0") || version.equals("3.0"); 6635d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson } else if (feature.equalsIgnoreCase("XMLVersion")) { 6735d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson return anyVersion || version.equals("1.0") || version.equals("1.1"); 6835d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson } else { 6935d7c089bd45f1030407b9b69b46e66f02c03043Jesse Wilson return false; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Requests the singleton instance of the class. Creates it first, if 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * necessary. 76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The singleton Android DOMImplementationImpl instance. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static DOMImplementationImpl getInstance() { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (instance == null) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project instance = new DOMImplementationImpl(); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return instance; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public Object getFeature(String feature, String version) { 88503917e646b5ebd3f23dfe0cb41270cfe484693aJesse Wilson return hasFeature(feature, version) ? this : null; 89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 91