# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: /home/mkleint/src/hudson/tools/ide/netbeans
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: nbproject/genfiles.properties
--- nbproject/genfiles.properties Base (BASE)
+++ nbproject/genfiles.properties Locally Modified (Based On LOCAL)
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=c4c79a85
+build.xml.data.CRC32=59dc13a6
build.xml.script.CRC32=9dd38e61
build.xml.stylesheet.CRC32=79c3b980
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=c4c79a85
+nbproject/build-impl.xml.data.CRC32=59dc13a6
nbproject/build-impl.xml.script.CRC32=2bdea740
nbproject/build-impl.xml.stylesheet.CRC32=deb65f65
Index: nbproject/project.xml
--- nbproject/project.xml Base (BASE)
+++ nbproject/project.xml Locally Modified (Based On LOCAL)
@@ -43,6 +43,15 @@
+ org.netbeans.modules.projectapi
+
+
+
+ 1
+ 1.19
+
+
+
org.netbeans.modules.projectuiapi
@@ -118,6 +127,7 @@
org.netbeans.modules.hudson.api
+ org.netbeans.modules.hudson.spi
Index: src/org/netbeans/modules/hudson/api/HudsonInstance.java
--- src/org/netbeans/modules/hudson/api/HudsonInstance.java Base (BASE)
+++ src/org/netbeans/modules/hudson/api/HudsonInstance.java Locally Modified (Based On LOCAL)
@@ -83,4 +83,10 @@
* @param l HudsonChangeListener
*/
public void removeHudsonChangeListener(HudsonChangeListener l);
+
+ /**
+ *
+ * @return
+ */
+ boolean isPersisted();
\ No newline at end of file
}
Index: src/org/netbeans/modules/hudson/impl/HudsonInstanceImpl.java
--- src/org/netbeans/modules/hudson/impl/HudsonInstanceImpl.java Base (BASE)
+++ src/org/netbeans/modules/hudson/impl/HudsonInstanceImpl.java Locally Modified (Based On LOCAL)
@@ -64,7 +64,7 @@
private Collection jobs = new ArrayList();
private Collection views = new ArrayList();
- private Collection listeners = new ArrayList();
+ private final Collection listeners = new ArrayList();
private HudsonInstanceImpl(String name, String url) {
this(new HudsonInstanceProperties(name, url));
@@ -138,6 +138,10 @@
});
}
+ public boolean isPersisted() {
+ return !(properties instanceof ProjectHIP);
+ }
+
\ No newline at end of file
/**
*
* @param name
Index: src/org/netbeans/modules/hudson/impl/HudsonInstanceProperties.java
--- src/org/netbeans/modules/hudson/impl/HudsonInstanceProperties.java Base (BASE)
+++ src/org/netbeans/modules/hudson/impl/HudsonInstanceProperties.java Locally Modified (Based On LOCAL)
@@ -42,7 +42,7 @@
private Sheet.Set set;
- private List listeners = new ArrayList();
\ No newline at end of file
+ private final List listeners = new ArrayList();
\ No newline at end of file
public HudsonInstanceProperties(String name, String url) {
this(name, url, "0");
Index: src/org/netbeans/modules/hudson/impl/HudsonManagerImpl.java
--- src/org/netbeans/modules/hudson/impl/HudsonManagerImpl.java Base (BASE)
+++ src/org/netbeans/modules/hudson/impl/HudsonManagerImpl.java Locally Modified (Based On LOCAL)
@@ -29,13 +29,19 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import org.netbeans.api.project.Project;
+import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.modules.hudson.api.HudsonChangeListener;
import org.netbeans.modules.hudson.api.HudsonInstance;
import org.netbeans.modules.hudson.api.HudsonManager;
+import org.netbeans.modules.hudson.spi.ProjectHudsonProvider;
import org.openide.ErrorManager;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.Repository;
+import org.openide.util.Exceptions;
import org.openide.util.Lookup;
import org.openide.util.NbPreferences;
import org.openide.util.RequestProcessor;
@@ -60,7 +66,10 @@
private static HudsonManagerImpl defaultInstance;
private Map instances;
- private List listeners = new ArrayList();
+ private final List listeners = new ArrayList();
+ private PropertyChangeListener projectsListener;
+ private Map projectInstances = new HashMap();
+ private Map> projectLookupInstances = new HashMap>();
public HudsonManagerImpl() {
synchronized(LOCK_INIT) {
@@ -70,8 +79,20 @@
defaultInstance = this;
}
+ projectsListener = new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (OpenProjects.PROPERTY_OPEN_PROJECTS.equals(evt.getPropertyName())) {
+ RequestProcessor.getDefault().post(new Runnable() {
+ public void run() {
+ checkOpenProjects();
}
+ });
+ }
+ }
+ };
+ }
+
/**
* Singleton accessor
*
@@ -182,18 +203,21 @@
public void terminate() {
// Clear default instance
defaultInstance = null;
-
+ OpenProjects.getDefault().removePropertyChangeListener(projectsListener);
+ projectInstances.clear();
// Terminate instances
for (HudsonInstance instance : getInstances())
((HudsonInstanceImpl) instance).terminate();
}
private void storeInstanceFile(HudsonInstanceImpl instance) {
+ if (!instance.isPersisted()) {
+ return;
+ }
Repository repository = Lookup.getDefault().lookup(Repository.class);
FileObject directory = repository.getDefaultFileSystem().findResource(DIR_INSTANCES);
String fileName = instance.getName().replace(" ", "_").toLowerCase() + ".xml";
-
try {
FileObject file = directory.getFileObject(fileName);
@@ -251,11 +275,67 @@
} finally {
// Deactivate startup flag
NbPreferences.forModule(HudsonManager.class).putBoolean(STARTUP_PROP, false);
-
+ checkOpenProjects();
+ OpenProjects.getDefault().addPropertyChangeListener(projectsListener);
// Fire changes
fireChangeListeners();
}
}
});
}
+
+
+ private void checkOpenProjects() {
+ try {
+ Future fut = OpenProjects.getDefault().openProjects();
+ Project[] prjs = fut.get();
+ for (Project project : prjs) {
+ boolean exists = false;
+ if (projectInstances.containsKey(project)) {
+ exists = true;
}
+ ProjectHudsonProvider prov = project.getLookup().lookup(ProjectHudsonProvider.class);
+ if (prov != null && !exists) {
+ String url = prov.getServerUrl();
+ HudsonInstance in = getInstance(url);
+ if (in != null && !in.isPersisted()) {
+ ProjectHIP props = (ProjectHIP)((HudsonInstanceImpl)in).getProperties();
+ props.addProvider(project);
+ projectInstances.put(project, (HudsonInstanceImpl)in);
+ } else if (in == null) {
+ ProjectHIP props = new ProjectHIP();
+ props.addProvider(project);
+ addInstance(HudsonInstanceImpl.createHudsonInstance(props));
+ HudsonInstanceImpl impl = (HudsonInstanceImpl) getInstance(props.getProperty(HudsonInstanceProperties.HUDSON_INSTANCE_URL));
+ projectInstances.put(project, impl);
+ }
+ } else if (prov == null && exists) {
+ HudsonInstanceImpl remove = projectInstances.remove(project);
+ if (remove != null) {
+ ProjectHIP props = (ProjectHIP)remove.getProperties();
+ props.removeProvider(project);
+ if (props.getProviders().isEmpty()) {
+ removeInstance(remove);
+ }
+ }
+ }
+ }
+ ArrayList newprjs = new ArrayList(projectInstances.keySet());
+ newprjs.removeAll(Arrays.asList(prjs));
+ for (Project project : newprjs) {
+ HudsonInstanceImpl remove = projectInstances.remove(project);
+ if (remove != null) {
+ ProjectHIP props = (ProjectHIP)remove.getProperties();
+ props.removeProvider(project);
+ if (props.getProviders().isEmpty()) {
+ removeInstance(remove);
+ }
+ }
+ }
+ } catch (InterruptedException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (ExecutionException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+}
\ No newline at end of file
Index: src/org/netbeans/modules/hudson/impl/ProjectHIP.java
--- src/org/netbeans/modules/hudson/impl/ProjectHIP.java Locally New
+++ src/org/netbeans/modules/hudson/impl/ProjectHIP.java Locally New
@@ -0,0 +1,77 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.netbeans.modules.hudson.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashSet;
+import java.util.InvalidPropertiesFormatException;
+import java.util.Set;
+import org.netbeans.api.project.Project;
+import org.netbeans.modules.hudson.spi.ProjectHudsonProvider;
+
+/**
+ *
+ * @author mkleint
+ */
+class ProjectHIP extends HudsonInstanceProperties {
+
+ private final Set providers = new HashSet();
+ public ProjectHIP() {
+ super("", "");
+ }
+
+ public void addProvider(Project prov) {
+ synchronized (providers) {
+ providers.add(prov);
+ }
+ ProjectHudsonProvider p = prov.getLookup().lookup(ProjectHudsonProvider.class);
+ if (p != null) {
+ setProperty(HUDSON_INSTANCE_URL, p.getServerUrl());
+ setProperty(HUDSON_INSTANCE_NAME, p.getName());
+ }
+ }
+
+ public void removeProvider(Project prov) {
+ synchronized (providers) {
+ providers.remove(prov);
+ }
+ }
+
+ public Set getProviders() {
+ synchronized (providers) {
+ return new HashSet(providers);
+ }
+ }
+
+
+ @Override
+ public synchronized void load(InputStream inStream) throws IOException {
+ }
+
+ @Override
+ public synchronized void loadFromXML(InputStream in) throws IOException, InvalidPropertiesFormatException {
+ }
+
+ @Override
+ public synchronized void save(OutputStream out, String comments) {
+ }
+
+ @Override
+ public synchronized void store(OutputStream out, String comments) throws IOException {
+ }
+
+ @Override
+ public synchronized void storeToXML(OutputStream os, String comment) throws IOException {
+ }
+
+ @Override
+ public synchronized void storeToXML(OutputStream os, String comment, String encoding) throws IOException {
+ }
+
+
+}
Index: src/org/netbeans/modules/hudson/spi/ProjectHudsonProvider.java
--- src/org/netbeans/modules/hudson/spi/ProjectHudsonProvider.java Locally New
+++ src/org/netbeans/modules/hudson/spi/ProjectHudsonProvider.java Locally New
@@ -0,0 +1,23 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.netbeans.modules.hudson.spi;
+
+import javax.swing.event.ChangeListener;
+
+/**
+ *
+ * @author mkleint
+ */
+public interface ProjectHudsonProvider {
+
+ String getServerUrl();
+ String getName();
+ String getJobName();
+
+ void addChangeListener(ChangeListener listener);
+ void removeChangeListener(ChangeListener listener);
+
+}
Index: src/org/netbeans/modules/hudson/ui/actions/RemoveInstanceAction.java
--- src/org/netbeans/modules/hudson/ui/actions/RemoveInstanceAction.java Base (BASE)
+++ src/org/netbeans/modules/hudson/ui/actions/RemoveInstanceAction.java Locally Modified (Based On LOCAL)
@@ -56,7 +56,7 @@
for (Node node : nodes) {
HudsonInstanceImpl instance = node.getLookup().lookup(HudsonInstanceImpl.class);
- if (null != instance)
+ if (null != instance && instance.isPersisted())
return true;
}
@@ -71,6 +71,7 @@
return HelpCtx.DEFAULT_HELP;
}
+ @Override
\ No newline at end of file
public boolean asynchronous() {
return false;
}
Index: src/org/netbeans/modules/hudson/ui/nodes/HudsonInstanceNode.java
--- src/org/netbeans/modules/hudson/ui/nodes/HudsonInstanceNode.java Base (BASE)
+++ src/org/netbeans/modules/hudson/ui/nodes/HudsonInstanceNode.java Locally Modified (Based On LOCAL)
@@ -95,12 +95,14 @@
@Override
public String getHtmlDisplayName() {
+ boolean pers = instance.isPersisted();
return (run ? "" : "") + (warn ? "" : "") +
instance.getName() + (warn ? "" : "") + (run ? "" : "") +
(alive ? (version ? "" : " " +
NbBundle.getMessage(HudsonInstanceNode.class, "MSG_WrongVersion",
HudsonVersion.SUPPORTED_VERSION) + "") : " " +
- NbBundle.getMessage(HudsonInstanceNode.class, "MSG_Disconnected") + "");
\ No newline at end of file
+ NbBundle.getMessage(HudsonInstanceNode.class, "MSG_Disconnected") + "") +
+ (!pers ? "" : "") + "(Project based)" + (!pers ? "" : "");
\ No newline at end of file
}
@Override
Index: src/org/netbeans/modules/hudson/ui/wizard/InstanceWizard.java
--- src/org/netbeans/modules/hudson/ui/wizard/InstanceWizard.java Base (BASE)
+++ src/org/netbeans/modules/hudson/ui/wizard/InstanceWizard.java Locally Modified (Based On LOCAL)
@@ -28,7 +28,8 @@
*
* @author Michal Mocnak
*/
-public class InstanceWizard extends WizardDescriptor implements InstanceWizardConstants {
\ No newline at end of file
+public class InstanceWizard extends WizardDescriptor //implements InstanceWizardConstants
+{
\ No newline at end of file
public InstanceWizard() {
super(new InstanceWizardIterator());