This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 58561
Collapse All | Expand All

(-)MoveClassRefactoring.java (-73 / +155 lines)
Lines 18-28 Link Here
18
import org.netbeans.jmi.javamodel.JavaClass;
18
import org.netbeans.jmi.javamodel.JavaClass;
19
import org.netbeans.modules.java.JavaDataObject;
19
import org.netbeans.modules.java.JavaDataObject;
20
import org.netbeans.modules.javacore.api.JavaModel;
20
import org.netbeans.modules.javacore.api.JavaModel;
21
import org.netbeans.modules.javacore.internalapi.JavaMetamodel;
22
import org.netbeans.modules.refactoring.classpath.Util;
21
import org.netbeans.modules.refactoring.classpath.Util;
23
import org.openide.filesystems.FileObject;
22
import org.openide.filesystems.FileObject;
23
import org.openide.filesystems.FileUtil;
24
import org.openide.loaders.DataFolder;
24
import org.openide.loaders.DataFolder;
25
import org.openide.loaders.DataObject;
25
import org.openide.loaders.DataObject;
26
import org.openide.loaders.DataObjectNotFoundException;
26
27
27
/**
28
/**
28
 * Move class/classes refactoring.
29
 * Move class/classes refactoring.
Lines 32-102 Link Here
32
    
33
    
33
    private Collection/*<Resource>*/        resources;
34
    private Collection/*<Resource>*/        resources;
34
    private Collection                      otherDataObjects = Collections.EMPTY_LIST;
35
    private Collection                      otherDataObjects = Collections.EMPTY_LIST;
35
    private boolean                         particularClassSelected = false;
36
    private FileObject                      folder = null;
36
    private FileObject                      folder = null;
37
    private boolean                         invokedAfterDOMove = false;
37
    private Map                             packagePostfix;
38
38
    private Collection dataObjects = Collections.EMPTY_LIST;
39
    //private String targetPrefix = ""; //NOI18N
40
    //private DataObject movedSource;
41
    
42
    private Map checkedSourcesMap;
39
    private Map checkedSourcesMap;
43
    
40
    private boolean packageRename;
44
    private int size;
41
    private boolean isPackageRename = false;
42
    private String newPackageName;
43
    private FileObject target;
45
    
44
    
46
    /**
45
    /**
47
     * Creates a new instance of MoveClassRefactoring. All classes within given folder will be moved.
46
     * Creates a new instance of MoveClassRefactoring. All classes within given folder will be moved.
48
     * @param folder Folder where classes are held
47
     * @param sourceFolder Folder where classes are held
48
     * @param isPackage true - given sourceFolder is considered as java package - only direct children will be moved.
49
     *                  false - given sourceFolder is considered as folder - move fill be performed recursively
49
     */
50
     */
50
    public MoveClassRefactoring(FileObject sourceFolder) {
51
    public MoveClassRefactoring(FileObject sourceFolder, boolean isPackage) {
51
        this.folder = sourceFolder;
52
        isPackageRename = true;
52
        DataObject[] children = DataFolder.findFolder(folder).getChildren();
53
        this.packageRename = isPackage;
53
        resources = new HashSet();
54
        if (packageRename) {
54
        otherDataObjects = new HashSet();
55
            this.folder = sourceFolder;
55
        for (int i = 0; i < children.length; i++) {
56
            DataObject[] children = DataFolder.findFolder(folder).getChildren();
56
            if (children[i] instanceof JavaDataObject) {
57
            resources = new HashSet();
57
                resources.add(JavaModel.getResource(children[i].getPrimaryFile()));
58
            otherDataObjects = new HashSet();
58
            } else if (!(children[i] instanceof DataFolder)) {
59
            for (int i = 0; i < children.length; i++) {
59
                otherDataObjects.add(children[i]);
60
                if (children[i] instanceof JavaDataObject) {
61
                    resources.add(JavaModel.getResource(children[i].getPrimaryFile()));
62
                } else if (!(children[i] instanceof DataFolder)) {
63
                    otherDataObjects.add(children[i]);
64
                }
65
            }
66
        } else {
67
            this.folder = sourceFolder;
68
            LinkedList children = new LinkedList(Arrays.asList(DataFolder.findFolder(folder).getChildren()));
69
            resources = new HashSet();
70
            otherDataObjects = new HashSet();
71
            while(!children.isEmpty()) {
72
                DataObject dob = (DataObject) children.removeFirst();
73
                if (dob instanceof JavaDataObject) {
74
                    resources.add(JavaModel.getResource(dob.getPrimaryFile()));
75
                } else if (dob instanceof DataFolder) {
76
                    children.addAll(Arrays.asList(((DataFolder)dob).getChildren()));
77
                } else {
78
                    otherDataObjects.add(dob);
79
                }
60
            }
80
            }
61
        }
81
        }
62
    }
82
    }
