View Javadoc
1 package net.sourceforge.pmd.swingui; 2 3 import net.sourceforge.pmd.PMDException; 4 import net.sourceforge.pmd.Rule; 5 import net.sourceforge.pmd.RuleSet; 6 import net.sourceforge.pmd.swingui.event.ListenerList; 7 import net.sourceforge.pmd.swingui.event.RuleSetChangedEvent; 8 import net.sourceforge.pmd.swingui.event.RuleSetEvent; 9 import net.sourceforge.pmd.swingui.event.RulesInMemoryEvent; 10 import net.sourceforge.pmd.swingui.event.RulesInMemoryEventListener; 11 import net.sourceforge.pmd.swingui.event.RulesTreeModelEvent; 12 import net.sourceforge.pmd.swingui.event.RulesTreeModelEventListener; 13 14 import javax.swing.Icon; 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 java.awt.BorderLayout; 25 import java.awt.Color; 26 import java.awt.event.ActionEvent; 27 import java.awt.event.ActionListener; 28 import java.awt.event.KeyEvent; 29 import java.awt.event.MouseAdapter; 30 import java.awt.event.MouseEvent; 31 import java.util.ArrayList; 32 import java.util.Enumeration; 33 import java.util.List; 34 35 /*** 36 * 37 * @author Donald A. Leckie 38 * @since August 29, 2002 39 * @version $Revision: 1.21 $, $Date: 2003/05/28 18:08:35 $ 40 */ 41 class RulesEditor extends JPanel { 42 43 private RulesTree m_tree; 44 private JSplitPane m_splitPane; 45 private RuleEditingTabbedPane m_editingTabbedPane; 46 private JMenuBar m_menuBar; 47 private JMenuItem m_printSelectedRuleMenuItem; 48 49 /*** 50 ******************************************************************************* 51 * 52 * @param parentWindow 53 */ 54 protected RulesEditor() throws PMDException { 55 super(new BorderLayout()); 56 57 m_tree = new RulesTree(); 58 59 JScrollPane treeScrollPane; 60 61 treeScrollPane = createTreeScrollPane(); 62 m_editingTabbedPane = new RuleEditingTabbedPane(m_tree); 63 m_splitPane = ComponentFactory.createHorizontalSplitPane(treeScrollPane, m_editingTabbedPane); 64 65 JPanel contentPanel = new JPanel(new BorderLayout()); 66 contentPanel.add(m_splitPane, BorderLayout.CENTER); 67 add(contentPanel, BorderLayout.CENTER); 68 69 createMenuBar(); 70 71 ListenerList.addListener((RulesInMemoryEventListener) new RulesInMemoryEventHandler()); 72 } 73 74 /*** 75 ******************************************************************************* 76 * 77 * @return 78 */ 79 private JScrollPane createTreeScrollPane() { 80 JScrollPane scrollPane = ComponentFactory.createScrollPane(m_tree); 81 Color background = UIManager.getColor("pmdTreeBackground"); 82 scrollPane.getViewport().setBackground(background); 83 84 return scrollPane; 85 } 86 87 /*** 88 ********************************************************************************* 89 * 90 */ 91 private void createMenuBar() { 92 m_menuBar = new JMenuBar(); 93 m_menuBar.add(new FileMenu()); 94 m_menuBar.add(new HelpMenu()); 95 } 96 97 /*** 98 ********************************************************************************* 99 * 100 */ 101 public void adjustSplitPaneDividerLocation() { 102 m_splitPane.setDividerLocation(0.4); 103 } 104 105 /*** 106 ********************************************************************************* 107 * 108 */ 109 protected void setMenuBar() { 110 PMDViewer.getViewer().setJMenuBar(m_menuBar); 111 } 112 113 /*** 114 ******************************************************************** 115 * 116 */ 117 protected void saveData() { 118 m_editingTabbedPane.saveData(); 119 saveData((RulesTreeNode) m_tree.getModel().getRoot()); 120 } 121 122 /*** 123 ******************************************************************** 124 * 125 * @param treeNode 126 */ 127 private void saveData(RulesTreeNode treeNode) { 128 treeNode.saveData(); 129 130 Enumeration children = treeNode.children(); 131 132 while (children.hasMoreElements()) { 133 saveData((RulesTreeNode) children.nextElement()); 134 } 135 } 136 137 /*** 138 ******************************************************************************* 139 ******************************************************************************* 140 ******************************************************************************* 141 */ 142 private class SaveActionListener implements ActionListener { 143 144 /*** 145 ******************************************************************** 146 * 147 * @param event 148 */ 149 public void actionPerformed(ActionEvent event) { 150 saveData(); 151 writeRuleSets((RulesTreeNode) m_tree.getModel().getRoot()); 152 RuleSetChangedEvent.notifyRuleSetsChanged(this); 153 } 154 155 /*** 156 ******************************************************************** 157 * 158 * @param treeNode 159 */ 160 private void writeRuleSets(RulesTreeNode rootNode) { 161 List ruleSetList = new ArrayList(); 162 Enumeration ruleSetNodes = rootNode.children(); 163 164 while (ruleSetNodes.hasMoreElements()) { 165 RulesTreeNode ruleSetNode = (RulesTreeNode) ruleSetNodes.nextElement(); 166 RuleSet ruleSet = ruleSetNode.getRuleSet(); 167 Enumeration ruleNodes = ruleSetNode.children(); 168 169 ruleSetList.add(ruleSet); 170 ruleSet.getRules().clear(); 171 172 while (ruleNodes.hasMoreElements()) { 173 RulesTreeNode ruleNode = (RulesTreeNode) ruleNodes.nextElement(); 174 175 ruleSet.addRule(ruleNode.getRule()); 176 } 177 } 178 179 RuleSetEvent.notifySaveRuleSets(this, ruleSetList); 180 } 181 } 182 183 /*** 184 ******************************************************************************* 185 ******************************************************************************* 186 ******************************************************************************* 187 */ 188 private class CancelActionListener implements ActionListener { 189 190 /*** 191 ******************************************************************** 192 * 193 * @param event 194 */ 195 public void actionPerformed(ActionEvent event) { 196 RulesEditor.this.setVisible(false); 197 } 198 } 199 200 /*** 201 ********************************************************************************* 202 ********************************************************************************* 203 ********************************************************************************* 204 */ 205 private class FileMenu extends JMenu { 206 207 /*** 208 ******************************************************************** 209 * 210 * @param menuBar 211 */ 212 private FileMenu() { 213 super("File"); 214 215 setMnemonic('F'); 216 217 Icon icon; 218 JMenuItem menuItem; 219 220 // 221 // Save menu item 222 // 223 icon = UIManager.getIcon("save"); 224 menuItem = new JMenuItem("Save Changes", icon); 225 menuItem.addActionListener((ActionListener) new SaveActionListener()); 226 menuItem.setMnemonic('S'); 227 menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK)); 228 add(menuItem); 229 230 // 231 // Save As menu item 232 // 233 icon = UIManager.getIcon("cancel"); 234 menuItem = new JMenuItem("Cancel Changes", icon); 235 menuItem.addActionListener((ActionListener) new CancelActionListener()); 236 menuItem.setMnemonic('C'); 237 menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)); 238 add(menuItem); 239 240 // 241 // Separator 242 // 243 add(new JSeparator()); 244 245 // 246 // Print Rules menu item 247 // 248 icon = UIManager.getIcon("print"); 249 menuItem = new JMenuItem("Print Rules...", icon); 250 menuItem.addActionListener((ActionListener) new PrintRulesActionListener()); 251 menuItem.setMnemonic('R'); 252 menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_MASK)); 253 add(menuItem); 254 255 // 256 // Print Selected Rule menu item 257 // 258 icon = UIManager.getIcon("print"); 259 m_printSelectedRuleMenuItem = new JMenuItem("Print Selected Rule...", icon); 260 m_printSelectedRuleMenuItem.addActionListener((ActionListener) new PrintRulesActionListener()); 261 m_printSelectedRuleMenuItem.setMnemonic('E'); 262 m_printSelectedRuleMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_MASK)); 263 add(m_printSelectedRuleMenuItem); 264 265 // 266 // Page Setup menu item 267 // 268 menuItem = new JMenuItem("Page Setup..."); 269 menuItem.addActionListener((ActionListener) new PageSetupActionListener()); 270 menuItem.setMnemonic('A'); 271 menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK)); 272 add(menuItem); 273 274 // 275 // Separator 276 // 277 add(new JSeparator()); 278 279 // 280 // Exit menu item 281 // 282 menuItem = new JMenuItem("Exit..."); 283 menuItem.addActionListener((ActionListener) new ExitActionListener()); 284 menuItem.setMnemonic('X'); 285 add(menuItem); 286 287 addMouseListener(new FileMenuMouseListener()); 288 } 289 } 290 291 /*** 292 ********************************************************************************* 293 ********************************************************************************* 294 ********************************************************************************* 295 */ 296 private class PrintRulesActionListener implements ActionListener { 297 298 public void actionPerformed(ActionEvent event) { 299 MessageDialog.show(PMDViewer.getViewer(), "Printing not available yet."); 300 } 301 } 302 303 /*** 304 ********************************************************************************* 305 ********************************************************************************* 306 ********************************************************************************* 307 */ 308 private class PageSetupActionListener implements ActionListener { 309 310 public void actionPerformed(ActionEvent event) { 311 MessageDialog.show(PMDViewer.getViewer(), "Page setup not available yet."); 312 } 313 } 314 315 /*** 316 ********************************************************************************* 317 ********************************************************************************* 318 ********************************************************************************* 319 */ 320 private class ExitActionListener implements ActionListener { 321 322 public void actionPerformed(ActionEvent event) { 323 System.exit(0); 324 } 325 } 326 327 /*** 328 ********************************************************************************* 329 ********************************************************************************* 330 ********************************************************************************* 331 */ 332 private class FileMenuMouseListener extends MouseAdapter implements RulesTreeModelEventListener { 333 334 private Rule m_rule; 335 336 /*** 337 ***************************************************************************** 338 * 339 * @param event 340 */ 341 public void mouseEntered(MouseEvent event) { 342 try { 343 ListenerList.addListener((RulesTreeModelEventListener) this); 344 RulesTreeModelEvent.notifyRequestSelectedRule(this); 345 boolean enable = (m_rule != null); 346 m_printSelectedRuleMenuItem.setEnabled(enable); 347 } finally { 348 ListenerList.removeListener((RulesTreeModelEventListener) this); 349 } 350 } 351 352 /*** 353 **************************************************************************** 354 * 355 * @param event 356 */ 357 public void reload(RulesTreeModelEvent event) { 358 } 359 360 /*** 361 **************************************************************************** 362 * 363 * @param event 364 */ 365 public void requestSelectedRule(RulesTreeModelEvent event) { 366 } 367 368 /*** 369 **************************************************************************** 370 * 371 * @param event 372 */ 373 public void returnedSelectedRule(RulesTreeModelEvent event) { 374 m_rule = event.getRule(); 375 } 376 } 377 378 /*** 379 ******************************************************************************* 380 ******************************************************************************* 381 ******************************************************************************* 382 */ 383 private class RulesInMemoryEventHandler implements RulesInMemoryEventListener { 384 385 /*** 386 **************************************************************************** 387 * 388 * @param event 389 */ 390 public void requestAllRules(RulesInMemoryEvent event) { 391 RuleSet rules = new RuleSet(); 392 RulesTreeNode rootNode = (RulesTreeNode) m_tree.getModel().getRoot(); 393 getRules(rootNode, rules, new IncludeAllRuleFilter()); 394 RulesInMemoryEvent.notifyReturnedRules(this, rules); 395 } 396 397 /*** 398 **************************************************************************** 399 * 400 * @param event 401 */ 402 public void requestIncludedRules(RulesInMemoryEvent event) { 403 try { 404 RuleSet rules = new RuleSet(); 405 RulesTreeNode rootNode = (RulesTreeNode) m_tree.getModel().getRoot(); 406 int lowestPriority = Preferences.getPreferences().getLowestPriorityForAnalysis(); 407 getRules(rootNode, rules, new IncludeSelectedRuleFilter(lowestPriority)); 408 RulesInMemoryEvent.notifyReturnedRules(this, rules); 409 } catch (PMDException pmdException) { 410 String message = pmdException.getMessage(); 411 Exception exception = pmdException.getReason(); 412 MessageDialog.show(PMDViewer.getViewer(), message, exception); 413 } 414 } 415 416 /*** 417 **************************************************************************** 418 * 419 * @param event 420 */ 421 private void getRules(RulesTreeNode rootNode, RuleSet rules, RuleFilter ruleFilter) { 422 Enumeration ruleSetNodes = rootNode.children(); 423 424 while (ruleSetNodes.hasMoreElements()) { 425 RulesTreeNode ruleSetNode = (RulesTreeNode) ruleSetNodes.nextElement(); 426 427 if (ruleFilter.include(ruleSetNode)) { 428 Enumeration ruleNodes = ruleSetNode.children(); 429 430 while (ruleNodes.hasMoreElements()) { 431 RulesTreeNode ruleNode = (RulesTreeNode) ruleNodes.nextElement(); 432 433 if (ruleFilter.include(ruleNode)) { 434 rules.addRule(ruleNode.getRule()); 435 } 436 } 437 } 438 } 439 } 440 441 /*** 442 **************************************************************************** 443 * 444 * @param event 445 */ 446 public void returnedRules(RulesInMemoryEvent event) { 447 } 448 } 449 450 /*** 451 ******************************************************************************* 452 ******************************************************************************* 453 ******************************************************************************* 454 */ 455 private abstract class RuleFilter { 456 457 /*** 458 *************************************************************************** 459 * 460 * @param rule 461 * 462 * @return 463 */ 464 protected abstract boolean include(RulesTreeNode treeNode); 465 } 466 467 /*** 468 ******************************************************************************* 469 ******************************************************************************* 470 ******************************************************************************* 471 */ 472 private class IncludeAllRuleFilter extends RuleFilter { 473 474 /*** 475 *************************************************************************** 476 * 477 * @param rule 478 * 479 * @return 480 */ 481 protected boolean include(RulesTreeNode treeNode) { 482 return true; 483 } 484 } 485 486 /*** 487 ******************************************************************************* 488 ******************************************************************************* 489 ******************************************************************************* 490 */ 491 private class IncludeSelectedRuleFilter extends RuleFilter { 492 private int m_lowestPriority; 493 494 /*** 495 *************************************************************************** 496 * 497 * @param rule 498 * 499 * @return 500 */ 501 private IncludeSelectedRuleFilter(int lowestPriority) { 502 m_lowestPriority = lowestPriority; 503 } 504 505 /*** 506 *************************************************************************** 507 * 508 * @param rule 509 * 510 * @return 511 */ 512 protected boolean include(RulesTreeNode treeNode) { 513 return treeNode.include() && (treeNode.getPriority() <= m_lowestPriority); 514 } 515 } 516 }

This page was automatically generated by Maven