1
2
3
4
5
6
7 package com.vikash.firsttool.UI;
8 import com.vikash.firsttool.ProfileImpl.*;
9 import com.vikash.firsttool.Diagram.*;
10 import java.awt.*;
11 import java.awt.event.*;
12 import java.awt.dnd.*;
13 import java.awt.image.*;
14 import java.awt.datatransfer.*;
15 import java.net.URL;
16 import javax.swing.*;
17 import javax.swing.tree.*;
18 import javax.swing.event.TreeSelectionListener;
19
20 import org.jgraph.graph.*;
21 /***
22 *
23 * @author studajb
24 */
25 public class DiagramElementTreePane extends JTree implements DragGestureListener,
26 DragSourceListener{
27
28 ToolModel model;
29 DiagramElementTreeModel diagElementModel;
30 JDesktopPane desktoppane;
31 ToolsStatusBar statusBar;
32 MainFrame mainframe;
33 DragSource dragSource;
34 ToolGraph graph;
35 public DiagramElementTreePane(MainFrame frame) {
36 this.mainframe=frame;
37 model=ToolModel.getInstance(false);
38 this.desktoppane=frame.getDesktopPane();
39 statusBar=frame.getStatusBar();
40 DefaultMutableTreeNode diagramroot= new DefaultMutableTreeNode("Diagram Elements");
41 diagElementModel = new DiagramElementTreeModel(diagramroot,model,this,desktoppane);
42 model.addGraphModelListener(diagElementModel);
43 this.setModel(diagElementModel);
44 this.setEditable(false);
45 this.setShowsRootHandles(true);
46 this.setCellRenderer(new ElementTreeCellRenderer());
47 this.setRowHeight(22);
48 this.addMouseListener(new MouseAdapter(){
49 public void mouseReleased(MouseEvent e){
50 TreePath path=getPathForLocation(e.getX(),e.getY());
51 setSelectionPath(path);
52 if(path==null)return;
53 DefaultMutableTreeNode selectednode=(DefaultMutableTreeNode)path.getLastPathComponent();
54 if(!(selectednode instanceof TreeElement))return;
55 if(e.isPopupTrigger()){
56
57 int x=e.getX();
58 int y=e.getY();
59 JPopupMenu pop=createPopupMenu();
60 pop.show(e.getComponent(), x, y);
61
62 }
63 }
64 public void mousePressed(MouseEvent e) {
65
66 if(e.getClickCount()==2){
67
68 TreePath path=getPathForLocation(e.getX(),e.getY());
69 int selRow=getRowForLocation(e.getX(),e.getY());
70 setSelectionPath(path);
71 if(path==null || selRow==-1)return;
72 DefaultMutableTreeNode selectednode=(DefaultMutableTreeNode)path.getLastPathComponent();
73 if(!(selectednode instanceof TreeElement))return;
74
75 String name=selectednode.getUserObject().toString();
76 String type;
77 if(selectednode.getUserObject() instanceof ToolEdge)
78 type="Any Type";
79 else
80 type=selectednode.getParent().toString();
81
82 FindDialog find=new FindDialog(mainframe,true);
83 find.doSearch(name,type);
84 find.show();
85 }
86 }
87 });
88
89 dragSource=DragSource.getDefaultDragSource();
90 DragGestureRecognizer dgr = dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
91
92
93 }
94 public JPopupMenu createPopupMenu(){
95 JPopupMenu pop=new JPopupMenu();
96 final TreeElement treeelement=(TreeElement)getLastSelectedPathComponent();
97 final DefaultGraphCell node=(DefaultGraphCell)treeelement.getUserObject();
98 final ToolInternalFrame internalframe=(ToolInternalFrame)desktoppane.getSelectedFrame();
99 graph= internalframe != null ? internalframe.getGraph() : null;
100 Action edit=new AbstractAction("Edit"){
101 public void actionPerformed(ActionEvent e){
102 TreeElementEditDialog dialog=new TreeElementEditDialog(mainframe,true,treeelement, (DiagramElementTreeModel) getModel());
103 dialog.show();
104
105
106 }
107 };
108 JMenuItem edititem=new JMenuItem(edit);
109 pop.add(edititem);
110 pop.addSeparator();
111
112 Action delete=new AbstractAction("Delete From Model") {
113 public void actionPerformed(ActionEvent e){
114
115 Object[] cells=new Object[]{node};
116 cells = org.jgraph.graph.DefaultGraphModel.getDescendants(graph.getModel(), cells).toArray();
117 Object[] edges = org.jgraph.graph.DefaultGraphModel.getEdges(graph.getModel(),cells).toArray();
118
119 graph.getModel().remove(edges);
120 graph.getModel().remove(cells);
121 }
122 };
123 JMenuItem deleteitem=new JMenuItem(delete);
124 pop.add(deleteitem);
125 return pop;
126 }
127
128 public void dragGestureRecognized(DragGestureEvent dge) {
129
130 TreePath path=getSelectionPath();
131 if(path==null)return;
132 DefaultMutableTreeNode selectednode=(DefaultMutableTreeNode)path.getLastPathComponent();
133
134 if(selectednode instanceof TreeElement){
135 DefaultGraphCell cell=(DefaultGraphCell)selectednode.getUserObject();
136 ToolInternalFrame internalframe=(ToolInternalFrame)desktoppane.getSelectedFrame();
137 ToolGraph graph= internalframe != null ? internalframe.getGraph() : null;
138 Transferable transferable=new ToolTransferable((TreeElement)selectednode);
139 if(graph!=null)
140 graph.setCopyFromTree(true, cell);
141 dge.startDrag(DragSource.DefaultCopyDrop,transferable,this);
142
143 }
144
145 }
146 public void dragDropEnd(DragSourceDropEvent dsde) {
147 }
148
149 public void dragEnter(DragSourceDragEvent dsde) {
150 DragSourceContext context=dsde.getDragSourceContext();
151 if(!isDragAcceptable()){
152 context.setCursor(DragSource.DefaultCopyNoDrop);
153 }
154 }
155
156 public void dragExit(DragSourceEvent dse) {
157 }
158
159 public void dragOver(DragSourceDragEvent dsde) {
160 }
161
162 public void dropActionChanged(DragSourceDragEvent dsde) {
163 }
164 public boolean isDragAcceptable(){
165 TreeElement treeelement=(TreeElement)getLastSelectedPathComponent();
166 DefaultGraphCell node=(DefaultGraphCell)treeelement.getUserObject();
167 ToolInternalFrame internalframe=(ToolInternalFrame)desktoppane.getSelectedFrame();
168 graph= internalframe != null ? internalframe.getGraph() : null;
169 if(!graph.isCopyFromTree())return false;
170 DefaultGraphCell cell=graph.copyCellFromTree();
171 if (cell instanceof ToolEdge){
172 DefaultGraphCell source=(DefaultGraphCell)((DefaultPort)((ToolEdge)cell).getSource()).getParent();
173 DefaultGraphCell target=(DefaultGraphCell)((DefaultPort)((ToolEdge)cell).getTarget()).getParent();
174 if(graph.isValidElement(source) && graph.isValidElement(target))
175 return true;
176
177
178 }
179 else{
180 if(graph != null && graph.isValidElement(cell))
181 return true;
182 }
183 return false;
184 }
185
186 class ElementTreeCellRenderer extends DefaultTreeCellRenderer{
187
188 public Component getTreeCellRendererComponent(
189 JTree tree,
190 Object value,
191 boolean sel,
192 boolean expanded,
193 boolean leaf,
194 int row,
195 boolean _hasFocus) {
196
197 Component r= super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,_hasFocus);
198 JLabel lab;
199 URL icon;
200 if (r instanceof JLabel) {
201 lab = (JLabel) r;
202 if(value!=null){
203
204 if(value.toString()!=null){
205 if(value.toString().equals("SWOT Elements")){
206 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/SWOT.gif");
207 lab.setIcon(new ImageIcon(icon));
208
209 return lab;
210 }
211 else if(value.toString().equals("Asset Elements")){
212 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Asset.gif");
213 lab.setIcon(new ImageIcon(icon));
214 return lab;
215 }
216 else if(value.toString().equals("Stakeholder Elements")){
217 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Stakeholder.gif");
218 lab.setIcon(new ImageIcon(icon));
219 return lab;
220 }
221 else if(value.toString().equals("Entity Elements")){
222 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Entity.gif");
223 lab.setIcon(new ImageIcon(icon));
224 return lab;
225 }
226 else if(value.toString().equals("ThreatAgents Elements")){
227 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/ThreatAgent.gif");
228 lab.setIcon(new ImageIcon(icon));
229 return lab;
230 }
231 else if(value.toString().equals("ThreatScenario Elements")){
232 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/ThreatScenario.gif");
233 lab.setIcon(new ImageIcon(icon));
234 return lab;
235 }
236 else if(value.toString().equals("UnwantedIncident Elements")){
237 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/UnwantedIncident.gif");
238 lab.setIcon(new ImageIcon(icon));
239 return lab;
240 }
241 else if(value.toString().equals("Risk Elements")){
242 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Risk.gif");
243 lab.setIcon(new ImageIcon(icon));
244 return lab;
245 }
246 else if(value.toString().equals("Treatment Elements")){
247 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Treatment.gif");
248 lab.setIcon(new ImageIcon(icon));
249 return lab;
250 }
251 else if(value.toString().equals("TreatmentEffect Elements")){
252 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/TreatmentEffect.gif");
253 lab.setIcon(new ImageIcon(icon));
254 return lab;
255 }
256 else if(value instanceof TreeElement){
257 DefaultGraphCell cell=(DefaultGraphCell)((TreeElement)value).getUserObject();
258
259 if(cell.getClass().getName().equals("com.vikash.firsttool.ProfileImpl.ToolEdge")){
260
261 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/Arrow.gif");
262 lab.setIcon(new ImageIcon(icon));
263
264 ToolEdge edge=(ToolEdge) cell;
265
266
267 org.jgraph.graph.DefaultGraphCell edgeTarget=(org.jgraph.graph.DefaultGraphCell)(((org.jgraph.graph.DefaultPort)edge.getTarget()).getParent());
268 lab.setText(value.toString()+""+edgeTarget);
269 }
270 else {
271 lab.setText(cell.toString());
272 org.jgraph.graph.AttributeMap map=cell.getAttributes();
273 Object[] labels=org.jgraph.graph.GraphConstants.getExtraLabels(map);
274 Object cellname=labels[0].toString();
275 if(cellname!=null){
276 icon=getClass().getClassLoader().getResource("com/vikash/firsttool/resources/"+cellname+".gif");
277 lab.setIcon(new ImageIcon(icon));
278
279 }
280
281 }
282 return lab;
283
284
285 }
286
287 else {
288
289 return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,_hasFocus);
290 }
291
292 }
293 else
294 return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,_hasFocus);
295 }
296
297 else
298 return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,_hasFocus);
299 }
300 else
301 return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,_hasFocus);
302
303 }
304
305 }
306
307 }
308
309
310
311
312