KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > refactoring > ui > j > spi > ui > ParametersPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

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 JavaDoc;
24 import java.util.Collection JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.ResourceBundle JavaDoc;
28 import java.util.concurrent.ExecutionException JavaDoc;
29 import java.util.prefs.Preferences JavaDoc;
30 import javax.swing.*;
31 import javax.swing.border.EmptyBorder JavaDoc;
32 import javax.swing.event.ChangeEvent JavaDoc;
33 import javax.swing.event.ChangeListener JavaDoc;
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 /** Main panel for refactoring parameters dialog. This panel is automatically displayed
63  * by refactoring action. It handles all the generic logic for displaying progress,
64  * checking for problems (during parameters validation and refactoring preparation) and
65  * accepting/canceling the refactoring. Refactoring-specific parameters panel is
66  * requested from {@link RefactoringUI} implementation (passed to this panel by {@link
67  * AbstractRefactoringAction}) and then displayed in the upper part of this panel.
68  * Refactoring-specific panel can use setPreviewEnabled method to enable/disable
69  * button that accepts the parameters. The button is disabled by default.
70  *
71  * @author Martin Matula, Jan Becicka
72  */

73 public class ParametersPanel extends JPanel implements ProgressListener, ChangeListener JavaDoc {
74     
75     public static final long serialVersionUID = 1L;
76     // refactoring elements that will be returned as a result of showDialog method
77
private Results results;
78     
79     // corresponding implementation of RefactoringUI
80
private final RefactoringUI rui;
81     // refactoring-specific panel returned from RefactoringUI.getPanel, e.g., RenamePanel
82

83     private final JPanel customPanel;
84     private final CustomRefactoringPanel customComponent;
85     
86     // parent dialog
87
private transient JDialog dialog = null;
88     // disabled components that should be reenabled by a call to setPanelEnabled
89
private ArrayList JavaDoc components = null;
90     
91 // private Problem problem;
92

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 JavaDoc prefs;
102     
103     private List JavaDoc<ErrorItem> allErrorItems;
104     
105     private FindUsageResult fuResult;
106     
107     ////////////////////////////////////////////////////
108

109     /** Enables/disables Preview button of dialog. Can be used by refactoring-specific
110      * parameters panel to disable accepting the parameters when needed (e.g. if
111      * not all parameters were entered). When the dialog is displayed, the button
112      * is disabled by default.
113      * @param enabled <code>true</code> to enable preview button, <code>false</code>
114      * to disable it.
115      */

116     public void setPreviewEnabled(boolean enabled) {
117         RefactoringPanel.checkEventThread();
118         next.setEnabled(enabled && checkProblem() == null);
119     }
120     
121     /** Creates ParametersPanel
122      * @param rui Implementation of RefactoringUI for desired refactoring.
123      */

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(" ");//NOI18N
132
this.customComponent = rui.getPanel(this);
133         this.customPanel = (JPanel) this.customComponent.getComponent();
134         errorPanel = new ErrorPanel(rui, true);
135         calculatePrefferedSize();
136         setButtonsEnabled(false);
137         //cancel.setEnabled(false);
138
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         //validate();
155
if (dialog != null && rui.isQuery()) {
156             dialog.setSize(getPreferredSize());
157         }
158     }
159     
160     /** This method is called from within the constructor to
161      * initialize the form.
162      * WARNING: Do NOT modify this code. The content of this method is
163      * always regenerated by the Form Editor.
164      */

