1 18 package org.netbeans.modules.refactoring.experimental.ui; 19 20 import java.util.ArrayList ; 21 import java.util.Iterator ; 22 import java.util.List ; 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 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); } 51 52 protected boolean enabled(Node[] activatedNodes) { 53 if (activatedNodes.length == 0) { 54 return false; 55 } 56 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 resources = new ArrayList (); 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 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 } 102 } 103 } 104 return new CleanUpRefactoringUI(new CleanUpRefactoring(), resources); 105 } 106 107 private void addPackageResources(FileObject obj, List resources, ClassPath cp, boolean recursively) { 108 FileObject[] children = obj.getChildren(); 109 List folders = new ArrayList (); 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())) { Resource res = JavaMetamodel.getManager().getResource(ch); 120 if (res != null) { 121 resources.add(res); 122 } 123 } 124 } 125 if (recursively) { 126 for (Iterator it = folders.iterator(); it.hasNext();) { 127 addPackageResources((FileObject) it.next(), resources, cp, true); 128 } 129 } 130 131 } 132 133 134 } 135 | Popular Tags |