View Javadoc

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   * A tree view of the modules, packages and classes that can be
21   * reordered (e.g. put packages and classes into other modules i.e. packages).
22   * 
23   * @author webmaster@earth3d.org
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  	 * Updates the status if nodes are unallowed dependencies.
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 }