001 package net.sourceforge.pmd.util.viewer.model;
002
003
004 import java.util.ArrayList;
005 import java.util.Collections;
006 import java.util.Enumeration;
007 import java.util.List;
008
009 import javax.swing.tree.TreeNode;
010
011 import net.sourceforge.pmd.lang.ast.Node;
012
013
014 /**
015 * provides the adapter for the tree model
016 *
017 * @author Boris Gruschko ( boris at gruschko.org )
018 * @version $Id: SimpleNodeTreeNodeAdapter.java 5954 2008-04-04 03:51:12Z rgustav $
019 */
020
021 public class SimpleNodeTreeNodeAdapter implements TreeNode {
022
023 private Node node;
024 private List<TreeNode> children;
025 private SimpleNodeTreeNodeAdapter parent;
026
027 /**
028 * constructs the node
029 *
030 * @param node underlying AST's node
031 */
032 public SimpleNodeTreeNodeAdapter(SimpleNodeTreeNodeAdapter parent, Node node) {
033 this.parent = parent;
034 this.node = node;
035 }
036
037 /**
038 * retrieves the underlying node
039 *
040 * @return AST node
041 */
042 public Node getSimpleNode() {
043 return node;
044 }
045
046
047 /**
048 * @see javax.swing.tree.TreeNode#getChildAt(int)
049 */
050 public TreeNode getChildAt(int childIndex) {
051 checkChildren();
052 return children.get(childIndex);
053 }
054
055
056 /**
057 * @see javax.swing.tree.TreeNode#getChildCount()
058 */
059 public int getChildCount() {
060 checkChildren();
061 return children.size();
062 }
063
064
065 /**
066 * @see javax.swing.tree.TreeNode#getParent()
067 */
068 public TreeNode getParent() {
069 return parent;
070 }
071
072 /**
073 * @see javax.swing.tree.TreeNode#getIndex(javax.swing.tree.TreeNode)
074 */
075 public int getIndex(TreeNode node) {
076 checkChildren();
077 return children.indexOf(node);
078 }
079
080
081 /**
082 * @see javax.swing.tree.TreeNode#getAllowsChildren()
083 */
084 public boolean getAllowsChildren() {
085 return true;
086 }
087
088
089 /**
090 * @see javax.swing.tree.TreeNode#isLeaf()
091 */
092
093 public boolean isLeaf() {
094 checkChildren();
095 return children.isEmpty();
096 }
097
098
099 /**
100 * @see javax.swing.tree.TreeNode#children()
101 */
102
103 public Enumeration<TreeNode> children() {
104 return Collections.enumeration(children);
105 }
106
107
108 /**
109 * checks the children and creates them if neccessary
110 */
111 private void checkChildren() {
112 if (children == null) {
113 children = new ArrayList<TreeNode>(node.jjtGetNumChildren());
114 for (int i = 0; i < node.jjtGetNumChildren(); i++) {
115 children.add(new SimpleNodeTreeNodeAdapter(this, node.jjtGetChild(i)));
116 }
117 }
118 }
119
120 /**
121 * @see java.lang.Object#toString()
122 */
123 public String toString() {
124 return node.toString();
125 }
126 }
|