1 19 20 package org.netbeans.modules.j2ee.earproject.ui.actions; 21 22 import java.util.LinkedList ; 23 import java.util.List ; 24 import java.util.Set ; 25 import org.netbeans.api.project.Project; 26 import org.netbeans.api.project.ui.OpenProjects; 27 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule; 28 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModuleContainer; 29 import org.netbeans.spi.project.ui.LogicalViewProvider; 30 import org.netbeans.spi.project.SubprojectProvider; 31 import org.openide.nodes.AbstractNode; 32 import org.openide.nodes.Children; 33 import org.openide.nodes.FilterNode; 34 import org.openide.nodes.Node; 35 import org.openide.nodes.NodeAcceptor; 36 import org.openide.nodes.NodeOperation; 37 import org.openide.util.HelpCtx; 38 import org.openide.util.NbBundle; 39 import org.openide.util.UserCancelException; 40 import org.openide.util.actions.CookieAction; 41 import org.openide.util.lookup.Lookups; 42 43 import org.netbeans.modules.j2ee.earproject.ui.customizer.EarProjectProperties; 44 45 import org.netbeans.spi.project.support.ant.AntProjectHelper; 46 import org.netbeans.modules.j2ee.earproject.EarProject; 47 import org.netbeans.api.project.FileOwnerQuery; 48 49 54 public class AddModuleAction extends CookieAction { 55 56 private static final String FOLDER_ICON = "org/netbeans/modules/j2ee/earproject/ui/resources/folder.gif"; 57 58 private static final Class [] COOKIE_ARRAY = 59 new Class [] { AntProjectHelper.class }; 60 61 public Class [] cookieClasses() { 62 return COOKIE_ARRAY; 63 } 64 65 public int mode() { 66 return CookieAction.MODE_EXACTLY_ONE; 67 } 68 69 public void performAction(Node[] activeNodes) { 70 try { 71 AntProjectHelper aph = 72 (AntProjectHelper) activeNodes[0].getLookup().lookup(AntProjectHelper.class); 73 Project[] moduleProjects = getSelectedProjects(aph); 74 Project p = FileOwnerQuery.getOwner(aph.getProjectDirectory()); 77 EarProject ep = (EarProject) p.getLookup().lookup(EarProject.class); 78 EarProjectProperties epp = (EarProjectProperties) ep.getProjectProperties(); 79 epp.addJ2eeSubprojects(moduleProjects); 80 } catch (UserCancelException uce) { 81 } 83 } 84 85 public String getName() { 86 return NbBundle.getMessage(AddModuleAction.class, "LBL_AddModuleAction"); 87 } 88 89 public HelpCtx getHelpCtx() { 90 return HelpCtx.DEFAULT_HELP; 91 } 92 93 protected boolean asynchronous() { 94 return false; 95 } 96 97 private Project[] getSelectedProjects(AntProjectHelper epp) throws UserCancelException { 98 Project[] allProjects = OpenProjects.getDefault().getOpenProjects(); 99 List <Node> moduleProjectNodes = new LinkedList <Node>(); 100 for (int i = 0; i < allProjects.length; i++) { 101 if (allProjects[i].getLookup().lookup(J2eeModule.class) != null && 102 allProjects[i].getLookup().lookup(J2eeModuleContainer.class) == null) { 103 LogicalViewProvider lvp = 104 (LogicalViewProvider) allProjects[i].getLookup().lookup(LogicalViewProvider.class); 105 Node mn = lvp.createLogicalView(); 106 Node n = new FilterNode(mn, new FilterNode.Children(mn), Lookups.singleton(allProjects[i])); 107 moduleProjectNodes.add(n); 108 } 109 } 110 Children.Array children = new Children.Array(); 111 children.add(moduleProjectNodes.toArray(new Node[moduleProjectNodes.size()])); 112 final AbstractNode root = new AbstractNode(children); 113 String moduleSelector = NbBundle.getMessage(AddModuleAction.class, "LBL_ModuleSelectorTitle"); 114 115 Project parent = FileOwnerQuery.getOwner(epp.getProjectDirectory()); 116 SubprojectProvider spp = (SubprojectProvider) parent.getLookup().lookup(SubprojectProvider.class); 117 if (null != spp) { 118 final Set s = spp.getSubprojects(); 119 NodeAcceptor na = new NodeAcceptor() { 120 public boolean acceptNodes(Node[] nodes) { 121 for (int i = 0; i < nodes.length; i++) { 122 if (nodes[i].getParentNode() != root) { 123 return false; 124 } 125 Project p = (Project) nodes[i].getLookup().lookup(Project.class); 127 if (null == p) 128 return false; 129 if (s.contains(p)) return false; 130 } 131 return nodes.length > 0; 132 } 133 }; 134 root.setDisplayName(NbBundle.getMessage(AddModuleAction.class, "LBL_J2EEModules")); 135 root.setIconBaseWithExtension(FOLDER_ICON); 136 Node[] selected = NodeOperation.getDefault().select(moduleSelector, root.getDisplayName(), root, na); 137 Project[] modules = new Project[selected.length]; 138 for (int i = 0; i < modules.length; i++) { 139 modules[i] = (Project) selected[i].getLookup().lookup(Project.class); 140 } 141 return modules; 142 } 143 else { 144 return new Project[0]; 145 } 146 } 147 } 148 | Popular Tags |