63
83
64
    /**
84
    /**
65
     * Getter for property sourceFolder
66
     * @return Value of sourceFolder or null if no surce folder was specified
67
     */
68
    public FileObject getSourceFolder() {
69
        return folder;
70
    }
71
    
72
    /**
73
     * Creates a new instance of MoveClassRefactoring.
85
     * Creates a new instance of MoveClassRefactoring.
74
     * @param javaClass a JavaClass which will be moved
86
     * @param javaClass a JavaClass which will be moved
75
     */
87
     */
76
    public MoveClassRefactoring(JavaClass javaClass) {
88
    public MoveClassRefactoring(JavaClass javaClass) {
77
        resources = new ArrayList(1);
89
        resources = new ArrayList(1);
78
        resources.add(javaClass.getResource());
90
        resources.add(javaClass.getResource());
79
        particularClassSelected = true;
80
    }
91
    }
81
    
92
    
82
    /**
93
    /**
83
     * Creates a new instance of MoveClassRefactoring.
94
     * Creates a new instance of MoveClassRefactoring.
84
     * @param resources All resources from this collection will be moved
95
     * @param resources All Resources from this collection will be moved
85
     */
96
     */
86
    public MoveClassRefactoring(Collection resources) {
97
    public MoveClassRefactoring(Collection resources) {
87
        this.resources = resources;
98
        this.resources = resources;
88
    }
99
    }
89
    
100
    
90
    /**
101
    /**
91
     * Creates a new instance of MoveClassRefactoring
102
     * Creates a new instance of MoveClassRefactoring.
92
     * @param resources All resources from this collection will be moved
103
     * @param dataObjects DataObjects that are being moved
93
     * @param invokedAfterDOMove true if files has been already moved on disk
104
     * @param target target folder
94
     */
105
     */
95
    public MoveClassRefactoring(Collection resources, boolean invokedAfterDOMove) {
106
    public MoveClassRefactoring(Collection dataObjects, FileObject target) {
96
        this.invokedAfterDOMove = invokedAfterDOMove;
107
        this.target = target;
97
        this.resources = resources;
108
        resources = new ArrayList(1);
109
        packagePostfix = new HashMap(dataObjects.size());
110
        otherDataObjects = new HashSet();
111
        this.dataObjects=dataObjects;
112
        setup(dataObjects, "");
98
    }
113
    }
99
    
114
    
115
    /**
116
     * Getter for property sourceFolder
117
     * @return Value of sourceFolder or null if no surce folder was specified
118
     */
119
    public FileObject getSourceFolder() {
120
        return folder;
121
    }
122
100
    protected void setClassPath() {
123
    protected void setClassPath() {
101
        Util.setClassPath(resources);
124
        Util.setClassPath(resources);
102
    }
125
    }
Lines 110-138 Link Here
110
    }
133
    }
111
    
134
    
112
    /**
135
    /**
113
     * Getter for property target
136
     * Getter for property targetPackageName
114
     * @return Value of property target
137
     * @return Value of property targetPackageName
115
     */
138
     */
116
    public FileObject getTarget() {
139
    public String getTargetPackageName() {
117
        return target;
140
        return newPackageName;
118
    }
141
    }
119
    
142
120
    /**
143
    /**
121
     * Getter for property target
144
     * Getter for targetPackageName for specified Resource
122
     * @return Value of property target
145
     * @return Value of property targetPackageName
146
     * @param r Resource for which target package name is requested
123
     */
147
     */
124
    public String getTargetPackageName(Resource r) {
148
    public String getTargetPackageName(Resource r) {
125
        return isPackageRename ? newPackageName : getPackageName(getTargetFile(r));
149
        return getTargetPackageName(JavaModel.getFileObject(r));
126
    }
150
    }
127
    
151
    
128
    /**
152
    /**
129
     * Getter for property newPackageName
153
     * Getter for targetPackageName for specified FileObject
130
     * @return Value of property newPackageName
154
     * @return Value of property targetPackageName
131
     */
155
     * @param fo FileObject for which target package name is requested
132
    public String getNewPackageName() {
156
     */
133
        return newPackageName;
157
    public String getTargetPackageName(FileObject fo) {
158
        if (isPackageRename) {
159
            if (packageRename)
160
                return newPackageName;
161
            else {
162
                //folder rename
163
                ClassPath cp = ClassPath.getClassPath(folder, ClassPath.SOURCE);
164
                FileObject root = cp.findOwnerRoot(folder);
165
                String prefix = FileUtil.getRelativePath(root, folder.getParent()).replace('/','.');
166
                String postfix = FileUtil.getRelativePath(folder, fo.getParent()).replace('/', '.');
167
                String t = concat(prefix, newPackageName, postfix);
168
                return t;
169
            }
170
        }
171
172
        if (packagePostfix != null) {
173
            String postfix = (String) packagePostfix.get(fo);
174
            String packageName = concat(null, newPackageName, postfix);
175
            return packageName;
176
        } else
177
            return newPackageName;
134
    }
178
    }
