summaryrefslogtreecommitdiffstats
path: root/dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java')
-rw-r--r--dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java b/dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java
new file mode 100644
index 0000000..6df1a92
--- /dev/null
+++ b/dom/src/test/java/org/w3c/domts/DocumentBuilderSettingStrategy.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (c) 2001-2004 World Wide Web Consortium, (Massachusetts Institute of
+ * Technology, Institut National de Recherche en Informatique et en
+ * Automatique, Keio University). All Rights Reserved. This program is
+ * distributed under the W3C's Software Intellectual Property License. This
+ * program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See W3C License
+ * http://www.w3.org/Consortium/Legal/ for more details.
+ */
+
+package org.w3c.domts;
+
+import java.lang.reflect.Method;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/**
+ * This class is a strategy that provides the mapping from an abstract setting
+ * (such as DocumentBuilderSetting.validating) to a specific DOM implementation
+ *
+ * @author Curt Arnold @date 2 Feb 2002
+ */
+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) throws DOMTestIncompatibleException;
+
+ public abstract boolean hasSetting(DOMTestDocumentBuilderFactory factory);
+
+ public static final DocumentBuilderSettingStrategy coalescing =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value)
+ throws DOMTestIncompatibleException {
+ factory.setCoalescing(value);
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return factory.isCoalescing();
+ }
+
+ };
+
+ public static final DocumentBuilderSettingStrategy
+ expandEntityReferences =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value)
+ throws DOMTestIncompatibleException {
+ factory.setExpandEntityReferences(value);
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return factory.isExpandEntityReferences();
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy
+ ignoringElementContentWhitespace =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value)
+ throws DOMTestIncompatibleException {
+ factory.setIgnoringElementContentWhitespace(value);
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return factory.isIgnoringElementContentWhitespace();
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy ignoringComments =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value)
+ throws DOMTestIncompatibleException {
+ if (value) {
+ throw new DOMTestIncompatibleException(
+ new Exception("ignoreComments=true not supported"),
+ DocumentBuilderSetting.ignoringComments);
+ }
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return false;
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy namespaceAware =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value) throws
+ DOMTestIncompatibleException {
+ factory.setNamespaceAware(value);
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return factory.isNamespaceAware();
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy validating =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value) throws
+ DOMTestIncompatibleException {
+ factory.setValidating(value);
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return factory.isValidating();
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy signed =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value) throws
+ DOMTestIncompatibleException {
+ if (!value) {
+ throw new DOMTestIncompatibleException(
+ null,
+ DocumentBuilderSetting.notSigned);
+ }
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return true;
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy hasNullString =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value) throws
+ DOMTestIncompatibleException {
+ if (!value) {
+ throw new DOMTestIncompatibleException(
+ null,
+ DocumentBuilderSetting.notHasNullString);
+ }
+ }
+
+ public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
+ return true;
+ }
+ };
+
+ public static final DocumentBuilderSettingStrategy schemaValidating =
+ new DocumentBuilderSettingStrategy() {
+ public void applySetting(DocumentBuilderFactory factory, boolean value) throws
+ DOMTestIncompatibleException {
+ 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(DOMTestDocumentBuilderFactory 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;
+ }
+
+ };
+
+}