Author: rob.stryker(a)jboss.com
Date: 2011-01-14 19:32:34 -0500 (Fri, 14 Jan 2011)
New Revision: 28263
Added:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/jobs/LoadHudsonBuildsJob.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/AbstractHudsonListener.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HeirarchyModel.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/IHudsonListener.java
Modified:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/Activator.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonJob.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonModel.java
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonServer.java
Log:
nicks hudson tools
Modified:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/Activator.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/Activator.java 2011-01-15
00:30:33 UTC (rev 28262)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/Activator.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -1,6 +1,8 @@
package org.jboss.tools.hudson.manager.core;
import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.jboss.tools.hudson.manager.core.model.HeirarchyModel;
+import org.jboss.tools.hudson.manager.core.model.HudsonModel;
import org.osgi.framework.BundleContext;
/**
@@ -27,6 +29,7 @@
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
+ HudsonModel.getInstance().addListener(HeirarchyModel.getModel());
}
/*
@@ -34,6 +37,7 @@
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
+ HudsonModel.getInstance().removeListener(HeirarchyModel.getModel());
plugin = null;
super.stop(context);
}
Added:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/jobs/LoadHudsonBuildsJob.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/jobs/LoadHudsonBuildsJob.java
(rev 0)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/jobs/LoadHudsonBuildsJob.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -0,0 +1,30 @@
+package org.jboss.tools.hudson.manager.core.jobs;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.jboss.tools.hudson.manager.core.model.HudsonJob;
+import org.jboss.tools.hudson.manager.core.model.HudsonServer;
+
+public class LoadHudsonBuildsJob extends Job {
+ private Runnable postJob = null;
+ private HudsonJob job;
+ public LoadHudsonBuildsJob(HudsonJob job) {
+ super("Load Hudson Builds");
+ this.job = job;
+ }
+
+ public LoadHudsonBuildsJob(HudsonJob job, Runnable r) {
+ this(job);
+ postJob = r;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ job.getDetails().getBuilds();
+ if( postJob != null )
+ postJob.run();
+ return Status.OK_STATUS;
+ }
+}
Added:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/AbstractHudsonListener.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/AbstractHudsonListener.java
(rev 0)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/AbstractHudsonListener.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -0,0 +1,8 @@
+package org.jboss.tools.hudson.manager.core.model;
+
+public class AbstractHudsonListener implements IHudsonListener {
+
+ public void jobFetched(HudsonJob job) {
+ }
+
+}
Added:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HeirarchyModel.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HeirarchyModel.java
(rev 0)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HeirarchyModel.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -0,0 +1,81 @@
+package org.jboss.tools.hudson.manager.core.model;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.jboss.tools.hudson.manager.core.model.HudsonJob.JobBuild;
+
+public class HeirarchyModel extends AbstractHudsonListener {
+ private static HeirarchyModel model;
+ public static HeirarchyModel getModel() {
+ if( model == null ) {
+ model = new HeirarchyModel();
+ }
+ return model;
+ }
+
+ private HashMap<String, JobHeirarchyNode> map = new HashMap<String,
JobHeirarchyNode>();
+ public HeirarchyModel() {
+
+ }
+
+ public void setHeirarchyData(HudsonJob job, String[] upstream, String[] downstream) {
+ map.put(job.getTrimUrl(), new JobHeirarchyNode(job, upstream, downstream));
+ }
+
+ public void setHeirarchyData(HudsonJob job, JobHeirarchyNode node) {
+ map.put(job.getTrimUrl(), node);
+ }
+
+ public JobHeirarchyNode getHeirarchyNode(String url, boolean force) {
+ JobHeirarchyNode node = map.get(url);
+ if( url == null && force ) {
+ // TODO
+ }
+ return node;
+ }
+
+ public static JobHeirarchyNode createHeirarchyData(Document doc, HudsonJob j) {
+ ArrayList<String> down = new ArrayList<String>();
+ for (Element job : (List<Element>)
doc.getRootElement().elements("downstreamProject")) {
+ down.add(job.elementTextTrim("name"));
+ }
+
+ ArrayList<String> up = new ArrayList<String>();
+ for (Element job : (List<Element>)
doc.getRootElement().elements("upstreamProject")) {
+ up.add(job.elementTextTrim("name"));
+ }
+ return new JobHeirarchyNode(j,
+ (String[]) up.toArray(new String[up.size()]),
+ (String[]) down.toArray(new String[down.size()]));
+ }
+
+ public void jobFetched(HudsonJob job2) {
+ System.out.println("jobFetched here");
+ Document d = job2.getDetails().getDocument();
+ JobHeirarchyNode node = createHeirarchyData(d, job2);
+ setHeirarchyData(job2, node);
+ }
+
+ public static class JobHeirarchyNode {
+ private HudsonJob job;
+ private String[] upstream;
+ private String[] downstream;
+ public JobHeirarchyNode(HudsonJob job, String[] upstream, String[] downstream) {
+ this.upstream = upstream;
+ this.downstream = downstream;
+ }
+ public HudsonJob getJob() {
+ return job;
+ }
+ public String[] getUpstream() {
+ return upstream;
+ }
+ public String[] getDownstream() {
+ return downstream;
+ }
+ }
+}
Modified:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonJob.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonJob.java 2011-01-15
00:30:33 UTC (rev 28262)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonJob.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -12,6 +12,7 @@
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
public class HudsonJob {
@@ -24,6 +25,9 @@
this.furl = url;
this.fcolor = color;
}
+ public static String getTrimJobUrl(HudsonServer server, String name) {
+ return server.getTrimUrl() + "job" + Path.SEPARATOR + name + Path.SEPARATOR +
HudsonModel.API_XML_DEPT_1;
+ }
public HudsonServer getServer() {
return fserver;
}
@@ -40,25 +44,26 @@
public boolean detailsLoaded() {
return fdetails != null;
}
+ public void clearDetails() {
+ fdetails = null;
+ }
public JobExtendedDetails getDetails() {
if( fdetails == null ) {
fdetails = loadDetails();
+ HudsonModel.getInstance().fireJobFetched(this);
}
- if( fdetails == null ) {
- System.out.println("WAIT");
- }
return fdetails;
}
+ public String getTrimUrl() {
+ return getTrimJobUrl(getServer(), getName());
+ }
+
private JobExtendedDetails loadDetails() {
try {
- String url = fserver.getUrl() + "job" + Path.SEPARATOR + fname +
Path.SEPARATOR + HudsonModel.API_XML_DEPT_1;
- URL url2 = new URL(url);
- Document dom;
- dom = new SAXReader().read(url2);
- String xml = dom.asXML();
- return new JobExtendedDetails(this, xml);
+ HudsonModel.getInstance().getDocumentRepository().getDocumentClean(getTrimUrl());
+ return new JobExtendedDetails(this);
} catch( Exception e) {
e.printStackTrace();
}
@@ -67,11 +72,9 @@
public static class JobExtendedDetails {
private HudsonJob fjob;
- private String fxml;
private JobBuild[] builds = null;
- public JobExtendedDetails(HudsonJob job, String xml) {
+ public JobExtendedDetails(HudsonJob job) {
this.fjob = job;
- this.fxml = xml;
loadBuilds();
}
@@ -96,23 +99,19 @@
builds = (JobBuild[]) list.toArray(new JobBuild[list.size()]);
}
- private Document getDocument() {
- Document document = null;
- try {
- document = DocumentHelper.parseText( fxml );
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- return document;
+ public Document getDocument() {
+ return
HudsonModel.getInstance().getDocumentRepository().getDocument(fjob.getTrimUrl());
}
}
public static class JobBuild {
private Element job;
- private BuildCause cause = null;
+ private BuildCause[] causes = null;
+ private SVNChangeSet changeSet = null;
public JobBuild(Element job) {
this.job = job;
- getBuildCause();
+ getBuildCauses();
+ getSVNChangeSet();
}
public Element getElement() {
return job;
@@ -137,14 +136,180 @@
public String getBuiltOn() {
return job.elementText("builtOn");
}
- public BuildCause getBuildCause() {
- if( cause == null ) {
- cause = new BuildCause(this);
+ public BuildCause getFirstBuildCause() {
+ return getBuildCauses().length > 0 ? getBuildCauses()[0] : null;
+ }
+ public BuildCause[] getBuildCauses() {
+ if( causes == null ) {
+ List list = getElement().selectNodes(BuildCause.ACTION_CAUSE);
+ if( list.size() > 0 ) {
+ ArrayList<BuildCause> causes = new ArrayList<BuildCause>();
+ for( int i = 0; i < list.size(); i++ ) {
+ causes.add(new BuildCause(this, (Node)list.get(i)));
+ }
+ this.causes = causes.toArray(new BuildCause[causes.size()]);
+ }
}
- return cause;
+ return causes;
}
+ public SVNChangeSet getSVNChangeSet() {
+ if( changeSet == null ) {
+ changeSet = new SVNChangeSet(this);
+ }
+ return changeSet;
+ }
}
+ public static class SVNChangeSet {
+ private JobBuild build;
+ private String kind;
+ private ChangeSetItem[] items;
+ private ChangeSetRevision[] revisions;
+ public SVNChangeSet(JobBuild build) {
+ String xml = build.getElement().asXML();
+ this.build = build;
+ List a2 = this.build.getElement().selectNodes("changeSet");
+ if( a2.size() == 1 ) {
+ Element changeSetElement = (Element)a2.get(0);
+ kind = changeSetElement.elementText("kind");
+ loadItems(changeSetElement);
+ loadRevisions(changeSetElement);
+
+ }
+ }
+
+ private void loadItems(Element changeSetElement) {
+ List list = changeSetElement.selectNodes("item");
+ ArrayList<ChangeSetItem> itemList = new ArrayList<ChangeSetItem>();
+ for( int i = 0; i < list.size(); i++ ) {
+ itemList.add(new ChangeSetItem(this, (Node)list.get(i)));
+ }
+ items = itemList.toArray(new ChangeSetItem[itemList.size()]);
+ }
+
+ private void loadRevisions(Element changeSetElement) {
+ List rList = changeSetElement.selectNodes("revision");
+ ArrayList<ChangeSetRevision> rList2 = new ArrayList<ChangeSetRevision>();
+ for( int i = 0; i < rList.size(); i++ ) {
+ rList2.add(new ChangeSetRevision(this, (Node)rList.get(i)));
+ }
+ // sort
+ Comparator<ChangeSetRevision> c = new Comparator<ChangeSetRevision>() {
+ public int compare(ChangeSetRevision o1,
+ ChangeSetRevision o2) {
+ int a = o1.getRelevantFileChanges().length;
+ int b = o2.getRelevantFileChanges().length;
+ return b-a;
+ }
+
+ };
+ Collections.sort(rList2, c);
+ revisions = rList2.toArray(new ChangeSetRevision[rList2.size()]);
+ }
+ public ChangeSetItem[] getChangeSetItems() {
+ return items;
+ }
+ public ChangeSetRevision[] getChangeSetRevisions() {
+ return revisions;
+ }
+ }
+
+ public static class ChangeSetItem {
+ private SVNChangeSet set;
+ private String date, message, revision, user;
+ private String[] changedPaths;
+ public ChangeSetItem(SVNChangeSet set, Node n) {
+ this.set = set;
+ date = ((Element)n).elementText("date");
+ message = ((Element)n).elementText("msg");
+ revision = ((Element)n).elementText("revision");
+ user = ((Element)n).elementText("user");
+ List fileList = ((Element)n).selectNodes("path");
+ ArrayList<String> fList = new ArrayList<String>();
+ for( int i = 0; i < fileList.size(); i++ ) {
+ fList.add(((Element)fileList.get(i)).elementTextTrim("file"));
+ }
+ changedPaths = (String[]) fList.toArray(new String[fList.size()]);
+ }
+ public String[] getChangedPaths() {
+ return changedPaths;
+ }
+ public SVNChangeSet getSet() {
+ return set;
+ }
+ public String getDate() {
+ return date;
+ }
+ public String getMessage() {
+ return message;
+ }
+ public String getRevision() {
+ return revision;
+ }
+ public String getUser() {
+ return user;
+ }
+ }
+
+ public static class ChangeSetRevision {
+ private SVNChangeSet set;
+ private String rNum, module;
+ private ChangeSetItemPathPair[] pairs;
+ public ChangeSetRevision(SVNChangeSet set, Node n) {
+ this.set = set;
+ this.rNum = ((Element)n).elementTextTrim("revision");
+ this.module = ((Element)n).elementTextTrim("module");
+ }
+ public SVNChangeSet getSet() {
+ return set;
+ }
+ public String getrNum() {
+ return rNum;
+ }
+ public String getModule() {
+ return module;
+ }
+ public ChangeSetItemPathPair[] getRelevantFileChanges() {
+ if( pairs == null )
+ loadPairs();
+ return pairs;
+ }
+ private void loadPairs() {
+ IPath modPath = new Path(module);
+ String lastSegment = modPath.lastSegment();
+ modPath = modPath.removeLastSegments(1);
+ String lastSegment2 = modPath.lastSegment();
+ String suffix = Path.SEPARATOR + lastSegment2 + Path.SEPARATOR + lastSegment;
+ ChangeSetItem[] items = set.getChangeSetItems();
+ ArrayList<ChangeSetItemPathPair> pairs = new
ArrayList<ChangeSetItemPathPair>();
+ for( int i = 0; i < items.length; i++ ) {
+ String[] changedPaths = items[i].getChangedPaths();
+ for( int j = 0; j < changedPaths.length; j++ ) {
+ if( changedPaths[j].startsWith(suffix)) {
+ pairs.add(new ChangeSetItemPathPair(items[i], changedPaths[j]));
+ }
+ }
+ }
+
+ this.pairs = pairs.toArray(new ChangeSetItemPathPair[pairs.size()]);
+ }
+ }
+
+ public static class ChangeSetItemPathPair {
+ private ChangeSetItem item;
+ private String path;
+ public ChangeSetItemPathPair(ChangeSetItem item, String path) {
+ this.item = item;
+ this.path = path;
+ }
+ public ChangeSetItem getItem() {
+ return item;
+ }
+ public String getPath() {
+ return path;
+ }
+ }
+
public static class BuildCause {
public static final int KICKED_BY_USER_TYPE = 0;
public static final int SVN_CHANGE_TYPE = 1;
@@ -160,8 +325,9 @@
private JobBuild build;
private int type = -1;
private Node cause;
- public BuildCause(JobBuild build) {
+ public BuildCause(JobBuild build, Node cause) {
this.build = build;
+ this.cause = cause;
setType();
// System.out.println(build.getId());
// System.out.println(" " + getType());
@@ -173,23 +339,15 @@
}
protected void setType() {
- String xml = build.getElement().asXML();
- List list = build.getElement().selectNodes(ACTION_CAUSE);
- if( list.size() > 0 ) {
- if( list.size() == 2)
- cause = (Node)list.get(1);
- else
- cause = (Node)list.get(0);
- List child = cause.selectNodes(USERNAME);
- if( child.size() > 0 ) {
- type = KICKED_BY_USER_TYPE;
- } else {
- child = cause.selectNodes(UPSTREAM_BUILD);
- if( list.size() > 0 )
- type = UPSTREAM_PROJECT_TYPE;
- else
- type = SVN_CHANGE_TYPE;
- }
+ List child = cause.selectNodes(USERNAME);
+ if( child.size() > 0 ) {
+ type = KICKED_BY_USER_TYPE;
+ } else {
+ child = cause.selectNodes(UPSTREAM_BUILD);
+ if( child.size() > 0 )
+ type = UPSTREAM_PROJECT_TYPE;
+ else
+ type = SVN_CHANGE_TYPE;
}
}
public int getType() {
@@ -217,16 +375,4 @@
return getCauseNode(USERNAME);
}
}
-
-// public static class OtherProject {
-// public static final boolean UP_STREAM = true;
-// public static final boolean DOWN_STREAM = false;
-// private boolean fdirection;
-// private String fname, furl;
-// public OtherProject(boolean direction, String name, String url) {
-// this.fdirection = direction;
-// this.fname = name;
-// this.furl = url;
-// }
-// }
}
Modified:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonModel.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonModel.java 2011-01-15
00:30:33 UTC (rev 28262)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonModel.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -1,8 +1,15 @@
package org.jboss.tools.hudson.manager.core.model;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.io.SAXReader;
+
public class HudsonModel {
public static final String API_XML = "api/xml";
public static final String API_XML_DEPT_1 = API_XML + "?depth=1";
@@ -16,10 +23,19 @@
}
private ArrayList<HudsonServer> hudsons = null;
+ private ArrayList<IHudsonListener> listeners = new
ArrayList<IHudsonListener>();
public HudsonModel() {
}
+ public void addListener(IHudsonListener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeListener(IHudsonListener listener) {
+ listeners.remove(listener);
+ }
+
public boolean isInitialized() {
return hudsons != null;
}
@@ -44,10 +60,57 @@
};
}
- public static void delay(int time) {
- try {
- Thread.sleep(time);
- } catch(InterruptedException ie) {
+ private DocumentRepository docRepo;
+ public DocumentRepository getDocumentRepository() {
+ if( docRepo == null ) {
+ docRepo = new DocumentRepository();
}
+ return docRepo;
}
+
+ public static class DocumentRepository {
+ public HashMap<String, Document> repo = new HashMap<String, Document>();
+ public DocumentRepository() {
+ }
+ public void add(String url, Document document) {
+ repo.put(url, document);
+ }
+ public Document getDocument(String url) {
+ return repo.get(url);
+ }
+ public Document getDocumentForce(String url) {
+ Document d = repo.get(url);
+ if( d == null ) {
+ loadURLDocument(url);
+ }
+ return d;
+ }
+
+ public Document getDocumentClean(String url) {
+ loadURLDocument(url);
+ return repo.get(url);
+ }
+
+ public void loadURLDocument(String url) {
+ try {
+ URL url2 = new URL(url);
+ Document dom;
+ dom = new SAXReader().read(url2);
+ String xml = dom.asXML();
+ Document document = DocumentHelper.parseText( xml );
+ repo.put(url, document);
+ } catch(Exception e) {
+ // TODO log
+ }
+ }
+ }
+
+
+ void fireJobFetched(HudsonJob job) {
+ for( Iterator<IHudsonListener> i = listeners.iterator(); i.hasNext(); ) {
+ i.next().jobFetched(job);
+ }
+ }
+
+
}
Modified:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonServer.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonServer.java 2011-01-15
00:30:33 UTC (rev 28262)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/HudsonServer.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -8,6 +8,7 @@
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
+import org.eclipse.core.runtime.Path;
public class HudsonServer {
private String name;
@@ -26,6 +27,11 @@
public String getUrl() {
return url;
}
+ // get the url without a view in it
+ public String getTrimUrl() {
+ return url.replaceAll("/view/[^/]+/","/");
+ }
+
public void setUrl(String url) {
this.url = url;
}
@@ -43,6 +49,15 @@
return (HudsonJob[]) jobs.toArray(new HudsonJob[jobs.size()]);
}
+ public synchronized HudsonJob findJob(String name) {
+ HudsonJob[] serverJobs = getHudsonJobs();
+ for( int i = 0; i < serverJobs.length; i++ ) {
+ if( serverJobs[i].getName().equals(name))
+ return serverJobs[i];
+ }
+ return null;
+ }
+
/**
* Synchronous exec!!!
* @return
Added:
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/IHudsonListener.java
===================================================================
---
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/IHudsonListener.java
(rev 0)
+++
workspace/rstryker/hudson/plugins/org.jboss.tools.hudson.manager.core/src/org/jboss/tools/hudson/manager/core/model/IHudsonListener.java 2011-01-15
00:32:34 UTC (rev 28263)
@@ -0,0 +1,5 @@
+package org.jboss.tools.hudson.manager.core.model;
+
+public interface IHudsonListener {
+ public void jobFetched(HudsonJob job);
+}