1.1 --- a/autoproject.java/src/org/netbeans/modules/autoproject/java/NodeFactoryImpl.java Wed Nov 16 16:26:39 2011 -0500
1.2 +++ b/autoproject.java/src/org/netbeans/modules/autoproject/java/NodeFactoryImpl.java Wed Nov 16 16:51:43 2011 -0500
1.3 @@ -39,8 +39,11 @@
1.4
1.5 package org.netbeans.modules.autoproject.java;
1.6
1.7 +import java.beans.PropertyChangeEvent;
1.8 +import java.beans.PropertyChangeListener;
1.9 import java.util.ArrayList;
1.10 import java.util.List;
1.11 +import java.util.Map;
1.12 import javax.swing.event.ChangeEvent;
1.13 import javax.swing.event.ChangeListener;
1.14 import org.netbeans.api.java.project.JavaProjectConstants;
1.15 @@ -48,11 +51,13 @@
1.16 import org.netbeans.api.project.ProjectUtils;
1.17 import org.netbeans.api.project.SourceGroup;
1.18 import org.netbeans.api.project.Sources;
1.19 +import org.netbeans.modules.autoproject.spi.Cache;
1.20 import org.netbeans.modules.autoproject.spi.PathFinder;
1.21 import org.netbeans.spi.java.project.support.ui.PackageView;
1.22 import org.netbeans.spi.project.ui.support.NodeFactory;
1.23 import org.netbeans.spi.project.ui.support.NodeList;
1.24 import org.openide.filesystems.FileObject;
1.25 +import org.openide.filesystems.FileUtil;
1.26 import org.openide.loaders.DataObject;
1.27 import org.openide.loaders.DataObjectNotFoundException;
1.28 import org.openide.nodes.Node;
1.29 @@ -73,7 +78,7 @@
1.30 return new SourceChildren(p);
1.31 }
1.32
1.33 - private class SourceChildren implements NodeList<Object>, ChangeListener {
1.34 + private class SourceChildren implements NodeList<Object>, ChangeListener, PropertyChangeListener {
1.35
1.36 private final Project p;
1.37 private final Sources src;
1.38 @@ -86,10 +91,12 @@
1.39
1.40 public void addNotify() {
1.41 src.addChangeListener(this);
1.42 + Cache.addPropertyChangeListener(this);
1.43 }
1.44
1.45 public void removeNotify() {
1.46 src.removeChangeListener(this);
1.47 + Cache.removePropertyChangeListener(this);
1.48 }
1.49
1.50 public Node node(Object key) {
1.51 @@ -111,14 +118,36 @@
1.52 cs.fireChange();
1.53 }
1.54
1.55 + public void propertyChange(PropertyChangeEvent e) {
1.56 + cs.fireChange();
1.57 + }
1.58 +
1.59 public List<Object> keys() {
1.60 List<Object> keys = new ArrayList<Object>();
1.61 for (SourceGroup g : src.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA)) {
1.62 keys.add(g);
1.63 }
1.64 - FileObject f = p.getProjectDirectory().getFileObject("build.xml");
1.65 - if (f != null) {
1.66 - keys.add(f);
1.67 + String actionPrefix = FileUtil.toFile(p.getProjectDirectory()) + Cache.ACTION;
1.68 + boolean foundBuildScript = false;
1.69 + for (Map.Entry<String,String> entry : Cache.pairs()) {
1.70 + if (!entry.getKey().startsWith(actionPrefix)) {
1.71 + continue;
1.72 + }
1.73 + String binding = entry.getValue();
1.74 + String[] protocolScriptAndTargets = binding.split(":", 3);
1.75 + if (protocolScriptAndTargets[0].equals("ant")) {
1.76 + FileObject script = p.getProjectDirectory().getFileObject(protocolScriptAndTargets[1]); // XXX accept also absolute paths
1.77 + if (script != null) {
1.78 + keys.add(script);
1.79 + foundBuildScript = true;
1.80 + }
1.81 + }
1.82 + }
1.83 + if (!foundBuildScript) {
1.84 + FileObject f = p.getProjectDirectory().getFileObject("build.xml");
1.85 + if (f != null) {
1.86 + keys.add(f);
1.87 + }
1.88 }
1.89 keys.add("libraries");
1.90 return keys;