1 package net.sf.jlayercheck.gui;
2
3 import javax.swing.JTree;
4 import javax.swing.event.TreeModelEvent;
5 import javax.swing.event.TreeModelListener;
6 import javax.swing.tree.TreeModel;
7 import javax.swing.tree.TreeNode;
8
9 import net.antonioshome.swing.treewrapper.DnDVetoException;
10 import net.antonioshome.swing.treewrapper.TreeTreeDnDEvent;
11 import net.antonioshome.swing.treewrapper.TreeTreeDnDListener;
12 import net.antonioshome.swing.treewrapper.TreeWrapper;
13 import net.sf.jlayercheck.util.XMLConfiguration;
14 import net.sf.jlayercheck.util.modeltree.ClassNode;
15 import net.sf.jlayercheck.util.modeltree.DefaultModelTree;
16 import net.sf.jlayercheck.util.modeltree.ModuleNode;
17 import net.sf.jlayercheck.util.modeltree.PackageNode;
18
19
20
21
22
23
24
25 public class ModelPackageClassTree extends JTree {
26
27
28
29 private static final long serialVersionUID = 8017813199550063002L;
30
31 protected XMLConfiguration xmlConfiguration;
32
33 public ModelPackageClassTree(XMLConfiguration xmlconf) {
34 this.xmlConfiguration = xmlconf;
35
36 setCellRenderer(new DependenciesTreeCellRenderer());
37
38 TreeWrapper tw = new TreeWrapper(this);
39
40 tw.addTreeTreeDnDListener(new TreeTreeDnDListener() {
41
42 public void mayDrop(TreeTreeDnDEvent arg0) throws DnDVetoException {
43 TreeNode source = arg0.getSourceNode();
44 TreeNode target = arg0.getTargetNode();
45 if (source instanceof PackageNode && target instanceof ModuleNode) {
46 return;
47 }
48 if (source instanceof ClassNode && target instanceof PackageNode) {
49 return;
50 }
51 if (source instanceof ClassNode && target instanceof ClassNode) {
52 return;
53 }
54 throw new DnDVetoException("");
55 }
56
57 public void drop(TreeTreeDnDEvent arg0) throws DnDVetoException {
58 }
59
60 });
61 }
62
63
64
65
66 protected void updateTreeStatus() {
67 getXmlConfiguration().cumulateDependencyViolations(((DefaultModelTree) getModel().getRoot()));
68 }
69
70 public XMLConfiguration getXmlConfiguration() {
71 return xmlConfiguration;
72 }
73
74 public void setXmlConfiguration(XMLConfiguration xmlConfiguration) {
75 this.xmlConfiguration = xmlConfiguration;
76 }
77
78 @Override
79 public void setModel(TreeModel arg0) {
80 super.setModel(arg0);
81
82 getModel().addTreeModelListener(new TreeModelListener() {
83
84 public void treeStructureChanged(TreeModelEvent arg0) {
85 updateTreeStatus();
86 }
87
88 public void treeNodesRemoved(TreeModelEvent arg0) {
89 updateTreeStatus();
90 }
91
92 public void treeNodesInserted(TreeModelEvent arg0) {
93 updateTreeStatus();
94 }
95
96 public void treeNodesChanged(TreeModelEvent arg0) {
97 updateTreeStatus();
98 }
99
100 });
101 }
102 }