1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.org.w3c.dom; 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method; 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.xml.parsers.DocumentBuilderFactory; 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class DocumentBuilderSettingStrategy { 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected DocumentBuilderSettingStrategy() { 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasConflict(DocumentBuilderSettingStrategy other) { 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (other == this); 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void applySetting(DocumentBuilderFactory factory, 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean value); 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean hasSetting(DOMDocumentBuilderFactory factory); 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy coalescing = new DocumentBuilderSettingStrategy() { 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean value) { 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setCoalescing(value); 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return factory.isCoalescing(); 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy expandEntityReferences = new DocumentBuilderSettingStrategy() { 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setExpandEntityReferences(value); 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return factory.isExpandEntityReferences(); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy ignoringElementContentWhitespace = new DocumentBuilderSettingStrategy() { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setIgnoringElementContentWhitespace(value); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return factory.isIgnoringElementContentWhitespace(); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy ignoringComments = new DocumentBuilderSettingStrategy() { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (value) { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("ignoreComments=true not supported"); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy namespaceAware = new DocumentBuilderSettingStrategy() { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setNamespaceAware(value); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return factory.isNamespaceAware(); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy validating = new DocumentBuilderSettingStrategy() { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setValidating(value); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return factory.isValidating(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy signed = new DocumentBuilderSettingStrategy() { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!value) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("DocumentBuilderSetting.notSigned"); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy hasNullString = new DocumentBuilderSettingStrategy() { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!value) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("DocumentBuilderSetting.notHasNullString"); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final DocumentBuilderSettingStrategy schemaValidating = new DocumentBuilderSettingStrategy() { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applySetting(DocumentBuilderFactory factory, boolean value) 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (value) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setNamespaceAware(true); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setValidating(true); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setAttribute(JAXP_SCHEMA_LANGUAGE, 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://www.w3.org/TR/REC-xml"); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasSetting(DOMDocumentBuilderFactory factory) { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (factory.isValidating()) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method getAttrMethod = factory.getClass().getMethod( 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "getAttribute", new Class[] { String.class }); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String val = (String) getAttrMethod.invoke(factory, 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Object[] { JAXP_SCHEMA_LANGUAGE }); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return W3C_XML_SCHEMA.equals(val); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // schema validating conflicts with namespaceAware 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // and validating 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasConflict(DocumentBuilderSettingStrategy other) { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (other == this 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || other == DocumentBuilderSettingStrategy.namespaceAware 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || other == DocumentBuilderSettingStrategy.validating) { 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 159