1 19 package org.netbeans.modules.refactoring.java.ui; 20 21 import java.io.IOException ; 22 import java.net.MalformedURLException ; 23 import java.net.URL ; 24 import java.text.MessageFormat ; 25 import javax.swing.event.ChangeListener ; 26 import org.netbeans.api.java.classpath.ClassPath; 27 import org.netbeans.modules.refactoring.api.AbstractRefactoring; 28 import org.netbeans.modules.refactoring.api.MoveRefactoring; 29 import org.netbeans.modules.refactoring.api.Problem; 30 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel; 31 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI; 32 import org.netbeans.modules.refactoring.spi.ui.RefactoringUIBypass; 33 import org.openide.filesystems.FileObject; 34 import org.openide.filesystems.URLMapper; 35 import org.openide.loaders.DataObject; 36 import org.openide.util.HelpCtx; 37 import org.openide.util.NbBundle; 38 import org.openide.util.datatransfer.PasteType; 39 import org.openide.util.lookup.Lookups; 40 41 public class MoveClassUI implements RefactoringUI, RefactoringUIBypass { 42 43 private DataObject javaObject; 44 private MoveClassPanel panel; 45 private MoveRefactoring refactoring; 46 private String targetPkgName = ""; 47 private boolean disable; 48 private FileObject targetFolder; 49 private PasteType pasteType; 50 51 static final String getString(String key) { 52 return NbBundle.getMessage(MoveClassUI.class, key); 53 } 54 55 public MoveClassUI (DataObject javaObject) { 56 this(javaObject, null, null); 57 } 58 59 public MoveClassUI (DataObject javaObject, FileObject targetFolder, PasteType pasteType) { 60 this.disable = targetFolder != null ; 61 this.targetFolder = targetFolder; 62 this.javaObject = javaObject; 63 this.pasteType = pasteType; 64 } 65 66 public String getName() { 67 return getString ("LBL_MoveClass"); 68 } 69 70 public String getDescription() { 71 return new MessageFormat (getString("DSC_MoveClass")).format( 72 new Object [] {javaObject.getName(), packageName()} 73 ); 74 } 75 76 public boolean isQuery() { 77 return false; 78 } 79 80 public CustomRefactoringPanel getPanel(ChangeListener parent) { 81 if (panel == null) { 82 String pkgName = targetFolder!=null?getPackageName(targetFolder):getPackageName(javaObject.getPrimaryFile().getParent()); 83 panel = new MoveClassPanel (parent, pkgName, 84 new MessageFormat (getString("LBL_MoveClassNamed")).format ( 85 new Object [] {javaObject.getPrimaryFile().getName()} 86 ), 87 targetFolder != null ? targetFolder : (javaObject != null ? javaObject.getPrimaryFile(): null) 88 ); 89 panel.setCombosEnabled(!disable); 90 } 91 return panel; 92 } 93 94 private static String getPackageName(FileObject file) { 95 ClassPath cp = ClassPath.getClassPath(file, ClassPath.SOURCE); 96 return cp.getResourceName(file, '.', false); 97 } 98 99 private String packageName () { 100 return targetPkgName.trim().length() == 0 ? getString ("LBL_DefaultPackage") : targetPkgName.trim (); 101 } 102 103 private Problem setParameters(boolean checkOnly) { 104 if (panel==null) 105 return null; 106 targetPkgName = panel.getPackageName (); 107 108 URL url = URLMapper.findURL(panel.getRootFolder(), URLMapper.EXTERNAL); 109 try { 110 refactoring.setTarget(Lookups.singleton(new URL (url.toExternalForm() + "/" + panel.getPackageName().replace('.','/')))); 111 } catch (MalformedURLException ex) { 112 ex.printStackTrace(); 113 } 114 if (checkOnly) { 115 return refactoring.fastCheckParameters(); 116 } else { 117 return refactoring.checkParameters(); 118 } 119 } 120 121 public Problem checkParameters() { 122 return setParameters(true); 123 } 124 125 public Problem setParameters() { 126 return setParameters(false); 127 } 128 129 public AbstractRefactoring getRefactoring() { 130 if (refactoring == null) { 131 refactoring = new MoveRefactoring(Lookups.singleton(javaObject.getPrimaryFile())); 132 } 133 return refactoring; 134 } 135 136 public boolean hasParameters() { 137 return true; 138 } 139 140 public HelpCtx getHelpCtx() { 141 return new HelpCtx(MoveClassUI.class); 142 } 143 144 public boolean isRefactoringBypassRequired() { 145 return !panel.isUpdateReferences(); 146 } 147 public void doRefactoringBypass() throws IOException { 148 pasteType.paste(); 149 } 150 } 151 | Popular Tags |