135
    
179
136
    /**
180
    /**
137
     * Getter for property otherDataObjects
181
     * Getter for property otherDataObjects
138
     * @return Value of property otherDataObjects
182
     * @return Value of property otherDataObjects
Lines 142-188 Link Here
142
    }
186
    }
143
    
187
    
144
    /**
188
    /**
145
     * @return retrurns class path root of target folder for given resource
189
     * Getter for property targetClassPathRoot
190
     * @return returns target class path root
146
     */
191
     */
147
    public FileObject getTargetClassPathRoot(Resource r) {
192
    public FileObject getTargetClassPathRoot() {
148
        FileObject f = isPackageRename ? folder : getTargetFile(r);
193
        FileObject f = isPackageRename ? folder : target;
149
        return ClassPath.getClassPath(f, ClassPath.SOURCE).findOwnerRoot(f);
194
        return ClassPath.getClassPath(f, ClassPath.SOURCE).findOwnerRoot(f);
150
    }
195
    }
151
    
196
    
152
    private boolean isPackageRename = false;
153
    private String newPackageName;
154
    private FileObject target;
155
    
156
    /**
197
    /**
157
     * Setter for property target
198
     * Setter for property targetClassPath root
158
     * @param target New value of property target
199
     * @param target New value of property targetClassPath root
159
     */
200
     */
160
    public void setTarget(FileObject target) {
201
    public void setTargetClassPathRoot(FileObject target) {
161
        this.target = target;
202
        this.target = target;
162
    }
203
    }
163
    
204
    
164
    /**
205
    /**
165
     * Setter for property newPackageNam
206
     * Setter for property newPackageName
166
     * @param name New value of property newPackageNam
207
     * @param name New value of property newPackageName
167
     */
208
     */
168
    public void setNewPackageName(String name) {
209
    public void setTargetPackageName(String name) {
169
        isPackageRename = true;
170
        this.newPackageName = name;
210
        this.newPackageName = name;
171
    }
211
    }
172
    
212
    
173
    /**
213
    /**
174
     * Getter for property invokedAfterDOMove
214
     * Getter for property selectedDataObjects
175
     * @return true if Files has been already moved
215
     * @return Value of property selectedDataObjects
176
     */
216
     */
177
    public boolean isInvokedAfterFileMove() {
217
    public Collection getSelectedDataObjects() {
178
        return invokedAfterDOMove;
218
        if (isPackageRename) {
219
            try {
220
                if (!packageRename)
221
                    return Collections.singletonList(DataObject.find(folder));
222
                else {
223
                    FileObject f = folder;
224
                    FileObject cpRoot = getTargetClassPathRoot();
225
                    while (f.getParent() != cpRoot) {
226
                        f = f.getParent();
227
                    }
228
                    return Collections.singletonList(DataObject.find(f));
229
                }
230
            } catch (DataObjectNotFoundException notFound) {
231
                
232
            }
233
        }
234
        return dataObjects;
179
    }
235
    }
180
    
236
    
181
    private static String getPackageName(FileObject f) {
237
    private void setup(Collection dataObjects, String postfix) {
182
        return ClassPath.getClassPath(f, ClassPath.SOURCE).getResourceName(f, '.', false);
238
        for (Iterator i = dataObjects.iterator(); i.hasNext(); ) {
239
            DataObject o = (DataObject) i.next();
240
            FileObject fo = o.getPrimaryFile();
241
            if (o instanceof JavaDataObject) {
242
                Resource r = JavaModel.getResource(fo);
243
                resources.add(r);
244
                packagePostfix.put(fo, postfix.replace('/', '.'));
245
            } else if (!(o instanceof DataFolder)) {
246
                otherDataObjects.add(o);
247
                packagePostfix.put(fo, postfix.replace('/', '.'));
248
            } else {
249
                
250
                boolean addDot = !"".equals(postfix);
251
                Collection col = new ArrayList();
252
                for (Enumeration en = ((DataFolder) o).children(); en.hasMoreElements(); col.add(en.nextElement()));
253
                
254
                setup(col, postfix +(addDot?".":"") +o.getName());
255
            }
256
        }
183
    }
257
    }
184
    
258
 
185
    private FileObject getTargetFile(Resource r) {
259
    private String concat(String s1, String s2, String s3) {
186
        return target != null || isPackageRename ? target : JavaMetamodel.getManager().getDataObject(r).getFolder().getPrimaryFile();
260
        String result = "";
261
        if (s1 != null && !"".equals(s1)) {
262
            result += s1 + ".";
263
        }
264
        result +=s2;
265
        if (s3 != null && !"".equals(s3)) {
266
            result += ("".equals(result)? "" : ".") + s3;
267
        }
268
        return result;
187
    }
269
    }
188
}  
270
}  
189
271

Return to bug 58561