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