diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java index 4b8cce3b..51788fe8 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java @@ -8,6 +8,8 @@ import java.io.IOException; import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -260,7 +262,7 @@ public View getView(FolderJob folder, String name) throws IOException { * @throws IOException in case of an error. */ public JobWithDetails getJob(String jobName) throws IOException { - return getJob(null, jobName); + return getJob(null, parseFullName(jobName)); } /** @@ -288,7 +290,7 @@ public JobWithDetails getJob(FolderJob folder, String jobName) throws IOExceptio } public MavenJobWithDetails getMavenJob(String jobName) throws IOException { - return getMavenJob(null, jobName); + return getMavenJob(null, parseFullName(jobName)); } public MavenJobWithDetails getMavenJob(FolderJob folder, String jobName) throws IOException { @@ -562,7 +564,6 @@ public PluginManager getPluginManager() throws IOException { /** * Update the xml description of an existing view * - * @throws IOException in case of an error. * @param viewName name of the view. * @param viewXml the view configuration. * @throws IOException in case of an error. @@ -903,7 +904,18 @@ private String toBaseUrl(FolderJob folder) { * @return converted base url. */ private String toJobBaseUrl(FolderJob folder, String jobName) { - return toBaseUrl(folder) + "job/" + EncodingUtils.encode(jobName); + String jobBaseUrl = toBaseUrl(folder) + "job/"; + + String[] jobNameParts = jobName.split("/"); + for (int i = 0; i < jobNameParts.length; i++) { + jobBaseUrl += EncodingUtils.encode(jobNameParts[i]); + + if (i != jobNameParts.length - 1) { + jobBaseUrl += "/"; + } + } + + return jobBaseUrl; } /** @@ -917,4 +929,29 @@ private String toViewBaseUrl(FolderJob folder, String name) { return toBaseUrl(folder) + "view/" + EncodingUtils.encode(name); } + /** + * Parses the provided job name for folders to get the full path for the job. + * @param jobName the fullName of the job. + * @return the path of the job including folders if present. + */ + private String parseFullName(String jobName) + { + if (!jobName.contains("/")) { + return jobName; + } + + List foldersAndJob = Arrays.asList(jobName.split("/")); + + String foldersAndJobName = ""; + + for (int i = 0; i < foldersAndJob.size(); i++) { + foldersAndJobName += foldersAndJob.get(i); + + if (i != foldersAndJob.size() -1) { + foldersAndJobName += "/job/"; + } + } + + return foldersAndJobName; + } } diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/FolderJob.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/FolderJob.java index 1ceffa6f..844c801d 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/FolderJob.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/FolderJob.java @@ -20,6 +20,10 @@ public FolderJob() { public FolderJob(String name, String url) { super(name, url); } + + public FolderJob(String name, String url, String fullName) { + super(name, url, fullName); + } public String getDisplayName() { return displayName; diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Job.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Job.java index 8f411b7f..7ef6a6cf 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Job.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Job.java @@ -23,14 +23,23 @@ public class Job extends BaseModel { private String name; private String url; + private String fullName; public Job() { } - + public Job(String name, String url) { this(); this.name = name; this.url = url; + this.fullName = null; + } + + public Job(String name, String url, String fullName) { + this(); + this.name = name; + this.url = url; + this.fullName = fullName; } public String getName() { @@ -40,6 +49,10 @@ public String getName() { public String getUrl() { return url; } + + public String getFullName() { + return fullName; + } public JobWithDetails details() throws IOException { return client.get(url, JobWithDetails.class); @@ -126,6 +139,8 @@ public boolean equals(Object o) { return false; if (url != null ? !url.equals(job.url) : job.url != null) return false; + if (fullName != null ? !fullName.equals(job.fullName) : job.fullName != null) + return false; return true; } @@ -133,7 +148,7 @@ public boolean equals(Object o) { @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; - result = 31 * result + (url != null ? url.hashCode() : 0); + result = 31 * result + (url != null ? url.hashCode() : 0) + (fullName != null ? fullName.hashCode() : 0); return result; } diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobWithDetails.java index 50fad5c8..d203aad5 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobWithDetails.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobWithDetails.java @@ -59,7 +59,7 @@ public class JobWithDetails extends Job { private List downstreamProjects; private List upstreamProjects; - + public String getDescription() { return description; } diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJob.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJob.java index 1815d22f..1204c844 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJob.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJob.java @@ -10,6 +10,10 @@ public MavenJob() { public MavenJob(String name, String url) { super(name, url); } + + public MavenJob(String name, String url, String fullName) { + super(name, url, fullName); + } public MavenJobWithDetails mavenDetails() throws IOException { return client.get(getUrl(), MavenJobWithDetails.class);