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