KickJava   Java API By Example, From Geeks To Geeks.

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


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 Leon Chiver. All Rights Reserved.
17  */

18 package org.netbeans.modules.refactoring.experimental.ui;
19
20 import java.util.ArrayList JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import org.netbeans.api.java.classpath.ClassPath;
24 import org.netbeans.jmi.javamodel.Element;
25 import org.netbeans.jmi.javamodel.JavaPackage;
26 import org.netbeans.jmi.javamodel.Resource;
27 import org.netbeans.modules.java.JavaDataObject;
28 import org.netbeans.modules.javacore.JMManager;
29 import org.netbeans.modules.javacore.api.JavaModel;
30 import org.netbeans.modules.javacore.internalapi.JavaMetamodel;
31 import org.netbeans.modules.refactoring.classpath.Util;
32 import org.netbeans.modules.refactoring.experimental.CleanUpRefactoring;
33 import org.netbeans.modules.refactoring.spi.ui.AbstractRefactoringAction;
34 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI;
35 import org.openide.filesystems.FileObject;
36 import org.openide.filesystems.FileStateInvalidException;
37 import org.openide.filesystems.Repository;
38 import org.openide.loaders.DataFolder;
39 import org.openide.loaders.DataObject;
40 import org.openide.nodes.Node;
41
42 /**
43  * @author leon chiver
44  */

45 public class CleanUpAction extends AbstractRefactoringAction {
46     
47     public CleanUpAction() {
48         super(org.openide.util.NbBundle.getMessage(CleanUpAction.class, "LBL_CleanUp"), null);
49         putValue("noIconInMenu", Boolean.TRUE); // NOI18N
50
}
51     
52     protected boolean enabled(Node[] activatedNodes) {
53         if (activatedNodes.length == 0) {
54             return false;
55         }
56         // TODO - enable the action for projects too
57
for (int i = 0; i < activatedNodes.length; i++) {
58             DataObject dataObj = (DataObject) activatedNodes[i].getCookie(DataObject.class);
59             if (dataObj == null) {
60                 continue;
61             }
62             FileObject fo = dataObj.getPrimaryFile();
63             if (Util.isUnderSourceRootOfOpenProjects(fo)) {
64                 return true;
65             }
66             if (Util.isClassPathRoot(fo)) {
67                 return true;
68             }
69         }
70         return false;
71     }
72
73     protected RefactoringUI createRefactoringUI(Node[] nodes, Element selectedElement) {
74         List JavaDoc/*<Resource>*/ resources = new ArrayList JavaDoc/*<Resource>*/();
75         for (int i = 0; i < nodes.length; i++) {
76             DataObject dataObject = (DataObject) nodes[i].getCookie(DataObject.class);
77             if (dataObject instanceof JavaDataObject &&
78                     ((JMManager) JavaMetamodel.getManager()).mergedCPContains(dataObject.getPrimaryFile())) {
79                 resources.add(JavaModel.getResource(dataObject.getPrimaryFile()));
80                 continue;
81             } else if (dataObject instanceof DataFolder) {
82                 FileObject folder = dataObject.getPrimaryFile();
83                 try {
84                     if (folder.getFileSystem() == Repository.getDefault().getDefaultFileSystem()) {
85                         continue;
86                     }
87                     ClassPath cp = ClassPath.getClassPath(folder, ClassPath.SOURCE);
88                     JavaPackage pkg = null;
89                     if (cp != null) {
90                         String JavaDoc packageName = cp.getResourceName(folder, '.', false);
91                         FileObject root = cp.findOwnerRoot(folder);
92                         if (root != null) {
93                             pkg = JavaModel.getJavaExtent(root).getJavaPackage().resolvePackage(packageName);
94                         }
95                     }
96                     if (pkg != null) {
97                         addPackageResources(folder, resources, cp, true);
98                     }
99                 } catch (FileStateInvalidException ex) {
100                     // Ignore it
101
}
102             }
103         }
104         return new CleanUpRefactoringUI(new CleanUpRefactoring(), resources);
105     }
106         
107     private void addPackageResources(FileObject obj, List JavaDoc resources, ClassPath cp, boolean recursively) {
108         FileObject[] children = obj.getChildren();
109         List JavaDoc/*<FileObject>*/ folders = new ArrayList JavaDoc/*<FileObject>*/();
110         for (int i = 0; i < children.length; i++) {
111             FileObject ch = children[i];
112             if (!cp.contains(ch)) {
113                 continue;
114             }
115             boolean folder = ch.isFolder();
116             if (folder) {
117                 folders.add(ch);
118             } else if ("java".equals(ch.getExt())) { // NOI18N
119
Resource res = JavaMetamodel.getManager().getResource(ch);
120                 if (res != null) {
121                     resources.add(res);
122                 }
123             }
124         }
125         if (recursively) {
126             for (Iterator JavaDoc/*<FileObject>*/ it = folders.iterator(); it.hasNext();) {
127                 addPackageResources((FileObject) it.next(), resources, cp, true);
128             }
129         }
130         
131     }
132
133     
134 }
135
Popular Tags