165     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
166
private void initComponents() {
167         progressPanel = new javax.swing.JPanel JavaDoc();
168         innerPanel = new javax.swing.JPanel JavaDoc();
169         label = new javax.swing.JLabel JavaDoc();
170         controlsPanel = new javax.swing.JPanel JavaDoc();
171         buttonsPanel = new javax.swing.JPanel JavaDoc();
172         back = new javax.swing.JButton JavaDoc();
173         next = new javax.swing.JButton JavaDoc();
174         cancel = new javax.swing.JButton JavaDoc();
175         help = new javax.swing.JButton JavaDoc();
176         checkBoxPanel = new javax.swing.JPanel JavaDoc();
177         previewAll = new javax.swing.JCheckBox JavaDoc();
178         containerPanel = new javax.swing.JPanel JavaDoc();
179         pleaseWait = new javax.swing.JLabel JavaDoc();
180
181         setLayout(new java.awt.BorderLayout JavaDoc());
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 JavaDoc());
187
188         progressPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 12, 0, 11));
189         progressPanel.setOpaque(false);
190         innerPanel.setLayout(new java.awt.BorderLayout JavaDoc());
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 JavaDoc());
199
200         controlsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 0, 5, 0));
201         buttonsPanel.setLayout(new java.awt.GridLayout JavaDoc(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 JavaDoc() {
207             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc() {
217             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc() {
227             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc() {
237             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc());
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 JavaDoc() {
254             public void itemStateChanged(java.awt.event.ItemEvent JavaDoc 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 JavaDoc());
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     }// </editor-fold>//GEN-END:initComponents
278

279     private void previewAllItemStateChanged(java.awt.event.ItemEvent JavaDoc evt) {//GEN-FIRST:event_previewAllItemStateChanged
280
// used for change default value for previewAll check-box. This value
281
// is persisted and then used as default in next IDE run.
282
Boolean JavaDoc 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     }//GEN-LAST:event_previewAllItemStateChanged
288

289     /**
290      * Constructs key name for the refactoring for previewAll option.
291      *
292      * @return Key name. It is constructed from "previewAll." string plus
293      * name of class.
294      */

295     private String JavaDoc getPreviewKeyName() {
296         return "previewAll." + rui.getRefactoring().getClass().getName(); // NOI18N
297
}
298     
299     private void helpActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_helpActionPerformed
300
Help help = (Help) Lookup.getDefault().lookup(Help.class);
301         help.showHelp(getHelpCtx());
302     }//GEN-LAST:event_helpActionPerformed
303

304     private void backActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_backActionPerformed
305
placeCustomPanel();
306     }//GEN-LAST:event_backActionPerformed
307

308     private void cancelActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_cancelActionPerformed
309
synchronized (this) {
310             
311             // if find usages is running, cancel it
312
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     }//GEN-LAST:event_cancelActionPerformed
322

323     private void nextActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_nextActionPerformed
324
if (customPanel != null){
325             setPanelEnabled(false);
326         }
327         cancel.setEnabled(true);
328         
329         RequestProcessor rp = new RequestProcessor();
330         rp.post(new Runnable JavaDoc() {
331             public void run() {
332                 if (currentState == State.PRE_CHECK_CHANGE ){
333                     // precheckChange
334
// if errors, show error panel
335
// else, find Usages, change state to PrecheckRefactor
336
// if errors, show error panel
337
// else close
338

339                     RefactorRequest refactorRequest =
340                             rui.getRefactorRequest();
341                     results.setRefactorRequest(refactorRequest);
342                     allErrorItems = RefactoringManager.getInstance().precheckChange(refactorRequest);
343                     // If there are any errors from FindUsages or precheck
344
// show the error panel
345
// test errors
346
// allErrorItems.add(new ErrorItem(null, "a warning message", Level.WARNING));
347
// allErrorItems.add(new ErrorItem(null, "a fatal error message", Level.FATAL));
348
if (allErrorItems.size()> 0){
349                         SwingUtilities.invokeLater(new Runnable JavaDoc() {
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 JavaDoc ex) {
363                             ErrorManager.getDefault().notify(ex);
364                         } catch (ExecutionException JavaDoc ex) {
365                             ErrorManager.getDefault().notify(ex);
366                         }
367                         final ProgressEvent progressEvent = new ProgressEvent(this,0, AbstractRefactoring.PREPARE, -1);
368                         
369                         start(progressEvent);
370                         Object JavaDoc[] 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 JavaDoc<UsageGroup> usageGroups = null;
383                         try {
384                             usageGroups = fuResult.get().getUsages();
385                         } catch (InterruptedException JavaDoc ex) {
386                             ErrorManager.getDefault().notify(ex);
387                         } catch (ExecutionException JavaDoc ex) {
388                             ErrorManager.getDefault().notify(ex);
389                         }
390                         for (UsageGroup group:usageGroups){
391                             List JavaDoc<ErrorItem> errors = group.getErrors();
392                             if (errors != null && errors.size() > 0){
393                                 if (allErrorItems == null){
394                                     allErrorItems = new ArrayList JavaDoc<ErrorItem>();
395                                 }
396                                 allErrorItems.addAll(errors);
397                             }
398                         }
399                         // test errors
400
// allErrorItems.add(new ErrorItem(null, "a warning message", Level.WARNING));
401
// allErrorItems.add(new ErrorItem(null, "a fatal error message", Level.FATAL));
402
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 JavaDoc() {
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                             // if warnings only, next will be enabled
427
SwingUtilities.invokeLater(new Runnable JavaDoc() {
428                                 public void run() {
429                                     placeErrorPanel(allErrorItems,
430                                             containsFatalErrors(allErrorItems), true);
431                                 }});
432                         }
433                     }
434                 } else { // currentState != PRE_CHECK_CHANGE
435
dialog.setVisible(false);
436                     dialog.dispose();
437                     
438                     
439                 }
440             }
441         });
442     }//GEN-LAST:event_nextActionPerformed
443

444     
445     // Variables declaration - do not modify//GEN-BEGIN:variables
446
private javax.swing.JButton JavaDoc back;
447     private javax.swing.JPanel JavaDoc buttonsPanel;
448     public javax.swing.JButton JavaDoc cancel;
449     private javax.swing.JPanel JavaDoc checkBoxPanel;
450     private javax.swing.JPanel JavaDoc containerPanel;
451     private javax.swing.JPanel JavaDoc controlsPanel;
452     private javax.swing.JButton JavaDoc help;
453     private javax.swing.JPanel JavaDoc innerPanel;
454     private javax.swing.JLabel JavaDoc label;
455     private javax.swing.JButton JavaDoc next;
456     private javax.swing.JLabel JavaDoc pleaseWait;
457     private javax.swing.JCheckBox JavaDoc previewAll;
458     private javax.swing.JPanel JavaDoc progressPanel;
459     // End of variables declaration//GEN-END:variables
460

461     // disables/re-enables components in the custom panel
462
private void setPanelEnabled(boolean enabled) {
463         RefactoringPanel.checkEventThread();
464         setButtonsEnabled(enabled);
465         if (enabled) {
466             if (components == null) return;
467             for (Iterator JavaDoc 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 JavaDoc();
474             disableComponents(customPanel);
475         }
476     }
477     
478     // disables all components in the custom panel
479
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     /** Method used by AbstractRefactoringAction to display refactoring parameters
494      * dialog. Constructs a dialog consisting of this panel and Preview and Cancel
495      * buttons. Let's user to enter refactoring parameters.
496      * @return Collection of refactoring elements returned from the refactoring
497      * operation or <code>null</code> if the operation was cancelled.
498      */

499     public synchronized Results showDialog() {
500         RefactoringPanel.checkEventThread();
501         if (rui != null) {
502             rui.getRefactoring().addProgressListener(this);
503         }
504         String JavaDoc title = (customPanel != null && customPanel.getName()!=null && !"".equals(customPanel.getName()))?customPanel.getName() : rui.getName();
505         DialogDescriptor descriptor = new DialogDescriptor(this, title, true, new Object JavaDoc[]{}, 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 JavaDoc() {
519             public void run() {
520                 
521                 if (customPanel != null) {
522                    // customPanel.initialize();
523
SwingUtilities.invokeLater(new Runnable JavaDoc() {
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 // dialog.dispose();
543
//
544
// if (rui != null) {
545
// rui.getRefactoring().removeProgressListener(this);
546
// }
547
// //JavaMetamodel.getManager().getProgressSupport().removeProgressListener(this);
548
// if (!cancelRequest)
549
// task.waitFinished();
550
return results;
551     }
552     
553     private final void setCancelStuff() {
554         KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
555         Object JavaDoc actionKey = "cancel"; // NOI18N
556
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 JavaDoc<ErrorItem> errors, boolean containsFatalErrors, boolean canContinueWithWarnings) {
575         containerPanel.removeAll();
576         errorPanel = new ErrorPanel(errors, rui, canContinueWithWarnings);
577         errorPanel.setBorder(new EmptyBorder JavaDoc(new Insets(12, 12, 11, 11)));
578         containerPanel.add(errorPanel, BorderLayout.CENTER);
579         
580         next.setEnabled(!containsFatalErrors && canContinueWithWarnings);
581         dialog.getRootPane().setDefaultButton(next);
582 // if (currentState == PRE_CHECK ) {
583
//calculatePrefferedSize();
584
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 JavaDoc(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 JavaDoc<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     /** Implementation of ProgressListener.start method. Displays progress bar and
634      * sets progress label and progress bar bounds.
635      * @param event Event object.
636      */

637     public void start(final ProgressEvent event) {
638         SwingUtilities.invokeLater(new Runnable JavaDoc() {
639             public void run() {
640                 progressPanel.remove(innerPanel);
641                 progressBar = ProgressBar.create(progressHandle = ProgressHandleFactory.createHandle("")); //NOI18N
642
progressPanel.add(progressBar, BorderLayout.CENTER);
643                 //progressPanel.validate();
644
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 JavaDoc 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); //NOI18N
669

670                 progressPanel.setVisible(true);
671                 
672                 setButtonsEnabled(false);
673             }
674         });
675     }
676     
677     /** Implementation of ProgressListener.step method. Increments progress bar value
678      * by 1.
679      * @param event Event object.
680      */

681     public void step(final ProgressEvent event) {
682         SwingUtilities.invokeLater(new Runnable JavaDoc() {
683             public void run() {
684                 progressHandle.progress(isIndeterminate ? -2 : event.getCount());
685             }
686         });
687     }
688     
689     /** Implementation of ProgressListener.stop method. Sets progress bar value to
690      * its maximum.
691      * @param event Event object.
692      */

693     public void stop(ProgressEvent event) {
694         SwingUtilities.invokeLater(new Runnable JavaDoc() {
695             public void run() {
696                 progressHandle.finish();
697                 progressPanel.remove(progressBar);
698                 progressPanel.add(innerPanel, BorderLayout.CENTER);
699                 //progressPanel.validate();
700
//setButtonsEnabled(true);
701
//validate();
702
}
703         });
704     }
705     
706     public void stateChanged(ChangeEvent JavaDoc 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(" "); // NOI18N
717
innerPanel.setBorder(null);
718             next.setEnabled(true);
719             return;
720         }
721         innerPanel.setBorder(new javax.swing.border.LineBorder JavaDoc(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 JavaDoc error) {
731         next.setEnabled(false);
732         label.setText("<html><font color=\"red\">" + NbBundle.getMessage(ParametersPanel.class, "LBL_Error") + ": </font>" + error + "</html>"); //NOI18N
733
}
734     
735     private void displayWarning(String JavaDoc warning) {
736         next.setEnabled(true);
737         label.setText("<html><font color=\"red\">" + NbBundle.getMessage(ParametersPanel.class, "LBL_Warning") + ": </font>" + warning + "</html>"); //NOI18N
738
}
739     
740     
741     private void setButtonsEnabled(boolean enabled) {
742         next.setEnabled(enabled);
743         //cancel.setEnabled(enabled);
744
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 JavaDoc(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 JavaDoc value) {
771             label.setText(value);
772         }
773         
774         private ProgressBar() {
775         }
776         
777     }
778
779     /**
780      *
781      *
782      */

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