KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > xmldb > xupdate > unittests > CompareDocuments


1 package org.xmldb.xupdate.unittests;
2
3 /*
4  * The XML:DB Initiative Software License, Version 1.0
5  *
6  *
7  * Copyright (c) 2000-2003 The XML:DB Initiative. All rights
8  * reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  *
17  * 2. Redistributions in binary form must reproduce the above copyright
18  * notice, this list of conditions and the following disclaimer in
19  * the documentation and/or other materials provided with the
20  * distribution.
21  *
22  * 3. The end-user documentation included with the redistribution,
23  * if any, must include the following acknowledgment:
24  * "This product includes software developed by the
25  * XML:DB Initiative (http://www.xmldb.org/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The name "XML:DB Initiative" must not be used to endorse or
30  * promote products derived from this software without prior written
31  * permission. For written permission, please contact info@xmldb.org.
32  *
33  * 5. Products derived from this software may not be called "XML:DB",
34  * nor may "XML:DB" appear in their name, without prior written
35  * permission of the XML:DB Initiative.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals on behalf of the XML:DB Initiative. For more information
53  * on the XML:DB Initiative, please see <http://www.xmldb.org/>.
54  */

55
56 import org.w3c.dom.Document JavaDoc;
57 import org.w3c.dom.NamedNodeMap JavaDoc;
58 import org.w3c.dom.Node JavaDoc;
59 import org.w3c.dom.NodeList JavaDoc;
60
61 /**
62  */

63 public class CompareDocuments {
64
65   /**
66    * Constructor
67    */

68   public CompareDocuments() {
69   }
70
71   public void compare(Node JavaDoc node1, Node JavaDoc node2) throws Exception JavaDoc {
72     compare(node1, node2, "", true);
73   }
74
75   public void compare(Node JavaDoc node1, Node JavaDoc node2, String JavaDoc space, boolean show) throws Exception JavaDoc {
76     if (node1.getNodeType() == Node.DOCUMENT_NODE && node2.getNodeType() == Node.DOCUMENT_NODE) {
77       compare(((Document JavaDoc) node1).getDocumentElement(), ((Document JavaDoc) node2).getDocumentElement(), space, show);
78       return;
79     }
80
81     if (show) {
82       System.err.print(space);
83       switch (node1.getNodeType()) {
84         case Node.ATTRIBUTE_NODE:
85           System.err.print("@");
86         default:
87       }
88       System.err.print(node1 + "[" + node1.getNodeType() + "] <==> ");
89       switch (node2.getNodeType()) {
90         case Node.ATTRIBUTE_NODE:
91           System.err.print("@");
92         default:
93       }
94       System.err.println(node2 + "[" + node2.getNodeType() + "]");
95     }
96     if (node1.getNodeType() != node2.getNodeType()) {
97       throw new Exception JavaDoc("different node types ("
98               + node1.getNodeType() + "!=" + node2.getNodeType() + ")...");
99     }
100     if (node1.getNamespaceURI() == null ^ node2.getNamespaceURI() == null) {
101       throw new Exception JavaDoc("only one node has a Namespace");
102     }
103     if (node1.getNamespaceURI() != null && node2.getNamespaceURI() != null
104             && !node1.getNamespaceURI().equals(node2.getNamespaceURI())) {
105       throw new Exception JavaDoc("different NamespaceURI's ("
106               + node1.getNamespaceURI() + "!=" + node2.getNamespaceURI() + ")...");
107     }
108     if (!node1.getNodeName().equals(node2.getNodeName())) {
109       throw new Exception JavaDoc("different node names ("
110               + node1.getNodeName() + "!=" + node2.getNodeName() + "...");
111     }
112     if (node1.getNodeValue() != null && node2.getNodeValue() != null
113             && !node1.getNodeValue().equals(node2.getNodeValue())) {
114       throw new Exception JavaDoc("different node values ("
115               + node1.getNodeValue() + "!=" + node2.getNodeValue() + ")...");
116     }
117     NamedNodeMap JavaDoc attr1 = node1.getAttributes();
118     NamedNodeMap JavaDoc attr2 = node2.getAttributes();
119     if (attr1 != null && attr2 != null) {
120       if (attr1.getLength() != attr2.getLength()) {
121         throw new Exception JavaDoc("different attribute counts...");
122       }
123       for (int i = 0; i < attr1.getLength(); i++) {
124         compare(attr1.item(i), attr2.item(i), space, show);
125       }
126     }
127     NodeList JavaDoc list1 = node1.getChildNodes();
128     NodeList JavaDoc list2 = node2.getChildNodes();
129     if (list1.getLength() != list2.getLength()) {
130       throw new Exception JavaDoc("different child node counts("
131               + list1.getLength() + "!=" + list2.getLength() + ")...");
132     }
133 /*
134         Node child1 = node1.getFirstChild();
135         Node last1 = node1.getLastChild();
136         Node child2 = node2.getFirstChild();
137         if (!(child1==child2 && child1==null)) {
138             switch (node1.getNodeType()) {
139                 case Node.ATTRIBUTE_NODE:
140                     space += " @";
141                     break;
142                 default:
143                     space += " ";
144             }
145             while (child1!=last1){
146                 compare (child1, child2, space, show);
147                 child1 = child1.getNextSibling();
148                 child2 = child2.getNextSibling();
149             }
150             compare(child1, child2, space, show);
151         }
152 */

153     Node JavaDoc child1 = node1.getFirstChild();
154     Node JavaDoc child2 = node2.getFirstChild();
155     space += " ";
156     while (child1 != null) {
157       compare(child1, child2, space, show);
158       child1 = child1.getNextSibling();
159       child2 = child2.getNextSibling();
160     }
161   }
162
163 }
164
Popular Tags