1 20 21 26 27 package edu.umd.cs.findbugs.gui; 28 29 import java.util.ArrayList ; 30 import java.util.Collection ; 31 import java.util.Iterator ; 32 33 import javax.swing.ListSelectionModel ; 34 import javax.swing.event.ListSelectionEvent ; 35 import javax.swing.event.ListSelectionListener ; 36 import javax.swing.table.DefaultTableModel ; 37 import javax.swing.table.TableModel ; 38 39 import edu.umd.cs.findbugs.BugPattern; 40 import edu.umd.cs.findbugs.DetectorFactory; 41 import edu.umd.cs.findbugs.DetectorFactoryCollection; 42 import edu.umd.cs.findbugs.L10N; 43 import edu.umd.cs.findbugs.config.UserPreferences; 44 45 50 public class ConfigureDetectorsDialog extends javax.swing.JDialog { 51 private static final long serialVersionUID = 1L; 52 53 private static final int SPEED_COLUMN = 1; 54 private static final int ENABLED_COLUMN = 2; 55 56 59 public ConfigureDetectorsDialog(java.awt.Frame parent, boolean modal) { 60 super(parent, modal); 61 initComponents(); 62 postInitComponents(); 63 } 64 65 71 private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; 73 74 detectorTableScrollPane = new javax.swing.JScrollPane (); 75 detectorTable = new javax.swing.JTable (); 76 detectorDescriptionScrollPane = new javax.swing.JScrollPane (); 77 detectorDescription = new javax.swing.JEditorPane (); 78 jSeparator1 = new javax.swing.JSeparator (); 79 okButton = new javax.swing.JButton (); 80 cancelButton = new javax.swing.JButton (); 81 spacer = new javax.swing.JLabel (); 82 restoreDefaultsButton = new javax.swing.JButton (); 83 84 getContentPane().setLayout(new java.awt.GridBagLayout ()); 85 86 setTitle("Configure Detectors"); 87 addWindowListener(new java.awt.event.WindowAdapter () { 88 @Override 89 public void windowClosing(java.awt.event.WindowEvent evt) { 90 closeDialog(evt); 91 } 92 @Override 93 public void windowOpened(java.awt.event.WindowEvent evt) { 94 formWindowOpened(evt); 95 } 96 }); 97 98 detectorTableScrollPane.setBorder(new javax.swing.border.BevelBorder (javax.swing.border.BevelBorder.LOWERED)); 99 detectorTable.setModel(new javax.swing.table.DefaultTableModel ( 100 new Object [][] { 101 102 }, 103 new String [] { 104 "Bug Detector", "Speed", "Enabled" 105 } 106 ) { 107 private static final long serialVersionUID = 1L; 108 Class [] types = new Class [] { 109 java.lang.String .class, java.lang.String .class, java.lang.Boolean .class 110 }; 111 boolean[] canEdit = new boolean [] { 112 false, false, true 113 }; 114 115 @Override 116 public Class <?> getColumnClass(int columnIndex) { 117 return types [columnIndex]; 118 } 119 120 @Override 121 public boolean isCellEditable(int rowIndex, int columnIndex) { 122 return canEdit [columnIndex]; 123 } 124 }); 125 populateTable(); 126 detectorTable.getColumnModel().getColumn(ENABLED_COLUMN).setMaxWidth(60); 127 detectorTable.getColumnModel().getColumn(SPEED_COLUMN).setMaxWidth(60); 128 detectorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 129 130 { 131 DefaultTableModel m = (DefaultTableModel )detectorTable.getModel(); 132 m.setColumnIdentifiers( new String [] 133 { 134 L10N.getLocalString("dlg.bugdetector_lbl", "Bug Detector"), 135 L10N.getLocalString("dlg.speed_lbl", "Speed"), 136 L10N.getLocalString("dlg.enabled_lbl", "Enabled"), 137 }); 138 139 DefaultSortedTableModel sortedModel = new DefaultSortedTableModel(m, detectorTable.getTableHeader()); 140 detectorTable.setModel(sortedModel); 141 } 142 143 detectorTableScrollPane.setViewportView(detectorTable); 144 145 gridBagConstraints = new java.awt.GridBagConstraints (); 146 gridBagConstraints.gridwidth = 4; 147 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 148 gridBagConstraints.weightx = 1.0; 149 gridBagConstraints.weighty = 0.8; 150 gridBagConstraints.insets = new java.awt.Insets (6, 6, 2, 6); 151 getContentPane().add(detectorTableScrollPane, gridBagConstraints); 152 153 detectorDescriptionScrollPane.setBorder(new javax.swing.border.BevelBorder (javax.swing.border.BevelBorder.LOWERED)); 154 detectorDescriptionScrollPane.setPreferredSize(new java.awt.Dimension (110, 120)); 155 detectorDescriptionScrollPane.setViewportView(detectorDescription); 156 157 gridBagConstraints = new java.awt.GridBagConstraints (); 158 gridBagConstraints.gridx = 0; 159 gridBagConstraints.gridy = 1; 160 gridBagConstraints.gridwidth = 4; 161 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 162 gridBagConstraints.weighty = 0.3; 163 gridBagConstraints.insets = new java.awt.Insets (2, 6, 2, 6); 164 getContentPane().add(detectorDescriptionScrollPane, gridBagConstraints); 165 166 gridBagConstraints = new java.awt.GridBagConstraints (); 167 gridBagConstraints.gridx = 0; 168 gridBagConstraints.gridy = 2; 169 gridBagConstraints.gridwidth = 4; 170 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 171 gridBagConstraints.insets = new java.awt.Insets (3, 0, 3, 0); 172 getContentPane().add(jSeparator1, gridBagConstraints); 173 174 okButton.setMnemonic('O'); 175 okButton.setText("OK"); 176 okButton.setText(L10N.getLocalString("dlg.ok_btn","OK")); 177 okButton.addActionListener(new java.awt.event.ActionListener () { 178 public void actionPerformed(java.awt.event.ActionEvent evt) { 179 okButtonActionPerformed(evt); 180 } 181 }); 182 183 gridBagConstraints = new java.awt.GridBagConstraints (); 184 gridBagConstraints.gridx = 2; 185 gridBagConstraints.gridy = 3; 186 gridBagConstraints.insets = new java.awt.Insets (0, 0, 4, 2); 187 getContentPane().add(okButton, gridBagConstraints); 188 189 cancelButton.setMnemonic('C'); 190 cancelButton.setText("Cancel"); 191 cancelButton.setText(L10N.getLocalString("dlg.cancel_btn", "Cancel")); 192 cancelButton.addActionListener(new java.awt.event.ActionListener () { 193 public void actionPerformed(java.awt.event.ActionEvent evt) { 194 cancelButtonActionPerformed(evt); 195 } 196 }); 197 198 gridBagConstraints = new java.awt.GridBagConstraints (); 199 gridBagConstraints.gridx = 3; 200 gridBagConstraints.gridy = 3; 201 gridBagConstraints.insets = new java.awt.Insets (0, 2, 4, 6); 202 getContentPane().add(cancelButton, gridBagConstraints); 203 204 gridBagConstraints = new java.awt.GridBagConstraints (); 205 gridBagConstraints.gridx = 1; 206 gridBagConstraints.gridy = 3; 207 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 208 gridBagConstraints.weightx = 1.0; 209 getContentPane().add(spacer, gridBagConstraints); 210 211 restoreDefaultsButton.setText("Restore Defaults"); 212 restoreDefaultsButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); 213 restoreDefaultsButton.setText(L10N.getLocalString("dlg.restoredefaults_btn", "Restore Defaults")); 214 restoreDefaultsButton.addActionListener(new java.awt.event.ActionListener () { 215 public void actionPerformed(java.awt.event.ActionEvent evt) { 216 restoreDefaultsButtonActionPerformed(evt); 217 } 218 }); 219 220 gridBagConstraints = new java.awt.GridBagConstraints (); 221 gridBagConstraints.gridx = 0; 222 gridBagConstraints.gridy = 3; 223 gridBagConstraints.insets = new java.awt.Insets (0, 6, 4, 0); 224 getContentPane().add(restoreDefaultsButton, gridBagConstraints); 225 226 pack(); 227 } 229 private void formWindowOpened(java.awt.event.WindowEvent evt) { setTitle(L10N.getLocalString("dlg.configuredetectors_ttl", "Configure Detectors")); 231 } 233 238 private void restoreDefaultsButtonActionPerformed(java.awt.event.ActionEvent evt) { Iterator <DetectorFactory> i = DetectorFactoryCollection.instance().factoryIterator(); 240 DefaultSortedTableModel sorter = (DefaultSortedTableModel) detectorTable.getModel(); 241 TableModel model = sorter.getBaseTableModel(); 242 int row = 0; 243 while (i.hasNext()) { 244 DetectorFactory factory = i.next(); 245 if (factory.isHidden()) 246 continue; 247 model.setValueAt(factory.isDefaultEnabled() ? Boolean.TRUE : Boolean.FALSE, row++, ENABLED_COLUMN); 248 } 249 } 251 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) { closeDialog(); 253 } 255 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) { int num = factoryList.size(); 258 DefaultSortedTableModel sorter = (DefaultSortedTableModel) detectorTable.getModel(); 259 TableModel model = sorter.getBaseTableModel(); 260 for (int i = 0; i < num; ++i) { 261 DetectorFactory factory = factoryList.get(i); 262 Boolean enabled = (Boolean ) model.getValueAt(i, ENABLED_COLUMN); 263 UserPreferences.getUserPreferences().enableDetector( 264 factory, enabled.booleanValue()); 265 } 266 closeDialog(); 267 } 269 272 private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); 274 dispose(); 275 } 277 281 private void postInitComponents() { 282 285 ListSelectionModel rowSM = detectorTable.getSelectionModel(); 286 rowSM.addListSelectionListener(new ListSelectionListener () { 287 public void valueChanged(ListSelectionEvent e) { 288 if (e.getValueIsAdjusting()) return; 289 290 ListSelectionModel lsm = (ListSelectionModel ) e.getSource(); 291 if (!lsm.isSelectionEmpty()) { 292 int selectedRow = lsm.getMinSelectionIndex(); 293 DefaultSortedTableModel sorter = (DefaultSortedTableModel) detectorTable.getModel(); 294 viewDetectorDetails(factoryList.get(sorter.getBaseModelIndex(selectedRow))); 295 } 296 } 297 }); 298 } 299 300 305 private void viewDetectorDetails(DetectorFactory factory) { 306 String detailHTML = factory.getDetailHTML(); 307 if (detailHTML == null) { 308 detectorDescription.setText(""); 309 } else { 310 detectorDescription.setContentType("text/html"); 311 detectorDescription.setText(detailHTML); 312 StringBuffer toolTip = new StringBuffer (100); 313 toolTip.append("<html><body><b>"); 314 toolTip.append(factory.getFullName()); 315 toolTip.append("</b><br><br><table border='1' width='100%'><tr><th>"); 316 toolTip.append(L10N.getLocalString("msg.bugpatternsreported_txt", "Bug Patterns Reported")); 317 toolTip.append("</th></tr>"); 318 319 Collection <BugPattern> patterns = factory.getReportedBugPatterns(); 320 for (BugPattern pattern : patterns) { 321 toolTip.append("<tr><td align='center'>"); 322 toolTip.append("["); 323 toolTip.append(pattern.getAbbrev()); 324 toolTip.append("] "); 325 toolTip.append(pattern.getType()); 326 toolTip.append("</td></tr>"); 327 } 328 toolTip.append("</body></html>"); 329 detectorDescription.setToolTipText(toolTip.toString()); 330 } 331 } 332 333 338 private void populateTable() { 339 Iterator <DetectorFactory> i = DetectorFactoryCollection.instance().factoryIterator(); 340 while (i.hasNext()) { 341 DetectorFactory factory = i.next(); 342 if (factory.isHidden()) 343 continue; 344 DefaultTableModel model = (DefaultTableModel ) detectorTable.getModel(); 345 model.addRow(new Object []{ 346 factory.getShortName(), 347 factory.getSpeed(), 348 UserPreferences.getUserPreferences().isDetectorEnabled(factory) 349 ? Boolean.TRUE : Boolean.FALSE 350 }); 351 factoryList.add(factory); 352 } 353 } 354 355 private void closeDialog() { 356 setVisible(false); 357 dispose(); 358 } 359 360 363 public static void main(String args[]) { 364 new ConfigureDetectorsDialog(new javax.swing.JFrame (), true).setVisible(true); 365 } 366 367 368 private javax.swing.JButton cancelButton; 370 private javax.swing.JEditorPane detectorDescription; 371 private javax.swing.JScrollPane detectorDescriptionScrollPane; 372 private javax.swing.JTable detectorTable; 373 private javax.swing.JScrollPane detectorTableScrollPane; 374 private javax.swing.JSeparator jSeparator1; 375 private javax.swing.JButton okButton; 376 private javax.swing.JButton restoreDefaultsButton; 377 private javax.swing.JLabel spacer; 378 380 private ArrayList <DetectorFactory> factoryList = new ArrayList <DetectorFactory>(); 382 } 383 | Popular Tags |