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.9 2006/02/10 14:26:32 tomcopeland Exp $ 18 */ 19 20 public class ASTModel 21 implements TreeModel { 22 private SimpleNode root; 23 private Vector listeners = new Vector(1); 24 25 /*** 26 * creates the tree model 27 * 28 * @param root tree's root 29 */ 30 public ASTModel(SimpleNode root) { 31 this.root = root; 32 } 33 34 /*** 35 * @see javax.swing.tree.TreeModel 36 */ 37 public Object getChild(Object parent, int index) { 38 return ((SimpleNode) parent).jjtGetChild(index); 39 } 40 41 /*** 42 * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) 43 */ 44 public int getChildCount(Object parent) { 45 return ((SimpleNode) parent).jjtGetNumChildren(); 46 } 47 48 /*** 49 * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, 50 * <p/> 51 * java.lang.Object) 52 */ 53 public int getIndexOfChild(Object parent, Object child) { 54 SimpleNode node = ((SimpleNode) parent); 55 for (int i = 0; i < node.jjtGetNumChildren(); i++) 56 if (node.jjtGetChild(i).equals(child)) { 57 return i; 58 } 59 return -1; 60 } 61 62 /*** 63 * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) 64 */ 65 public boolean isLeaf(Object node) { 66 return ((SimpleNode) node).jjtGetNumChildren() == 0; 67 } 68 69 /*** 70 * @see javax.swing.tree.TreeModel#getRoot() 71 */ 72 public Object getRoot() { 73 return root; 74 } 75 76 /*** 77 * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, 78 * <p/> 79 * java.lang.Object) 80 */ 81 public void valueForPathChanged(TreePath path, Object newValue) { 82 throw new UnsupportedOperationException(); 83 } 84 85 /*** 86 * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) 87 */ 88 public void addTreeModelListener(TreeModelListener l) { 89 listeners.add(l); 90 } 91 92 93 /*** 94 * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) 95 */ 96 public void removeTreeModelListener(TreeModelListener l) { 97 listeners.remove(l); 98 } 99 100 101 protected void fireTreeModelEvent(TreeModelEvent e) { 102 for (int i = 0; i < listeners.size(); i++) { 103 ((TreeModelListener) listeners.elementAt(i)).treeNodesChanged(e); 104 } 105 } 106 107 } 108