1 package net.sourceforge.pmd.util.viewer.model; 2 3 4 import net.sourceforge.pmd.ast.SimpleNode; 5 6 import javax.swing.event.TreeModelEvent; 7 import javax.swing.event.TreeModelListener; 8 import javax.swing.tree.TreeModel; 9 import javax.swing.tree.TreePath; 10 import java.util.Vector; 11 12 13 /*** 14 * Model for the AST Panel Tree component 15 * 16 * @author Boris Gruschko ( boris at gruschko.org ) 17 * @version $Id: ASTModel.java,v 1.6 2005/08/23 17:17:49 tomcopeland Exp $ 18 */ 19 20 public class ASTModel 21 22 implements TreeModel { 23 24 private SimpleNode root; 25 26 private Vector listeners = new Vector(1); 27 28 29 /*** 30 * creates the tree model 31 * 32 * @param root tree's root 33 */ 34 35 public ASTModel(SimpleNode root) { 36 37 this.root = root; 38 39 } 40 41 42 /*** 43 * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int) 44 */ 45 46 public Object getChild(Object parent, int index) { 47 48 return ((SimpleNode) parent).jjtGetChild(index); 49 50 } 51 52 53 /*** 54 * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) 55 */ 56 57 public int getChildCount(Object parent) { 58 59 return ((SimpleNode) parent).jjtGetNumChildren(); 60 61 } 62 63 64 /*** 65 * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, 66 * <p/> 67 * java.lang.Object) 68 */ 69 70 public int getIndexOfChild(Object parent, Object child) { 71 72 SimpleNode node = ((SimpleNode) parent); 73 74 75 for (int i = 0; i < node.jjtGetNumChildren(); i++) 76 77 if (node.jjtGetChild(i).equals(child)) { 78 79 return i; 80 81 } 82 83 84 return -1; 85 86 } 87 88 89 /*** 90 * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) 91 */ 92 93 public boolean isLeaf(Object node) { 94 95 return ((SimpleNode) node).jjtGetNumChildren() == 0; 96 97 } 98 99 100 /*** 101 * @see javax.swing.tree.TreeModel#getRoot() 102 */ 103 104 public Object getRoot() { 105 106 return root; 107 108 } 109 110 111 /*** 112 * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, 113 * <p/> 114 * java.lang.Object) 115 */ 116 117 public void valueForPathChanged(TreePath path, Object newValue) { 118 119 throw new UnsupportedOperationException(); 120 121 } 122 123 124 /*** 125 * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) 126 */ 127 128 public void addTreeModelListener(TreeModelListener l) { 129 130 listeners.add(l); 131 132 } 133 134 135 /*** 136 * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) 137 */ 138 139 public void removeTreeModelListener(TreeModelListener l) { 140 141 listeners.remove(l); 142 143 } 144 145 146 protected void fireTreeModelEvent(TreeModelEvent e) { 147 148 for (int i = 0; i < listeners.size(); i++) { 149 150 ((TreeModelListener) listeners.elementAt(i)).treeNodesChanged(e); 151 152 } 153 154 } 155 156 } 157