1 package net.sf.jlayercheck.util.modeltree;
2
3 import javax.swing.tree.DefaultTreeModel;
4
5 import net.sf.jlayercheck.util.model.ClassDependency;
6
7
8
9
10
11
12 public class DependenciesTreeModel extends DefaultTreeModel {
13
14
15
16 private static final long serialVersionUID = -3719586478900307613L;
17
18 protected static final String UNASSIGNED = "unassigned";
19
20
21
22
23
24 public DependenciesTreeModel() {
25 super(null);
26 setRoot(new DependentModelTree());
27 }
28
29
30
31
32
33
34
35
36 public void addClassNodeToDependentModelTree(DependentModelTree depTree, ClassDependency cd, ClassNode depClass) {
37
38
39
40 PackageNode pn = null;
41 ModuleNode mn = null;
42
43 if (depClass != null) {
44 pn = (PackageNode) depClass.getParent();
45 mn = (ModuleNode) pn.getParent();
46 } else {
47 pn = new DefaultPackageNode(UNASSIGNED);
48 ((DefaultPackageNode) pn).setUnassignedPackage(true);
49 mn = new DefaultModuleNode(UNASSIGNED);
50 ((DefaultModuleNode) mn).setUnassignedModule(true);
51 }
52
53
54 if (depTree.getModule(mn.getModuleName()) == null) {
55 DependentModuleNode newModuleNode = new DependentModuleNode(mn.getModuleName(), mn.isUnassignedModule());
56 if (mn instanceof DependentModuleNode) {
57 newModuleNode.setUnallowedDependency(((DependentModuleNode) mn).isUnallowedDependency());
58 }
59 depTree.add(newModuleNode);
60 }
61
62 ModuleNode destModule = depTree.getModule(mn.getModuleName());
63
64
65 if (destModule.getPackage(pn.getPackagename()) == null) {
66 DependentPackageNode newPackageNode = new DependentPackageNode(pn.getPackagename());
67 if (pn instanceof DependentPackageNode) {
68 newPackageNode.setUnallowedDependency(((DependentPackageNode) pn).isUnallowedDependency());
69 }
70 destModule.add(newPackageNode);
71 }
72
73 PackageNode destPackage = destModule.getPackage(pn.getPackagename());
74
75
76 if (destPackage.getClass(cd.getDependency()) == null) {
77 DependentClassNode newClassNode = new DependentClassNode(cd);
78 if (depClass instanceof DependentClassNode) {
79 newClassNode.getClassDependency().setUnallowedDependency(((DependentClassNode) depClass).isUnallowedDependency());
80 }
81 destPackage.add(newClassNode);
82 }
83 }
84
85
86
87
88
89 public void merge(DependentModelTree depTree) {
90 for(ModuleNode mn : depTree.getModules()) {
91 for(PackageNode pn : mn.getPackages()) {
92 for(ClassNode cn : pn.getClasses()) {
93 addClassNodeToDependentModelTree((DependentModelTree) getRoot(), new ClassDependency(cn.getName()), cn);
94 }
95 }
96 }
97
98 ((DependentModelTree) getRoot()).sortNodes();
99 }
100 }