KickJava   Java API By Example, From Geeks To Geeks.

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


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  * PathFromRootVisitor.java
22  *
23  * Created on August 4, 2005, 6:43 PM
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.Collections JavaDoc;
33 import java.util.LinkedList JavaDoc;
34 import java.util.List JavaDoc;
35 import org.netbeans.modules.xml.xdm.nodes.Document;
36 import org.netbeans.modules.xml.xdm.nodes.Element;
37 import org.netbeans.modules.xml.xdm.nodes.Node;
38
39 /**
40  *
41  * @author Chris Webster
42  */

43 public class PathFromRootVisitor extends ChildVisitor {
44
45     public List JavaDoc<Node> findPath(org.w3c.dom.Document JavaDoc root, org.w3c.dom.Node JavaDoc target) {
46         Document wroot = root instanceof Document ? (Document) root : null;
47         Node wtarget = target instanceof Node ? (Node) target : null;
48         return findPath(wroot, wtarget);
49     }
50     
51     public List JavaDoc<Node> findPathToRootElement(org.w3c.dom.Element JavaDoc root, org.w3c.dom.Node JavaDoc target) {
52         Element wroot = root instanceof Element ? (Element) root : null;
53         Node wtarget = target instanceof Node ? (Node) target : null;
54         assert root != null && target != null;
55         
56         this.target = wtarget;
57         found = false;
58         pathToTarget = null;
59         wroot.accept(this);
60         return pathToTarget;
61     }
62     
63     public List JavaDoc<Node> findPath(Document root, Node target) {
64         assert root != null;
65 // assert target != null;
66
if(target == null)
67             return Collections.emptyList();
68         this.target = target;
69         found = false;
70         pathToTarget = null;
71         root.accept(this);
72         return pathToTarget;
73     }
74     
75     protected void visitNode(Node n) {
76         // if already found just return
77
if(found) return;
78         if (target.getId() == n.getId()) {
79             pathToTarget = new LinkedList JavaDoc<Node>();
80             pathToTarget.add(n);
81             found = true;
82         } else {
83             super.visitNode(n);
84             if(found) {
85                 // add the ancestors to the list
86
pathToTarget.add(n);
87             }
88         }
89     }
90     
91     private boolean found;
92     private List JavaDoc<Node> pathToTarget;
93     private Node target;
94 }
95
Popular Tags