KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > java > ui > RenameRefactoringUI


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-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.refactoring.java.ui;
20
21 import java.io.IOException JavaDoc;
22 import java.text.MessageFormat JavaDoc;
23 import javax.lang.model.element.Element;
24 import javax.lang.model.element.ElementKind;
25 import javax.lang.model.element.TypeElement;
26 import javax.swing.event.ChangeListener JavaDoc;
27 import org.netbeans.api.fileinfo.NonRecursiveFolder;
28 import org.netbeans.api.java.source.CompilationInfo;
29 import org.netbeans.api.java.source.TreePathHandle;
30 import org.netbeans.modules.refactoring.api.AbstractRefactoring;
31 import org.netbeans.modules.refactoring.api.RenameRefactoring;
32 import org.netbeans.modules.refactoring.java.RetoucheUtils;
33 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel;
34 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI;
35 import org.netbeans.modules.refactoring.spi.ui.RefactoringUIBypass;
36 import org.openide.filesystems.FileObject;
37 import org.openide.loaders.DataFolder;
38 import org.openide.loaders.DataObject;
39 import org.openide.util.HelpCtx;
40 import org.openide.util.NbBundle;
41 import org.openide.util.lookup.Lookups;
42
43 /**
44  *
45  * @author Martin Matula, Jan Becicka
46  */

