1 19 package org.netbeans.modules.refactoring.java.ui; 20 21 import java.io.IOException ; 22 import java.text.MessageFormat ; 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 ; 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 47 public class RenameRefactoringUI implements RefactoringUI, RefactoringUIBypass { 48 private final AbstractRefactoring refactoring; 49 private String oldName = null; 50 private String dispOldName; 51 private String 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 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 } 127 128 public RenameRefactoringUI(FileObject file) { 129 this.refactoring = new RenameRefactoring(Lookups.singleton(file)); 130 oldName = file.getName(); 131 dispOldName = oldName; 132 } 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 } 142 143 144 148 RenameRefactoringUI(FileObject jmiObject, String newName) { 149 this.refactoring = new RenameRefactoring(Lookups.singleton(jmiObject)); 150 oldName = newName; 152 this.dispOldName = newName; 154 fromListener = true; 155 } 156 157 RenameRefactoringUI(NonRecursiveFolder jmiObject, String newName) { 158 this.refactoring = new RenameRefactoring(Lookups.singleton(jmiObject)); 159 oldName = newName; 161 this.dispOldName = newName; 163 fromListener = true; 164 pkgRename = true; 165 } 166 167 168 169 170 182 183 public boolean isQuery() { 184 return false; 185 } 186 187 public CustomRefactoringPanel getPanel(ChangeListener parent) { 188 if (panel == null) { 189 String name = oldName; 190 String 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; 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 getString(String 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 } 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 } return refactoring.fastCheckParameters(); 236 } 237 238 public org.netbeans.modules.refactoring.api.AbstractRefactoring getRefactoring() { 239 return refactoring; 240 } 241 242 public String getDescription() { 243 return new MessageFormat (NbBundle.getMessage(RenamePanel.class, "DSC_Rename")).format ( 244 new Object [] {dispOldName, newName} 245 ); 246 } 247 248 public String 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 postfix; 258 ElementKind k = jmiObject.resolveElement(refactoring.getContext().lookup(CompilationInfo.class)).getKind(); 259 260 if (k == ElementKind.PACKAGE) 261 postfix = ".JavaPackage"; else if (k.isClass() || k.isInterface()) 263 postfix = ".JavaClass"; else if (k == ElementKind.METHOD) 265 postfix = ".Method"; else if (k.isField()) 267 postfix = ".Field"; 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 { 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 |