1 package net.sf.jlayercheck.util.modeltree;
2
3 import java.util.Enumeration;
4 import java.util.SortedSet;
5 import java.util.TreeSet;
6 import java.util.Vector;
7
8 import javax.swing.tree.DefaultMutableTreeNode;
9 import javax.swing.tree.TreeNode;
10
11
12
13
14
15 public class DefaultModelTree extends DefaultMutableTreeNode implements ModelTree {
16
17
18
19
20 private static final long serialVersionUID = -1419905413709544489L;
21
22 public DefaultModelTree() {
23 setAllowsChildren(true);
24 }
25
26 public Vector<ModuleNode> getModules() {
27 if (getChildCount() > 0) {
28 Vector<ModuleNode> result = new Vector<ModuleNode>();
29 result.addAll(children);
30 return result;
31 }
32
33 return new Vector<ModuleNode>();
34 }
35
36
37
38
39
40
41
42 public ModuleNode getModule(String modulename) {
43 if (getModules() == null) return null;
44
45 for(ModuleNode node : getModules()) {
46 if (node.getModuleName().equals(modulename)) {
47 return node;
48 }
49 }
50
51 return null;
52 }
53
54
55
56
57
58
59
60 public ClassNode getClassNode(String classname) {
61 return (ClassNode) findNode(this, ClassNode.class, classname);
62 }
63
64
65
66
67
68
69
70
71
72
73 protected TreeNode findNode(TreeNode node, Class<? extends NamedTreeNode> clazz, String name) {
74 Enumeration<TreeNode> e = node.children();
75 while(e.hasMoreElements()) {
76 TreeNode currentNode = e.nextElement();
77 if (clazz.isInstance(currentNode)) {
78 if (((NamedTreeNode) currentNode).getName().equals(name)) {
79 return currentNode;
80 }
81 }
82
83 TreeNode childResult = findNode(currentNode, clazz, name);
84 if (childResult != null) {
85 return childResult;
86 }
87 }
88
89 return null;
90 }
91
92
93
94
95 public synchronized void sortNodes() {
96 SortedSet<ModuleNode> sort = new TreeSet<ModuleNode>();
97 sort.addAll(getModules());
98 removeAllChildren();
99
100
101 ModuleNode unassignedModule = null;
102 for(ModuleNode mn : sort) {
103 if (mn.isUnassignedModule()) {
104 assert(unassignedModule == null);
105 unassignedModule = mn;
106 } else {
107 add(mn);
108 }
109 }
110
111
112 if (unassignedModule != null) {
113 add(unassignedModule);
114 }
115 }
116
117
118
119
120
121
122
123
124 public ModuleNode getUnassignedModule() {
125 for(ModuleNode mn : getModules()) {
126 if (mn.isUnassignedModule()) {
127 return mn;
128 }
129 }
130
131 return null;
132 }
133
134 public void merge(ModelTree additionalModelTree) {
135 for(ModuleNode mn : additionalModelTree.getModules()) {
136 for(PackageNode pn : mn.getPackages()) {
137 for(ClassNode cn : pn.getClasses()) {
138 ModuleNode thisMn = getModule(mn.getModuleName());
139 if (thisMn == null) {
140 thisMn = new DependentModuleNode(mn.getModuleName());
141 add(thisMn);
142 }
143 PackageNode thisPn = thisMn.getPackage(pn.getPackagename());
144 if (thisPn == null) {
145 thisPn = new DependentPackageNode(pn.getPackagename());
146 thisMn.add(thisPn);
147 }
148 thisPn.add(cn);
149 }
150 }
151 }
152 }
153 }