1 19 package org.netbeans.modules.xml.refactoring.ui.j.spi.ui; 20 21 import java.awt.*; 22 import java.awt.event.*; 23 import java.util.ArrayList ; 24 import java.util.Collection ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 import java.util.ResourceBundle ; 28 import java.util.concurrent.ExecutionException ; 29 import java.util.prefs.Preferences ; 30 import javax.swing.*; 31 import javax.swing.border.EmptyBorder ; 32 import javax.swing.event.ChangeEvent ; 33 import javax.swing.event.ChangeListener ; 34 import org.netbeans.api.javahelp.Help; 35 import org.netbeans.api.progress.ProgressHandle; 36 import org.netbeans.api.progress.ProgressHandleFactory; 37 import org.netbeans.modules.xml.nbprefuse.View; 38 import org.netbeans.modules.xml.refactoring.ErrorItem; 39 import org.netbeans.modules.xml.refactoring.ErrorItem.Level; 40 import org.netbeans.modules.xml.refactoring.FindUsageResult; 41 import org.netbeans.modules.xml.refactoring.RefactorRequest; 42 import org.netbeans.modules.xml.refactoring.RefactoringManager; 43 import org.netbeans.modules.xml.refactoring.UsageGroup; 44 import org.netbeans.modules.xml.nbprefuse.AnalysisConstants; 45 import org.netbeans.modules.refactoring.api.AbstractRefactoring; 46 import org.netbeans.modules.refactoring.api.Problem; 47 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel; 48 import org.netbeans.modules.refactoring.api.ProgressEvent; 49 import org.netbeans.modules.refactoring.api.ProgressListener; 50 import org.netbeans.modules.xml.refactoring.ui.j.ui.ErrorPanel; 51 import org.netbeans.modules.xml.refactoring.ui.j.ui.RefactoringPanel; 52 import org.netbeans.modules.xml.refactoring.ui.readers.WhereUsedReader; 53 import org.netbeans.modules.xml.refactoring.ui.views.WhereUsedView; 54 import org.netbeans.modules.xml.xam.Referenceable; 55 import org.openide.DialogDescriptor; 56 import org.openide.DialogDisplayer; 57 import org.openide.ErrorManager; 58 import org.openide.awt.StatusDisplayer; 59 import org.openide.util.*; 60 61 62 73 public class ParametersPanel extends JPanel implements ProgressListener, ChangeListener { 74 75 public static final long serialVersionUID = 1L; 76 private Results results; 78 79 private final RefactoringUI rui; 81 83 private final JPanel customPanel; 84 private final CustomRefactoringPanel customComponent; 85 86 private transient JDialog dialog = null; 88 private ArrayList components = null; 90 91 93 private ErrorPanel errorPanel; 94 95 private enum State {PRE_CHECK_CHANGE, PRE_CHECK_REFACTOR}; 96 97 private State currentState = State.PRE_CHECK_CHANGE; 98 99 private boolean cancelRequest = false; 100 101 private Preferences prefs; 102 103 private List <ErrorItem> allErrorItems; 104 105 private FindUsageResult fuResult; 106 107 109 116 public void setPreviewEnabled(boolean enabled) { 117 RefactoringPanel.checkEventThread(); 118 next.setEnabled(enabled && checkProblem() == null); 119 } 120 121 124 public ParametersPanel(RefactoringUI rui) { 125 RefactoringPanel.checkEventThread(); 126 this.rui = rui; 127 prefs = Preferences.userNodeForPackage(ParametersPanel.class); 128 results = new Results(); 129 initComponents(); 130 innerPanel.setBorder(null); 131 label.setText(" "); this.customComponent = rui.getPanel(this); 133 this.customPanel = (JPanel) this.customComponent.getComponent(); 134 errorPanel = new ErrorPanel(rui, true); 135 calculatePrefferedSize(); 136 setButtonsEnabled(false); 137 next.setEnabled(checkProblem() == null); 139 } 140 141 142 private void calculatePrefferedSize() { 143 Dimension cpDim = new Dimension(0,0); 144 Dimension ppDim = progressPanel.getPreferredSize(); 145 Dimension epDim = new Dimension(0,0); 146 if (customPanel != null) { 147 cpDim = customPanel.getPreferredSize(); 148 } 149 if (errorPanel != null) { 150 epDim = errorPanel.getPreferredSize(); 151 } 152 153 setPreferredSize(new Dimension(Math.max(Math.max(cpDim.width, ppDim.width),epDim.width) , Math.max(cpDim.height, epDim.height) + ppDim.height)); 154 if (dialog != null && rui.isQuery()) { 156 dialog.setSize(getPreferredSize()); 157 } 158 } 159 160 165 private void initComponents() { 167 progressPanel = new javax.swing.JPanel (); 168 innerPanel = new javax.swing.JPanel (); 169 label = new javax.swing.JLabel (); 170 controlsPanel = new javax.swing.JPanel (); 171 buttonsPanel = new javax.swing.JPanel (); 172 back = new javax.swing.JButton (); 173 next = new javax.swing.JButton (); 174 cancel = new javax.swing.JButton (); 175 help = new javax.swing.JButton (); 176 checkBoxPanel = new javax.swing.JPanel (); 177 previewAll = new javax.swing.JCheckBox (); 178 containerPanel = new javax.swing.JPanel (); 179 pleaseWait = new javax.swing.JLabel (); 180 181 setLayout(new java.awt.BorderLayout ()); 182 183 setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 184 getAccessibleContext().setAccessibleName(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("LBL_FindUsagesDialog")); 185 getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_FindUsagesDialog")); 186 progressPanel.setLayout(new java.awt.BorderLayout ()); 187 188 progressPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 12, 0, 11)); 189 progressPanel.setOpaque(false); 190 innerPanel.setLayout(new java.awt.BorderLayout ()); 191 192 innerPanel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray)); 193 label.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 194 innerPanel.add(label, java.awt.BorderLayout.WEST); 195 196 progressPanel.add(innerPanel, java.awt.BorderLayout.CENTER); 197 198 controlsPanel.setLayout(new java.awt.BorderLayout ()); 199 200 controlsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 0, 5, 0)); 201 buttonsPanel.setLayout(new java.awt.GridLayout (1, 0, 5, 0)); 202 203 buttonsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 204 back.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("MNEM_Back").charAt(0)); 205 org.openide.awt.Mnemonics.setLocalizedText(back, java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("CTL_Back")); 206 back.addActionListener(new java.awt.event.ActionListener () { 207 public void actionPerformed(java.awt.event.ActionEvent evt) { 208 backActionPerformed(evt); 209 } 210 }); 211 212 buttonsPanel.add(back); 213 back.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_Back")); 214 215 org.openide.awt.Mnemonics.setLocalizedText(next, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_Finish")); 216 next.addActionListener(new java.awt.event.ActionListener () { 217 public void actionPerformed(java.awt.event.ActionEvent evt) { 218 nextActionPerformed(evt); 219 } 220 }); 221 222 buttonsPanel.add(next); 223 next.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_finish")); 224 225 org.openide.awt.Mnemonics.setLocalizedText(cancel, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_Cancel")); 226 cancel.addActionListener(new java.awt.event.ActionListener () { 227 public void actionPerformed(java.awt.event.ActionEvent evt) { 228 cancelActionPerformed(evt); 229 } 230 }); 231 232 buttonsPanel.add(cancel); 233 cancel.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_cancel")); 234 235 org.openide.awt.Mnemonics.setLocalizedText(help, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_Help")); 236 help.addActionListener(new java.awt.event.ActionListener () { 237 public void actionPerformed(java.awt.event.ActionEvent evt) { 238 helpActionPerformed(evt); 239 } 240 }); 241 242 buttonsPanel.add(help); 243 help.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_help")); 244 245 controlsPanel.add(buttonsPanel, java.awt.BorderLayout.EAST); 246 247 checkBoxPanel.setLayout(new java.awt.BorderLayout ()); 248 249 checkBoxPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 250 251 previewAll.setSelected(prefs.getBoolean(AnalysisConstants.PREFERENCES_XML_REFACTORING_PREVIEW_ALL, true)); 252 org.openide.awt.Mnemonics.setLocalizedText(previewAll, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_PreviewAll")); 253 previewAll.addItemListener(new java.awt.event.ItemListener () { 254 public void itemStateChanged(java.awt.event.ItemEvent evt) { 255 previewAllItemStateChanged(evt); 256 } 257 }); 258 259 checkBoxPanel.add(previewAll, java.awt.BorderLayout.WEST); 260 previewAll.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_PreviewAll")); 261 262 controlsPanel.add(checkBoxPanel, java.awt.BorderLayout.CENTER); 263 264 progressPanel.add(controlsPanel, java.awt.BorderLayout.SOUTH); 265 266 add(progressPanel, java.awt.BorderLayout.SOUTH); 267 268 containerPanel.setLayout(new java.awt.BorderLayout ()); 269 270 containerPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 271 pleaseWait.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 272 org.openide.awt.Mnemonics.setLocalizedText(pleaseWait, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "LBL_PleaseWait")); 273 containerPanel.add(pleaseWait, java.awt.BorderLayout.CENTER); 274 275 add(containerPanel, java.awt.BorderLayout.CENTER); 276 277 } 279 private void previewAllItemStateChanged(java.awt.event.ItemEvent evt) { Boolean b = evt.getStateChange() == ItemEvent.SELECTED ? Boolean.TRUE : Boolean.FALSE; 283 prefs.putBoolean(AnalysisConstants.PREFERENCES_XML_REFACTORING_PREVIEW_ALL, b); 284 if (results != null){ 285 results.setResult(b.booleanValue()?Results.Result.SHOW_PREVIEW:Results.Result.SKIP_PREVIEW); 286 } 287 } 289 295 private String getPreviewKeyName() { 296 return "previewAll." + rui.getRefactoring().getClass().getName(); } 298 299 private void helpActionPerformed(java.awt.event.ActionEvent evt) { Help help = (Help) Lookup.getDefault().lookup(Help.class); 301 help.showHelp(getHelpCtx()); 302 } 304 private void backActionPerformed(java.awt.event.ActionEvent evt) { placeCustomPanel(); 306 } 308 private void cancelActionPerformed(java.awt.event.ActionEvent evt) { synchronized (this) { 310 311 if (fuResult != null){ 313 fuResult.cancel(); 314 fuResult = null; 315 } 316 rui.getRefactoring().cancelRequest(); 317 results = null; 318 dialog.setVisible(false); 319 cancelRequest = true; 320 } 321 } 323 private void nextActionPerformed(java.awt.event.ActionEvent evt) { if (customPanel != null){ 325 setPanelEnabled(false); 326 } 327 cancel.setEnabled(true); 328 329 RequestProcessor rp = new RequestProcessor(); 330 rp.post(new Runnable () { 331 public void run() { 332 if (currentState == State.PRE_CHECK_CHANGE ){ 333 339 RefactorRequest refactorRequest = 340 rui.getRefactorRequest(); 341 results.setRefactorRequest(refactorRequest); 342 allErrorItems = RefactoringManager.getInstance().precheckChange(refactorRequest); 343 if (allErrorItems.size()> 0){ 349 SwingUtilities.invokeLater(new Runnable () { 350 public void run() { 351 placeErrorPanel(allErrorItems, 352 containsFatalErrors(allErrorItems),true); 353 }}); 354 } else { 355 currentState = State.PRE_CHECK_REFACTOR; 356 final View view = rui.getView(); 357 Referenceable ref = ((WhereUsedView)view).getQueryComponent(); 358 fuResult = RefactoringManager.getInstance().findUsages(ref); 359 results.setUsagesResult(fuResult); 360 try { 361 refactorRequest.setUsages(fuResult.get()); 362 } catch (InterruptedException ex) { 363 ErrorManager.getDefault().notify(ex); 364 } catch (ExecutionException ex) { 365 ErrorManager.getDefault().notify(ex); 366 } 367 final ProgressEvent progressEvent = new ProgressEvent(this,0, AbstractRefactoring.PREPARE, -1); 368 369 start(progressEvent); 370 Object [] models = ((WhereUsedView)view).createModels(fuResult); 371 372 if (fuResult == null || fuResult.isCancelled()) { 373 StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(WhereUsedReader.class, 374 "LBL_Query_Cancelled")); 375 if (results != null){ 376 results.setResult(Results.Result.CANCELED); 377 } 378 stop(progressEvent); 379 return; 380 } 381 stop(progressEvent); 382 Collection <UsageGroup> usageGroups = null; 383 try { 384 usageGroups = fuResult.get().getUsages(); 385 } catch (InterruptedException ex) { 386 ErrorManager.getDefault().notify(ex); 387 } catch (ExecutionException ex) { 388 ErrorManager.getDefault().notify(ex); 389 } 390 for (UsageGroup group:usageGroups){ 391 List <ErrorItem> errors = group.getErrors(); 392 if (errors != null && errors.size() > 0){ 393 if (allErrorItems == null){ 394 allErrorItems = new ArrayList <ErrorItem>(); 395 } 396 allErrorItems.addAll(errors); 397 } 398 } 399 if (allErrorItems.size() <= 0){ 403 currentState = State.PRE_CHECK_REFACTOR; 404 allErrorItems = RefactoringManager.getInstance().precheckUsages(refactorRequest); 405 406 final boolean hasFatalErrors = containsFatalErrors(allErrorItems); 407 if (allErrorItems != null && allErrorItems.size()> 0){ 408 if (!hasFatalErrors) { 409 results.setResult(previewAll.isSelected()? 410 Results.Result.SHOW_PREVIEW:Results.Result.SKIP_PREVIEW); 411 }else { 412 results.setResult(Results.Result.CANCELED); 413 } 414 SwingUtilities.invokeLater(new Runnable () { 415 public void run() { 416 placeErrorPanel(allErrorItems, hasFatalErrors, true); 417 }}); 418 } else { 419 420 results.setResult(previewAll.isSelected()? 421 Results.Result.SHOW_PREVIEW:Results.Result.SKIP_PREVIEW); 422 dialog.setVisible(false); 423 dialog.dispose(); 424 } 425 } else { 426 SwingUtilities.invokeLater(new Runnable () { 428 public void run() { 429 placeErrorPanel(allErrorItems, 430 containsFatalErrors(allErrorItems), true); 431 }}); 432 } 433 } 434 } else { dialog.setVisible(false); 436 dialog.dispose(); 437 438 439 } 440 } 441 }); 442 } 444 445 private javax.swing.JButton back; 447 private javax.swing.JPanel buttonsPanel; 448 public javax.swing.JButton cancel; 449 private javax.swing.JPanel checkBoxPanel; 450 private javax.swing.JPanel containerPanel; 451 private javax.swing.JPanel controlsPanel; 452 private javax.swing.JButton help; 453 private javax.swing.JPanel innerPanel; 454 private javax.swing.JLabel label; 455 private javax.swing.JButton next; 456 private javax.swing.JLabel pleaseWait; 457 private javax.swing.JCheckBox previewAll; 458 private javax.swing.JPanel progressPanel; 459 461 private void setPanelEnabled(boolean enabled) { 463 RefactoringPanel.checkEventThread(); 464 setButtonsEnabled(enabled); 465 if (enabled) { 466 if (components == null) return; 467 for (Iterator it = components.iterator(); it.hasNext();) { 468 ((Component) it.next()).setEnabled(true); 469 } 470 components = null; 471 } else { 472 if (components != null) return; 473 components = new ArrayList (); 474 disableComponents(customPanel); 475 } 476 } 477 478 private void disableComponents(Container c) { 480 RefactoringPanel.checkEventThread(); 481 Component children[] = c.getComponents(); 482 for (int i = 0; i < children.length; i++) { 483 if (children[i].isEnabled()) { 484 children[i].setEnabled(false); 485 components.add(children[i]); 486 } 487 if (children[i] instanceof Container) { 488 disableComponents((Container) children[i]); 489 } 490 } 491 } 492 493 499 public synchronized Results showDialog() { 500 RefactoringPanel.checkEventThread(); 501 if (rui != null) { 502 rui.getRefactoring().addProgressListener(this); 503 } 504 String title = (customPanel != null && customPanel.getName()!=null && !"".equals(customPanel.getName()))?customPanel.getName() : rui.getName(); 505 DialogDescriptor descriptor = new DialogDescriptor(this, title, true, new Object []{}, null, 0, null, null); 506 507 dialog = (JDialog) DialogDisplayer.getDefault().createDialog(descriptor); 508 dialog.validate(); 509 if (customPanel!=null) { 510 dialog.getAccessibleContext().setAccessibleName(rui.getName()); 511 dialog.getAccessibleContext().setAccessibleDescription(ResourceBundle.getBundle("org/netbeans/modules/xml/refactoring/ui/j/spi/ui/Bundle").getString("ACSD_FindUsagesDialog")); 512 } 513 514 setCancelStuff(); 515 516 dialog.pack(); 517 518 RequestProcessor.Task task = RequestProcessor.getDefault().post(new Runnable () { 519 public void run() { 520 521 if (customPanel != null) { 522 SwingUtilities.invokeLater(new Runnable () { 524 public void run() { 525 placeCustomPanel(); 526 } 527 }); 528 } else { 529 back.setVisible(false); 530 previewAll.setVisible(!rui.isQuery()); 531 currentState = State.PRE_CHECK_CHANGE; 532 setPanelEnabled(true); 533 cancel.setEnabled(true); 534 dialog.getRootPane().setDefaultButton(next); 535 repaint(); 536 537 } 538 } 539 }); 540 541 dialog.setVisible(true); 542 return results; 551 } 552 553 private final void setCancelStuff() { 554 KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); 555 Object actionKey = "cancel"; getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(k, actionKey); 557 Action cancelAction = new AbstractAction() { 558 public void actionPerformed(ActionEvent ev) { 559 if (cancel.isEnabled()) 560 cancelActionPerformed(ev); 561 } 562 }; 563 564 getRootPane().getActionMap().put(actionKey, cancelAction); 565 566 dialog.addWindowListener(new WindowAdapter() { 567 public void windowClosing(WindowEvent evt) { 568 if (cancel.isEnabled()) 569 cancelActionPerformed(null); 570 } 571 }); 572 } 573 574 private void placeErrorPanel(List <ErrorItem> errors, boolean containsFatalErrors, boolean canContinueWithWarnings) { 575 containerPanel.removeAll(); 576 errorPanel = new ErrorPanel(errors, rui, canContinueWithWarnings); 577 errorPanel.setBorder(new EmptyBorder (new Insets(12, 12, 11, 11))); 578 containerPanel.add(errorPanel, BorderLayout.CENTER); 579 580 next.setEnabled(!containsFatalErrors && canContinueWithWarnings); 581 dialog.getRootPane().setDefaultButton(next); 582 org.openide.awt.Mnemonics.setLocalizedText(next, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_Next")); 585 586 back.setVisible(true); 587 back.setEnabled(true); 588 dialog.getRootPane().setDefaultButton(back); 589 cancel.setEnabled(true); 590 previewAll.setVisible(false); 591 Component[] progressComps = progressPanel.getComponents(); 592 for (Component c:progressComps){ 593 if (c instanceof ProgressBar){ 594 c.setVisible(false); 595 } 596 } 597 repaint(); 598 } 599 600 private void placeCustomPanel() { 601 if (customPanel == null) return; 602 org.openide.awt.Mnemonics.setLocalizedText(next, org.openide.util.NbBundle.getMessage(ParametersPanel.class, "CTL_Finish")); 603 customPanel.setBorder(new EmptyBorder (new Insets(12, 12, 11, 11))); 604 containerPanel.removeAll(); 605 containerPanel.add(customPanel, BorderLayout.CENTER); 606 back.setVisible(false); 607 previewAll.setVisible(!rui.isQuery()); 608 currentState = State.PRE_CHECK_CHANGE; 609 setPanelEnabled(true); 610 cancel.setEnabled(true); 611 dialog.getRootPane().setDefaultButton(next); 612 customPanel.requestFocus(); 613 next.setEnabled(checkProblem() == null); 614 repaint(); 615 } 616 617 618 private boolean containsFatalErrors(List <ErrorItem> errors){ 619 if (errors != null && errors.size() > 0){ 620 for (ErrorItem item:errors){ 621 if (item.getLevel() == Level.FATAL){ 622 return true; 623 } 624 } 625 } 626 return false; 627 } 628 629 private ProgressBar progressBar; 630 private ProgressHandle progressHandle; 631 private boolean isIndeterminate; 632 633 637 public void start(final ProgressEvent event) { 638 SwingUtilities.invokeLater(new Runnable () { 639 public void run() { 640 progressPanel.remove(innerPanel); 641 progressBar = ProgressBar.create(progressHandle = ProgressHandleFactory.createHandle("")); progressPanel.add(progressBar, BorderLayout.CENTER); 643 if (event.getCount()==-1) { 645 isIndeterminate = true; 646 progressHandle.start(); 647 progressHandle.switchToIndeterminate(); 648 } else { 649 isIndeterminate = false; 650 progressHandle.start(event.getCount()); 651 } 652 653 String text; 654 switch (event.getOperationType()) { 655 case AbstractRefactoring.PARAMETERS_CHECK: 656 text = NbBundle.getMessage(ParametersPanel.class, "LBL_ParametersCheck"); 657 break; 658 case AbstractRefactoring.PREPARE: 659 text = NbBundle.getMessage(ParametersPanel.class, "LBL_Prepare"); 660 break; 661 case AbstractRefactoring.PRE_CHECK: 662 text = NbBundle.getMessage(ParametersPanel.class, "LBL_PreCheck"); 663 break; 664 default: 665 text = NbBundle.getMessage(ParametersPanel.class, "LBL_Usages"); 666 break; 667 } 668 progressBar.setString(text); 670 progressPanel.setVisible(true); 671 672 setButtonsEnabled(false); 673 } 674 }); 675 } 676 677 681 public void step(final ProgressEvent event) { 682 SwingUtilities.invokeLater(new Runnable () { 683 public void run() { 684 progressHandle.progress(isIndeterminate ? -2 : event.getCount()); 685 } 686 }); 687 } 688 689 693 public void stop(ProgressEvent event) { 694 SwingUtilities.invokeLater(new Runnable () { 695 public void run() { 696 progressHandle.finish(); 697 progressPanel.remove(progressBar); 698 progressPanel.add(innerPanel, BorderLayout.CENTER); 699 } 703 }); 704 } 705 706 public void stateChanged(ChangeEvent e) { 707 showProblem(checkProblem()); 708 } 709 710 public Problem checkProblem() { 711 return rui.checkParameters(); 712 } 713 714 private void showProblem(Problem problem) { 715 if (problem == null) { 716 label.setText(" "); innerPanel.setBorder(null); 718 next.setEnabled(true); 719 return; 720 } 721 innerPanel.setBorder(new javax.swing.border.LineBorder (java.awt.Color.gray)); 722 progressPanel.setVisible(true); 723 if (problem.isFatal()) { 724 displayError(problem.getMessage()); 725 } else { 726 displayWarning(problem.getMessage()); 727 } 728 } 729 730 private void displayError(String error) { 731 next.setEnabled(false); 732 label.setText("<html><font color=\"red\">" + NbBundle.getMessage(ParametersPanel.class, "LBL_Error") + ": </font>" + error + "</html>"); } 734 735 private void displayWarning(String warning) { 736 next.setEnabled(true); 737 label.setText("<html><font color=\"red\">" + NbBundle.getMessage(ParametersPanel.class, "LBL_Warning") + ": </font>" + warning + "</html>"); } 739 740 741 private void setButtonsEnabled(boolean enabled) { 742 next.setEnabled(enabled); 743 back.setEnabled(enabled); 745 previewAll.setEnabled(enabled); 746 } 747 748 public HelpCtx getHelpCtx() { 749 return rui.getHelpCtx(); 750 } 751 752 public void invalidateObject() { 753 } 754 755 private static class ProgressBar extends JPanel { 756 757 private JLabel label; 758 759 private static ProgressBar create(ProgressHandle handle) { 760 ProgressBar instance = new ProgressBar(); 761 instance.setLayout(new BorderLayout()); 762 instance.label = new JLabel(); 763 instance.label.setBorder(new EmptyBorder (0, 0, 2, 0)); 764 instance.add(instance.label, BorderLayout.NORTH); 765 JComponent progress = ProgressHandleFactory.createProgressComponent(handle); 766 instance.add(progress, BorderLayout.CENTER); 767 return instance; 768 } 769 770 public void setString(String value) { 771 label.setText(value); 772 } 773 774 private ProgressBar() { 775 } 776 777 } 778 779 783 public static class Results { 784 785 public enum Result {CANCELED, SHOW_PREVIEW, SKIP_PREVIEW}; 786 787 private Result result = Result.CANCELED; 788 789 790 private FindUsageResult fuResult; 791 792 private RefactorRequest refactorRequest; 793 794 public Results(){ 795 796 } 797 798 public void setResult(Result result){ 799 this.result = result; 800 } 801 802 public Result getResult(){ 803 return this.result; 804 } 805 806 public void setUsagesResult(FindUsageResult fuResult){ 807 this.fuResult = fuResult; 808 } 809 810 public FindUsageResult getUsagesResult(){ 811 if (fuResult == null) { 812 assert getRefactorRequest() != null && getRefactorRequest().getUsages() != null; 813 setUsagesResult(new FindUsageResult(refactorRequest.getTarget(), refactorRequest.getUsages())); 814 } 815 return fuResult; 816 } 817 818 public void setRefactorRequest(RefactorRequest rr){ 819 if (rr.getUsages() != null && rr.getUsages().isValid()) { 820 setUsagesResult(new FindUsageResult(rr.getTarget(), rr.getUsages())); 821 } 822 refactorRequest = rr; 823 } 824 825 public RefactorRequest getRefactorRequest(){ 826 return this.refactorRequest; 827 } 828 829 } 830 831 } 832 | Popular Tags |