1 19 20 package org.netbeans.modules.refactoring.java.ui; 21 22 import java.awt.Component ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import javax.swing.DefaultComboBoxModel ; 26 import javax.swing.JPanel ; 27 import javax.swing.JTextField ; 28 import javax.swing.ListCellRenderer ; 29 import javax.swing.event.ChangeListener ; 30 import javax.swing.event.DocumentEvent ; 31 import javax.swing.event.DocumentListener ; 32 import org.netbeans.api.java.project.JavaProjectConstants; 33 import org.netbeans.api.project.FileOwnerQuery; 34 import org.netbeans.api.project.Project; 35 import org.netbeans.api.project.ProjectUtils; 36 import org.netbeans.api.project.SourceGroup; 37 import org.netbeans.api.project.Sources; 38 import org.netbeans.api.project.ui.OpenProjects; 39 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel; 40 import org.netbeans.spi.java.project.support.ui.PackageView; 41 import org.openide.filesystems.FileObject; 42 43 44 47 public class CopyClassPanel extends JPanel implements ActionListener , DocumentListener , CustomRefactoringPanel { 48 49 private static final ListCellRenderer GROUP_CELL_RENDERER = new MoveClassPanel.GroupCellRenderer(); 50 private static final ListCellRenderer PROJECT_CELL_RENDERER = new MoveClassPanel.ProjectCellRenderer(); 51 52 private Project project; 53 private ChangeListener parent; 54 private FileObject fo; 55 private SourceGroup[] groups; 56 private String newName; 57 58 public CopyClassPanel(final ChangeListener parent, String title, String startPackage, FileObject f, String newName) { 59 setName(title); 60 this.fo = f; 61 this.parent = parent; 62 this.newName = newName; 63 initComponents(); 64 setCombosEnabled(true); 65 setThisClassVisible(true); 66 67 rootComboBox.setRenderer(GROUP_CELL_RENDERER); 68 packageComboBox.setRenderer(PackageView.listRenderer()); 69 projectsComboBox.setRenderer( PROJECT_CELL_RENDERER ); 70 71 rootComboBox.addActionListener( this ); 72 packageComboBox.addActionListener( this ); 73 projectsComboBox.addActionListener( this ); 74 75 Object textField = packageComboBox.getEditor().getEditorComponent(); 76 if (textField instanceof JTextField ) { 77 ((JTextField ) textField).getDocument().addDocumentListener(this); 78 } 79 newNameTextField.getDocument().addDocumentListener(this); 80 81 project = fo != null ? FileOwnerQuery.getOwner(fo):OpenProjects.getDefault().getOpenProjects()[0]; 82 initValues(startPackage); 83 } 84 85 private boolean initialized = false; 86 public void initialize() { 87 if (initialized) 88 return ; 89 FileObject fob; 90 do { 91 fob = fo.getFileObject(newName + ".java"); if (fob!=null) 93 newName += "1"; 94 } while (fob!=null); 95 newNameTextField.setText(newName); 96 newNameTextField.setSelectionStart(0); 97 newNameTextField.setSelectionEnd(newNameTextField.getText().length()); 98 initialized = true; 99 } 100 101 public void initValues(String preselectedFolder ) { 102 103 Project openProjects[] = OpenProjects.getDefault().getOpenProjects(); 104 DefaultComboBoxModel projectsModel = new DefaultComboBoxModel ( openProjects ); 105 projectsComboBox.setModel( projectsModel ); 106 projectsComboBox.setSelectedItem( project ); 107 108 updateRoots(); 109 updatePackages(); 110 if (preselectedFolder != null) { 111 packageComboBox.setSelectedItem(preselectedFolder); 112 } 113 } 115 116 public void requestFocus() { 117 newNameTextField.requestFocus(); 118 } 119 120 public FileObject getRootFolder() { 121 return ((SourceGroup) rootComboBox.getSelectedItem()).getRootFolder(); 122 } 123 124 public String getPackageName() { 125 String packageName = packageComboBox.getEditor().getItem().toString(); 126 return packageName.replace('.', '/'); } 128 129 private void fireChange() { 130 parent.stateChanged(null); 131 } 132 133 138 private void initComponents() { 140 java.awt.GridBagConstraints gridBagConstraints; 141 142 labelProject = new javax.swing.JLabel (); 143 projectsComboBox = new javax.swing.JComboBox (); 144 labelLocation = new javax.swing.JLabel (); 145 rootComboBox = new javax.swing.JComboBox (); 146 labelPackage = new javax.swing.JLabel (); 147 packageComboBox = new javax.swing.JComboBox (); 148 bottomPanel = new javax.swing.JPanel (); 149 newNameLabel = new javax.swing.JLabel (); 150 newNameTextField = new javax.swing.JTextField (); 151 isUpdateReferences = new javax.swing.JCheckBox (); 152 153 setLayout(new java.awt.GridBagLayout ()); 154 155 labelProject.setLabelFor(projectsComboBox); 156 org.openide.awt.Mnemonics.setLocalizedText(labelProject, org.openide.util.NbBundle.getMessage(CopyClassPanel.class, "LBL_Project")); gridBagConstraints = new java.awt.GridBagConstraints (); 158 gridBagConstraints.gridx = 0; 159 gridBagConstraints.gridy = 2; 160 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 161 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 162 add(labelProject, gridBagConstraints); 163 gridBagConstraints = new java.awt.GridBagConstraints (); 164 gridBagConstraints.gridx = 1; 165 gridBagConstraints.gridy = 2; 166 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 167 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 168 gridBagConstraints.weightx = 1.0; 169 gridBagConstraints.insets = new java.awt.Insets (0, 6, 6, 0); 170 add(projectsComboBox, gridBagConstraints); 171 projectsComboBox.getAccessibleContext().setAccessibleDescription(null); 172 173 labelLocation.setLabelFor(rootComboBox); 174 org.openide.awt.Mnemonics.setLocalizedText(labelLocation, org.openide.util.NbBundle.getMessage(CopyClassPanel.class, "LBL_Location")); gridBagConstraints = new java.awt.GridBagConstraints (); 176 gridBagConstraints.gridx = 0; 177 gridBagConstraints.gridy = 3; 178 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 179 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 180 add(labelLocation, gridBagConstraints); 181 gridBagConstraints = new java.awt.GridBagConstraints (); 182 gridBagConstraints.gridx = 1; 183 gridBagConstraints.gridy = 3; 184 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 185 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 186 gridBagConstraints.weightx = 1.0; 187 gridBagConstraints.insets = new java.awt.Insets (0, 6, 6, 0); 188 add(rootComboBox, gridBagConstraints); 189 rootComboBox.getAccessibleContext().setAccessibleDescription(null); 190 191 labelPackage.setLabelFor(packageComboBox); 192 org.openide.awt.Mnemonics.setLocalizedText(labelPackage, org.openide.util.NbBundle.getMessage(CopyClassPanel.class, "LBL_ToPackage")); gridBagConstraints = new java.awt.GridBagConstraints (); 194 gridBagConstraints.gridx = 0; 195 gridBagConstraints.gridy = 4; 196 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 197 gridBagConstraints.insets = new java.awt.Insets (0, 0, 12, 0); 198 add(labelPackage, gridBagConstraints); 199 200 packageComboBox.setEditable(true); 201 gridBagConstraints = new java.awt.GridBagConstraints (); 202 gridBagConstraints.gridx = 1; 203 gridBagConstraints.gridy = 4; 204 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 205 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 206 gridBagConstraints.weightx = 1.0; 207 gridBagConstraints.insets = new java.awt.Insets (0, 6, 12, 0); 208 add(packageComboBox, gridBagConstraints); 209 gridBagConstraints = new java.awt.GridBagConstraints (); 210 gridBagConstraints.gridx = 0; 211 gridBagConstraints.gridy = 5; 212 gridBagConstraints.gridwidth = 2; 213 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 214 gridBagConstraints.weightx = 1.0; 215 gridBagConstraints.weighty = 1.0; 216 add(bottomPanel, gridBagConstraints); 217 218 org.openide.awt.Mnemonics.setLocalizedText(newNameLabel, org.openide.util.NbBundle.getMessage(CopyClassPanel.class, "LBL_NewName")); gridBagConstraints = new java.awt.GridBagConstraints (); 220 gridBagConstraints.gridx = 0; 221 gridBagConstraints.gridy = 1; 222 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 223 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 224 add(newNameLabel, gridBagConstraints); 225 226 newNameTextField.setText("NewClass"); 227 gridBagConstraints = new java.awt.GridBagConstraints (); 228 gridBagConstraints.gridx = 1; 229 gridBagConstraints.gridy = 1; 230 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 231 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 232 gridBagConstraints.weightx = 1.0; 233 gridBagConstraints.insets = new java.awt.Insets (0, 6, 6, 0); 234 add(newNameTextField, gridBagConstraints); 235 236 org.openide.awt.Mnemonics.setLocalizedText(isUpdateReferences, org.openide.util.NbBundle.getMessage(CopyClassPanel.class, "LBL_CopyWithoutRefactoring")); isUpdateReferences.setBorder(javax.swing.BorderFactory.createEmptyBorder(4, 4, 0, 4)); 238 isUpdateReferences.setMargin(new java.awt.Insets (2, 2, 0, 2)); 239 gridBagConstraints = new java.awt.GridBagConstraints (); 240 gridBagConstraints.gridx = 0; 241 gridBagConstraints.gridy = 6; 242 gridBagConstraints.gridwidth = 2; 243 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 244 add(isUpdateReferences, gridBagConstraints); 245 } 247 248 249 protected javax.swing.JPanel bottomPanel; 251 private javax.swing.JCheckBox isUpdateReferences; 252 private javax.swing.JLabel labelLocation; 253 private javax.swing.JLabel labelPackage; 254 private javax.swing.JLabel labelProject; 255 private javax.swing.JLabel newNameLabel; 256 private javax.swing.JTextField newNameTextField; 257 private javax.swing.JComboBox packageComboBox; 258 private javax.swing.JComboBox projectsComboBox; 259 private javax.swing.JComboBox rootComboBox; 260 262 264 public void actionPerformed(ActionEvent e) { 265 if (projectsComboBox == e.getSource()) { 266 project = (Project) projectsComboBox.getSelectedItem(); 267 updateRoots(); 268 updatePackages(); 269 } else 270 if ( rootComboBox == e.getSource() ) { 271 updatePackages(); 272 } 273 else if ( packageComboBox == e.getSource() ) { 274 } 275 } 276 277 279 public void changedUpdate(DocumentEvent e) { 280 fireChange(); 281 } 282 283 public void insertUpdate(DocumentEvent e) { 284 fireChange(); 285 } 286 287 public void removeUpdate(DocumentEvent e) { 288 fireChange(); 289 } 290 291 293 private void updatePackages() { 294 SourceGroup g = (SourceGroup) rootComboBox.getSelectedItem(); 295 packageComboBox.setModel(PackageView.createListView(g)); 296 } 297 298 void setCombosEnabled(boolean enabled) { 299 packageComboBox.setEnabled(enabled); 300 rootComboBox.setEnabled(enabled); 301 projectsComboBox.setEnabled(enabled); 302 } 303 304 void setThisClassVisible(boolean visible) { 305 newNameLabel.setVisible(visible); 306 newNameTextField.setVisible(visible); 307 } 308 309 public boolean isUpdateReferences() { 310 if (isUpdateReferences.isVisible() && isUpdateReferences.isSelected()) 311 return false; 312 return true; 313 } 314 315 316 public String getNewName() { 317 return newNameTextField.getText(); 318 } 319 320 private void updateRoots() { 321 Sources sources = ProjectUtils.getSources(project); 322 groups = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); 323 if (groups.length == 0) { 324 groups = sources.getSourceGroups( Sources.TYPE_GENERIC ); 327 } 328 329 int preselectedItem = 0; 330 for( int i = 0; i < groups.length; i++ ) { 331 if (fo!=null) { 332 try { 333 if (groups[i].contains(fo)) { 334 preselectedItem = i; 335 } 336 } catch (IllegalArgumentException e) { 337 } 339 } 340 } 341 342 rootComboBox.setModel(new DefaultComboBoxModel (groups)); 344 rootComboBox.setSelectedIndex(preselectedItem); 345 } 346 347 public Component getComponent() { 348 return this; 349 } 350 351 } 352 | Popular Tags |