View Javadoc

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