1
2
3
4
5
6
7 package com.vikash.firsttool.UI;
8 import com.vikash.firsttool.Diagram.*;
9 import com.vikash.firsttool.ProfileImpl.*;
10 import javax.swing.*;
11 import javax.swing.border.*;
12 import javax.swing.tree.*;
13 import javax.swing.table.*;
14 import java.awt.*;
15 import java.awt.event.*;
16 import java.util.*;
17 import org.jgraph.graph.*;
18 /***
19 *
20 * @author studajb
21 */
22 public class FindDialog extends JDialog implements MouseListener,ActionListener{
23 JTextArea help=new JTextArea();
24 JComboBox Element=new JComboBox();
25 JComboBox Diagram=new JComboBox();
26 JComboBox ElementType=new JComboBox();
27 JComboBox DiagramType=new JComboBox();
28 JButton Search=new JButton("Search");
29 JButton ClearSearch=new JButton("Reset");
30 JButton close=new JButton("Close");
31 JScrollPane scrollpane;
32 ToolTable table;
33 JLabel resultlabel;
34 JPanel MainPanel=new JPanel();
35 JPanel SearchPanel=new JPanel();
36 JPanel ResultsPanel=new JPanel();
37 JPanel ClosePanel=new JPanel();
38 MainFrame frame;
39 DiagramElementTreePane tree;
40 DiagramTreePane diagramtree;
41 Vector elementResults=null;
42 Vector diagramResults;
43 Vector initialResults;
44 /*** Creates a new instance of FindDialog */
45 public FindDialog(Frame mainframe,boolean flag) {
46 super(mainframe,flag);
47 this.frame=(MainFrame)mainframe;
48 this.tree=this.frame.getDiagramElementTree();
49 this.diagramtree=this.frame.getDiagramTree();
50 setTitle("Search");
51 setSize(500,350);
52 setDialogLocation();
53 JTabbedPane tabbedpane=new JTabbedPane();
54
55
56 initSearch();
57 tabbedpane.addTab("Search",MainPanel);
58
59
60 initHelp();
61 tabbedpane.addTab("Help",new JScrollPane(help));
62
63 Container contentPane=getContentPane();
64 contentPane.add(tabbedpane);
65 }
66
67 public void initSearch(){
68
69
70 Element.setEditable(true);
71 Element.addItem("*");
72 Element.setPreferredSize(new Dimension(180,25));
73 Element.setMaximumSize(new Dimension(180,25));
74 Element.setMinimumSize(new Dimension(180,25));
75 Diagram.setEditable(true);
76 Diagram.addItem("*");
77 Diagram.setPreferredSize(new Dimension(180,25));
78 Diagram.setMaximumSize(new Dimension(180,25));
79 Diagram.setMinimumSize(new Dimension(180,25));
80 ElementType.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
81 initElementType();
82 DiagramType.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
83 initDiagramType();
84
85 JLabel elementLabel = new JLabel("Element Name:");
86 JLabel diagramLabel = new JLabel("In Diagram:");
87 JLabel elementtypeLabel = new JLabel("Element Type:");
88 JLabel diagramtypeLabel = new JLabel("Diagram Type:");
89
90 GridBagLayout layout = new GridBagLayout();
91 SearchPanel.setLayout(layout);
92 SearchPanel.setBorder(new EtchedBorder());
93 ResultsPanel.setBorder(new EtchedBorder());
94 GridBagConstraints constraints=new GridBagConstraints();
95
96
97 constraints.gridwidth = 1;
98
99
100 constraints.gridx = 0;
101 constraints.gridy = 0;
102 constraints.weightx = 0.0;
103 layout.setConstraints(elementLabel, constraints);
104 SearchPanel.add(elementLabel);
105
106 constraints.gridx = 0;
107 constraints.gridy = 1;
108 constraints.weightx = 0.0;
109 layout.setConstraints(diagramLabel, constraints);
110 SearchPanel.add(diagramLabel);
111
112
113
114 constraints.gridx = 2;
115 constraints.gridy = 0;
116 constraints.weightx = 0.0;
117 layout.setConstraints(elementtypeLabel, constraints);
118 SearchPanel.add(elementtypeLabel);
119
120 constraints.gridx = 2;
121 constraints.gridy = 1;
122 constraints.weightx = 0.0;
123 layout.setConstraints(diagramtypeLabel, constraints);
124 SearchPanel.add(diagramtypeLabel);
125
126 constraints.gridx = 1;
127 constraints.gridy = 0;
128 constraints.weightx = 100;
129 layout.setConstraints(Element, constraints);
130 SearchPanel.add(Element);
131
132 constraints.gridx = 1;
133 constraints.gridy = 1;
134 constraints.weightx = 100;
135 layout.setConstraints(Diagram, constraints);
136 SearchPanel.add(Diagram);
137
138
139
140 constraints.gridx = 3;
141 constraints.gridy = 0;
142 constraints.weightx = 100;
143 layout.setConstraints(ElementType, constraints);
144 SearchPanel.add(ElementType);
145
146
147
148 constraints.gridx = 3;
149 constraints.gridy = 1;
150 constraints.weightx = 100;
151 layout.setConstraints(DiagramType, constraints);
152 SearchPanel.add(DiagramType);
153
154 JPanel buttonPanel = new JPanel();
155
156 Search.addActionListener(new ActionListener(){
157 public void actionPerformed(ActionEvent e) {
158 doSearch(null,null);
159 ClearSearch.setEnabled(true);
160 }
161 });
162 buttonPanel.add(Search);
163 ClearSearch.addActionListener(new ActionListener(){
164 public void actionPerformed(ActionEvent e) {
165 doNewSearch();
166 ClearSearch.setEnabled(false);
167 }
168 });
169 ClearSearch.setEnabled(false);
170 buttonPanel.add(ClearSearch);
171
172 buttonPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
173 constraints.gridx = 0; constraints.gridy = 2;
174 constraints.weightx = 0.0; constraints.weighty = 0.0;
175 constraints.gridwidth = 4; constraints.gridheight = 4;
176 layout.setConstraints(buttonPanel,constraints);
177 SearchPanel.add(buttonPanel);
178
179
180
181
182 resultlabel=new JLabel("Results:");
183 TableModel model=new TableModel(elementResults);
184 table=new ToolTable(model);
185 ResultsPanel.setLayout(new BorderLayout());
186 ResultsPanel.add(resultlabel,BorderLayout.NORTH);
187 scrollpane =new JScrollPane(table);
188 ResultsPanel.add(scrollpane,BorderLayout.CENTER);
189
190 MainPanel.setLayout(new BorderLayout());
191 MainPanel.add(SearchPanel,BorderLayout.NORTH);
192 MainPanel.add(ResultsPanel,BorderLayout.CENTER);
193 close.addActionListener(this);
194 ClosePanel.add(close);
195 MainPanel.add(ClosePanel,BorderLayout.SOUTH);
196
197
198 }
199 public void initElementType(){
200 ElementType.addItem("Any Type");
201 ElementType.addItem("SWOT Elements");
202 ElementType.addItem("Asset Elements");
203 ElementType.addItem("Stakeholder Elements");
204 ElementType.addItem("Entity Elements");
205 ElementType.addItem("ThreatAgents Elements");
206 ElementType.addItem("ThreatScenario Elements");
207 ElementType.addItem("UnwantedIncident Elements");
208 ElementType.addItem("Risk Elements");
209 ElementType.addItem("Treatment Elements");
210 ElementType.addItem("TreatmentEffect Elements");
211 }
212 public void initDiagramType(){
213 DiagramType.addItem("Any Type");
214 DiagramType.addItem("SWOT Diagram");
215 DiagramType.addItem("Asset Diagram");
216 DiagramType.addItem("UnwantedIncident Diagram");
217 DiagramType.addItem("Risk Diagram");
218 DiagramType.addItem("Treatment Diagram");
219 DiagramType.addItem("TreatmentEffect Diagram");
220
221 }
222
223
224
225 public void doSearch(String name,String type){
226 String elementname=null;
227 String elementtype=null;
228 if(name==null){
229 elementname=(String)Element.getSelectedItem();
230 }
231 else
232 elementname=name;
233 if (elementname != null) {
234 Element.removeItem(elementname);
235 Element.insertItemAt(elementname, 0);
236 Element.setSelectedItem(elementname);
237 }
238 String diagramname=(String)Diagram.getSelectedItem();
239 if (diagramname != null) {
240 Diagram.removeItem(diagramname);
241 Diagram.insertItemAt(diagramname, 0);
242 Diagram.setSelectedItem(diagramname);
243 }
244 if (type==null)
245 elementtype=(String)ElementType.getSelectedItem();
246
247 else{
248 elementtype=type;
249 ElementType.setSelectedItem(type);
250 }
251 String diagramtype=(String)DiagramType.getSelectedItem();
252
253
254 DefaultMutableTreeNode diagramroot=(DefaultMutableTreeNode)diagramtree.getModel().getRoot();
255 DefaultMutableTreeNode node;
256 TreeElement tempelem;
257 initialResults=new Vector();
258 DefaultMutableTreeNode root=(DefaultMutableTreeNode)diagramtree.getModel().getRoot();
259 Enumeration en=root.breadthFirstEnumeration();
260 if(diagramname.equals("*")){
261 while(en.hasMoreElements()){
262 node=(DefaultMutableTreeNode)en.nextElement();
263 if(node instanceof TreeElement){
264
265 ToolGraph graph=((TreeElement)node).getInternalFrame().getGraph();
266 Object[] cells=graph.getGraphLayoutCache().getVisibleCells(graph.getRoots());
267 for(int i=0;i<cells.length;i++){
268 tempelem=new TreeElement((DefaultGraphCell)cells[i]);
269 tempelem.setInternalFrame(((TreeElement)node).getInternalFrame());
270 initialResults.add(tempelem);
271 }
272 }
273 }
274
275 }
276 else{
277 while(en.hasMoreElements()){
278 node=(DefaultMutableTreeNode)en.nextElement();
279 if(node instanceof TreeElement && ((TreeElement)node).getInternalFrame().getFrameTitle().equals(diagramname)){
280
281 ToolGraph graph=((TreeElement)node).getInternalFrame().getGraph();
282 Object[] cells=graph.getGraphLayoutCache().getVisibleCells(graph.getRoots());
283 for(int i=0;i<cells.length;i++){
284 tempelem=new TreeElement((DefaultGraphCell)cells[i]);
285 tempelem.setInternalFrame(((TreeElement)node).getInternalFrame());
286 initialResults.add(tempelem);
287 }
288 }
289
290 }
291
292 }
293
294
295 diagramResults=new Vector();
296 if(diagramtype.equals("Any Type")){
297 diagramResults = initialResults;
298
299 }
300 else{
301 for(int i=0;i<initialResults.size();i++){
302 node=(DefaultMutableTreeNode)initialResults.elementAt(i);
303
304 if(((TreeElement)node).getInternalFrame().getGraph().toString().equals(diagramtype)){
305 diagramResults.add(node);
306
307 }
308 }
309
310 }
311
312 DefaultMutableTreeNode elementnode;
313 DefaultGraphCell elementcell,cell,celltype=null;
314
315
316 elementResults=new Vector();
317 root=(DefaultMutableTreeNode)tree.getModel().getRoot();
318
319 if (!(elementtype.equals("Any Type")) && !(elementname.equals("*"))){
320 for(int i=0;i<root.getChildCount();i++){
321 if(elementtype.equals(root.getChildAt(i).toString())) {
322 if(root.getChildAt(i).getChildCount()!=0){
323 celltype=(DefaultGraphCell)((DefaultMutableTreeNode)root.getChildAt(i).getChildAt(0)).getUserObject();
324 }
325
326 }
327 }
328 if(celltype!=null){
329 for(int i=0;i<diagramResults.size();i++){
330 elementnode=(DefaultMutableTreeNode)diagramResults.elementAt(i);
331 elementcell=(DefaultGraphCell)elementnode.getUserObject();
332 if((elementcell.getClass().getName()==celltype.getClass().getName()) && elementname.equals(elementcell.toString())){
333 elementResults.add(elementnode);
334
335 }
336 }
337 }
338 }
339 else if (elementtype.equals("Any Type") && !(elementname.equals("*"))){
340 for(int i=0;i<diagramResults.size();i++){
341 elementnode=(DefaultMutableTreeNode)diagramResults.elementAt(i);
342 elementcell=(DefaultGraphCell)elementnode.getUserObject();
343 if(elementname.equals(elementcell.toString())){
344 elementResults.add(elementnode);
345
346 }
347 }
348 }
349 else if (!(elementtype.equals("Any Type")) && elementname.equals("*")){
350 for(int i=0;i<root.getChildCount();i++){
351 if(elementtype.equals(root.getChildAt(i).toString())) {
352 if(root.getChildAt(i).getChildCount()!=0){
353
354 celltype=(DefaultGraphCell)((DefaultMutableTreeNode)root.getChildAt(i).getChildAt(0)).getUserObject();
355 }
356
357
358 }
359 }
360 if(celltype!=null){
361 for(int i=0;i<diagramResults.size();i++){
362 elementnode=(DefaultMutableTreeNode)diagramResults.elementAt(i);
363 elementcell=(DefaultGraphCell)elementnode.getUserObject();
364 if((elementcell.getClass().getName()==celltype.getClass().getName())){
365 elementResults.add(elementnode);
366
367 }
368 }
369 }
370 }
371 else{
372 elementResults=diagramResults;
373
374 }
375 if(diagramname =="*" && diagramtype=="Any Type"){
376
377 root=(DefaultMutableTreeNode)tree.getModel().getRoot();
378 en=root.breadthFirstEnumeration();
379 while(en.hasMoreElements()){
380 node=(DefaultMutableTreeNode)en.nextElement();
381 if(node instanceof TreeElement){
382 elementcell=(DefaultGraphCell)node.getUserObject();
383 boolean found=false;
384 for(int i=0;i<elementResults.size();i++){
385 if(elementcell==(DefaultGraphCell)((TreeElement)elementResults.elementAt(i)).getUserObject())
386 found=true;
387 }
388 if(!found){
389 if(!(elementtype.equals("Any Type")) && !(elementname.equals("*"))) {
390 if(node.getParent().toString().equals(elementtype) && elementname.equals(elementcell.toString())){
391 TreeElement temp=new TreeElement(elementcell);
392 elementResults.add(temp);
393 }
394 }
395 else if (elementtype.equals("Any Type") && !(elementname.equals("*"))){
396 if(elementname.equals(elementcell.toString())){
397 TreeElement temp=new TreeElement(elementcell);
398 elementResults.add(temp);
399 }
400 }
401 else if (!(elementtype.equals("Any Type")) && elementname.equals("*")){
402 if(node.getParent().toString().equals(elementtype)){
403 TreeElement temp=new TreeElement(elementcell);
404 elementResults.add(temp);
405 }
406
407 }
408 else{
409 TreeElement temp=new TreeElement(elementcell);
410 elementResults.add(temp);
411 }
412 }
413
414 }
415
416 }
417 }
418
419 createResultsTable();
420 }
421 public void createResultsTable(){
422 resultlabel.setText("Results: "+elementResults.size()+" elements found");
423
424
425
426 ResultsPanel.remove(scrollpane);
427 TableModel model=new TableModel(elementResults);
428 table=new ToolTable(model);
429 table.addMouseListener(this);
430 scrollpane=new JScrollPane(table);
431 ResultsPanel.add(scrollpane,BorderLayout.CENTER);
432
433 }
434 public void doNewSearch(){
435 Element.removeAllItems();
436 Element.addItem("*");
437 Diagram.removeAllItems();
438 Diagram.addItem("*");
439 ElementType.setSelectedIndex(0);
440 DiagramType.setSelectedIndex(0);
441 resultlabel.setText("Results: ");
442 TableModel model=new TableModel(null);
443 table=new ToolTable(model);
444 scrollpane =new JScrollPane(table);
445 ResultsPanel.add(scrollpane,BorderLayout.CENTER);
446
447
448 }
449 public void initHelp(){
450 String text;
451 text =
452 "Follow these steps to search for elements: \n\n" +
453 "1. Enter the element & diagram information in the text fields. \n\n" +
454 "2. Press the \"Search\" button to search. \n\n" +
455 "3. This will update the table in the center with the results(if any).\n\n\n" +
456
457 "Single click on a result to go to -- \n" +
458 "The diagram in which the element is present \n" +
459 "or \n"+
460 "The element in the diagram element tree(upper tree) \n\n"+
461
462 "Double click on a result to open a dialog for editing the element\n\n\n" +
463
464 "Press \"Reset\" to reset all the search fields and the results table\n\n" +
465
466 "Press \"Close\" to close the search window";
467
468 help.setText(text);
469 help.setEditable(false);
470
471
472 }
473 private void setDialogLocation() {
474 Dimension size = getSize();
475 Dimension p = getParent().getSize();
476 int x = (getParent().getX() - size.width)
477 + (int) ((size.width + p.width) / 2d);
478 int y = (getParent().getY() - size.height)
479 + (int) ((size.height + p.height) / 2d);
480 setLocation(x, y);
481 }
482
483 public void mouseClicked(MouseEvent e) {
484 int row=table.rowAtPoint(e.getPoint());
485 TreeElement element=(TreeElement)elementResults.elementAt(row);
486 if(e.getClickCount()==2){
487 TreeElementEditDialog dialog=new TreeElementEditDialog(frame,true,element, (DiagramElementTreeModel) tree.getModel());
488 dialog.show();
489
490 }
491 if(e.getClickCount()==1){
492
493
494 ToolInternalFrame intframe=element.getInternalFrame();
495 if(intframe!=null){
496 try{
497 if(!(intframe.isVisible())){
498 intframe.setVisible(true);
499
500 }
501
502 if(intframe.isIcon())intframe.setIcon(false);
503 intframe.toFront();
504
505 }catch(Exception excp) {
506 JOptionPane.showMessageDialog(null,excp);
507 }
508
509
510 intframe.getGraph().setSelectionCell((DefaultGraphCell)element.getUserObject());
511
512 }
513
514 else{
515 DefaultGraphCell cell=(DefaultGraphCell)element.getUserObject();
516 DefaultMutableTreeNode root=(DefaultMutableTreeNode)tree.getModel().getRoot();
517 Enumeration en=root.breadthFirstEnumeration();
518 while(en.hasMoreElements()){
519 DefaultMutableTreeNode node=(DefaultMutableTreeNode)en.nextElement();
520 if(node instanceof TreeElement){
521 if(cell==(DefaultGraphCell)node.getUserObject())
522 ((DiagramElementTreeModel)tree.getModel()).showTreeElement(cell);
523
524 }
525 }
526 }
527 }
528 }
529
530 public void mouseEntered(MouseEvent e) {
531 }
532
533 public void mouseExited(MouseEvent e) {
534 }
535
536 public void mousePressed(MouseEvent e) {
537
538 }
539
540
541
542 public void mouseReleased(MouseEvent e) {
543 }
544
545 public void actionPerformed(ActionEvent e) {
546 if(e.getSource()==close){
547 hide();
548 dispose();
549 }
550 }
551
552
553 }
554
555 class ToolTable extends JTable{
556 public ToolTable(){
557 this(null);
558
559 }
560 public ToolTable(TableModel model){
561 super(model);
562 this.setRowSelectionAllowed(true);
563 this.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
564
565 }
566 }
567 class TableModel extends AbstractTableModel{
568 Vector Result;
569 public TableModel(Vector elements){
570 this.Result=elements;
571
572 }
573
574 public int getColumnCount() {
575 return 4;
576 }
577
578 public int getRowCount() {
579 if (Result == null)
580 return 0;
581 return Result.size();
582
583 }
584 public String getColumnName(int c) {
585 if(c==0)
586 return "Element Type";
587 else if (c == 1)
588 return "Element Name";
589 else if(c ==2)
590 return "In Diagram";
591 else
592 return "Diagram Type";
593
594 }
595 public boolean isCellEditable(int row, int col) {
596 return false;
597 }
598
599
600 public Object getValueAt(int rowIndex, int columnIndex) {
601 if (rowIndex < 0 || rowIndex >= Result.size())
602 return "Outof Bounds";
603 if (columnIndex < 0 || columnIndex >= 4)
604 return "Outof Bounds";
605
606
607 TreeElement element=(TreeElement)Result.elementAt(rowIndex);
608 switch(columnIndex){
609 case 0: DefaultGraphCell cell=(DefaultGraphCell)element.getUserObject();
610 if(cell instanceof SWOTGraphCell)
611 return "SWOT Element";
612 else if(cell instanceof AssetGraphCell)
613 return "Asset Element";
614
615 else if(cell instanceof StakeholderGraphCell)
616 return "Stakeholder Element";
617
618 else if(cell instanceof EntityGraphCell)
619 return "Entity Element";
620
621 else if(cell instanceof ThreatAgentGraphCell)
622 return "ThreatAgent Element";
623
624 else if(cell instanceof ThreatScenarioGraphCell)
625 return "ThreatScenario Element";
626
627 else if(cell instanceof UnwantedIncidentGraphCell)
628 return "UnwantedIncident Element";
629 else if(cell instanceof TreatmentGraphCell)
630 return "Treatment Element";
631 else if(cell instanceof RiskGraphCell)
632 return "Risk Element";
633 else if(cell instanceof TreatmentEffectGraphCell)
634 return "TreatmentEffect Element";
635 else
636 return "Edge";
637 case 1: return element.getUserObject();
638
639 case 2:if(element.getInternalFrame()==null)
640 return "N/A";
641 else
642 return element.getInternalFrame().getTitle();
643
644 case 3: if(element.getInternalFrame()==null)
645 return "N/A";
646 else
647 return element.getInternalFrame().getGraph().toString();
648 }
649 return "N/A";
650 }
651
652 }