KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > java > ui > MoveClassesUI


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 package org.netbeans.modules.refactoring.java.ui;
20
21 import java.awt.BorderLayout JavaDoc;
22 import java.io.IOException JavaDoc;
23 import java.net.MalformedURLException JavaDoc;
24 import java.net.URL JavaDoc;
25 import java.util.ArrayList JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28 import java.util.Set JavaDoc;
29 import java.util.Vector JavaDoc;
30 import javax.swing.JLabel JavaDoc;
31 import javax.swing.JList JavaDoc;
32 import javax.swing.JScrollPane JavaDoc;
33 import javax.swing.border.EmptyBorder JavaDoc;
34 import javax.swing.event.ChangeListener JavaDoc;
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 /**
54  * @author Jan Becicka
55  */

56 public class MoveClassesUI implements RefactoringUI, RefactoringUIBypass {
57     
58     private List JavaDoc resources;
59     private Set JavaDoc javaObjects;
60     private MovePanel panel;
61     private MoveRefactoring refactoring;
62     private String JavaDoc targetPkgName = "";
63     private boolean disable;
64     private FileObject targetFolder;
65     private PasteType pasteType;
66     
67     static final String JavaDoc getString(String JavaDoc key) {
68         return NbBundle.getMessage(MoveClassUI.class, key);
69     }
70     
71     public MoveClassesUI(Set JavaDoc javaObjects) {
72         this(javaObjects, null, null);
73     }
74
75     public MoveClassesUI(Set JavaDoc 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 JavaDoc(javaObjects.size());
82             resources.addAll(javaObjects);
83         }
84     }
85     
86     public String JavaDoc getName() {
87         return getString ("LBL_MoveClasses");
88     }
89      
90     public String JavaDoc getDescription() {
91         return getName();
92     }
93     
94     public boolean isQuery() {
95         return false;
96     }
97         
98     public CustomRefactoringPanel getPanel(ChangeListener JavaDoc parent) {
99         if (panel == null) {
100             String JavaDoc 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 getResPackageName(Resource res) {
115
// String name = res.getName();
116
// if ( name.indexOf('/') == -1 )
117
// return "";
118
// return name.substring(0, name.lastIndexOf('/')).replace('/','.');
119
// }
120
private static String JavaDoc getDOPackageName(FileObject f) {
121         return ClassPath.getClassPath(f, ClassPath.SOURCE).getResourceName(f, '.', false);
122     }
123
124     private String JavaDoc 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 JavaDoc url = URLMapper.findURL(panel.getRootFolder(), URLMapper.EXTERNAL);
132         try {
133             refactoring.setTarget(Lookups.singleton(new URL JavaDoc(url.toExternalForm() + "/" + panel.getPackageName().replace('.','/'))));
134         } catch (MalformedURLException JavaDoc 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 JavaDoc getNodes() {
164         Vector JavaDoc result = new Vector JavaDoc(javaObjects.size());
165         for(Iterator JavaDoc 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 JavaDoc {
189         pasteType.paste();
190     }
191
192     // MovePanel ...............................................................
193
class MovePanel extends MoveClassPanel {
194         public MovePanel (final ChangeListener JavaDoc parent, String JavaDoc startPackage, String JavaDoc headLine) {
195             super(parent, startPackage, headLine, targetFolder != null ? targetFolder : (FileObject) javaObjects.iterator().next() );
196             setCombosEnabled(!disable);
197             JList JavaDoc list = new JList JavaDoc(getNodes());
198             list.setCellRenderer(new NodeRenderer());
199             list.setVisibleRowCount(5);
200             JScrollPane JavaDoc pane = new JScrollPane JavaDoc(list);
201             bottomPanel.setBorder(new EmptyBorder JavaDoc(8,0,0,0));
202             bottomPanel.setLayout(new BorderLayout JavaDoc());
203             bottomPanel.add(pane, BorderLayout.CENTER);
204             JLabel JavaDoc listOf = new JLabel JavaDoc();
205             Mnemonics.setLocalizedText(listOf, NbBundle.getMessage(MoveClassesUI.class, "LBL_ListOfClasses"));
206             bottomPanel.add(listOf, BorderLayout.NORTH);
207         }
208     }
209 }
210
Popular Tags