KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > experimental > ui > CopyClassPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.refactoring.experimental.ui;
21
22 import java.awt.Component JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.io.File JavaDoc;
26 import javax.swing.DefaultComboBoxModel JavaDoc;
27 import javax.swing.DefaultListCellRenderer JavaDoc;
28 import javax.swing.JList JavaDoc;
29 import javax.swing.JTextField JavaDoc;
30 import javax.swing.ListCellRenderer JavaDoc;
31 import javax.swing.event.DocumentEvent JavaDoc;
32 import javax.swing.event.DocumentListener JavaDoc;
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 /**
49  * @author Jan Becicka
50  */

51 public class CopyClassPanel extends CustomRefactoringPanel implements ActionListener JavaDoc, DocumentListener JavaDoc {
52   
53     private static final ListCellRenderer JavaDoc GROUP_CELL_RENDERER = new GroupCellRenderer();
54     private static final ListCellRenderer JavaDoc 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 JavaDoc title, String JavaDoc 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 JavaDoc textField = packageComboBox.getEditor().getEditorComponent();
78         if (textField instanceof JTextField JavaDoc) {
79             ((JTextField JavaDoc) 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         //put initialization code here
94
initialized = true;
95     }
96     
97     public void initValues(String JavaDoc preselectedFolder ) {
98         
99         Project openProjects[] = OpenProjects.getDefault().getOpenProjects();
100         DefaultComboBoxModel JavaDoc projectsModel = new DefaultComboBoxModel JavaDoc( openProjects );
101         projectsComboBox.setModel( projectsModel );
102         projectsComboBox.setSelectedItem( project );
103         
104         updateRoots();
105         updatePackages();
106         if (preselectedFolder != null) {
107             packageComboBox.setSelectedItem(preselectedFolder);
108         }
109         // Determine the extension
110
}
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 JavaDoc getPackageName() {
121         String JavaDoc packageName = packageComboBox.getEditor().getItem().toString();
122         return packageName.replace('.', '/'); // NOI18N
123
}
124     
125     private void fireChange() {
126         parent.stateChanged(null);
127     }
128     
129     /** This method is called from within the constructor to
130      * initialize the form.
131      * WARNING: Do NOT modify this code. The content of this method is
132      * always regenerated by the Form Editor.
133      */

134     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
135
private void initComponents() {
136         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
137
138         labelProject = new javax.swing.JLabel JavaDoc();
139         projectsComboBox = new javax.swing.JComboBox JavaDoc();
140         labelLocation = new javax.swing.JLabel JavaDoc();
141         rootComboBox = new javax.swing.JComboBox JavaDoc();
142         labelPackage = new javax.swing.JLabel JavaDoc();
143         packageComboBox = new javax.swing.JComboBox JavaDoc();
144         bottomPanel = new javax.swing.JPanel JavaDoc();
145         newNameLabel = new javax.swing.JLabel JavaDoc();
146         newNameTextField = new javax.swing.JTextField JavaDoc();
147
148         setLayout(new java.awt.GridBagLayout JavaDoc());
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 JavaDoc();
153         gridBagConstraints.gridx = 0;
154         gridBagConstraints.gridy = 2;
155         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
156         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 6, 0);
157         add(labelProject, gridBagConstraints);
158
159         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(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 JavaDoc();
172         gridBagConstraints.gridx = 0;
173         gridBagConstraints.gridy = 3;
174         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
175         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 6, 0);
176         add(labelLocation, gridBagConstraints);
177
178         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(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 JavaDoc();
191         gridBagConstraints.gridx = 0;
192         gridBagConstraints.gridy = 4;
193         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
194         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 12, 0);
195         add(labelPackage, gridBagConstraints);
196
197         packageComboBox.setEditable(true);
198         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(0, 6, 12, 0);
205         add(packageComboBox, gridBagConstraints);
206
207         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc();
218         gridBagConstraints.gridx = 0;
219         gridBagConstraints.gridy = 1;
220         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
221         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 6, 0);
222         add(newNameLabel, gridBagConstraints);
223
224         newNameTextField.setText("NewClass");
225         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(0, 6, 6, 0);
232         add(newNameTextField, gridBagConstraints);
233
234     }
235     // </editor-fold>//GEN-END:initComponents
236

237     
238     
239     // Variables declaration - do not modify//GEN-BEGIN:variables
240
protected javax.swing.JPanel JavaDoc bottomPanel;
241     private javax.swing.JLabel JavaDoc labelLocation;
242     private javax.swing.JLabel JavaDoc labelPackage;
243     private javax.swing.JLabel JavaDoc labelProject;
244     private javax.swing.JLabel JavaDoc newNameLabel;
245     private javax.swing.JTextField JavaDoc newNameTextField;
246     private javax.swing.JComboBox JavaDoc packageComboBox;
247     private javax.swing.JComboBox JavaDoc projectsComboBox;
248     private javax.swing.JComboBox JavaDoc rootComboBox;
249     // End of variables declaration//GEN-END:variables
250

251     // ActionListener implementation -------------------------------------------
252

253     public void actionPerformed(ActionEvent JavaDoc 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     // DocumentListener implementation -----------------------------------------
267

268     public void changedUpdate(DocumentEvent JavaDoc e) {
269         fireChange();
270     }
271     
272     public void insertUpdate(DocumentEvent JavaDoc e) {
273         fireChange();
274     }
275     
276     public void removeUpdate(DocumentEvent JavaDoc e) {
277         fireChange();
278     }
279     
280     // Private methods ---------------------------------------------------------
281

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 JavaDoc 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             // XXX why?? This is probably wrong. If the project has no Java groups,
307
// you cannot move anything into it.
308
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 JavaDoc e) {
319                     // XXX this is a poor abuse of exception handling
320
}
321             }
322         }
323                 
324         // Setup comboboxes
325
rootComboBox.setModel(new DefaultComboBoxModel JavaDoc(groups));
326         rootComboBox.setSelectedIndex(preselectedItem);
327     }
328     
329     private static class GroupCellRenderer extends DefaultListCellRenderer JavaDoc/*<SourceGroup>*/ {
330         
331         public Component JavaDoc getListCellRendererComponent(
332             JList JavaDoc list,
333             Object JavaDoc value,
334             int index,
335             boolean isSelected,
336             boolean cellHasFocus) {
337         
338             DefaultListCellRenderer JavaDoc cbr = (DefaultListCellRenderer JavaDoc)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 JavaDoc {
347         
348         public Component JavaDoc getListCellRendererComponent(
349             JList JavaDoc list,
350             Object JavaDoc value,
351             int index,
352             boolean isSelected,
353             boolean cellHasFocus) {
354         
355             DefaultListCellRenderer JavaDoc cbr = (DefaultListCellRenderer JavaDoc)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