svn commit: r463125 - in /xml/xindice/trunk: ./ java/dom3/ java/dom3/org/ java/dom3/org/w3c/ java/dom3/org/w3c/dom/ java/src/org/apache/xindice/util/ java/src/org/apache/xindice/xml/dom/ java/src/org/apache/xindice/xml/jaxp/ java/tests/src/org/apache/x...

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
Author: vgritsenko
Date: Wed Oct 11 20:35:06 2006
New Revision: 463125

URL: http://svn.apache.org/viewvc?view=rev&rev=463125
Log:
work in progress - adding dom 3 stuff.
preserves jdk 1.3 compatibility.

Added:
    xml/xindice/trunk/java/dom3/
    xml/xindice/trunk/java/dom3/org/
    xml/xindice/trunk/java/dom3/org/w3c/
    xml/xindice/trunk/java/dom3/org/w3c/dom/
    xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java   (with props)
    xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java   (with props)
    xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java   (with props)
    xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java   (with props)
    xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java   (with props)
Modified:
    xml/xindice/trunk/build.properties
    xml/xindice/trunk/build.xml
    xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/AttrImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ContainerNodeImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMImplementationImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentTypeImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NotationImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/TextImpl.java
    xml/xindice/trunk/java/src/org/apache/xindice/xml/jaxp/DocumentBuilderFactoryImpl.java

Modified: xml/xindice/trunk/build.properties
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/build.properties?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/build.properties (original)
+++ xml/xindice/trunk/build.properties Wed Oct 11 20:35:06 2006
@@ -2,11 +2,11 @@
 # Xindice build properties.
 #
 # NOTE: do not modify this file directly but copy the properties you need
-# to modify over to a file named 'local.build.properties' and modify that. 
-# The build system will override these properties with the ones in the 
+# to modify over to a file named 'local.build.properties' and modify that.
+# The build system will override these properties with the ones in the
 # 'local.build.properties' file.
 #
-# CVS $Id$
+# $Id$
 #
 
 
@@ -87,6 +87,7 @@
 root.dir=java
 jar.dir=${root.dir}/lib
 src.dir=${root.dir}/src
+dom.src.dir=${root.dir}/dom3
 test.src.dir=${root.dir}/tests/src
 scratchpad.src.dir=${root.dir}/scratchpad/src
 scratchpad.jar.dir=${root.dir}/scratchpad/lib
@@ -94,6 +95,7 @@
 # Destination directories
 build.dir=build
 src.build.dir=${build.dir}/classes
+dom.build.dir=${build.dir}/classes-dom
 test.build.dir=${build.dir}/classes-tests
 test.result.dir=${build.dir}/test-results
 test.report.dir=${build.dir}/test-report

Modified: xml/xindice/trunk/build.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/build.xml?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/build.xml (original)
+++ xml/xindice/trunk/build.xml Wed Oct 11 20:35:06 2006
@@ -94,13 +94,22 @@
         <delete dir="${dist.dir}"/>
     </target>
 
-    <!-- 
+    <!--
       - Compiles the source code
       -->
-    <target name="src-build" depends="init, clover.on">
+    <target name="dom-build" depends="init, clover.on">
+        <mkdir dir="${dom.build.dir}"/>
+        <javac srcdir="${dom.src.dir}" destdir="${dom.build.dir}" debug="${compile.debug}" optimize="${compile.optimize}" nowarn="${compile.nowarn}" deprecation="${compile.deprecation}" verbose="${compile.verbose}">
+            <classpath>
+                <path refid="project.class.path"/>
+            </classpath>
+        </javac>
+    </target>
+    <target name="src-build" depends="dom-build">
         <mkdir dir="${src.build.dir}"/>
         <javac srcdir="${src.dir}" destdir="${src.build.dir}" debug="${compile.debug}" optimize="${compile.optimize}" nowarn="${compile.nowarn}" deprecation="${compile.deprecation}" verbose="${compile.verbose}">
             <classpath>
+                <path path="${dom.build.dir}"/>
                 <path refid="project.class.path"/>
             </classpath>
         </javac>
@@ -268,7 +277,14 @@
     <!--
       - Build the Xindice archives (jar and war)
       -->
-    <target name="jar-release" depends="src-build, test-build">
+    <target name="dom-release" depends="dom-build">
+        <jar jarfile="${dist.dir}/${project.filename}-dom-${project.version}.jar" basedir="${dom.build.dir}">
+            <manifest>
+                <attribute name="Built-By" value="${user.name}"/>
+            </manifest>
+        </jar>
+    </target>
+    <target name="jar-release" depends="dom-release, src-build, test-build">
         <jar jarfile="${dist.dir}/${project.filename}-${project.version}.jar" basedir="${src.build.dir}">
             <manifest>
                 <attribute name="Built-By" value="${user.name}"/>
@@ -280,6 +296,7 @@
     </target>
     <target name="jar-clean">
         <delete file="${dist.dir}/${project.filename}-${project.version}.jar"/>
+        <delete file="${dist.dir}/${project.filename}-dom-${project.version}.jar"/>
     </target>
     <target name="war-release" depends="jar-release">
         <mkdir dir="${build.dir}/war-bin"/>
@@ -288,7 +305,6 @@
         <copy file="${bin.dir}/xindice.war.sh" toFile="${build.dir}/war-bin/xindice.sh" filtering="on"/>
         <copy file="${bin.dir}/lcp.bat" toFile="${build.dir}/war-bin/lcp.bat" filtering="on"/>
         <war destfile="${dist.dir}/${project.filename}-${project.version}.war" update="false" webxml="config/web.xml">
