1 19 20 25 26 package edu.umd.cs.findbugs.gui; 27 28 import java.awt.event.WindowEvent ; 29 30 import javax.swing.JOptionPane ; 31 import javax.swing.SwingUtilities ; 32 33 import edu.umd.cs.findbugs.FindBugsProgress; 34 import edu.umd.cs.findbugs.L10N; 35 36 45 public class RunAnalysisDialog extends javax.swing.JDialog { 46 private static final long serialVersionUID = 1L; 47 48 private class RunAnalysisProgress implements FindBugsProgress { 49 private int goal, count; 50 51 private synchronized int getGoal() { 52 return goal; 53 } 54 55 private synchronized int getCount() { 56 return count; 57 } 58 59 public void reportNumberOfArchives(final int numArchives) { 60 beginStage(L10N.getLocalString("msg.scanningarchives_txt", "Scanning archives"), numArchives); 61 } 62 63 public void finishArchive() { 64 step(); 65 } 66 67 public void startAnalysis(int numClasses) { 68 beginStage(L10N.getLocalString("msg.analysingclasses_txt", "Analyzing classes"), numClasses); 69 } 70 71 public void finishClass() { 72 step(); 73 } 74 75 public void finishPerClassAnalysis() { 76 SwingUtilities.invokeLater(new Runnable () { 77 public void run() { 78 stageNameLabel.setText(L10N.getLocalString("msg.finishedanalysis_txt", "Finishing analysis")); 79 } 80 }); 81 } 82 83 private void beginStage(final String stageName, final int goal) { 84 synchronized (this) { 85 this.count = 0; 86 this.goal = goal; 87 } 88 89 SwingUtilities.invokeLater(new Runnable () { 90 public void run() { 91 int goal = getGoal(); 92 stageNameLabel.setText(stageName); 93 countValueLabel.setText("0/" + goal); 94 progressBar.setMaximum(goal); 95 progressBar.setValue(0); 96 } 97 }); 98 } 99 100 private void step() { 101 synchronized (this) { 102 count++; 103 } 104 105 SwingUtilities.invokeLater(new Runnable () { 106 public void run() { 107 int count = getCount(); 108 int goal = getGoal(); 109 countValueLabel.setText(count + "/" + goal); 110 progressBar.setValue(count); 111 } 112 }); 113 } 114 115 118 public void predictPassCount(int[] classesPerPass) { 119 121 } 122 123 } 124 125 private final AnalysisRun analysisRun; 126 private Thread analysisThread; 127 private boolean completed; 128 private Exception fatalException; 129 130 133 public RunAnalysisDialog(java.awt.Frame parent, AnalysisRun analysisRun_) { 134 super(parent, true); 135 initComponents(); 136 this.analysisRun = analysisRun_; 137 this.completed = false; 138 139 final FindBugsProgress progress = new RunAnalysisProgress(); 142 143 this.analysisThread = new Thread () { 145 @Override 146 public void run() { 147 try { 148 analysisRun.execute(progress); 149 setCompleted(true); 150 } catch (java.io.IOException e) { 151 setException(e); 152 } catch (InterruptedException e) { 153 } catch (Exception e) { 157 setException(e); 158 } 159 160 SwingUtilities.invokeLater(new Runnable () { 163 public void run() { 164 closeDialog(new WindowEvent (RunAnalysisDialog.this, WindowEvent.WINDOW_CLOSING)); 165 } 166 }); 167 } 168 }; 169 } 170 171 public synchronized void setCompleted(boolean completed) { 172 this.completed = completed; 173 } 174 175 179 public synchronized boolean isCompleted() { 180 return completed; 181 } 182 183 public synchronized void setException(Exception e) { 184 fatalException = e; 185 } 186 187 191 public synchronized boolean exceptionOccurred() { 192 return fatalException != null; 193 } 194 195 198 public synchronized Exception getException() { 199 return fatalException; 200 } 201 202 208 private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; 210 211 findBugsLabel = new javax.swing.JLabel (); 212 countLabel = new javax.swing.JLabel (); 213 progressLabel = new javax.swing.JLabel (); 214 progressBar = new javax.swing.JProgressBar (); 215 cancelButton = new javax.swing.JButton (); 216 jSeparator1 = new javax.swing.JSeparator (); 217 stageLabel = new javax.swing.JLabel (); 218 stageNameLabel = new javax.swing.JLabel (); 219 topVerticalFiller = new javax.swing.JLabel (); 220 bottomVerticalFiller = new javax.swing.JLabel (); 221 countValueLabel = new javax.swing.JLabel (); 222 223 getContentPane().setLayout(new java.awt.GridBagLayout ()); 224 225 setTitle("Run Analysis"); 226 this.setTitle(L10N.getLocalString("dlg.runanalysis_ttl", "Run Analysis")); 227 addWindowListener(new java.awt.event.WindowAdapter () { 228 @Override 229 public void windowClosing(java.awt.event.WindowEvent evt) { 230 closeDialog(evt); 231 } 232 @Override 233 public void windowOpened(java.awt.event.WindowEvent evt) { 234 formWindowOpened(evt); 235 } 236 }); 237 238 findBugsLabel.setBackground(new java.awt.Color (0, 0, 204)); 239 findBugsLabel.setFont(new java.awt.Font ("Dialog", 1, 24)); 240 findBugsLabel.setForeground(new java.awt.Color (255, 255, 255)); 241 findBugsLabel.setText("Find Bugs!"); 242 findBugsLabel.setOpaque(true); 243 gridBagConstraints = new java.awt.GridBagConstraints (); 244 gridBagConstraints.gridwidth = 2; 245 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 246 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 247 gridBagConstraints.weightx = 1.0; 248 gridBagConstraints.insets = new java.awt.Insets (0, 0, 3, 0); 249 getContentPane().add(findBugsLabel, gridBagConstraints); 250 251 countLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 252 countLabel.setText("Count:"); 253 countLabel.setText(L10N.getLocalString("dlg.count_lbl", "Count:")); 254 gridBagConstraints = new java.awt.GridBagConstraints (); 255 gridBagConstraints.gridx = 0; 256 gridBagConstraints.gridy = 3; 257 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 258 gridBagConstraints.insets = new java.awt.Insets (3, 3, 3, 3); 259 getContentPane().add(countLabel, gridBagConstraints); 260 261 progressLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 262 progressLabel.setText("Progress:"); 263 progressLabel.setText(L10N.getLocalString("dlg.progress_lbl", "Progress:")); 264 gridBagConstraints = new java.awt.GridBagConstraints (); 265 gridBagConstraints.gridx = 0; 266 gridBagConstraints.gridy = 5; 267 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 268 gridBagConstraints.insets = new java.awt.Insets (3, 3, 3, 3); 269 getContentPane().add(progressLabel, gridBagConstraints); 270 271 gridBagConstraints = new java.awt.GridBagConstraints (); 272 gridBagConstraints.gridx = 1; 273 gridBagConstraints.gridy = 5; 274 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 275 gridBagConstraints.insets = new java.awt.Insets (0, 3, 0, 3); 276 getContentPane().add(progressBar, gridBagConstraints); 277 278 cancelButton.setFont(new java.awt.Font ("Dialog", 0, 12)); 279 cancelButton.setText("Cancel"); 280 cancelButton.setText(L10N.getLocalString("dlg.cancel_btn", "Cancel")); 281 cancelButton.addActionListener(new java.awt.event.ActionListener () { 282 public void actionPerformed(java.awt.event.ActionEvent evt) { 283 cancelButtonActionPerformed(evt); 284 } 285 }); 286 287 gridBagConstraints = new java.awt.GridBagConstraints (); 288 gridBagConstraints.gridx = 0; 289 gridBagConstraints.gridy = 8; 290 gridBagConstraints.gridwidth = 2; 291 gridBagConstraints.insets = new java.awt.Insets (3, 0, 3, 0); 292 getContentPane().add(cancelButton, gridBagConstraints); 293 294 gridBagConstraints = new java.awt.GridBagConstraints (); 295 gridBagConstraints.gridx = 0; 296 gridBagConstraints.gridy = 7; 297 gridBagConstraints.gridwidth = 2; 298 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 299 getContentPane().add(jSeparator1, gridBagConstraints); 300 301 stageLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 302 stageLabel.setText("Stage:"); 303 stageLabel.setText(L10N.getLocalString("dlg.stage_lbl", "Stage:")); 304 gridBagConstraints = new java.awt.GridBagConstraints (); 305 gridBagConstraints.gridx = 0; 306 gridBagConstraints.gridy = 2; 307 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 308 gridBagConstraints.insets = new java.awt.Insets (3, 3, 3, 3); 309 getContentPane().add(stageLabel, gridBagConstraints); 310 311 stageNameLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 312 gridBagConstraints = new java.awt.GridBagConstraints (); 313 gridBagConstraints.gridx = 1; 314 gridBagConstraints.gridy = 2; 315 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 316 getContentPane().add(stageNameLabel, gridBagConstraints); 317 318 gridBagConstraints = new java.awt.GridBagConstraints (); 319 gridBagConstraints.gridx = 0; 320 gridBagConstraints.gridy = 6; 321 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; 322 gridBagConstraints.weighty = 0.5; 323 getContentPane().add(topVerticalFiller, gridBagConstraints); 324 325 gridBagConstraints = new java.awt.GridBagConstraints (); 326 gridBagConstraints.gridx = 0; 327 gridBagConstraints.gridy = 1; 328 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; 329 gridBagConstraints.weighty = 0.5; 330 getContentPane().add(bottomVerticalFiller, gridBagConstraints); 331 332 gridBagConstraints = new java.awt.GridBagConstraints (); 333 gridBagConstraints.gridx = 1; 334 gridBagConstraints.gridy = 3; 335 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 336 gridBagConstraints.insets = new java.awt.Insets (0, 3, 0, 0); 337 getContentPane().add(countValueLabel, gridBagConstraints); 338 339 pack(); 340 } 342 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) { int option = JOptionPane.showConfirmDialog(this, L10N.getLocalString("msg.cancelanalysis_txt", "Cancel analysis?"), L10N.getLocalString("msg.analyze_txt", "Analysis"), 344 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 345 346 if (option == JOptionPane.YES_OPTION) { 347 analysisThread.interrupt(); 350 } 351 } 353 private void formWindowOpened(java.awt.event.WindowEvent evt) { 356 analysisThread.setPriority(Thread.NORM_PRIORITY - 1); 359 360 analysisThread.start(); 361 } 363 366 private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); 368 dispose(); 369 } 371 private javax.swing.JLabel bottomVerticalFiller; 373 private javax.swing.JButton cancelButton; 374 private javax.swing.JLabel countLabel; 375 private javax.swing.JLabel countValueLabel; 376 private javax.swing.JLabel findBugsLabel; 377 private javax.swing.JSeparator jSeparator1; 378 private javax.swing.JProgressBar progressBar; 379 private javax.swing.JLabel progressLabel; 380 private javax.swing.JLabel stageLabel; 381 private javax.swing.JLabel stageNameLabel; 382 private javax.swing.JLabel topVerticalFiller; 383 385 } 386 | Popular Tags |