47 public class RenameRefactoringUI implements RefactoringUI, RefactoringUIBypass {
48     private final AbstractRefactoring refactoring;
49     private String JavaDoc oldName = null;
50     private String JavaDoc dispOldName;
51     private String JavaDoc newName;
52     private RenamePanel panel;
53     private boolean fromListener = false;
54     private TreePathHandle jmiObject;
55     private FileObject byPassFolder;
56     private boolean byPassPakageRename;
57     private boolean pkgRename = true;
58
59
60 // RenameRefactoringUI(ElementHandle jmiObject, FileObject folder, boolean packageRename) {
61
// this.jmiObject = jmiObject;
62
// pkgRename = packageRename;
63
// if (jmiObject == null || jmiObject instanceof JavaPackage) {
64
// if (folder == null) {
65
// folder = JavaMetamodel.getManager().getClassPath().findResource(((JavaPackage) jmiObject).getName().replace('.','/'));
66
// if (folder == null) {
67
// //package declaration is invalid
68
// Node[] nodes = TopComponent.getRegistry().getActivatedNodes();
69
// DataObject dob = (DataObject) nodes[0].getCookie(DataObject.class);
70
// folder = dob.getFolder().getPrimaryFile();
71
// }
72
// }
73
// this.refactoring = createMoveClassRefactoring(folder, packageRename);
74
// String packageName = jmiObject != null ? ((JavaPackage) jmiObject).getName():null;
75
// if (!packageRename) {
76
// oldName = folder.getName();
77
// } else {
78
// if (packageName != null) {
79
// oldName = "".equals(packageName) ? NbBundle.getBundle("org.netbeans.modules.java.project.Bundle").getString("LBL_DefaultPackage") : packageName;
80
// } else {
81
// oldName = ClassPath.getClassPath(folder, ClassPath.SOURCE).getResourceName(folder).replace('/','.');
82
// }
83
// }
84
// } else if (jmiObject instanceof JavaClass) {
85
// this.refactoring = new RenameRefactoring(jmiObject);
86
// Object comp = jmiObject.refImmediateComposite();
87
// if (comp instanceof Resource) {
88
// FileObject fo = JavaModel.getFileObject((Resource)comp);
89
// String name = fo.getName();
90
// for (Iterator iter = ((Resource)comp).getClassifiers().iterator(); iter.hasNext(); ) {
91
// Object obj = iter.next();
92
// if (obj instanceof JavaClass) {
93
// String sName = ((JavaClass) obj).getSimpleName();
94
// if (name.equals(sName)) {
95
// name = ((JavaClass) jmiObject).getSimpleName();
96
// break;
97
// }
98
// } // if
99
// } // for
100
// oldName = name;
101
// } else {
102
// oldName = ((JavaClass) jmiObject).getSimpleName();
103
// }
104
// } else {
105
// this.refactoring = new RenameRefactoring(jmiObject);
106
// if (jmiObject instanceof NamedElement) {
107
// if (jmiObject instanceof Resource) {
108
// oldName = JavaMetamodel.getManager().getDataObject((Resource)jmiObject).getName();
109
// } else
110
// oldName = ((NamedElement) jmiObject).getName();
111
// } else {
112
// oldName = "";
113
// }
114
// }
115
// dispOldName = oldName;
116
// }
117

118     public RenameRefactoringUI(TreePathHandle jmiObject, CompilationInfo info) {
119         this.jmiObject = jmiObject;
120         this.refactoring = new RenameRefactoring(Lookups.singleton(jmiObject));
121         oldName = jmiObject.resolveElement(info).getSimpleName().toString();
122         refactoring.getContext().add(info);
123         dispOldName = oldName;
124
125         //this(jmiObject, (FileObject) null, true);
126
}
127     
128     public RenameRefactoringUI(FileObject file) {
129         this.refactoring = new RenameRefactoring(Lookups.singleton(file));
130         oldName = file.getName();
131         dispOldName = oldName;
132         //this(jmiObject, (FileObject) null, true);
133
}
134
135     public RenameRefactoringUI(NonRecursiveFolder file) {
136         this.refactoring = new RenameRefactoring(Lookups.singleton(file));
137         oldName = RetoucheUtils.getPackageName(file.getFolder());
138         dispOldName = oldName;
139         pkgRename = true;
140         //this(jmiObject, (FileObject) null, true);
141
}
142     
143     
144 // private MoveClassRefactoring createMoveClassRefactoring(FileObject folder, boolean packageRename) {
145
// return new MoveClassRefactoring(folder, packageRename);
146
// }
147

148     RenameRefactoringUI(FileObject jmiObject, String JavaDoc newName) {
149         this.refactoring = new RenameRefactoring(Lookups.singleton(jmiObject));
150         //this.jmiObject = jmiObject;
151
oldName = newName;
152         //[FIXME] this should be oldName of refactored object
153
this.dispOldName = newName;
154         fromListener = true;
155     }
156     
157     RenameRefactoringUI(NonRecursiveFolder jmiObject, String JavaDoc newName) {
158         this.refactoring = new RenameRefactoring(Lookups.singleton(jmiObject));
159         //this.jmiObject = jmiObject;
160
oldName = newName;
161         //[FIXME] this should be oldName of refactored object
162
this.dispOldName = newName;
163         fromListener = true;
164         pkgRename = true;
165     }
166     
167     
168     
169     
170 // RenameRefactoringUI(FileObject folder, String newName, boolean packageRename) {
171
// this.refactoring = createMoveClassRefactoring(folder, packageRename);
172
// pkgRename = packageRename;
173
// oldName = newName;
174
// //[FIXME] this should be oldName of refactored object
175
// this.dispOldName = newName;
176
// fromListener = true;
177
// this.byPassFolder = folder;
178
// this.byPassPakageRename = packageRename;
179
//
180
// }
181

182     
183     public boolean isQuery() {
184         return false;
185     }
186
187     public CustomRefactoringPanel getPanel(ChangeListener JavaDoc parent) {
188         if (panel == null) {
189             String JavaDoc name = oldName;
190             String JavaDoc suffix = "";
191             if (jmiObject != null) {
192                 Element jmiObject = this.jmiObject.resolveElement(refactoring.getContext().lookup(CompilationInfo.class));
193                 if (jmiObject instanceof TypeElement) {
194                     suffix = jmiObject.getKind().isInterface() ? getString("LBL_Interface") : getString("LBL_Class");
195                 } else if (jmiObject.getKind() == ElementKind.METHOD) {
196                     suffix = getString("LBL_Method");
197                 } else if (jmiObject.getKind() == ElementKind.FIELD) {
198                     suffix = getString("LBL_Field");
199                 } else if (jmiObject.getKind() == ElementKind.LOCAL_VARIABLE) {
200                     suffix = getString("LBL_LocalVar");
201                 } else if (jmiObject.getKind() == ElementKind.PACKAGE || (jmiObject == null && fromListener)) {
202                     suffix = pkgRename ? getString("LBL_Package") : getString("LBL_Folder");
203                 } else if (jmiObject.getKind() == ElementKind.PARAMETER) {
204                     suffix = getString("LBL_Parameter");
205                 }
206             }
207             suffix = suffix + " " + name; // NOI18N
208
panel = new RenamePanel(name, parent, NbBundle.getMessage(RenamePanel.class, "LBL_Rename") + " " + suffix, !fromListener, fromListener && !byPassPakageRename);
209         }
210         return panel;
211     }
212     
213     private static String JavaDoc getString(String JavaDoc key) {
214         return NbBundle.getMessage(RenameRefactoringUI.class, key);
215     }
216
217     public org.netbeans.modules.refactoring.api.Problem setParameters() {
218         newName = panel.getNameValue();
219         if (refactoring instanceof RenameRefactoring) {
220             ((RenameRefactoring) refactoring).setNewName(newName);
221             ((RenameRefactoring) refactoring).setSearchInComments(panel.searchJavadoc());
222         }// else {
223
// ((MoveClassRefactoring) refactoring).setTargetPackageName(newName);
224
// }
225
return refactoring.checkParameters();
226     }
227     
228     public org.netbeans.modules.refactoring.api.Problem checkParameters() {
229         newName = panel.getNameValue();
230         if (refactoring instanceof RenameRefactoring) {
231             ((RenameRefactoring) refactoring).setNewName(newName);
232         }// else {
233
// ((MoveClassRefactoring) refactoring).setTargetPackageName(newName);
234
// }
235
return refactoring.fastCheckParameters();
236     }
237
238     public org.netbeans.modules.refactoring.api.AbstractRefactoring getRefactoring() {
239         return refactoring;
240     }
241
242     public String JavaDoc getDescription() {
243         return new MessageFormat JavaDoc(NbBundle.getMessage(RenamePanel.class, "DSC_Rename")).format (
244                     new Object JavaDoc[] {dispOldName, newName}
245                 );
246     }
247
248     public String JavaDoc getName() {
249         return NbBundle.getMessage(RenamePanel.class, "LBL_Rename");
250     }
251
252     public boolean hasParameters() {
253         return true;
254     }
255
256     public HelpCtx getHelpCtx() {
257         String JavaDoc postfix;
258         ElementKind k = jmiObject.resolveElement(refactoring.getContext().lookup(CompilationInfo.class)).getKind();
259                
260         if (k == ElementKind.PACKAGE)
261             postfix = ".JavaPackage";//NOI18N
262
else if (k.isClass() || k.isInterface())
263             postfix = ".JavaClass";//NOI18N
264
else if (k == ElementKind.METHOD)
265             postfix = ".Method";//NOI18N
266
else if (k.isField())
267             postfix = ".Field";//NOI18N
268
else
269             postfix = "";
270         
271         return new HelpCtx(RenameRefactoringUI.class.getName() + postfix);
272     }
273     
274     public boolean isRefactoringBypassRequired() {
275         return !panel.isUpdateReferences();
276     }
277     public void doRefactoringBypass() throws IOException JavaDoc {
278         DataObject dob = null;
279         if (byPassFolder != null) {
280             dob = DataFolder.findFolder(byPassFolder);
281         } else {
282             dob = DataObject.find(refactoring.getRefactoringSource().lookup(FileObject.class));
283         }
284         dob.rename(panel.getNameValue());
285     }
286 }
287
Popular Tags