-            <classes dir="${src.build.dir}"/>
             <webinf dir="${config.dir}">
                 <include name="system.xml"/>
             </webinf>
@@ -299,6 +315,8 @@
                 <include name="*"/>
             </webinf>
             <lib refid="core.jars"/>
+            <lib file="${dist.dir}/${project.filename}-${project.version}.jar"/>
+            <lib file="${dist.dir}/${project.filename}-dom-${project.version}.jar"/>
             <manifest>
                 <attribute name="Built-By" value="${user.name}"/>
                 <section name="org/apache/xindice">

Added: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java?view=auto&rev=463125
==============================================================================
--- xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java (added)
+++ xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java Wed Oct 11 20:35:06 2006
@@ -0,0 +1,11 @@
+package org.w3c.dom;
+
+/**
+ * @version $Id$
+ */
+public interface DOMConfiguration {
+    public void setParameter(String name, Object value) throws DOMException;
+    public Object getParameter(String name) throws DOMException;
+    boolean canSetParameter(String name, Object value);
+    public DOMStringList getParameterNames();
+}

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java?view=auto&rev=463125
==============================================================================
--- xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java (added)
+++ xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java Wed Oct 11 20:35:06 2006
@@ -0,0 +1,10 @@
+package org.w3c.dom;
+
+/**
+ * @version $Id$
+ */
+public interface DOMStringList {
+    public String item(long index);
+    public long getLength();
+    public boolean contains(String str);
+}

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/DOMStringList.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java?view=auto&rev=463125
==============================================================================
--- xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java (added)
+++ xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java Wed Oct 11 20:35:06 2006
@@ -0,0 +1,15 @@
+package org.w3c.dom;
+
+/**
+ * @version $Id$
+ */
+public interface TypeInfo {
+    public static final int DERIVATION_RESTRICTION    = 0x00000001;
+    public static final int DERIVATION_EXTENSION      = 0x00000002;
+    public static final int DERIVATION_UNION          = 0x00000004;
+    public static final int DERIVATION_LIST           = 0x00000008;
+
+    public String getTypeName();
+    public String getTypeNamespace();
+    public boolean isDerivedFrom(String typeNamespaceArg, String typeNameArg, int derivationMethod);
+}

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/TypeInfo.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java?view=auto&rev=463125
==============================================================================
--- xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java (added)
+++ xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java Wed Oct 11 20:35:06 2006
@@ -0,0 +1,16 @@
+package org.w3c.dom;
+
+/**
+ * @version $Id$
+ */
+public interface UserDataHandler {
+
+  // OperationType
+  public static final short NODE_CLONED = 1;
+  public static final short NODE_IMPORTED = 2;
+  public static final short NODE_DELETED = 3;
+  public static final short NODE_RENAMED = 4;
+  public static final short NODE_ADOPTED = 5;
+
+  public void handle(short operation, String key, Object data, Node src, Node dst);
+}
\ No newline at end of file

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/dom3/org/w3c/dom/UserDataHandler.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java Wed Oct 11 20:35:06 2006
@@ -216,4 +216,12 @@
         }
         return sb.toString();
     }
+
+    public static boolean equals(String s1, String s2) {
+        if (s1 == null || s2 == null) {
+            return (s1 == null && s2 == null) || "".equals(s1) || "".equals(s2);
+        } else {
+            return s1.equals(s2);
+        }
+    }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/AttrImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/AttrImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/AttrImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/AttrImpl.java Wed Oct 11 20:35:06 2006
@@ -19,20 +19,23 @@
 package org.apache.xindice.xml.dom;
 
 import org.w3c.dom.Attr;
+import org.w3c.dom.Node;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
+import org.w3c.dom.TypeInfo;
 
 /**
  * AttrImpl
  *
  * @version CVS $Revision$, $Date$
  */
