| package tests.org.w3c.dom; |
| |
| import java.lang.reflect.Method; |
| |
| import javax.xml.parsers.DocumentBuilderFactory; |
| |
| public abstract class DocumentBuilderSettingStrategy { |
| protected DocumentBuilderSettingStrategy() { |
| } |
| |
| private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; |
| |
| private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; |
| |
| public boolean hasConflict(DocumentBuilderSettingStrategy other) { |
| return (other == this); |
| } |
| |
| public abstract void applySetting(DocumentBuilderFactory factory, |
| boolean value); |
| |
| public abstract boolean hasSetting(DOMDocumentBuilderFactory factory); |
| |
| public static final DocumentBuilderSettingStrategy coalescing = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, |
| boolean value) { |
| factory.setCoalescing(value); |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return factory.isCoalescing(); |
| } |
| |
| }; |
| |
| public static final DocumentBuilderSettingStrategy expandEntityReferences = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) { |
| factory.setExpandEntityReferences(value); |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return factory.isExpandEntityReferences(); |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy ignoringElementContentWhitespace = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) { |
| factory.setIgnoringElementContentWhitespace(value); |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return factory.isIgnoringElementContentWhitespace(); |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy ignoringComments = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) { |
| if (value) { |
| System.out.println("ignoreComments=true not supported"); |
| } |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return false; |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy namespaceAware = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) |
| { |
| factory.setNamespaceAware(value); |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return factory.isNamespaceAware(); |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy validating = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) |
| { |
| factory.setValidating(value); |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return factory.isValidating(); |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy signed = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) |
| { |
| if (!value) { |
| System.out.println("DocumentBuilderSetting.notSigned"); |
| } |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return true; |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy hasNullString = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) |
| { |
| if (!value) { |
| System.out.println("DocumentBuilderSetting.notHasNullString"); |
| } |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| return true; |
| } |
| }; |
| |
| public static final DocumentBuilderSettingStrategy schemaValidating = new DocumentBuilderSettingStrategy() { |
| public void applySetting(DocumentBuilderFactory factory, boolean value) |
| { |
| if (value) { |
| factory.setNamespaceAware(true); |
| factory.setValidating(true); |
| factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); |
| } else { |
| factory.setAttribute(JAXP_SCHEMA_LANGUAGE, |
| "http://www.w3.org/TR/REC-xml"); |
| } |
| } |
| |
| public boolean hasSetting(DOMDocumentBuilderFactory factory) { |
| try { |
| if (factory.isValidating()) { |
| Method getAttrMethod = factory.getClass().getMethod( |
| "getAttribute", new Class[] { String.class }); |
| String val = (String) getAttrMethod.invoke(factory, |
| new Object[] { JAXP_SCHEMA_LANGUAGE }); |
| return W3C_XML_SCHEMA.equals(val); |
| } |
| } catch (Exception ex) { |
| } |
| return false; |
| } |
| |
| // |
| // schema validating conflicts with namespaceAware |
| // and validating |
| // |
| public boolean hasConflict(DocumentBuilderSettingStrategy other) { |
| if (other == this |
| || other == DocumentBuilderSettingStrategy.namespaceAware |
| || other == DocumentBuilderSettingStrategy.validating) { |
| return true; |
| } |
| return false; |
| } |
| |
| }; |
| |
| } |