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