1 19 package org.netbeans.modules.refactoring.java.ui; 20 21 import java.awt.BorderLayout ; 22 import java.io.IOException ; 23 import java.net.MalformedURLException ; 24 import java.net.URL ; 25 import java.util.ArrayList ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 import java.util.Set ; 29 import java.util.Vector ; 30 import javax.swing.JLabel ; 31 import javax.swing.JList ; 32 import javax.swing.JScrollPane ; 33 import javax.swing.border.EmptyBorder ; 34 import javax.swing.event.ChangeListener ; 35 import org.netbeans.api.java.classpath.ClassPath; 36 import org.netbeans.modules.refactoring.api.AbstractRefactoring; 37 import org.netbeans.modules.refactoring.api.MoveRefactoring; 38 import org.netbeans.modules.refactoring.api.Problem; 39 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel; 40 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI; 41 import org.netbeans.modules.refactoring.spi.ui.RefactoringUIBypass; 42 import org.openide.awt.Mnemonics; 43 import org.openide.explorer.view.NodeRenderer; 44 import org.openide.filesystems.FileObject; 45 import org.openide.filesystems.URLMapper; 46 import org.openide.loaders.DataObject; 47 import org.openide.loaders.DataObjectNotFoundException; 48 import org.openide.util.HelpCtx; 49 import org.openide.util.NbBundle; 50 import org.openide.util.datatransfer.PasteType; 51 import org.openide.util.lookup.Lookups; 52 53 56 public class MoveClassesUI implements RefactoringUI, RefactoringUIBypass { 57 58 private List resources; 59 private Set javaObjects; 60 private MovePanel panel; 61 private MoveRefactoring refactoring; 62 private String targetPkgName = ""; 63 private boolean disable; 64 private FileObject targetFolder; 65 private PasteType pasteType; 66 67 static final String getString(String key) { 68 return NbBundle.getMessage(MoveClassUI.class, key); 69 } 70 71 public MoveClassesUI(Set javaObjects) { 72 this(javaObjects, null, null); 73 } 74 75 public MoveClassesUI(Set javaObjects, FileObject targetFolder, PasteType paste) { 76 this.disable = targetFolder != null; 77 this.targetFolder = targetFolder; 78 this.javaObjects=javaObjects; 79 this.pasteType = paste; 80 if (!disable) { 81 resources = new ArrayList (javaObjects.size()); 82 resources.addAll(javaObjects); 83 } 84 } 85 86 public String getName() { 87 return getString ("LBL_MoveClasses"); 88 } 89 90 public String getDescription() { 91 return getName(); 92 } 93 94 public boolean isQuery() { 95 return false; 96 } 97 98 public CustomRefactoringPanel getPanel(ChangeListener parent) { 99 if (panel == null) { 100 String pkgName = null; 101 if (targetFolder != null) { 102 ClassPath cp = ClassPath.getClassPath(targetFolder, ClassPath.SOURCE); 103 if (cp != null) 104 pkgName = cp.getResourceName(targetFolder, '.', false); 105 } 106 panel = new MovePanel (parent, 107 pkgName != null ? pkgName : getDOPackageName(((FileObject)javaObjects.iterator().next()).getParent()), 108 getString("LBL_MoveClassesHeadline") 109 ); 110 } 111 return panel; 112 } 113 114 private static String getDOPackageName(FileObject f) { 121 return ClassPath.getClassPath(f, ClassPath.SOURCE).getResourceName(f, '.', false); 122 } 123 124 private String packageName () { 125 return targetPkgName.trim().length() == 0 ? getString ("LBL_DefaultPackage") : targetPkgName.trim (); 126 } 127 128 private Problem setParameters(boolean checkOnly) { 129 if (panel==null) 130 return null; 131 URL url = URLMapper.findURL(panel.getRootFolder(), URLMapper.EXTERNAL); 132 try { 133 refactoring.setTarget(Lookups.singleton(new URL (url.toExternalForm() + "/" + panel.getPackageName().replace('.','/')))); 134 } catch (MalformedURLException ex) { 135 ex.printStackTrace(); 136 } 137 if (checkOnly) { 138 return refactoring.fastCheckParameters(); 139 } else { 140 return refactoring.checkParameters(); 141 } 142 } 143 144 public Problem checkParameters() { 145 return setParameters(true); 146 } 147 148 public Problem setParameters() { 149 return setParameters(false); 150 } 151 152 public AbstractRefactoring getRefactoring() { 153 if (refactoring == null) { 154 if (disable) { 155 refactoring = new MoveRefactoring(Lookups.fixed(javaObjects.toArray())); 156 } else { 157 refactoring = new MoveRefactoring (Lookups.fixed(resources.toArray())); 158 } 159 } 160 return refactoring; 161 } 162 163 private final Vector getNodes() { 164 Vector result = new Vector (javaObjects.size()); 165 for(Iterator i = javaObjects.iterator(); i.hasNext();) { 166 DataObject d = null; 167 try { 168 d = DataObject.find((FileObject) i.next()); 169 } catch (DataObjectNotFoundException ex) { 170 ex.printStackTrace(); 171 } 172 result.add(d.getNodeDelegate()); 173 } 174 return result; 175 } 176 177 public boolean hasParameters() { 178 return true; 179 } 180 181 public HelpCtx getHelpCtx() { 182 return new HelpCtx(MoveClassesUI.class); 183 } 184 185 public boolean isRefactoringBypassRequired() { 186 return !panel.isUpdateReferences(); 187 } 188 public void doRefactoringBypass() throws IOException { 189 pasteType.paste(); 190 } 191 192 class MovePanel extends MoveClassPanel { 194 public MovePanel (final ChangeListener parent, String startPackage, String headLine) { 195 super(parent, startPackage, headLine, targetFolder != null ? targetFolder : (FileObject) javaObjects.iterator().next() ); 196 setCombosEnabled(!disable); 197 JList list = new JList (getNodes()); 198 list.setCellRenderer(new NodeRenderer()); 199 list.setVisibleRowCount(5); 200 JScrollPane pane = new JScrollPane (list); 201 bottomPanel.setBorder(new EmptyBorder (8,0,0,0)); 202 bottomPanel.setLayout(new BorderLayout ()); 203 bottomPanel.add(pane, BorderLayout.CENTER); 204 JLabel listOf = new JLabel (); 205 Mnemonics.setLocalizedText(listOf, NbBundle.getMessage(MoveClassesUI.class, "LBL_ListOfClasses")); 206 bottomPanel.add(listOf, BorderLayout.NORTH); 207 } 208 } 209 } 210 | Popular Tags |