1 package net.sourceforge.pmd.util.viewer.model;
2
3
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.event.TreeModelEvent;
8 import javax.swing.event.TreeModelListener;
9 import javax.swing.tree.TreeModel;
10 import javax.swing.tree.TreePath;
11
12 import net.sourceforge.pmd.ast.SimpleNode;
13
14
15 /***
16 * Model for the AST Panel Tree component
17 *
18 * @author Boris Gruschko ( boris at gruschko.org )
19 * @version $Id: ASTModel.java,v 1.11 2006/10/20 02:40:14 hooperbloob Exp $
20 */
21
22 public class ASTModel implements TreeModel {
23
24 private SimpleNode root;
25 private List listeners = new ArrayList(1);
26
27 /***
28 * creates the tree model
29 *
30 * @param root tree's root
31 */
32 public ASTModel(SimpleNode root) {
33 this.root = root;
34 }
35
36 /***
37 * @see javax.swing.tree.TreeModel
38 */
39 public Object getChild(Object parent, int index) {
40 return ((SimpleNode) parent).jjtGetChild(index);
41 }
42
43 /***
44 * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
45 */
46 public int getChildCount(Object parent) {
47 return ((SimpleNode) parent).jjtGetNumChildren();
48 }
49
50 /***
51 * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,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,java.lang.Object)
78 */
79 public void valueForPathChanged(TreePath path, Object newValue) {
80 throw new UnsupportedOperationException();
81 }
82
83 /***
84 * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener)
85 */
86 public void addTreeModelListener(TreeModelListener l) {
87 listeners.add(l);
88 }
89
90
91 /***
92 * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener)
93 */
94 public void removeTreeModelListener(TreeModelListener l) {
95 listeners.remove(l);
96 }
97
98
99 protected void fireTreeModelEvent(TreeModelEvent e) {
100 for (int i = 0; i < listeners.size(); i++) {
101 ((TreeModelListener) listeners.get(i)).treeNodesChanged(e);
102 }
103 }
104
105 }
106