View Javadoc
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