-public final class AttrImpl extends ContainerNodeImpl implements Attr {
+public final class AttrImpl extends ContainerNodeImpl
+                            implements Attr {
 
     private boolean specified = true;
     private short symbolID = -1;
 
+
     public AttrImpl() {
     }
 
@@ -100,9 +103,7 @@
     }
 
     protected void checkLoaded() {
-        if (loaded) {
-            return;
-        } else {
+        if (!loaded) {
             loaded = true;
         }
     }
@@ -140,7 +141,8 @@
     /**
      * On retrieval, the value of the attribute is returned as a string.
      * Character and general entity references are replaced with their values.
-     * <br>On setting, this creates a <code>Text</code> node with the unparsed
+     * <br>
+     * On setting, this creates a <code>Text</code> node with the unparsed
      * contents of the string.
      */
     public String getValue() {
@@ -153,15 +155,36 @@
         for (int i = 0; i < size; i++) {
             sb.append(childNodes.item(i).getNodeValue());
         }
-        
+
         return sb.toString();
     }
 
+    /**
+     * @since DOM Level 2
+     */
     public Element getOwnerElement() {
         if (parentNode.getNodeType() == Node.ELEMENT_NODE) {
             return (Element) parentNode;
         } else {
             return null;
         }
+    }
+
+    //
+    // DOM Level 3 Implementation
+    //
+
+    /**
+     * @since DOM Level 3
+     */
+    public TypeInfo getSchemaTypeInfo() {
+        return null;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public boolean isId() {
+        return false;
     }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ContainerNodeImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ContainerNodeImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ContainerNodeImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ContainerNodeImpl.java Wed Oct 11 20:35:06 2006
@@ -41,7 +41,7 @@
  * ContainerNodeImpl performs most of the child-rearing behavior of the
  * Element and Document implementations.
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public abstract class ContainerNodeImpl extends NodeImpl {
 
@@ -443,13 +443,14 @@
         };
 
         NodeIterator iter = ((DocumentTraversal) getOwnerDocument()).createNodeIterator(this, NodeFilter.SHOW_ELEMENT, filter, false);
-        Node node = null;
+        Node node;
         do {
             node = iter.nextNode();
             if (node != null) {
                 list.add(node);
             }
         } while (node != null);
+
         return list;
     }
 
@@ -468,17 +469,74 @@
         };
 
         NodeIterator iter = ((DocumentTraversal) getOwnerDocument()).createNodeIterator(this, NodeFilter.SHOW_ELEMENT, filter, false);
-        Node node = null;
+        Node node;
         do {
             node = iter.nextNode();
             if (node != null) {
                 list.add(node);
             }
         } while (node != null);
+
         return list;
     }
 
     public final Element getElementById(String elementId) {
         return null;
+    }
+
+    //
+    // DOM Level 3 Implementation
+    //
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getTextContent() {
+        StringBuffer val = new StringBuffer();
+
+        NodeList children = getChildNodes();
+        if (children == null || children.getLength() == 0) {
+            return "";
+        }
+
+        for (int i = 0; i < children.getLength(); i++ ) {
+            val.append(((NodeImpl) children.item(i)).getTextContent());
+        }
+        return val.toString();
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public boolean isEqualNode(Node other) {
+        if (!super.isEqualNode(other)) {
+            return false;
+        }
+
+        // The childNodes NodeLists have to be equal
+        other.normalize();
+        normalize();
+
+        if (!hasChildNodes() && !other.hasChildNodes()) {
+            return true;
+        }
+
+        if (!hasChildNodes() || !other.hasChildNodes()) {
+            return false;
+        }
+
+        NodeList thisChildren = getChildNodes();
+        NodeList otherChildren = other.getChildNodes();
+        if (thisChildren.getLength() != otherChildren.getLength()) {
+            return false;
+        }
+
+        for (int i = 0; i < thisChildren.getLength(); i++) {
+            if (!((NodeImpl) thisChildren.item(i)).isEqualNode(otherChildren.item(i))) {
+                return false;
+            }
+        }
+
+        return true;
     }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMImplementationImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMImplementationImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMImplementationImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMImplementationImpl.java Wed Oct 11 20:35:06 2006
@@ -27,33 +27,35 @@
 /**
  * DOMImplementationImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class DOMImplementationImpl implements DOMImplementation {
+
     private static final String[][] FEATURES = {
-        {"XML", "1.0"},
-        {"XML", "2.0"},
-        {"Traversal", "2.0"},
-        {"Xindice-DB", "1.0"}, // DBNode and DBDocument
+        {"XML",          "1.0"},
+        {"XML",          "2.0"},
+        {"Traversal",    "2.0"},
+        {"Xindice-DB",   "1.0"}, // DBNode and DBDocument
         {"Xindice-Comp", "1.0"}  // CompressedNode and CompressedDocument
     };
 
-    private static final DOMImplementation domImpl = new DOMImplementationImpl();
+    private static final DOMImplementation IMPL = new DOMImplementationImpl();
+
 
     private DOMImplementationImpl() {
     }
 
     public static DOMImplementation getInstance() {
-        return domImpl;
+        return IMPL;
     }
 
-    public static boolean HasFeature(String feature, String version) {
+    static boolean HasFeature(String feature, String version) {
         for (int i = 0; i < FEATURES.length; i++) {
-            if (FEATURES[i][0].equals(feature)
-                    && FEATURES[i][1].equals(version)) {
+            if (FEATURES[i][0].equals(feature) && FEATURES[i][1].equals(version)) {
                 return true;
             }
         }
+
         return false;
     }
 
@@ -141,6 +143,17 @@
             doc.setDoctype(doctype);
         }
         return doc;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public Object getFeature(String feature, String version) {
+        if (hasFeature(feature, version)) {
+            return this;
+        }
+
+        return null;
     }
 }
 

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentImpl.java Wed Oct 11 20:35:06 2006
@@ -28,6 +28,7 @@
 import org.w3c.dom.Attr;
 import org.w3c.dom.CDATASection;
 import org.w3c.dom.Comment;
+import org.w3c.dom.DOMConfiguration;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
@@ -52,7 +53,7 @@
 /**
  * DocumentImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class DocumentImpl extends ContainerNodeImpl
                                 implements CompressedDocument, DBDocument, DocumentTraversal {
@@ -61,8 +62,8 @@
 
     private DocumentType docType;
     private String version;
-    private String actualEncoding;
-    private String encoding;
+    private String xmlEncoding;
+    private String inputEncoding;
     private boolean standalone;
     private boolean strictErrorChecking;
     private SymbolTable symbols;
@@ -460,8 +461,13 @@
         return new TreeWalkerImpl(root, whatToShow, filter, entityReferenceExpansion);
     }
 
-    // DOM Level 3 Stuff
+    //
+    // DOM Level 3 Implementation
+    //
 
+    /**
+     * @since DOM Level 3
+     */
     public Node adoptNode(Node src) {
         // If we're a Xindice DOM Node and share the same symbol table
         // or the adopted node has no symbol table, then we're golden
@@ -477,58 +483,122 @@
         return importNode(src, true);
     }
 
-    public String getActualEncoding() {
+    /**
+     * @since DOM Level 3
+     */
+    public boolean getStrictErrorChecking() {
         checkLoaded();
-        return actualEncoding;
+        return strictErrorChecking;
     }
 
-    public void setActualEncoding(String actualEncoding) {
+    /**
+     * @since DOM Level 3
+     */
+    public void setStrictErrorChecking(boolean strictErrorChecking) {
         checkReadOnly();
         checkLoaded();
-        this.actualEncoding = actualEncoding;
+        this.strictErrorChecking = strictErrorChecking;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getDocumentURI() {
+        return null;
     }
 
-    public String getEncoding() {
+    /**
+     * @since DOM Level 3
+     */
+    public void setDocumentURI(String documentURI) {
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getInputEncoding() {
         checkLoaded();
-        return encoding;
+        return inputEncoding;
     }
 
-    public void setEncoding(String encoding) {
+    public void setInputEncoding(String inputEncoding) {
         checkReadOnly();
         checkLoaded();
-        this.encoding = encoding;
+        this.inputEncoding = inputEncoding;
     }
 
-    public String getVersion() {
+    /**
+     * @since DOM Level 3
+     */
+    public String getXmlEncoding() {
         checkLoaded();
-        return version;
+        return xmlEncoding;
     }
 
-    public void setVersion(String version) {
+    public void setXmlEncoding(String xmlEncoding) {
         checkReadOnly();
         checkLoaded();
-        this.version = version;
+        this.xmlEncoding = xmlEncoding;
     }
 
-    public boolean getStandalone() {
+    /**
+     * @since DOM Level 3
+     */
+    public boolean getXmlStandalone() {
         checkLoaded();
         return standalone;
     }
 
-    public void setStandalone(boolean standalone) {
+    /**
+     * @since DOM Level 3
+     */
+    public void setXmlStandalone(boolean standalone) throws DOMException {
         checkReadOnly();
         checkLoaded();
         this.standalone = standalone;
     }
 
-    public boolean getStrictErrorChecking() {
+    /**
+     * @since DOM Level 3
+     */
+    public String getXmlVersion() {
         checkLoaded();
-        return strictErrorChecking;
+        return version;
     }
 
-    public void setStrictErrorChecking(boolean strictErrorChecking) {
+    /**
+     * @since DOM Level 3
+     */
+    public void setXmlVersion(String version) throws DOMException {
         checkReadOnly();
         checkLoaded();
-        this.strictErrorChecking = strictErrorChecking;
+        this.version = version;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public DOMConfiguration getDomConfig() {
+        return null;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public void normalizeDocument() {
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public Node renameNode(Node n, String namespaceURI, String qualifiedName) throws DOMException {
+        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation is not supported");
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getTextContent() {
+        return "";
     }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentTypeImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentTypeImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentTypeImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DocumentTypeImpl.java Wed Oct 11 20:35:06 2006
@@ -18,6 +18,8 @@
 
 package org.apache.xindice.xml.dom;
 
+import org.apache.xindice.util.StringUtilities;
+
 import org.w3c.dom.DocumentType;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -25,9 +27,10 @@
 /**
  * DocumentTypeImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
-public final class DocumentTypeImpl extends NodeImpl implements DocumentType {
+public final class DocumentTypeImpl extends NodeImpl
+                                    implements DocumentType {
 
     public DocumentTypeImpl() {
         super(null, true);
@@ -97,5 +100,97 @@
     public String getInternalSubset() {
         return null;
     }
-}
 
+    //
+    // DOM Level 3 Implementation
+    //
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getTextContent() {
+        return "";
+    }
+
+    /**
+     * Tests whether two nodes are equal.
+     * This method tests for equality of nodes, not sameness (i.e., whether
+     * the two nodes are references to the same object) which can be tested with
+     * <code>Node.isSameNode()</code>. All nodes that are the same will also be
+     * equal, though the reverse may not be true.
+     * <br>
+     * Two nodes are equal if and only if the following conditions are satisfied:
+     * <ul><li>The two nodes are of the same type.</li>
+     * <li>The following string attributes are equal: nodeName, localName,
+     * namespaceURI, prefix, nodeValue. This is: they are both null, or they have
+     * the same length and are character for character identical.</li>
+     * <li>The attributes <code>NamedNodeMaps</code> are equal. This is: they are both null,
+     * or they have the same length and for each node that exists in one map there
+     * is a node that exists in the other map and is equal, although not
+     * necessarily at the same index.</li>
+     * <li>The childNodes NodeLists are equal. This is: they are both null, or they
+     * have the same length and contain equal nodes at the same index. Note that
+     * normalization can affect equality; to avoid this, nodes should be normalized
+     * before being compared.</li></ul>
+     * <br>
+     * For two DocumentType nodes to be equal, the following conditions must also
+     * be satisfied:
+     * <ul><li>The following string attributes are equal: publicId, systemId,
+     * internalSubset.</li>
+     * <li>The entities <code>NamedNodeMaps</code> are equal.</li>
+     * <li>The notations <code>NamedNodeMaps</code> are equal.</li></ul>
+     * <br>
+     * On the other hand, the following do not affect equality: the ownerDocument,
+     * baseURI, and parentNode attributes, the specified attribute for Attr nodes,
+     * the schemaTypeInfo attribute for Attr and Element nodes,
+     * the Text.isElementContentWhitespace attribute for Text nodes, as well as any
+     * user data or event listeners registered on the nodes.
+     * @param other Node to test againts
+     * @return true if nodes are equal, false otherwise
+     * @since DOM Level 3
+     */
+    public boolean isEqualNode(Node other) {
+        if (!super.isEqualNode(other)) {
+            return false;
+        }
+
+        DocumentType otherDocType = (DocumentType) other;
+        if (!(StringUtilities.equals(this.getPublicId(), otherDocType.getPublicId()) &&
+              StringUtilities.equals(this.getSystemId(), otherDocType.getSystemId()) &&
+              StringUtilities.equals(this.getInternalSubset(), otherDocType.getInternalSubset()))) {
+            return false;
+        }
+
+        NamedNodeMap ent = getEntities();
+        NamedNodeMap otherEnt = otherDocType.getEntities();
+        if (!equalNodeMaps(ent, otherEnt)) {
+            return false;
+        }
+
+        NamedNodeMap not = getNotations();
+        NamedNodeMap otherNot = otherDocType.getNotations();
+
+        return equalNodeMaps(not, otherNot);
+    }
+
+    private boolean equalNodeMaps(NamedNodeMap map1, NamedNodeMap map2) {
+        if (map1 == null && map2 == null) {
+            return true;
+        }
+        if (map1 == null || map2 == null) {
+            return false;
+        }
+
+        if (map1.getLength() != map2.getLength()) {
+            return false;
+        }
+
+        for (int i = 0; i < map1.getLength(); i++) {
+            if (!((NodeImpl) map1.item(i)).isEqualNode(map2.item(i))) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java Wed Oct 11 20:35:06 2006
@@ -25,12 +25,12 @@
 import org.apache.xindice.xml.NodeSource;
 import org.apache.xindice.xml.SymbolTable;
 import org.apache.xindice.xml.XMLCompressedInput;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
 import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.TypeInfo;
 
 import java.io.IOException;
 import java.util.HashSet;
@@ -38,7 +38,7 @@
 /**
  * ElementImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class ElementImpl extends ContainerNodeImpl implements Element {
 
@@ -51,7 +51,9 @@
     private NamedNodeMapImpl attributes = new NamedNodeMapImpl(this);
     private short symbolID = -1;
 
-    public ElementImpl() {}
+
+    public ElementImpl() {
+    }
 
     public ElementImpl(NodeImpl parentNode, byte[] data, int pos, int len) {
         super(parentNode, data, pos, len);
@@ -119,7 +121,7 @@
     }
 
     /**
-     * Add "src" and "col" attributes in {@link NodeSource#SOURCE_NS} namespace. 
+     * Add "src" and "col" attributes in {@link NodeSource#SOURCE_NS} namespace.
      */
     public void expandSource() {
         NodeSource src = getSource();
@@ -460,7 +462,72 @@
         return setAttributeNode(newAttr);
     }
 
+    /**
+     * @since DOM Level 2
+     */
     public boolean hasAttributeNS(String namespaceURI, String localName) {
         return attributes.getNamedItemNS(namespaceURI, localName) != null;
+    }
+
+    //
+    // DOM Level 3 Implementation
+    //
+
+    /**
+     * @since DOM Level 3
+     */
+    public TypeInfo getSchemaTypeInfo() {
+        return null;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public void setIdAttribute(String name, boolean isId) throws DOMException {
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException {
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException {
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public boolean isEqualNode(Node other) {
+        if (!super.isEqualNode(other)) {
+            return false;
+        }
+
+        // Attributes of the nodes have to be the same, but can have different order
+        if (!hasAttributes() && !other.hasAttributes()) {
+            return true;
+        }
+        if (!hasAttributes() || !other.hasAttributes()) {
+            return false;
+        }
+
+        NamedNodeMap attrMap = getAttributes();
+        NamedNodeMap otherAttrMap = other.getAttributes();
+        if (attrMap.getLength() != otherAttrMap.getLength()) {
+            return false;
+        }
+
+        for (int i = 0; i < attrMap.getLength(); i++) {
+            String name = attrMap.item(i).getNodeName();
+            Node attr = otherAttrMap.getNamedItem(name);
+            if (attr == null || !attrMap.item(i).getNodeValue().equals(attr.getNodeValue())) {
+                return false;
+            }
+        }
+
+        return true;
     }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityImpl.java Wed Oct 11 20:35:06 2006
@@ -24,11 +24,14 @@
 /**
  * EntityImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class EntityImpl extends NodeImpl implements Entity {
-    private String encoding = null;
-    private String version = null;
+
+    private String encoding;
+    private String inputEncoding;
+    private String version;
+
 
     public EntityImpl() {
     }
@@ -69,25 +72,36 @@
         return null;
     }
 
-    // DOM Level 3 Stuff
+    public String getInputEncoding() {
+        checkLoaded();
+        return inputEncoding;
+    }
 
-    public String getEncoding() {
+    public String getXmlEncoding() {
         checkLoaded();
         return encoding;
     }
 
+    // DOM Level 3 Stuff
+    public String getXmlVersion() {
+        checkLoaded();
+        return version;
+    }
+
+    // Setters
     public void setEncoding(String encoding) {
         checkReadOnly();
         checkLoaded();
         this.encoding = encoding;
     }
 
-    public String getVersion() {
+    public void setInputEncoding(String inputEncoding) {
+        checkReadOnly();
         checkLoaded();
-        return version;
+        this.inputEncoding = inputEncoding;
     }
 
-    public void setVersion(String version) {
+    public void setXmlVersion(String version) {
         checkReadOnly();
         checkLoaded();
         this.version = version;

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java Wed Oct 11 20:35:06 2006
@@ -20,6 +20,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.xindice.util.StringUtilities;
 import org.apache.xindice.xml.NodeSource;
 import org.apache.xindice.xml.TextWriter;
 
@@ -30,13 +31,14 @@
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.UserDataHandler;
 
 import java.util.HashMap;
 
 /**
  * NodeImpl implements the foundation of the Xindice compressed DOM.
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public abstract class NodeImpl implements CompressedNode, DBNode {
 
@@ -102,8 +104,10 @@
 
     // DOM Level 3 Stuff
     protected HashMap userData;
+    protected HashMap handlers;
     protected Object key;
 
+
     public NodeImpl() {
     }
 
@@ -130,9 +134,7 @@
     }
 
     protected void checkLoaded() {
-        if (loaded) {
-            return;
-        } else {
+        if (!loaded) {
             loaded = true;
         }
     }
@@ -783,15 +785,16 @@
                 : null;
     }
 
-    // Some DOM Level 3 Core Methods
+    //
+    // DOM Level 3 Implementation
+    //
 
     /**
-     * Returns whether this node is the same node as the given one. Do we
-     * really want to make this different from equals?Yes, change name from
-     * isIdentical to isSameNode. (Telcon 4 Jul 2000).
+     * Returns whether this node is the same node as the given one.
      * @param other The node to test against.
      * @return Returns <code>true</code> if the nodes are the same,
      *   <code>false</code> otherwise.
+     * @since DOM Level 3
      */
     public final boolean isSameNode(Node other) {
         return this == other;
@@ -799,12 +802,13 @@
 
     /**
      * Look up the prefix associated to the given namespace URI, starting from
-     * this node.
+     * this node. The default namespace declarations are ignored by this method.
      * @param namespaceURI The namespace URI to look for.
      * @return Returns the associated namespace prefix or <code>null</code>
      *   if none is found.
+     * @since DOM Level 3
      */
-    public final String lookupNamespacePrefix(String namespaceURI) {
+    public final String lookupPrefix(String namespaceURI) {
         if (getNodeType() == Node.ELEMENT_NODE) {
             NamedNodeMap map = getAttributes();
             int size = map.getLength();
@@ -814,11 +818,10 @@
                 if (name.startsWith(XMLNS_PREFIX + ':')
                         && attr.getValue().equals(namespaceURI)) {
                     return name.substring(XMLNS_PREFIX.length() + 1);
-                  }
+                }
             }
         }
-        return parentNode != null ? parentNode.lookupNamespacePrefix(namespaceURI)
-                : null;
+        return parentNode != null ? parentNode.lookupPrefix(namespaceURI) : null;
     }
 
     /**
@@ -829,6 +832,7 @@
      * @param prefix The prefix to look for.
      * @return Returns the associated namespace URI or <code>null</code> if
      *   none is found.
+     * @since DOM Level 3
      */
     public final String lookupNamespaceURI(String prefix) {
         String uri = null;
@@ -839,29 +843,7 @@
             return uri;
         }
 
-        return parentNode != null ? parentNode.lookupNamespaceURI(prefix)
-                : null;
-    }
-
-    /**
-     * This method walks down the tree, starting from this node, and adds
-     * namespace declarations where needed so that every namespace being
-     * used is properly declared. It also changes or assign prefixes when
-     * needed. This effectively makes this node subtree is "namespace
-     * wellformed".
-     * <br>What the generated prefixes are and/or how prefixes are changed to
-     * achieve this is implementation dependent.Any other name?How specific
-     * should this be? Should we not even specify that this should be done
-     * by walking down the tree?What does this do on attribute nodes?Doesn't
-     * do anything (F2F 1 Aug 2000).How does it work with entity reference
-     * subtree which may be broken?This doesn't affect entity references
-     * which are not visited in this operation (F2F 1 Aug 2000).Should this
-     * be really be on Node?Yes, but this only works on Document, Element,
-     * and DocumentFragment. On other types it is a no-op. (F2F 1 Aug 2000).
-     * What happens with read-only nodes?What/how errors should be reported?
-     * Are there any?
-     */
-    public void normalizeNS() throws DOMException {
+        return parentNode != null ? parentNode.lookupNamespaceURI(prefix) : null;
     }
 
     /**
@@ -876,13 +858,27 @@
      * @param key The key to associate this data to.
      * @return The object previously associated to this node and the given
      *   key or <code>null</code>.
+     * @since DOM Level 3
      */
-    public final synchronized Object setUserData(Object data, String key) {
+    public final synchronized Object setUserData(String key, Object data, UserDataHandler handler) {
         if (userData == null) {
             userData = new HashMap();
         }
+        if (handlers == null) {
+            handlers = new HashMap();
+        }
+
         Object oldData = userData.get(key);
-        userData.put(key, data);
+        if (data != null) {
+            userData.put(key, data);
+            if (handler != null) {
+                handlers.put(key, handler);
+            }
+        } else {
+            userData.remove(key);
+            handlers.remove(key);
+        }
+
         return oldData;
     }
 
@@ -892,6 +888,7 @@
      * @param key The key to look for.
      * @return The object associated to this node and the given key or
      *   <code>null</code>.
+     * @since DOM Level 3
      */
     public final synchronized Object getUserData(String key) {
         if (userData == null) {
@@ -901,18 +898,181 @@
     }
 
     /**
+     * @since DOM Level 3
+     */
+    public String getBaseURI() {
+        return null;
+    }
+
+    /**
+     * This method returns the text content of this node and its descendants.
+     * No serialization is performed, the returned string does not contain any
+     * markup. No whitespace normalization is performed and the returned string
+     * does not contain the white spaces in element content (see the attribute
+     * Text.isElementContentWhitespace).
+     * <br>
+     * The string returned is made of the text content of this node depending on
+     * its type, as defined below:
+     * <table border=1><tr><th>Node type</th><th>Content</th></tr>
+     * <tr><td>ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE,
+     * DOCUMENT_FRAGMENT_NODE</td>
+     * <td>concatenation of the textContent attribute value of every child node,
+     * excluding COMMENT_NODE and PROCESSING_INSTRUCTION_NODE nodes. This is the
+     * empty string if the node has no children.</td></tr>
+     * <tr><td>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
+     * PROCESSING_INSTRUCTION_NODE</td><td>nodeValue</td></tr>
+     * <tr><td>DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE</td>
+     * <td>null</td></tr></table>
+     * @return the text content of this node and its descendants
+     * @since DOM Level 3
+     */
+    public String getTextContent() {
+        return getNodeValue();
+    }
+
+    /**
+     * This method changes the text content of this node. When it is defined to be
+     * null, setting it has no effect. On setting, any possible children this node
+     * may have are removed and, if it the new string is not empty or null, replaced
+     * by a single Text node containing the string this attribute is set to.
+     * No parsing is performed, the input string is taken as pure textual content.
+     * @param textContent new text content
+     * @throws DOMException - NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly
+     */
+    public void setTextContent(String textContent) throws DOMException {
+        checkReadOnly();
+        checkLoaded();
+        if (textContent == null || "".equals(textContent)) return;
+
+        // remove all child nodes, if any
+        if (hasChildNodes()) {
+            int num = getChildNodes().getLength();
+            for (int i = 0; i < num; i++) {
+                removeChild(getChildNodes().item(0));
+            }
+        }
+
+        appendChild(new TextImpl(this, textContent));
+    }
+
+    /**
+     * Tests whether two nodes are equal.
+     * This method tests for equality of nodes, not sameness (i.e., whether
+     * the two nodes are references to the same object) which can be tested with
+     * <code>Node.isSameNode()</code>. All nodes that are the same will also be
+     * equal, though the reverse may not be true.
+     * <br>
+     * Two nodes are equal if and only if the following conditions are satisfied:
+     * <ul><li>The two nodes are of the same type.</li>
+     * <li>The following string attributes are equal: nodeName, localName,
+     * namespaceURI, prefix, nodeValue. This is: they are both null, or they have
+     * the same length and are character for character identical.</li>
+     * <li>The attributes <code>NamedNodeMaps</code> are equal. This is: they are both null,
+     * or they have the same length and for each node that exists in one map there
+     * is a node that exists in the other map and is equal, although not
+     * necessarily at the same index.</li>
+     * <li>The childNodes NodeLists are equal. This is: they are both null, or they
+     * have the same length and contain equal nodes at the same index. Note that
+     * normalization can affect equality; to avoid this, nodes should be normalized
+     * before being compared.</li></ul>
+     * <br>
+     * For two DocumentType nodes to be equal, the following conditions must also
+     * be satisfied:
+     * <ul><li>The following string attributes are equal: publicId, systemId,
+     * internalSubset.</li>
+     * <li>The entities <code>NamedNodeMaps</code> are equal.</li>
+     * <li>The notations <code>NamedNodeMaps</code> are equal.</li></ul>
+     * <br>
+     * On the other hand, the following do not affect equality: the ownerDocument,
+     * baseURI, and parentNode attributes, the specified attribute for Attr nodes,
+     * the schemaTypeInfo attribute for Attr and Element nodes,
+     * the Text.isElementContentWhitespace attribute for Text nodes, as well as any
+     * user data or event listeners registered on the nodes.
+     * @param other Node to test againts
+     * @return true if nodes are equal, false otherwise
+     * @since DOM Level 3
+     */
+    public boolean isEqualNode(Node other) {
+        if (this.isSameNode(other)) return true;
+
+        // Node has to be of the same type
+        if (other == null || other.getNodeType() != this.getNodeType()) {
+            return false;
+        }
+
+        // The following string attributes have to be equal: nodeName, localName,
+        // namespaceURI, prefix, nodeValue
+        return StringUtilities.equals(getNodeName(), other.getNodeName()) &&
+               StringUtilities.equals(getLocalName(), other.getLocalName()) &&
+               StringUtilities.equals(getNamespaceURI(), other.getNamespaceURI()) &&
+               StringUtilities.equals(getPrefix(), other.getPrefix()) &&
+               StringUtilities.equals(getNodeValue(), other.getNodeValue());
+
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public Object getFeature(String feature, String version) {
+        if (DOMImplementationImpl.HasFeature(feature, version)) {
+            return this;
+        }
+
+        return null;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public boolean isDefaultNamespace(String namespaceURI) {
+        return namespaceURI.equals(lookupDefaultNamespaceURI());
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public short compareDocumentPosition(Node other) throws DOMException {
+        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation is not supported");
+    }
+
+    //
+    // Implementation Methods
+    //
+
+    /**
+     * This method walks down the tree, starting from this node, and adds
+     * namespace declarations where needed so that every namespace being
+     * used is properly declared. It also changes or assign prefixes when
+     * needed. This effectively makes this node subtree is "namespace
+     * wellformed".
+     * <br>What the generated prefixes are and/or how prefixes are changed to
+     * achieve this is implementation dependent.Any other name?How specific
+     * should this be? Should we not even specify that this should be done
+     * by walking down the tree?What does this do on attribute nodes?Doesn't
+     * do anything (F2F 1 Aug 2000).How does it work with entity reference
+     * subtree which may be broken?This doesn't affect entity references
+     * which are not visited in this operation (F2F 1 Aug 2000).Should this
+     * be really be on Node?Yes, but this only works on Document, Element,
+     * and DocumentFragment. On other types it is a no-op. (F2F 1 Aug 2000).
+     * What happens with read-only nodes?What/how errors should be reported?
+     * Are there any?
+    public void normalizeNS() throws DOMException {
+    }
+     */
+
+    /**
      * This attribute returns a unique key identifying this node.
      *
      * What type should this really be?  In what space is this key
      * unique (Document, DOMImplementation)?  What is the lifetime of
      * the uniqueness of this key (Node, Document, ...)?
-     */
     public final synchronized Object getKey() {
         if (key == null) {
             key = new Object();
         }
         return key;
     }
+     */
 
     /**
      * Converts this node into its textual representation.

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NotationImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NotationImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NotationImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NotationImpl.java Wed Oct 11 20:35:06 2006
@@ -24,7 +24,7 @@
 /**
  * NotationImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class NotationImpl extends NodeImpl implements Notation {
 
@@ -57,6 +57,13 @@
      */
     public String getSystemId() {
         return null;
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getTextContent() {
+        return "";
     }
 }
 

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/TextImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/TextImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/TextImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/TextImpl.java Wed Oct 11 20:35:06 2006
@@ -25,7 +25,7 @@
 /**
  * TextImpl
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public class TextImpl extends CharacterDataImpl implements Text {
 
@@ -81,5 +81,25 @@
             throw EX_INDEX_SIZE;
         }
     }
-}
 
+    /**
+     * @since DOM Level 3
+     */
+    public boolean isElementContentWhitespace() {
+        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation is not supported");
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public String getWholeText() {
+        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation is not supported");
+    }
+
+    /**
+     * @since DOM Level 3
+     */
+    public Text replaceWholeText(String content) throws DOMException {
+        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation is not supported");
+    }
+}

Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/jaxp/DocumentBuilderFactoryImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/jaxp/DocumentBuilderFactoryImpl.java?view=diff&rev=463125&r1=463124&r2=463125
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/jaxp/DocumentBuilderFactoryImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/jaxp/DocumentBuilderFactoryImpl.java Wed Oct 11 20:35:06 2006
@@ -40,6 +40,14 @@
         return attrs.get(name);
     }
 
+    public void setFeature(String name, boolean value) throws ParserConfigurationException {
+
+    }
+
+    public boolean getFeature(String name) throws ParserConfigurationException {
+        return false;
+    }
+
     public DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
         return new DocumentBuilderImpl();
     }

Added: xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java?view=auto&rev=463125
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java (added)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java Wed Oct 11 20:35:06 2006
@@ -0,0 +1,66 @@
+package org.apache.xindice.xml.dom;
+
+import junit.framework.TestCase;
+import org.w3c.dom.Node;
+
+/**
+ * Tests NodeImpl class
+ *
+ */
+public class NodeTest extends TestCase {
+
+    private static final String XML =
+            "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
+            "<a xmlns:name=\"http://apache.org\">" +
+                "<b/>" +
+                "<name:c attr1=\"a\" attr2=\"b\">" +
+                    "<d attr3=\"c\" attr4=\"d\" />" +
+                "</name:c>" +
+                "<c attr1=\"a\" attr2=\"b\">" +
+                    "<d attr3=\"c\" attr4=\"d\" />" +
+                "</c>" +
+                "<name:c attr2=\"b\" attr1=\"a\">" +
+                    "<d attr3=\"c\" attr4=\"d\" />" +
+                "</name:c>" +
+                "<name:c attr1=\"a\" attr2=\"b\">" +
+                    "<d attr3=\"c\" attr5=\"d\" />" +
+                "</name:c>" +
+                "<d>Parent text<e>Child text</e></d>" +
+            "</a>";
+
+    private Node dom;
+
+    public void setUp() throws Exception {
+        dom = DOMParser.toDocument(NodeTest.XML).getDocumentElement();
+    }
+
+    public void testNodeEquality() throws Exception {
+        Node node1 = dom.getFirstChild().getNextSibling();
+        assertEquals(true, ((NodeImpl) node1).isEqualNode(node1));
+        assertEquals(true, ((NodeImpl) node1).isSameNode(node1));
+
+        Node node2 = node1.getNextSibling();
+        // wrong node name
+        assertEquals(false, ((NodeImpl) node1).isEqualNode(node2));
+        Node node3 = node2.getNextSibling();
+        assertEquals(true, ((NodeImpl) node1).isEqualNode(node3));
+        Node node4 = node3.getNextSibling();
+        // wrong child attribute name
+        assertEquals(false, ((NodeImpl) node1).isEqualNode(node4));
+    }
+
+    public void testTextContent() throws Exception {
+        Node node = dom.getFirstChild().getNextSibling().getAttributes().item(1);
+        assertEquals("b", ((NodeImpl) node).getTextContent());
+
+        Node node1 = dom.getLastChild();
+        assertEquals("Parent textChild text", ((NodeImpl) node1).getTextContent());
+
+        ((NodeImpl) node1).setTextContent("");
+        assertEquals("Parent textChild text", ((NodeImpl) node1).getTextContent());
+
+        ((NodeImpl) node1).setTextContent("New text");
+        assertEquals("New text", ((NodeImpl) node1).getTextContent());
+        assertEquals(1, node1.getChildNodes().getLength());
+    }
+}

Propchange: xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java
------------------------------------------------------------------------------
    svn:keywords = Id
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.