package net.sourceforge.pmd.util.viewer.model; import net.sourceforge.pmd.ast.SimpleNode; import javax.swing.tree.TreeNode; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; /** * provides the adapter for the tree model * * @author Boris Gruschko ( boris at gruschko.org ) * @version $Id: SimpleNodeTreeNodeAdapter.java,v 1.2 2003/09/23 20:51:06 tomcopeland Exp $ */ public class SimpleNodeTreeNodeAdapter implements TreeNode { private SimpleNode node; private List children; private SimpleNodeTreeNodeAdapter parent; /** * constructs the node * * @param node underlying AST's node */ public SimpleNodeTreeNodeAdapter( SimpleNodeTreeNodeAdapter parent, SimpleNode node ) { this.parent = parent; this.node = node; } /** * retrieves the underlying node * * @return AST node */ public SimpleNode getSimpleNode( ) { return node; } /** * @see javax.swing.tree.TreeNode#getChildAt(int) */ public TreeNode getChildAt( int childIndex ) { checkChildren( ); return (TreeNode)children.get( childIndex ); } /** * @see javax.swing.tree.TreeNode#getChildCount() */ public int getChildCount( ) { checkChildren( ); return children.size( ); } /** * @see javax.swing.tree.TreeNode#getParent() */ public TreeNode getParent( ) { return parent; } /** * @see javax.swing.tree.TreeNode#getIndex(javax.swing.tree.TreeNode) */ public int getIndex( TreeNode node ) { checkChildren( ); return children.indexOf( node ); } /** * @see javax.swing.tree.TreeNode#getAllowsChildren() */ public boolean getAllowsChildren( ) { return true; } /** * @see javax.swing.tree.TreeNode#isLeaf() */ public boolean isLeaf( ) { checkChildren( ); return children.size( ) == 0; } /** * @see javax.swing.tree.TreeNode#children() */ public Enumeration children( ) { return Collections.enumeration( children ); } /** * checks the children and creates them if neccessary */ private void checkChildren( ) { if ( children == null ) { children = new ArrayList( node.jjtGetNumChildren( ) ); for ( int i = 0; i < node.jjtGetNumChildren( ); i++ ) { children.add( new SimpleNodeTreeNodeAdapter( this, (SimpleNode)node.jjtGetChild( i ) ) ); } } } /** * @see java.lang.Object#toString() */ public String toString( ) { return node.toString( ); } } /* * $Log: SimpleNodeTreeNodeAdapter.java,v $ * Revision 1.2 2003/09/23 20:51:06 tomcopeland * Cleaned up imports * * Revision 1.1 2003/09/23 20:32:42 tomcopeland * Added Boris Gruschko's new AST/XPath viewer * * Revision 1.1 2003/09/24 01:33:03 bgr * moved to a new package * * Revision 1.1 2003/09/22 05:21:54 bgr * initial commit * */