View Javadoc

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