1 package net.sourceforge.pmd.swingui;
2
3 import net.sourceforge.pmd.PMDException;
4 import net.sourceforge.pmd.RuleSet;
5 import net.sourceforge.pmd.swingui.event.DirectoryTableEvent;
6 import net.sourceforge.pmd.swingui.event.DirectoryTableEventListener;
7 import net.sourceforge.pmd.swingui.event.HTMLAnalysisResultsEvent;
8 import net.sourceforge.pmd.swingui.event.HTMLAnalysisResultsEventListener;
9 import net.sourceforge.pmd.swingui.event.ListenerList;
10 import net.sourceforge.pmd.swingui.event.TextAnalysisResultsEvent;
11 import net.sourceforge.pmd.swingui.event.TextAnalysisResultsEventListener;
12
13 import javax.swing.Icon;
14 import javax.swing.JButton;
15 import javax.swing.JFileChooser;
16 import javax.swing.JMenu;
17 import javax.swing.JMenuBar;
18 import javax.swing.JMenuItem;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.JSeparator;
22 import javax.swing.JSplitPane;
23 import javax.swing.KeyStroke;
24 import javax.swing.UIManager;
25 import javax.swing.border.CompoundBorder;
26 import javax.swing.border.EmptyBorder;
27 import javax.swing.border.EtchedBorder;
28 import javax.swing.border.TitledBorder;
29 import javax.swing.filechooser.FileFilter;
30 import java.awt.BorderLayout;
31 import java.awt.Color;
32 import java.awt.Font;
33 import java.awt.Toolkit;
34 import java.awt.datatransfer.Clipboard;
35 import java.awt.datatransfer.ClipboardOwner;
36 import java.awt.datatransfer.StringSelection;
37 import java.awt.datatransfer.Transferable;
38 import java.awt.event.ActionEvent;
39 import java.awt.event.ActionListener;
40 import java.awt.event.KeyEvent;
41 import java.awt.event.MouseAdapter;
42 import java.awt.event.MouseEvent;
43 import java.io.File;
44 import java.io.FileWriter;
45 import java.io.IOException;
46 import java.util.Enumeration;
47
48 /***
49 *
50 * @author Donald A. Leckie
51 * @since January 6, 2003
52 * @version $Revision: 1.6 $, $Date: 2003/05/28 18:08:35 $
53 */
54 class SearchViewer extends JPanel {
55
56 private DirectoryTree m_directoryTree;
57 private StatusBar m_statusBar;
58 private JPanel m_directoryTreePanel;
59 private RulesTree m_rulesTree;
60 private JPanel m_rulesTreePanel;
61 private JSplitPane m_directoryRuleSplitPane;
62 private SearchResultsViewer m_resultsViewer;
63 private JPanel m_resultsViewerPanel;
64 private JSplitPane m_mainSplitPane;
65 private JButton m_searchButton;
66 private JPanel m_buttonPanel;
67 private JMenuBar m_menuBar;
68 private PMDClipboard m_clipboardOwner = new PMDClipboard();
69 private JMenuItem m_saveMenuItem;
70 private JMenuItem m_saveAsMenuItem;
71 private JMenuItem m_printAnalysisMenuItem;
72 private JMenuItem m_copyHTMLResultsMenuItem;
73 private JMenuItem m_copyTextResultsMenuItem;
74
75 /***
76 **********************************************************************************
77 *
78 */
79 protected SearchViewer() throws PMDException {
80 super(new BorderLayout());
81
82 createStatusBar();
83 createDirectoryTreePanel();
84 createRulesTreePanel();
85 createDirectoryRuleSplitPane();
86 createResultsViewer();
87 createResultsViewerScrollPane();
88 createMainSplitPane();
89 createButtonPanel();
90 createMenuBar();
91 setMenuBar();
92 add(createContentPanel(10));
93 }
94
95 /***
96 *********************************************************************************
97 *
98 * @param windowMargin
99 */
100 private void createStatusBar() {
101 String defaultMessage;
102 CompoundBorder compoundBorder;
103 EmptyBorder emptyBorder;
104
105 defaultMessage = "Select a source file directory and a rule to view the analysis below.";
106 m_statusBar = new StatusBar(defaultMessage);
107 emptyBorder = new EmptyBorder(0, 0, 5, 0);
108 compoundBorder = new CompoundBorder(emptyBorder, m_statusBar.getBorder());
109 m_statusBar.setBorder(compoundBorder);
110 }
111
112 /***
113 *********************************************************************************
114 *
115 */
116 private void createDirectoryTreePanel() {
117 Color background;
118 JScrollPane scrollPane;
119
120 m_directoryTree = new DirectoryTree("File Directories");
121 scrollPane = ComponentFactory.createScrollPane(m_directoryTree);
122 background = UIManager.getColor("pmdTreeBackground");
123 scrollPane.getViewport().setBackground(background);
124 m_directoryTreePanel = new JPanel(new BorderLayout());
125 m_directoryTreePanel.setBorder(createTitledBorder(" Directory "));
126 m_directoryTreePanel.add(scrollPane, BorderLayout.CENTER);
127 }
128
129 /***
130 *********************************************************************************
131 *
132 */
133 private void createRulesTreePanel() throws PMDException {
134 Color background;
135 JScrollPane scrollPane;
136
137 m_rulesTree = new RulesTree();
138 m_rulesTree.setDisablePopupMenu(true);
139 m_rulesTree.setDisableEditing(true);
140 m_rulesTree.expandNode(m_rulesTree.getRootNode());
141 scrollPane = ComponentFactory.createScrollPane(m_rulesTree);
142 background = UIManager.getColor("pmdTableBackground");
143 scrollPane.getViewport().setBackground(background);
144 m_rulesTreePanel = new JPanel(new BorderLayout());
145 m_rulesTreePanel.setBorder(createTitledBorder(" Rule "));
146 m_rulesTreePanel.add(scrollPane, BorderLayout.CENTER);
147 }
148
149 /***
150 *********************************************************************************
151 *
152 */
153 private void createDirectoryRuleSplitPane() {
154 m_directoryRuleSplitPane = ComponentFactory.createHorizontalSplitPane(m_directoryTreePanel, m_rulesTreePanel);
155 }
156
157 /***
158 *********************************************************************************
159 *
160 */
161 private void createResultsViewer() {
162 m_resultsViewer = new SearchResultsViewer();
163 m_resultsViewer.setSelectionColor(Color.blue);
164 }
165
166 /***
167 *********************************************************************************
168 *
169 */
170 private void createResultsViewerScrollPane() {
171 JScrollPane scrollPane;
172
173 scrollPane = ComponentFactory.createScrollPane(m_resultsViewer);
174 m_resultsViewerPanel = new JPanel(new BorderLayout());
175 m_resultsViewerPanel.setBorder(createTitledBorder(" Search Results "));
176 m_resultsViewerPanel.add(scrollPane, BorderLayout.CENTER);
177 }
178
179 /***
180 *********************************************************************************
181 *
182 */
183 private void createMainSplitPane() {
184 m_mainSplitPane = ComponentFactory.createVerticalSplitPane(m_directoryRuleSplitPane, m_resultsViewerPanel);
185 }
186
187 /***
188 ********************************************************************************
189 *
190 */
191 private void createButtonPanel() {
192 Color background;
193
194 m_buttonPanel = ComponentFactory.createButtonPanel();
195 background = UIManager.getColor("pmdBlue");
196 m_searchButton = ComponentFactory.createButton("Search", background, Color.white);
197 m_searchButton.addActionListener(new SearchButtonActionEventHandler());
198 m_buttonPanel.add(m_searchButton);
199 }
200
201 /***
202 *********************************************************************************
203 *
204 * @param margin
205 */
206 private JPanel createContentPanel(int margin) {
207 JPanel contentPanel = new JPanel(new BorderLayout());
208
209 EtchedBorder outsideBorder = new EtchedBorder(EtchedBorder.RAISED);
210 EmptyBorder insideBorder = new EmptyBorder(margin, margin, margin, margin);
211 CompoundBorder compoundBorder = new CompoundBorder(outsideBorder, insideBorder);
212
213 contentPanel.setBorder(compoundBorder);
214 contentPanel.add(m_statusBar, BorderLayout.NORTH);
215 contentPanel.add(m_mainSplitPane, BorderLayout.CENTER);
216 contentPanel.add(m_buttonPanel, BorderLayout.SOUTH);
217
218 return contentPanel;
219 }
220
221 /***
222 *********************************************************************************
223 *
224 * @param title
225 */
226 private TitledBorder createTitledBorder(String title) {
227 EtchedBorder etchedBorder;
228 TitledBorder titledBorder;
229 Font font;
230
231 etchedBorder = new EtchedBorder(EtchedBorder.RAISED);
232 titledBorder = new TitledBorder(etchedBorder, title);
233 font = titledBorder.getTitleFont();
234 font = new Font(font.getName(), Font.BOLD, font.getSize());
235 titledBorder.setTitleFont(font);
236
237 return titledBorder;
238 }
239
240 /***
241 *********************************************************************************
242 *
243 */
244 protected void adjustSplitPaneDividerLocation() {
245 m_mainSplitPane.setDividerLocation(0.4);
246 m_directoryRuleSplitPane.setDividerLocation(0.5);
247 }
248
249 /***
250 *********************************************************************************
251 *
252 */
253 private void createMenuBar() {
254 m_menuBar = new JMenuBar();
255
256 m_menuBar.add(new FileMenu());
257 m_menuBar.add(new EditMenu());
258 m_menuBar.add(new HelpMenu());
259 }
260
261 /***
262 *********************************************************************************
263 *
264 */
265 protected void setMenuBar() {
266 PMDViewer.getViewer().setJMenuBar(m_menuBar);
267 }
268
269 /***
270 ********************************************************************************
271 *
272 */
273 protected void analyze() {
274 m_resultsViewer.analyze();
275 }
276
277 /***
278 *********************************************************************************
279 *********************************************************************************
280 *********************************************************************************
281 */
282 private class PrintAnalysisActionListener implements ActionListener {
283
284 public void actionPerformed(ActionEvent event) {
285 (new PrintAnalysisResults()).print();
286 }
287 }
288
289 /***
290 *********************************************************************************
291 *********************************************************************************
292 *********************************************************************************
293 */
294 private class ExitActionListener implements ActionListener {
295
296 public void actionPerformed(ActionEvent event) {
297 System.exit(0);
298 }
299 }
300
301 /***
302 *********************************************************************************
303 *********************************************************************************
304 *********************************************************************************
305 */
306 private class CopyHTMLResultsActionListener implements ActionListener, HTMLAnalysisResultsEventListener {
307 private String m_htmlText;
308
309 /***
310 *****************************************************************************
311 *
312 * @param event
313 */
314 public void actionPerformed(ActionEvent event) {
315 try {
316 ListenerList.addListener((HTMLAnalysisResultsEventListener) this);
317 HTMLAnalysisResultsEvent.notifyRequestHTMLText(this);
318
319 if ((m_htmlText != null) && (m_htmlText.length() > 0)) {
320 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
321 StringSelection contents = new StringSelection(m_htmlText);
322 clipboard.setContents(contents, m_clipboardOwner);
323 }
324 } finally {
325 ListenerList.removeListener((HTMLAnalysisResultsEventListener) this);
326 }
327 }
328
329 /***
330 ******************************************************************************
331 *
332 * @param event
333 */
334 public void requestHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
335 }
336
337 /***
338 ******************************************************************************
339 *
340 * @param event
341 */
342 public void returnedHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
343 m_htmlText = event.getHTMLText();
344 }
345 }
346
347 /***
348 *********************************************************************************
349 *********************************************************************************
350 *********************************************************************************
351 */
352 private class CopyTextResultsActionListener implements ActionListener, TextAnalysisResultsEventListener {
353 private String m_text;
354
355 public void actionPerformed(ActionEvent event) {
356 try {
357 ListenerList.addListener((TextAnalysisResultsEventListener) this);
358 TextAnalysisResultsEvent.notifyRequestText(this);
359
360 if ((m_text != null) && (m_text.length() > 0)) {
361 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
362 StringSelection contents = new StringSelection(m_text);
363 clipboard.setContents(contents, m_clipboardOwner);
364 }
365 } finally {
366 ListenerList.removeListener((TextAnalysisResultsEventListener) this);
367 }
368 }
369
370 /***
371 ****************************************************************************
372 *
373 * @param event
374 */
375 public void requestTextAnalysisResults(TextAnalysisResultsEvent event) {
376 }
377
378 /***
379 ****************************************************************************
380 *
381 * @param event
382 */
383 public void returnedTextAnalysisResults(TextAnalysisResultsEvent event) {
384 m_text = event.getText();
385 }
386 }
387
388 /***
389 *********************************************************************************
390 *********************************************************************************
391 *********************************************************************************
392 */
393 private class FileMenuMouseListener extends MouseAdapter implements HTMLAnalysisResultsEventListener {
394
395 private String m_htmlText;
396
397 /***
398 *****************************************************************************
399 *
400 * @param event
401 */
402 public void mouseEntered(MouseEvent event) {
403 try {
404 ListenerList.addListener((HTMLAnalysisResultsEventListener) this);
405 HTMLAnalysisResultsEvent.notifyRequestHTMLText(this);
406 boolean enable = (m_htmlText.length() > 0);
407 m_saveMenuItem.setEnabled(enable);
408 m_saveAsMenuItem.setEnabled(enable);
409 m_printAnalysisMenuItem.setEnabled(enable);
410 } finally {
411 ListenerList.removeListener((HTMLAnalysisResultsEventListener) this);
412 }
413 }
414
415 /***
416 ****************************************************************************
417 *
418 * @param event
419 */
420 public void requestHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
421 }
422
423 /***
424 ****************************************************************************
425 *
426 * @param event
427 */
428 public void returnedHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
429 m_htmlText = event.getHTMLText();
430 }
431 }
432
433 /***
434 *********************************************************************************
435 *********************************************************************************
436 *********************************************************************************
437 */
438 private class EditMenuMouseListener extends MouseAdapter implements HTMLAnalysisResultsEventListener {
439
440 String m_htmlText;
441
442 /***
443 *****************************************************************************
444 *
445 * @param event
446 */
447 public void mouseEntered(MouseEvent event) {
448 try {
449 ListenerList.addListener((HTMLAnalysisResultsEventListener) this);
450 HTMLAnalysisResultsEvent.notifyRequestHTMLText(this);
451 boolean enable = (m_htmlText.length() > 0);
452 m_copyHTMLResultsMenuItem.setEnabled(enable);
453 m_copyTextResultsMenuItem.setEnabled(enable);
454 } finally {
455 ListenerList.removeListener((HTMLAnalysisResultsEventListener) this);
456 }
457 }
458
459 /***
460 ****************************************************************************
461 *
462 * @param event
463 */
464 public void requestHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
465 }
466
467 /***
468 ****************************************************************************
469 *
470 * @param event
471 */
472 public void returnedHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
473 m_htmlText = event.getHTMLText();
474 }
475 }
476
477 /***
478 *********************************************************************************
479 *********************************************************************************
480 *********************************************************************************
481 */
482 private class FileMenu extends JMenu {
483
484 /***
485 ********************************************************************
486 *
487 */
488 private FileMenu() {
489 super("File");
490
491 setMnemonic('F');
492
493 Icon icon;
494 JMenuItem menuItem;
495
496 //
497 // Save menu item
498 //
499 icon = UIManager.getIcon("save");
500 m_saveMenuItem = new JMenuItem("Save Search Results", icon);
501 m_saveMenuItem.addActionListener((ActionListener) new SaveActionListener());
502 m_saveMenuItem.setMnemonic('S');
503 m_saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK));
504 m_saveMenuItem.setDisabledIcon(icon);
505 add(m_saveMenuItem);
506
507 //
508 // Save As menu item
509 //
510 icon = UIManager.getIcon("saveAs");
511 m_saveAsMenuItem = new JMenuItem("Save Search Results As...", icon);
512 m_saveAsMenuItem.addActionListener((ActionListener) new SaveAsActionListener());
513 m_saveAsMenuItem.setMnemonic('A');
514 m_saveAsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
515 m_saveAsMenuItem.setDisabledIcon(icon);
516 add(m_saveAsMenuItem);
517
518 //
519 // Separator
520 //
521 add(new JSeparator());
522
523 //
524 // Print Analysis menu item
525 //
526 icon = UIManager.getIcon("print");
527 m_printAnalysisMenuItem = new JMenuItem("Print Search Results...", icon);
528 m_printAnalysisMenuItem.addActionListener((ActionListener) new PrintAnalysisActionListener());
529 m_printAnalysisMenuItem.setMnemonic('P');
530 m_printAnalysisMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_MASK));
531 m_printAnalysisMenuItem.setDisabledIcon(icon);
532 add(m_printAnalysisMenuItem);
533
534 //
535 // Separator
536 //
537 add(new JSeparator());
538
539 //
540 // Exit menu item
541 //
542 menuItem = new JMenuItem("Exit...");
543 menuItem.addActionListener((ActionListener) new ExitActionListener());
544 menuItem.setMnemonic('X');
545 add(menuItem);
546
547 addMouseListener(new FileMenuMouseListener());
548 }
549 }
550
551 /***
552 *********************************************************************************
553 *********************************************************************************
554 *********************************************************************************
555 */
556 private class EditMenu extends JMenu {
557
558 /***
559 ********************************************************************
560 *
561 */
562 private EditMenu() {
563 super("Edit");
564
565 setMnemonic('E');
566
567 Icon icon;
568
569 //
570 // Copy Results menu item
571 //
572 icon = UIManager.getIcon("copy");
573 m_copyHTMLResultsMenuItem = new JMenuItem("Copy Results Results as HTML", icon);
574 m_copyHTMLResultsMenuItem.addActionListener((ActionListener) new CopyHTMLResultsActionListener());
575 m_copyHTMLResultsMenuItem.setMnemonic('C');
576 m_copyHTMLResultsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK));
577 m_copyHTMLResultsMenuItem.setEnabled(false);
578 m_copyHTMLResultsMenuItem.setDisabledIcon(icon);
579 add(m_copyHTMLResultsMenuItem);
580
581 //
582 // Copy Results menu item
583 //
584 icon = UIManager.getIcon("copy");
585 m_copyTextResultsMenuItem = new JMenuItem("Copy Results Results as Text", icon);
586 m_copyTextResultsMenuItem.addActionListener((ActionListener) new CopyTextResultsActionListener());
587 m_copyTextResultsMenuItem.setMnemonic('Y');
588 m_copyTextResultsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, KeyEvent.CTRL_MASK));
589 m_copyTextResultsMenuItem.setEnabled(false);
590 m_copyTextResultsMenuItem.setDisabledIcon(icon);
591 add(m_copyTextResultsMenuItem);
592
593 addMouseListener(new EditMenuMouseListener());
594 }
595 }
596
597 /***
598 *********************************************************************************
599 *********************************************************************************
600 *********************************************************************************
601 */
602 private class SaveSaveAs implements HTMLAnalysisResultsEventListener {
603
604 private String m_htmlText;
605
606 /***
607 ****************************************************************************
608 *
609 * @param outputFile
610 */
611 private void perform(File outputFile) {
612 if (outputFile != null) {
613 try {
614 ListenerList.addListener((HTMLAnalysisResultsEventListener) this);
615 HTMLAnalysisResultsEvent.notifyRequestHTMLText(this);
616 FileWriter writer = null;
617
618 if (outputFile.exists()) {
619 outputFile.delete();
620 }
621
622 try {
623 writer = new FileWriter(outputFile);
624 writer.write(m_htmlText);
625 String message = "Saved Search results to file \"" + outputFile.getPath() + "\".";
626 MessageDialog.show(PMDViewer.getViewer(), message);
627 } catch (IOException ioException) {
628 String message = "Could not save Search results to a file.";
629 PMDException pmdException = new PMDException(message, ioException);
630 pmdException.fillInStackTrace();
631 throw pmdException;
632 } finally {
633 try {
634 writer.close();
635 } catch (IOException exception) {
636 }
637 }
638 } catch (PMDException pmdException) {
639 String message = pmdException.getMessage();
640 Exception exception = pmdException.getReason();
641 MessageDialog.show(PMDViewer.getViewer(), message, exception);
642 } finally {
643 ListenerList.removeListener((HTMLAnalysisResultsEventListener) this);
644 }
645 }
646 }
647
648 /***
649 ****************************************************************************
650 *
651 * Implements AnalyzeFileEventListener
652 *
653 * @param event
654 */
655 public void requestHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
656 }
657
658 /***
659 ****************************************************************************
660 *
661 * Implements AnalyzeFileEventListener
662 *
663 * @param event
664 */
665 public void returnedHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
666 m_htmlText = event.getHTMLText();
667 }
668 }
669
670 /***
671 *********************************************************************************
672 *********************************************************************************
673 *********************************************************************************
674 */
675 private class SaveActionListener implements ActionListener, DirectoryTableEventListener {
676
677 private File m_selectedFile;
678
679 /***
680 ****************************************************************************
681 *
682 * @param event
683 */
684 public void actionPerformed(ActionEvent event) {
685 try {
686 ListenerList.addListener((DirectoryTableEventListener) this);
687 DirectoryTableEvent.notifyRequestFileSelected(this);
688
689 if (m_selectedFile != null) {
690 String fileName = m_selectedFile.getName();
691 int index = fileName.lastIndexOf('.');
692
693 if (index >= 0) {
694 fileName = fileName.substring(0, index);
695 }
696
697 String directory = Preferences.getPreferences().getAnalysisResultsPath();
698 String path = directory + File.separator + fileName + ".html";
699 File outputFile = new File(path);
700 (new SaveSaveAs()).perform(outputFile);
701 }
702 } catch (PMDException pmdException) {
703 String message = pmdException.getMessage();
704 Exception exception = pmdException.getReason();
705 MessageDialog.show(PMDViewer.getViewer(), message, exception);
706 } finally {
707 ListenerList.removeListener((DirectoryTableEventListener) this);
708 }
709 }
710
711 /***
712 ****************************************************************************
713 *
714 * Implements DirectoryTableEventListener
715 *
716 * @param event
717 */
718 public void requestSelectedFile(DirectoryTableEvent event) {
719 }
720
721 /***
722 ****************************************************************************
723 *
724 * Implements DirectoryTableEventListener
725 *
726 * @param event
727 */
728 public void fileSelectionChanged(DirectoryTableEvent event) {
729 }
730
731 /***
732 ****************************************************************************
733 *
734 * Implements DirectoryTableEventListener
735 *
736 * @param event
737 */
738 public void fileSelected(DirectoryTableEvent event) {
739 m_selectedFile = event.getSelectedFile();
740 }
741 }
742
743 /***
744 *********************************************************************************
745 *********************************************************************************
746 *********************************************************************************
747 */
748 private class SaveAsActionListener implements ActionListener, DirectoryTableEventListener {
749
750 private File m_selectedFile;
751
752 public void actionPerformed(ActionEvent event) {
753 try {
754 ListenerList.addListener((DirectoryTableEventListener) this);
755 DirectoryTableEvent.notifyRequestFileSelected(this);
756
757 if (m_selectedFile != null) {
758 String fileName = m_selectedFile.getName();
759 int index = fileName.lastIndexOf('.');
760
761 if (index >= 0) {
762 fileName = fileName.substring(0, index);
763 }
764
765 String path = Preferences.getPreferences().getAnalysisResultsPath();
766 File lastSavedDirectory = new File(path);
767 File selectedFile = new File(path + File.separator + fileName + ".html");
768 JFileChooser fileChooser = new JFileChooser(lastSavedDirectory);
769 fileChooser.addChoosableFileFilter(new HTMLFileFilter());
770 fileChooser.setSelectedFile(selectedFile);
771 int result = fileChooser.showSaveDialog(PMDViewer.getViewer());
772
773 if (result == JFileChooser.APPROVE_OPTION) {
774 (new SaveSaveAs()).perform(fileChooser.getSelectedFile());
775 }
776 }
777 } catch (PMDException pmdException) {
778 String message = pmdException.getMessage();
779 Exception exception = pmdException.getReason();
780 MessageDialog.show(PMDViewer.getViewer(), message, exception);
781 } finally {
782 ListenerList.removeListener((DirectoryTableEventListener) this);
783 }
784 }
785
786 /***
787 ****************************************************************************
788 *
789 * Implements DirectoryTableEventListener
790 *
791 * @param event
792 */
793 public void requestSelectedFile(DirectoryTableEvent event) {
794 }
795
796 /***
797 ****************************************************************************
798 *
799 * Implements DirectoryTableEventListener
800 *
801 * @param event
802 */
803 public void fileSelectionChanged(DirectoryTableEvent event) {
804 }
805
806 /***
807 ****************************************************************************
808 *
809 * Implements DirectoryTableEventListener
810 *
811 * @param event
812 */
813 public void fileSelected(DirectoryTableEvent event) {
814 m_selectedFile = event.getSelectedFile();
815 }
816 }
817
818 /***
819 *********************************************************************************
820 *********************************************************************************
821 *********************************************************************************
822 */
823 private class HTMLFileFilter extends FileFilter {
824
825 /***
826 *****************************************************************************
827 * @param file
828 * @return
829 */
830 public boolean accept(File file) {
831 String fileName = file.getName();
832
833 return fileName.endsWith(".html") || fileName.endsWith(".htm");
834 }
835
836 /***
837 ******************************************************************************
838 */
839 public String getDescription() {
840 return "HTML Anaysis Result File (*.html, *.htm)";
841 }
842 }
843
844 /***
845 *********************************************************************************
846 *********************************************************************************
847 *********************************************************************************
848 */
849 private class PMDClipboard implements ClipboardOwner {
850
851 /***
852 ************************************************************************
853 *
854 */
855 public void lostOwnership(Clipboard clipboard, Transferable contents) {
856 }
857 }
858
859 /***
860 *********************************************************************************
861 *********************************************************************************
862 *********************************************************************************
863 */
864 private class SearchButtonActionEventHandler implements ActionListener {
865
866 /***
867 **************************************************************************
868 */
869 public void actionPerformed(ActionEvent event) {
870 RulesTreeNode rulesNode;
871 RuleSet ruleSet;
872
873 rulesNode = m_rulesTree.getSelectedNode();
874
875 if (rulesNode.isRoot()) {
876 ruleSet = new RuleSet();
877 Enumeration ruleSets = rulesNode.children();
878
879 while (ruleSets.hasMoreElements()) {
880 RulesTreeNode childNode = (RulesTreeNode) ruleSets.nextElement();
881 ruleSet.addRuleSet((RuleSet) childNode.getRuleSet());
882 }
883 } else if (rulesNode.isRuleSet()) {
884 ruleSet = rulesNode.getRuleSet();
885 } else if (rulesNode.isRule()) {
886 ruleSet = new RuleSet();
887 ruleSet.addRule(rulesNode.getRule());
888 } else {
889 rulesNode = (RulesTreeNode) rulesNode.getParent();
890 ruleSet = new RuleSet();
891 ruleSet.addRule(rulesNode.getRule());
892 }
893
894 DirectoryTreeNode directoryNode = m_directoryTree.getSelectedNode();
895 File directory = (File) directoryNode.getUserObject();
896
897 m_resultsViewer.analyze(directory, ruleSet);
898 }
899 }
900 }
This page was automatically generated by Maven