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 [EMAIL PROTECTED] 
NodeSource#SOURCE_NS} namespace. 
+     * Add "src" and "col" attributes in [EMAIL PROTECTED] 
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


Reply via email to