KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > xdm > visitor > CompareVisitor


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 /*
21  * CompareVisitor.java
22  *
23  * Created on August 31, 2005, 10:24 AM
24  *
25  * To change this template, choose Tools | Options and locate the template under
26  * the Source Creation and Management node. Right-click the template and choose
27  * Open. You can then make changes to the template in the Source Editor.
28  */

29
30 package org.netbeans.modules.xml.xdm.visitor;
31
32 import java.util.List JavaDoc;
33 import org.netbeans.modules.xml.xdm.nodes.Attribute;
34 import org.netbeans.modules.xml.xdm.nodes.Document;
35 import org.netbeans.modules.xml.xdm.nodes.Element;
36 import org.netbeans.modules.xml.xdm.nodes.Node;
37 import org.netbeans.modules.xml.xdm.nodes.Text;
38 import org.netbeans.modules.xml.xdm.nodes.Token;
39
40 /**
41  * Does the comparison for only the needed methods for a given node with its target.
42  * We may be able to do this comparison in the Nodes thenseleves rather than
43  * in a visitor since we dont necessarily walk the tree.
44  *
45  * @author Vidhya Narayanan
46  */

47 public class CompareVisitor implements XMLNodeVisitor {
48     
49     /** Creates a new instance of CompareVisitor */
50     public CompareVisitor() {
51     }
52     
53     public boolean compare(Node n1, Node n2) {
54         target = n2;
55         n1.accept(this);
56         return result;
57     }
58     
59     public void visit(Attribute attr) {
60         result = false;
61         if (target instanceof Attribute) {
62             if (attr.getName().equals(((Attribute)target).getName()) &&
63                 attr.getValue().equals(((Attribute)target).getValue()))
64                 result = true;
65             if (result)
66                 tokenCompare(attr.getTokens(), ((Attribute)target).getTokens());
67         }
68     }
69
70     public void visit(Document doc) {
71         if (target instanceof Document)
72             result = true;
73     }
74
75     public void visit(Element e) {
76         result = false;
77         if (target instanceof Element) {
78             if (e.getLocalName().equals(((Element)target).getLocalName()))
79                 result = true;
80         }
81         if (result)
82             tokenCompare(e.getTokens(), ((Element)target).getTokens());
83     }
84
85     public void visit(Text txt) {
86         result = false;
87         if (target instanceof Text) {
88             if (txt.getText().equals(((Text)target).getText()))
89                 result = true;
90         }
91         if (result)
92             tokenCompare(txt.getTokens(), ((Text)target).getTokens());
93     }
94     
95     private void tokenCompare(List JavaDoc<Token> oldtokens, List JavaDoc<Token> newtokens) {
96         assert oldtokens != null && newtokens != null;
97         if (oldtokens.size() != newtokens.size())
98             result = false;
99         else {
100             int i = 0;
101             for (Token t : oldtokens) {
102                 if (t.getType() != newtokens.get(i).getType() ||
103                     !t.getValue().equals(newtokens.get(i).getValue()))
104                     result = false;
105                 i++;
106             }
107         }
108     }
109     
110     private Node target;
111     boolean result = false;
112 }
113
Popular Tags