1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.jaxen;
5 import net.sourceforge.pmd.ast.Node;
6
7 import java.util.Iterator;
8 import java.util.NoSuchElementException;
9 /***
10 * @author daniels
11 *
12 * To change this generated comment go to
13 * Window>Preferences>Java>Code Generation>Code Template
14 */
15 public abstract class NodeIterator implements Iterator {
16
17 private Node node;
18
19 public NodeIterator(Node contextNode) {
20 this.node = getFirstNode(contextNode);
21 }
22
23 public boolean hasNext() {
24 return node != null;
25 }
26
27 public Object next() {
28 if (node == null)
29 throw new NoSuchElementException();
30 Node ret = node;
31 node = getNextNode(node);
32 return ret;
33 }
34
35 public void remove() {
36 throw new UnsupportedOperationException();
37 }
38
39 protected abstract Node getFirstNode(Node contextNode);
40
41 protected abstract Node getNextNode(Node contextNode);
42
43 protected Node getPreviousSibling(Node contextNode) {
44 Node parentNode = contextNode.jjtGetParent();
45 if(parentNode != null) {
46 int prevPosition = getPositionFromParent(contextNode) - 1;
47 if (prevPosition >= 0) {
48 return parentNode.jjtGetChild(prevPosition);
49 }
50 }
51 return null;
52 }
53
54 private int getPositionFromParent(Node contextNode) {
55 Node parentNode = contextNode.jjtGetParent();
56 for (int i = 0; i < parentNode.jjtGetNumChildren(); i++) {
57 if (parentNode.jjtGetChild(i) == contextNode) {
58 return i;
59 }
60 }
61 throw new RuntimeException("Node was not a child of it's parent ???");
62 }
63
64 protected Node getNextSibling(Node contextNode) {
65 Node parentNode = contextNode.jjtGetParent();
66 if(parentNode != null) {
67 int nextPosition = getPositionFromParent(contextNode) + 1;
68 if (nextPosition < parentNode.jjtGetNumChildren()) {
69 return parentNode.jjtGetChild(nextPosition);
70 }
71 }
72 return null;
73 }
74
75 protected Node getFirstChild(Node contextNode) {
76 if (contextNode.jjtGetNumChildren() > 0) {
77 return contextNode.jjtGetChild(0);
78 } else {
79 return null;
80 }
81 }
82
83 protected Node getLastChild(Node contextNode) {
84 if (contextNode.jjtGetNumChildren() > 0) {
85 return contextNode.jjtGetChild(contextNode.jjtGetNumChildren() - 1);
86 } else {
87 return null;
88 }
89 }
90 }
This page was automatically generated by Maven