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