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

This page was automatically generated by Maven