View Javadoc

1   /*
2    * DiagramElementTreePane.java
3    *
4    * Created on 6. juli 2005, 04:04
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                      // show or display the windows containing the cells represented by the TreeElement
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                                 //org.jgraph.graph.DefaultGraphCell edgeSource=(org.jgraph.graph.DefaultGraphCell)(((org.jgraph.graph.DefaultPort)edge.getSource()).getParent());
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