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