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