1 package net.sourceforge.pmd.util.viewer.model;
2
3
4 import net.sourceforge.pmd.ast.SimpleNode;
5
6 import javax.swing.tree.TreeNode;
7 import java.util.ArrayList;
8 import java.util.Collections;
9 import java.util.Enumeration;
10 import java.util.List;
11
12
13 /***
14 * provides the adapter for the tree model
15 *
16 * @author Boris Gruschko ( boris at gruschko.org )
17 * @version $Id: SimpleNodeTreeNodeAdapter.java,v 1.6 2005/08/23 17:17:49 tomcopeland Exp $
18 */
19
20 public class SimpleNodeTreeNodeAdapter
21
22 implements TreeNode {
23
24 private SimpleNode node;
25
26 private List children;
27
28 private SimpleNodeTreeNodeAdapter parent;
29
30
31 /***
32 * constructs the node
33 *
34 * @param node underlying AST's node
35 */
36
37 public SimpleNodeTreeNodeAdapter(SimpleNodeTreeNodeAdapter parent, SimpleNode node) {
38
39 this.parent = parent;
40
41 this.node = node;
42
43 }
44
45
46 /***
47 * retrieves the underlying node
48 *
49 * @return AST node
50 */
51
52 public SimpleNode getSimpleNode() {
53
54 return node;
55
56 }
57
58
59 /***
60 * @see javax.swing.tree.TreeNode#getChildAt(int)
61 */
62
63 public TreeNode getChildAt(int childIndex) {
64
65 checkChildren();
66
67
68 return (TreeNode) children.get(childIndex);
69
70 }
71
72
73 /***
74 * @see javax.swing.tree.TreeNode#getChildCount()
75 */
76
77 public int getChildCount() {
78
79 checkChildren();
80
81
82 return children.size();
83
84 }
85
86
87 /***
88 * @see javax.swing.tree.TreeNode#getParent()
89 */
90
91 public TreeNode getParent() {
92
93 return parent;
94
95 }
96
97
98 /***
99 * @see javax.swing.tree.TreeNode#getIndex(javax.swing.tree.TreeNode)
100 */
101
102 public int getIndex(TreeNode node) {
103
104 checkChildren();
105
106
107 return children.indexOf(node);
108
109 }
110
111
112 /***
113 * @see javax.swing.tree.TreeNode#getAllowsChildren()
114 */
115
116 public boolean getAllowsChildren() {
117
118 return true;
119
120 }
121
122
123 /***
124 * @see javax.swing.tree.TreeNode#isLeaf()
125 */
126
127 public boolean isLeaf() {
128
129 checkChildren();
130
131
132 return children.size() == 0;
133
134 }
135
136
137 /***
138 * @see javax.swing.tree.TreeNode#children()
139 */
140
141 public Enumeration children() {
142
143 return Collections.enumeration(children);
144
145 }
146
147
148 /***
149 * checks the children and creates them if neccessary
150 */
151
152 private void checkChildren() {
153
154 if (children == null) {
155
156 children = new ArrayList(node.jjtGetNumChildren());
157
158
159 for (int i = 0; i < node.jjtGetNumChildren(); i++) {
160
161 children.add(new SimpleNodeTreeNodeAdapter(this, (SimpleNode) node.jjtGetChild(i)));
162
163 }
164
165 }
166
167 }
168
169
170 /***
171 * @see java.lang.Object#toString()
172 */
173
174 public String toString() {
175
176 return node.toString();
177
178 }
179
180 }
181