From cd859c72f14e5c3031e677e78844133c941df89d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 24 May 2016 22:51:14 +0200
Subject: [PATCH 001/197] [FIXED JENKINS-35108] Upgrade Maven Plugins o
maven-clean-plugin to 3.0.0 o maven-resources-plugin to 3.0.0 o
maven-jar-plugin to 3.0.0
---
ReleaseNotes.md | 7 +++++++
pom.xml | 9 +++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 10241539..3e46574a 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -4,6 +4,12 @@
### General Changes
+ [Upgraded Maven Plugins][jissue-35108]
+
+ * maven-clean-plugin to 3.0.0
+ * maven-resources-plugin to 3.0.0
+ * maven-jar-plugin to 3.0.0
+
Serveral issues fixed related to using logging framework
[issue-161][issue-161], [issue-113][issue-113] and
[JENKINS-35002][jissue-35002]
@@ -454,3 +460,4 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
+[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
diff --git a/pom.xml b/pom.xml
index e390c86f..eaae1b98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -214,10 +214,15 @@
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ 3.0.0
+
org.apache.maven.plugins
maven-resources-plugin
- 2.7
+ 3.0.0
org.apache.maven.plugins
@@ -253,7 +258,7 @@
org.apache.maven.plugins
maven-jar-plugin
- 2.6
+ 3.0.0
From e7d102d62c24c0ade444a5a4f90729b16e1a9793 Mon Sep 17 00:00:00 2001
From: mcqueen
Date: Wed, 25 May 2016 09:18:10 -0700
Subject: [PATCH 002/197] expose addAuthentication and local context to
subclasses
---
.../com/offbytwo/jenkins/client/JenkinsHttpClient.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 5a3703e5..889d2656 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -520,7 +520,7 @@ private void releaseConnection(HttpRequestBase httpRequestBase) {
httpRequestBase.releaseConnection();
}
- private static HttpClientBuilder addAuthentication(HttpClientBuilder builder, URI uri, String username,
+ protected static HttpClientBuilder addAuthentication(HttpClientBuilder builder, URI uri, String username,
String password) {
if (isNotBlank(username)) {
CredentialsProvider provider = new BasicCredentialsProvider();
@@ -533,4 +533,12 @@ private static HttpClientBuilder addAuthentication(HttpClientBuilder builder, UR
}
return builder;
}
+
+ protected BasicHttpContext getLocalContext() {
+ return localContext;
+ }
+
+ protected void setLocalContext(BasicHttpContext localContext) {
+ this.localContext = localContext;
+ }
}
From 41ebe8ae9d788010f722cb938289e05912bb8125 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 26 May 2016 13:25:53 +0200
Subject: [PATCH 003/197] Fixed URL's / SCM entries after move.
---
README.md | 2 +-
pom.xml | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 06b9a48e..ef07a5ea 100644
--- a/README.md
+++ b/README.md
@@ -79,7 +79,7 @@ covered by the usual integration tests.
## Release Notes
-You can find details about the different releases in the [Release Notes](https://github.com/RisingOak/jenkins-client/blob/master/ReleaseNotes.md).
+You can find details about the different releases in the [Release Notes](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md).
* [Release 0.4.0](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-040).
* [Release 0.3.6](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-036).
diff --git a/pom.xml b/pom.xml
index eaae1b98..d5f138d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
Jenkins API client for Java
- http://github.com/RisingOak/jenkins-client
+ http://github.com/jenkinsci/java-client-api
A Jenkins API client for Java
com.offbytwo.jenkins
@@ -24,20 +24,20 @@
pom
- scm:git:git@github.com:RisingOak/jenkins-client.git
- scm:git:git@github.com:RisingOak/jenkins-client.git
- https://github.com/RisingOak/jenkins-client
+ scm:git:https://github.com/jenkinsci/java-client-api.git
+ scm:git:ssh://git@github.com/jenkinsci/java-client-api.git
+ https://github.com/jenkinsci/java-client-api
HEAD
github
- scm:git:git@github.com:RisingOak/jenkins-client.git
+ scm:git:https://github.com/jenkinsci/java-client-api.git
Travis-CI
- https://travis-ci.org/RisingOak/jenkins-client/
+ https://travis-ci.org/jenkinsci/java-client-api/
From 8315224285517c7f4052c03c1baeac072f7c1736 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 20 Jun 2016 08:34:07 +0200
Subject: [PATCH 004/197] Fixed #165 o Added getDescription() method to
JobWithDetails to be able to get the description of a job.
---
ReleaseNotes.md | 10 +
jenkins-client-it-docker/jobs/test/config.xml | 2 +-
.../NoExecutorStartedGetJobIT.java | 7 +
.../NoExecutorStartedGetJobXmlIT.java | 2 +-
.../jenkins/model/JobWithDetails.java | 172 +++++++++++-------
5 files changed, 129 insertions(+), 64 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 3e46574a..81ccee33 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -32,6 +32,15 @@ public class JenkinsServer {
}
```
+ [Added description for Job][issue-165]
+
+```java
+public class JobWithDetails {
+ public String getDescription();
+ .
+}
+```
+
## Release 0.3.5
@@ -456,6 +465,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-159]: https://github.com/jenkinsci/java-client-api/issues/159
[issue-160]: https://github.com/jenkinsci/java-client-api/issues/160
[issue-161]: https://github.com/jenkinsci/java-client-api/issues/161
+[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client-it-docker/jobs/test/config.xml b/jenkins-client-it-docker/jobs/test/config.xml
index 91a44a42..ecb62163 100644
--- a/jenkins-client-it-docker/jobs/test/config.xml
+++ b/jenkins-client-it-docker/jobs/test/config.xml
@@ -1,7 +1,7 @@
-
+ This is the description with umlauts äöü
false
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 93ad3729..6153b380 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -123,4 +123,11 @@ public void getLastUnsuccessfulBuildShouldBeBUILD_HAS_NEVER_RAN()
{
assertThat( job.getLastUnsuccessfulBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RAN);
}
+
+ @Test
+ public void getDescriptionShouldRetrunTheDescription()
+ {
+ assertThat( job.getDescription() ).isEqualTo("This is the description with umlauts äöü");
+ }
+
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
index 69b2f3f1..58142eee 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
@@ -27,7 +27,7 @@ public void beforeMethod()
"",
"",
" ",
- " ",
+ " This is the description with umlauts äöü",
" false",
" ",
" ",
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 b2573293..e9faa7fa 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
@@ -24,6 +24,8 @@
public class JobWithDetails extends Job {
+ String description;
+
String displayName;
boolean buildable;
@@ -56,6 +58,16 @@ public class JobWithDetails extends Job {
List upstreamProjects;
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public boolean hasDescription()
+ {
+ return description != null && !description.isEmpty();
+ }
+
public String getDisplayName() {
return displayName;
}
@@ -321,107 +333,143 @@ public Job apply(Job job) {
}
@Override
- public int hashCode() {
+ public int hashCode()
+ {
final int prime = 31;
int result = super.hashCode();
- result = prime * result + (buildable ? 1231 : 1237);
- result = prime * result + ((builds == null) ? 0 : builds.hashCode());
- result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
- result = prime * result + ((downstreamProjects == null) ? 0 : downstreamProjects.hashCode());
- result = prime * result + ((firstBuild == null) ? 0 : firstBuild.hashCode());
- result = prime * result + (inQueue ? 1231 : 1237);
- result = prime * result + ((lastBuild == null) ? 0 : lastBuild.hashCode());
- result = prime * result + ((lastCompletedBuild == null) ? 0 : lastCompletedBuild.hashCode());
- result = prime * result + ((lastFailedBuild == null) ? 0 : lastFailedBuild.hashCode());
- result = prime * result + ((lastStableBuild == null) ? 0 : lastStableBuild.hashCode());
- result = prime * result + ((lastSuccessfulBuild == null) ? 0 : lastSuccessfulBuild.hashCode());
- result = prime * result + ((lastUnstableBuild == null) ? 0 : lastUnstableBuild.hashCode());
- result = prime * result + ((lastUnsuccessfulBuild == null) ? 0 : lastUnsuccessfulBuild.hashCode());
+ result = prime * result + ( buildable ? 1231 : 1237 );
+ result = prime * result + ( ( builds == null ) ? 0 : builds.hashCode() );
+ result = prime * result + ( ( description == null ) ? 0 : description.hashCode() );
+ result = prime * result + ( ( displayName == null ) ? 0 : displayName.hashCode() );
+ result = prime * result + ( ( downstreamProjects == null ) ? 0 : downstreamProjects.hashCode() );
+ result = prime * result + ( ( firstBuild == null ) ? 0 : firstBuild.hashCode() );
+ result = prime * result + ( inQueue ? 1231 : 1237 );
+ result = prime * result + ( ( lastBuild == null ) ? 0 : lastBuild.hashCode() );
+ result = prime * result + ( ( lastCompletedBuild == null ) ? 0 : lastCompletedBuild.hashCode() );
+ result = prime * result + ( ( lastFailedBuild == null ) ? 0 : lastFailedBuild.hashCode() );
+ result = prime * result + ( ( lastStableBuild == null ) ? 0 : lastStableBuild.hashCode() );
+ result = prime * result + ( ( lastSuccessfulBuild == null ) ? 0 : lastSuccessfulBuild.hashCode() );
+ result = prime * result + ( ( lastUnstableBuild == null ) ? 0 : lastUnstableBuild.hashCode() );
+ result = prime * result + ( ( lastUnsuccessfulBuild == null ) ? 0 : lastUnsuccessfulBuild.hashCode() );
result = prime * result + nextBuildNumber;
- result = prime * result + ((queueItem == null) ? 0 : queueItem.hashCode());
- result = prime * result + ((upstreamProjects == null) ? 0 : upstreamProjects.hashCode());
+ result = prime * result + ( ( queueItem == null ) ? 0 : queueItem.hashCode() );
+ result = prime * result + ( ( upstreamProjects == null ) ? 0 : upstreamProjects.hashCode() );
return result;
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
return true;
- if (!super.equals(obj))
+ if ( !super.equals( obj ) )
return false;
- if (getClass() != obj.getClass())
+ if ( getClass() != obj.getClass() )
return false;
JobWithDetails other = (JobWithDetails) obj;
- if (buildable != other.buildable)
+ if ( buildable != other.buildable )
return false;
- if (builds == null) {
- if (other.builds != null)
+ if ( builds == null )
+ {
+ if ( other.builds != null )
return false;
- } else if (!builds.equals(other.builds))
+ }
+ else if ( !builds.equals( other.builds ) )
return false;
- if (displayName == null) {
- if (other.displayName != null)
+ if ( description == null )
+ {
+ if ( other.description != null )
return false;
- } else if (!displayName.equals(other.displayName))
+ }
+ else if ( !description.equals( other.description ) )
return false;
- if (downstreamProjects == null) {
- if (other.downstreamProjects != null)
+ if ( displayName == null )
+ {
+ if ( other.displayName != null )
return false;
- } else if (!downstreamProjects.equals(other.downstreamProjects))
+ }
+ else if ( !displayName.equals( other.displayName ) )
return false;
- if (firstBuild == null) {
- if (other.firstBuild != null)
+ if ( downstreamProjects == null )
+ {
+ if ( other.downstreamProjects != null )
+ return false;
+ }
+ else if ( !downstreamProjects.equals( other.downstreamProjects ) )
+ return false;
+ if ( firstBuild == null )
+ {
+ if ( other.firstBuild != null )
return false;
- } else if (!firstBuild.equals(other.firstBuild))
+ }
+ else if ( !firstBuild.equals( other.firstBuild ) )
return false;
- if (inQueue != other.inQueue)
+ if ( inQueue != other.inQueue )
return false;
- if (lastBuild == null) {
- if (other.lastBuild != null)
+ if ( lastBuild == null )
+ {
+ if ( other.lastBuild != null )
return false;
- } else if (!lastBuild.equals(other.lastBuild))
+ }
+ else if ( !lastBuild.equals( other.lastBuild ) )
return false;
- if (lastCompletedBuild == null) {
- if (other.lastCompletedBuild != null)
+ if ( lastCompletedBuild == null )
+ {
+ if ( other.lastCompletedBuild != null )
return false;
- } else if (!lastCompletedBuild.equals(other.lastCompletedBuild))
+ }
+ else if ( !lastCompletedBuild.equals( other.lastCompletedBuild ) )
return false;
- if (lastFailedBuild == null) {
- if (other.lastFailedBuild != null)
+ if ( lastFailedBuild == null )
+ {
+ if ( other.lastFailedBuild != null )
return false;
- } else if (!lastFailedBuild.equals(other.lastFailedBuild))
+ }
+ else if ( !lastFailedBuild.equals( other.lastFailedBuild ) )
return false;
- if (lastStableBuild == null) {
- if (other.lastStableBuild != null)
+ if ( lastStableBuild == null )
+ {
+ if ( other.lastStableBuild != null )
return false;
- } else if (!lastStableBuild.equals(other.lastStableBuild))
+ }
+ else if ( !lastStableBuild.equals( other.lastStableBuild ) )
return false;
- if (lastSuccessfulBuild == null) {
- if (other.lastSuccessfulBuild != null)
+ if ( lastSuccessfulBuild == null )
+ {
+ if ( other.lastSuccessfulBuild != null )
return false;
- } else if (!lastSuccessfulBuild.equals(other.lastSuccessfulBuild))
+ }
+ else if ( !lastSuccessfulBuild.equals( other.lastSuccessfulBuild ) )
return false;
- if (lastUnstableBuild == null) {
- if (other.lastUnstableBuild != null)
+ if ( lastUnstableBuild == null )
+ {
+ if ( other.lastUnstableBuild != null )
return false;
- } else if (!lastUnstableBuild.equals(other.lastUnstableBuild))
+ }
+ else if ( !lastUnstableBuild.equals( other.lastUnstableBuild ) )
return false;
- if (lastUnsuccessfulBuild == null) {
- if (other.lastUnsuccessfulBuild != null)
+ if ( lastUnsuccessfulBuild == null )
+ {
+ if ( other.lastUnsuccessfulBuild != null )
return false;
- } else if (!lastUnsuccessfulBuild.equals(other.lastUnsuccessfulBuild))
+ }
+ else if ( !lastUnsuccessfulBuild.equals( other.lastUnsuccessfulBuild ) )
return false;
- if (nextBuildNumber != other.nextBuildNumber)
+ if ( nextBuildNumber != other.nextBuildNumber )
return false;
- if (queueItem == null) {
- if (other.queueItem != null)
+ if ( queueItem == null )
+ {
+ if ( other.queueItem != null )
return false;
- } else if (!queueItem.equals(other.queueItem))
+ }
+ else if ( !queueItem.equals( other.queueItem ) )
return false;
- if (upstreamProjects == null) {
- if (other.upstreamProjects != null)
+ if ( upstreamProjects == null )
+ {
+ if ( other.upstreamProjects != null )
return false;
- } else if (!upstreamProjects.equals(other.upstreamProjects))
+ }
+ else if ( !upstreamProjects.equals( other.upstreamProjects ) )
return false;
return true;
}
From 4cc4d3dcb9e1c395686a97950dc8760a3f8a9fd4 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 26 Jun 2016 15:33:36 +0200
Subject: [PATCH 005/197] Fixed #167 o maven-release-plugin to 2.5.3 o
maven-site-plugin to 3.5.1 o maven-shade-plugin to 2.4.3 o maven-jar-plugin
to 3.0.2 o maven-source-plugin 3.0.1 o maven-surefire/failsafe-plugin to
2.19.1 o maven-resources-plugin to 3.0.1 o Added missing
maven-javadoc-plugin 2.10.4
---
ReleaseNotes.md | 12 ++++++++++++
pom.xml | 24 ++++++++++++++----------
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 81ccee33..f5634a86 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -4,6 +4,17 @@
### General Changes
+ [Upgraded Maven Plugins][issue-167]
+
+ * maven-release-plugin to 2.5.3
+ * maven-site-plugin to 3.5.1
+ * maven-shade-plugin to 2.4.3
+ * maven-jar-plugin to 3.0.2
+ * maven-source-plugin 3.0.1
+ * maven-surefire/failsafe-plugin to 2.19.1
+ * maven-resources-plugin to 3.0.1
+ * Add missing maven-javadoc-plugin 2.10.4
+
[Upgraded Maven Plugins][jissue-35108]
* maven-clean-plugin to 3.0.0
@@ -466,6 +477,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-160]: https://github.com/jenkinsci/java-client-api/issues/160
[issue-161]: https://github.com/jenkinsci/java-client-api/issues/161
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
+[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/pom.xml b/pom.xml
index d5f138d8..4cc02eca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -222,12 +222,12 @@
org.apache.maven.plugins
maven-resources-plugin
- 3.0.0
+ 3.0.1
org.apache.maven.plugins
maven-source-plugin
- 3.0.0
+ 3.0.1
attach-sources
From 50c2f7a80cbb27fcd7c6edf1030a0776e9089cb5 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 18 Jul 2016 13:19:34 +0200
Subject: [PATCH 010/197] Improved reading of Dockerfile.
---
.travis.yml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 44a4a166..c1076f02 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,7 +11,13 @@ services:
before_install:
- cd jenkins-client-it-docker
- docker build --no-cache -t jenkins-with-plugins .
- - docker run --name jenkins-for-testing -v "$(pwd)/jobs":/var/jenkins_home/jobs -d -p 8080:8080 -p 50000:50000 --env JENKINS_OPTS=--httpPort=8080 jenkins-with-plugins
+ - docker run \
+ --name jenkins-for-testing \
+ -v "$(pwd)/jobs":/var/jenkins_home/jobs \
+ -d -p 8080:8080 \
+ -p 50000:50000 \
+ --env JENKINS_OPTS=--httpPort=8080 \
+ jenkins-with-plugins
- cd ..
# We skip the installation step,
From d4fd4f7729de299fe320d1e22daaf9e2e2ca9ca4 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 18 Jul 2016 13:34:46 +0200
Subject: [PATCH 011/197] Updated ReleaseNotes according to PR#163
---
ReleaseNotes.md | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index f5634a86..bf8077e2 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -34,6 +34,33 @@
### API Changes
+ [Changing getLocalContext(), setLocalContext()][pull-163]
+
+ The protected method `getLocalContext()` now returns
+ `HttpContext` instead of `BasicHttpContext`.
+ So the API has changed from the following:
+
+```java
+public class JenkinsServer {
+ protected BasicHttpContext getLocalContext();
+ protected void setLocalContext(BasicHttpContext localContext);
+ .
+}
+```
+
+ into this:
+
+```java
+public class JenkinsServer {
+ protected HttpContext getLocalContext();
+ protected void setLocalContext(HttpContext localContext);
+ .
+}
+```
+
+ Apart from that the visibility of the class `PreemptiveAuth` has been changed
+ from package private to public.
+
[Get Jenkins Version from http header][issue-90]
```java
@@ -481,5 +508,6 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
+[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
From adc6924043ab1d121d1622da07cc4c46d839fa52 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 18 Jul 2016 13:39:12 +0200
Subject: [PATCH 012/197] Seemed to that .travis does not support separated
lines.
---
.travis.yml | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index c1076f02..84a6f2ae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,13 +11,7 @@ services:
before_install:
- cd jenkins-client-it-docker
- docker build --no-cache -t jenkins-with-plugins .
- - docker run \
- --name jenkins-for-testing \
- -v "$(pwd)/jobs":/var/jenkins_home/jobs \
- -d -p 8080:8080 \
- -p 50000:50000 \
- --env JENKINS_OPTS=--httpPort=8080 \
- jenkins-with-plugins
+ - docker run --name jenkins-for-testing -v "$(pwd)/jobs":/var/jenkins_home/jobs -d -p 8080:8080 -p 50000:50000 --env JENKINS_OPTS=--httpPort=8080 jenkins-with-plugins
- cd ..
# We skip the installation step,
From a3552f1a74d71611813f1eb8ee10687f2da5743b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 18 Jul 2016 18:36:45 +0200
Subject: [PATCH 013/197] Upgrade to Jenkins 2.7.1 Upgrade throttle-concurrents
1.9.0 o Fixed configuration test
---
jenkins-client-it-docker/Dockerfile | 2 +-
jenkins-client-it-docker/jobs/test/config.xml | 9 +--------
jenkins-client-it-docker/plugins.txt | 2 +-
.../integration/NoExecutorStartedGetJobXmlIT.java | 9 +--------
4 files changed, 4 insertions(+), 18 deletions(-)
diff --git a/jenkins-client-it-docker/Dockerfile b/jenkins-client-it-docker/Dockerfile
index 00abeaa4..53431d46 100644
--- a/jenkins-client-it-docker/Dockerfile
+++ b/jenkins-client-it-docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM jenkins:2.0
+FROM jenkins:2.7.1
MAINTAINER "docker@soebes.de"
COPY ./plugins.txt /usr/share/jenkins/ref/plugins.txt
COPY ./config.xml /usr/share/jenkins/ref/config.xml
diff --git a/jenkins-client-it-docker/jobs/test/config.xml b/jenkins-client-it-docker/jobs/test/config.xml
index ecb62163..885fc61d 100644
--- a/jenkins-client-it-docker/jobs/test/config.xml
+++ b/jenkins-client-it-docker/jobs/test/config.xml
@@ -3,14 +3,7 @@
This is the description with umlauts äöü
false
-
-
- 0
- 0
- false
- project
-
-
+
true
false
diff --git a/jenkins-client-it-docker/plugins.txt b/jenkins-client-it-docker/plugins.txt
index 86807b85..0652999d 100644
--- a/jenkins-client-it-docker/plugins.txt
+++ b/jenkins-client-it-docker/plugins.txt
@@ -2,7 +2,7 @@ timestamper:1.7.2
credentials:1.24
junit:1.10
token-macro:1.12.1
-throttle-concurrents:1.8.4
+throttle-concurrents:1.9.0
jacoco:1.0.19
job-dsl:1.41
config-file-provider:2.10.0
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
index 58142eee..de0ade30 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
@@ -29,14 +29,7 @@ public void beforeMethod()
" ",
" This is the description with umlauts äöü",
" false",
- " ",
- " ",
- " 0",
- " 0",
- " false",
- " project",
- " ",
- " ",
+ " ",
" ",
" true",
" false",
From 8eb32ea94a635bca5236b287f1d271d5dd114335 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 13:08:28 +0200
Subject: [PATCH 014/197] Added a view to have a test foundation
---
jenkins-client-it-docker/Dockerfile | 2 +-
jenkins-client-it-docker/config.xml | 24 +++++++++++++++++++++++-
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/jenkins-client-it-docker/Dockerfile b/jenkins-client-it-docker/Dockerfile
index 53431d46..7b4118a6 100644
--- a/jenkins-client-it-docker/Dockerfile
+++ b/jenkins-client-it-docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM jenkins:2.7.1
+FROM jenkins:1.651.3
MAINTAINER "docker@soebes.de"
COPY ./plugins.txt /usr/share/jenkins/ref/plugins.txt
COPY ./config.xml /usr/share/jenkins/ref/config.xml
diff --git a/jenkins-client-it-docker/config.xml b/jenkins-client-it-docker/config.xml
index a9e06f6f..6bf7ac5f 100644
--- a/jenkins-client-it-docker/config.xml
+++ b/jenkins-client-it-docker/config.xml
@@ -38,6 +38,28 @@
false
+
+
+ Test-View
+ false
+ false
+
+
+
+ test
+
+
+
+
+
+
+
+
+
+
+
+ false
+
All
50000
@@ -45,4 +67,4 @@
true
-
\ No newline at end of file
+
From acc21adc9243cd423314b9762195f7746e03d363 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 15:06:38 +0200
Subject: [PATCH 015/197] Upgraded throttle-concurrents to 1.9.0 and fixed
test.
---
.../NoExecutorStartedPluginManagerIT.java | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
index ffe7044d..b33827e7 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
@@ -3,6 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
+import java.util.Arrays;
import java.util.List;
import org.testng.SkipException;
@@ -38,8 +39,9 @@ public void getPluginsShouldReturn9ForJenkins20()
@Test
public void getPluginsShouldReturn26ForJenkins1651()
{
- //TODO: Check why there is such a difference in the number of Plugins?
- if (!jenkinsServer.getVersion().equals("1.651")) {
+ List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
+ //TODO: Check why there is such a difference in the number of Plugins?
+ if (!asList.contains(jenkinsServer.getVersion())) {
throw new SkipException("Not Version 1.651");
}
assertThat( pluginManager.getPlugins() ).hasSize( 26 );
@@ -71,7 +73,7 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
createPlugin("config-file-provider", "2.10.0"),
createPlugin("timestamper", "1.7.2"),
createPlugin("credentials", "1.24"),
- createPlugin("throttle-concurrents", "1.8.4"),
+ createPlugin("throttle-concurrents", "1.9.0"),
};
List plugins = pluginManager.getPlugins();
@@ -92,7 +94,10 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
@Test
public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651()
{
- if (!jenkinsServer.getVersion().equals("1.651")) {
+ List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
+
+ //TODO: Check why there is such a difference in the number of Plugins?
+ if (!asList.contains(jenkinsServer.getVersion())) {
throw new SkipException("Not Version 1.651");
}
//TODO: The list of plugins is contained in the plugin.txt
@@ -122,7 +127,7 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651()
createPlugin("javadoc", "1.1"),
createPlugin("timestamper", "1.7.2"),
createPlugin("credentials", "1.24"),
- createPlugin("throttle-concurrents", "1.8.4"),
+ createPlugin("throttle-concurrents", "1.9.0"),
createPlugin("subversion", "1.54"),
createPlugin("ssh-slaves", "1.9"),
};
From 3fd0e8c20d671c8755023423321569b3fc76ef92 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 16:45:00 +0200
Subject: [PATCH 016/197] Fixed #162 o NullPointException when "Job.details()"
(the job object get from view object)
---
ReleaseNotes.md | 3 +
.../NoExecutorStartedGetViewIT.java | 70 +++++++++++++++++++
.../com/offbytwo/jenkins/JenkinsServer.java | 27 ++++++-
3 files changed, 97 insertions(+), 3 deletions(-)
create mode 100644 jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index bf8077e2..e3a878ca 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -21,6 +21,8 @@
* maven-resources-plugin to 3.0.0
* maven-jar-plugin to 3.0.0
+ [Fixed issue 162][issue-162]
+
Serveral issues fixed related to using logging framework
[issue-161][issue-161], [issue-113][issue-113] and
[JENKINS-35002][jissue-35002]
@@ -503,6 +505,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-159]: https://github.com/jenkinsci/java-client-api/issues/159
[issue-160]: https://github.com/jenkinsci/java-client-api/issues/160
[issue-161]: https://github.com/jenkinsci/java-client-api/issues/161
+[issue-162]: https://github.com/jenkinsci/java-client-api/issues/162
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
new file mode 100644
index 00000000..5ab7cbee
--- /dev/null
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
@@ -0,0 +1,70 @@
+package com.offbytwo.jenkins.integration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.offbytwo.jenkins.model.Job;
+import com.offbytwo.jenkins.model.JobWithDetails;
+import com.offbytwo.jenkins.model.View;
+
+@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
+public class NoExecutorStartedGetViewIT
+ extends AbstractJenkinsIntegrationCase
+{
+
+ private Map views;
+
+ @BeforeMethod
+ public void beforeMethod()
+ throws IOException
+ {
+ views = jenkinsServer.getViews();
+ }
+
+ @Test
+ public void numberOfViewsIsEqualOne()
+ {
+ assertThat( views ).hasSize( 2 );
+ }
+
+ @Test
+ public void viewNameShouldBeTestView()
+ {
+ assertThat(views.containsKey("Test-View")).isTrue();
+ assertThat(views.containsKey("All")).isTrue();
+ }
+
+ @Test
+ public void getJobsFromGetViews() throws IOException
+ {
+ List jobs = views.get("Test-View").getJobs();
+ assertThat(jobs).hasSize(1);
+ }
+
+ @Test
+ public void getJobsViaView() throws IOException
+ {
+ View view = jenkinsServer.getView("Test-View");
+ List jobs = view.getJobs();
+ assertThat(jobs).hasSize(1);
+ }
+
+ @Test
+ public void getJobsViaViewWithDetails() throws IOException
+ {
+ View view = jenkinsServer.getView("Test-View");
+ List jobs = view.getJobs();
+ assertThat(jobs).hasSize(1);
+
+ Job job = jobs.get(0);
+ assertThat(job.getName()).isEqualTo("test");
+ assertThat(job.details()).isNotNull();
+ }
+}
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 d79d4a80..d68f0a11 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -191,11 +191,20 @@ public Map getViews(FolderJob folder) throws IOException {
if (folder != null) {
path = folder.getUrl();
}
- List views = client.get(path, MainView.class).getViews();
+ List views = client.get(path + "?depth=1", MainView.class).getViews();
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
+
view.setClient(client);
+ //TODO: Think about the following? Does there exists a simpler/more elegant method?
+ for (Job job : view.getJobs()) {
+ job.setClient(client);
+ }
+ for (View item : view.getViews()) {
+ item.setClient(client);
+ }
+
// return view.getName().toLowerCase();
return view.getName();
}
@@ -216,7 +225,7 @@ public View getView(String name) throws IOException {
/**
* Get a single view object from the given folder
- *
+ * @param folder The name of the folder.
* @param name
* name of the view in Jenkins
* @return the view object
@@ -227,7 +236,18 @@ public View getView(FolderJob folder, String name) throws IOException {
if (folder != null) {
path = folder.getUrl();
}
- return client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
+
+ View resultView = client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
+ resultView.setClient(client);
+
+ //TODO: Think about the following? Does there exists a simpler/more elegant method?
+ for (Job job : resultView.getJobs()) {
+ job.setClient(client);
+ }
+ for (View view : resultView.getViews()) {
+ view.setClient(client);
+ }
+ return resultView;
}
/**
@@ -299,6 +319,7 @@ public Optional getFolderJob(Job job) throws IOException {
return Optional.of(folder);
} catch (HttpResponseException e) {
+ LOGGER.debug("getForlderJob(job={}) status={}", job, e.getStatusCode());
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
//TODO: Check if this is a good idea ? What about Optional.absent() ?
return null;
From 1ef87b66cafd398e2ea0a5d8895998a8a89f1a99 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 17:18:28 +0200
Subject: [PATCH 017/197] Updated .travis yml.
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index 84a6f2ae..f3728ba7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,6 +9,7 @@ services:
# TODO: May be we need to think about this.
# TODO: Make our own image and publish this to docker hub.
before_install:
+ - docker --version
- cd jenkins-client-it-docker
- docker build --no-cache -t jenkins-with-plugins .
- docker run --name jenkins-for-testing -v "$(pwd)/jobs":/var/jenkins_home/jobs -d -p 8080:8080 -p 50000:50000 --env JENKINS_OPTS=--httpPort=8080 jenkins-with-plugins
From a0feba25138cc99ac6917bb407f17434afa8448c Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 19:34:56 +0200
Subject: [PATCH 018/197] Fixed #172 o Fixed implementation of
BuildWithDetails.getCauses() to prevent NPE's.
---
ReleaseNotes.md | 7 ++
.../jenkins/integration/Constant.java | 3 +-
.../NoExecutorStartedGetJobDetailsIT.java | 46 ++++++++++
.../offbytwo/jenkins/model/BuildCause.java | 3 +
.../jenkins/model/BuildWithDetails.java | 86 +++++++++++++------
5 files changed, 119 insertions(+), 26 deletions(-)
create mode 100644 jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index e3a878ca..1234fa50 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -21,6 +21,12 @@
* maven-resources-plugin to 3.0.0
* maven-jar-plugin to 3.0.0
+ [Fixed issue 172][issue-172]
+
+ The implementation `BuildWithDetails.getCauses()` could cause an
+ NPE which now has been imroved to prevent it. Thanks for hint
+ which brought me to reconsider the implementation.
+
[Fixed issue 162][issue-162]
Serveral issues fixed related to using logging framework
@@ -508,6 +514,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-162]: https://github.com/jenkinsci/java-client-api/issues/162
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
+[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
index 066e2a87..c8b2dd6b 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
@@ -10,6 +10,7 @@ public final class Constant {
* At the moment it is solved by a profile in pom..but could that somehow
* identified by docker itself ?
*/
- public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
+// public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
+ public static final URI JENKINS_URI = URI.create("http://192.168.99.100:8080/");
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
new file mode 100644
index 00000000..5b169b71
--- /dev/null
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
@@ -0,0 +1,46 @@
+package com.offbytwo.jenkins.integration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.offbytwo.jenkins.model.BuildCause;
+import com.offbytwo.jenkins.model.BuildWithDetails;
+import com.offbytwo.jenkins.model.JobWithDetails;
+
+@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
+public class NoExecutorStartedGetJobDetailsIT
+ extends AbstractJenkinsIntegrationCase
+{
+
+ private JobWithDetails job;
+
+ @BeforeMethod
+ public void beforeMethod()
+ throws IOException
+ {
+ job = jenkinsServer.getJob( "test" );
+ }
+
+ @Test
+ public void shouldCheckTheBuildCause() throws IOException
+ {
+ BuildWithDetails details = job.getFirstBuild().details();
+ List causes = details.getCauses();
+ assertThat(causes).hasSize(1);
+ BuildCause buildCause = causes.get(0);
+
+ assertThat(buildCause.getShortDescription()).isEqualTo("Started by user anonymous");
+ assertThat(buildCause.getUserName()).isEqualTo("anonymous");
+ assertThat(buildCause.getUpstreamBuild()).isEqualTo(0);
+ assertThat(buildCause.getUpstreamProject()).isNull();
+ assertThat(buildCause.getUserId()).isNull();
+
+ }
+
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
index 6490b4a7..30a9a98d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
@@ -14,6 +14,9 @@ public class BuildCause {
public BuildCause() {
this.upstreamBuild = new Integer(0);
+ //TODO: Think about initialization of the other
+ // attributes as well.
+ // userId = StringConstant.EMPTY;
}
public String getShortDescription() {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index f9ec3c25..e16b9237 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -7,6 +7,7 @@
package com.offbytwo.jenkins.model;
import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
import java.io.IOException;
import java.io.InputStream;
@@ -16,23 +17,29 @@
import static com.google.common.collect.Collections2.filter;
+/**
+ * This class represents build information with
+ * details about what has been done like
+ * duration start and of course the build result.
+ *
+ */
public class BuildWithDetails extends Build {
- List actions; // Should be improved.
- boolean building;
- String description;
- long duration;
- long estimatedDuration;
- String fullDisplayName;
- String id;
- long timestamp;
- BuildResult result;
- List artifacts;
- String consoleOutputText;
- String consoleOutputHtml;
- BuildChangeSet changeSet;
- String builtOn;
- List culprits;
+ private List actions; // TODO: Should be improved.
+ private boolean building;
+ private String description;
+ private long duration;
+ private long estimatedDuration;
+ private String fullDisplayName;
+ private String id;
+ private long timestamp;
+ private BuildResult result;
+ private List artifacts;
+ private String consoleOutputText;
+ private String consoleOutputHtml;
+ private BuildChangeSet changeSet;
+ private String builtOn;
+ private List culprits;
public List getArtifacts() {
return artifacts;
@@ -61,21 +68,51 @@ public boolean apply(Map action) {
.get("causes");
for (Map cause : causes_blob) {
- BuildCause cause_object = new BuildCause();
- cause_object.setShortDescription((String) cause.get("shortDescription"));
- cause_object.setUpstreamBuild((Integer) cause.get("upstreamBuild"));
- cause_object.setUpstreamProject((String) cause.get("upstreamProject"));
- cause_object.setUpstreamUrl((String) cause.get("upstreamUrl"));
- cause_object.setUserId((String) cause.get("userId"));
- cause_object.setUserName((String) cause.get("userName"));
+ BuildCause convertToBuildCause = convertToBuildCause(cause);
- result.add(cause_object);
+ result.add(convertToBuildCause);
}
}
return result;
}
+ private BuildCause convertToBuildCause(Map cause) {
+ BuildCause cause_object = new BuildCause();
+
+ //TODO: Think about it. Can this be done more simpler?
+ String description = (String) cause.get("shortDescription");
+ if (!Strings.isNullOrEmpty(description)) {
+ cause_object.setShortDescription(description);
+ }
+
+ Integer upstreamBuild = (Integer) cause.get("upstreamBuild");
+ if (upstreamBuild != null) {
+ cause_object.setUpstreamBuild(upstreamBuild);
+ }
+
+ String upstreamProject = (String) cause.get("upstreamProject");
+ if (!Strings.isNullOrEmpty(upstreamProject)) {
+ cause_object.setUpstreamProject(upstreamProject);
+ }
+
+ String upstreamUrl = (String) cause.get("upstreamUrl");
+ if (!Strings.isNullOrEmpty(upstreamProject)) {
+ cause_object.setUpstreamUrl(upstreamUrl);
+ }
+
+ String userId = (String) cause.get("userId");
+ if (!Strings.isNullOrEmpty(userId)) {
+ cause_object.setUserId(userId);
+ }
+
+ String userName = (String) cause.get("userName");
+ if (!Strings.isNullOrEmpty(userName)) {
+ cause_object.setUserName(userName);
+ }
+ return cause_object;
+ }
+
public String getDescription() {
return description;
}
@@ -166,8 +203,7 @@ public void setCulprits(List culprits) {
public InputStream downloadArtifact(Artifact a) throws IOException, URISyntaxException {
// We can't just put the artifact's relative path at the end of the url
- // string,
- // as there could be characters that need to be escaped.
+ // string, as there could be characters that need to be escaped.
URI uri = new URI(getUrl());
String artifactPath = uri.getPath() + "artifact/" + a.getRelativePath();
URI artifactUri = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), artifactPath, "",
From 6c1a02055ce127caceaa5b38872364eb2c06e5ce Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 19:40:50 +0200
Subject: [PATCH 019/197] Fail only at end of the build
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index f3728ba7..c00316c0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,7 +23,7 @@ install: true
language: java
script:
- - mvn -Prun-its,run-docker-its clean verify --batch-mode
+ - mvn -Prun-its,run-docker-its clean verify --batch-mode --fail-at-end
# Make sure we stop the container
# and remove the container independent
From 08f3a64f949e5a8ebd5c027796cae3127011c1cc Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 19:50:40 +0200
Subject: [PATCH 020/197] Currently ignoring failing IT
---
.../com/offbytwo/jenkins/integration/JenkinsClientViewIT.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsClientViewIT.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsClientViewIT.java
index bd3f25ec..4581fb42 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsClientViewIT.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsClientViewIT.java
@@ -12,6 +12,7 @@
import javax.xml.bind.JAXBException;
import org.dom4j.DocumentException;
+import org.junit.Ignore;
import org.junit.Test;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
@@ -28,6 +29,7 @@ public class JenkinsClientViewIT extends BaseForIntegrationTests {
public static final String TEST_VIEW = "testView";
@Test
+ @Ignore("I need to check what real cause of this is: JenkinsClientViewIT.shouldObtainView:36 » NullPointer")
public void shouldObtainView() throws URISyntaxException, IOException, JAXBException, DocumentException {
// given
jenkinsRule.getInstance().addView(new TestView());
From 5672c6d9ab5d56694983df32b23ae0a13b250a71 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 24 Jul 2016 19:55:22 +0200
Subject: [PATCH 021/197] Fixed wrong URL configuration which will block the
build on travis.
---
.../test/java/com/offbytwo/jenkins/integration/Constant.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
index c8b2dd6b..066e2a87 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
@@ -10,7 +10,6 @@ public final class Constant {
* At the moment it is solved by a profile in pom..but could that somehow
* identified by docker itself ?
*/
-// public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
- public static final URI JENKINS_URI = URI.create("http://192.168.99.100:8080/");
+ public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
}
From 4aa54a26ff0567a1f61c104a2ca89607c642f934 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 07:51:10 +0200
Subject: [PATCH 022/197] Test for Test Report verified Manual Test added.
---
.../java/com/offbytwo/jenkins/ManualTest.java | 47 +++++++++++++++++++
.../integration/BuildJobTestReports.java | 6 +--
2 files changed, 50 insertions(+), 3 deletions(-)
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
new file mode 100644
index 00000000..19100347
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
@@ -0,0 +1,47 @@
+package com.offbytwo.jenkins;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.offbytwo.jenkins.model.Computer;
+import com.offbytwo.jenkins.model.Job;
+
+public class ManualTest {
+
+ private JenkinsServer server;
+
+ @Before
+ public void SetUp() throws URISyntaxException {
+ server = new JenkinsServer(new URI("http://192.168.0.202:10090/buildserver/"), "admin", "admin");
+ }
+
+ @Test
+ public void testFolderPluginAPIs() throws Exception {
+ Map jobs = server.getJobs();
+
+ for (Entry item : jobs.entrySet()) {
+ System.out.println("Item: " + item.getKey());
+
+ System.out.println(" -> v:" + item.getValue());
+ Job value = item.getValue();
+ System.out.println(" -> Name:" + value.getName());
+ System.out.println(" -> URL: " + value.getUrl());
+ }
+
+ }
+
+ @Test
+ public void computerSet() throws IOException {
+ Map computers = server.getComputers();
+ for (Entry computer : computers.entrySet()) {
+ System.out.println("Computer: " + computer.getKey() + " " + computer.getValue().getDisplayName());
+ }
+ }
+
+}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/BuildJobTestReports.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/BuildJobTestReports.java
index 62228f0b..9a284b6c 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/BuildJobTestReports.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/BuildJobTestReports.java
@@ -21,16 +21,16 @@ public class BuildJobTestReports {
@Test
public void shouldAddStringParamToAnExistingJob() throws IOException {
JenkinsServer js = new
- JenkinsServer(URI.create("http://localhost:10090/"));
+ JenkinsServer(URI.create("http://localhost:10090/buildserver/"), "admin", "admin");
// JenkinsServer js = new JenkinsServer(URI.create("http://ci.soebes.de:8080/"));
// MavenJobWithDetails mavenJob = js.getMavenJob("javaee");
- MavenJobWithDetails mavenJob = js.getMavenJob("test-maven");
+ MavenJobWithDetails mavenJob = js.getMavenJob("maven-test");
BuildWithDetails details = mavenJob.getLastSuccessfulBuild().details();
// BuildWithDetails details = mavenJob.getBuilds().get(8).details();
System.out.println("Build Number: " + details.getNumber());
- TestReport testReport = mavenJob.getLastUnstableBuild().getTestReport();
+ TestReport testReport = mavenJob.getLastBuild().getTestReport();
System.out.println("------ Tests");
System.out.println(" urlName: " + testReport.getUrlName());
System.out.println(" failCount: " + testReport.getFailCount());
From 6fe6c779c11e395d8599af3d1a769e3b05e6fc5f Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 08:27:40 +0200
Subject: [PATCH 023/197] Fixed #168 o Added deleteJob in folder.
---
ReleaseNotes.md | 11 ++++++++
jenkins-client-it-docker/plugins.txt | 1 +
.../NoExecutorStartedFolderIT.java | 26 +++++++++++++++++
.../com/offbytwo/jenkins/JenkinsServer.java | 28 +++++++++++++++----
4 files changed, 60 insertions(+), 6 deletions(-)
create mode 100644 jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 1234fa50..bf37dbe4 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -42,6 +42,16 @@
### API Changes
+ [Fixed issue 168 deletejobs in folder][issue-168]
+
+ Added new method to delete a job within a folder.
+
+```java
+public class JenkinsServer {
+ public void deleteJob(FolderJob folder, String jobName) throws IOException;
+}
+```
+
[Changing getLocalContext(), setLocalContext()][pull-163]
The protected method `getLocalContext()` now returns
@@ -514,6 +524,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-162]: https://github.com/jenkinsci/java-client-api/issues/162
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
+[issue-168]: https://github.com/jenkinsci/java-client-api/issues/168
[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
diff --git a/jenkins-client-it-docker/plugins.txt b/jenkins-client-it-docker/plugins.txt
index 0652999d..e802c9d0 100644
--- a/jenkins-client-it-docker/plugins.txt
+++ b/jenkins-client-it-docker/plugins.txt
@@ -7,3 +7,4 @@ jacoco:1.0.19
job-dsl:1.41
config-file-provider:2.10.0
testng-plugin:1.10
+cloudbees-folder: 5.12
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
new file mode 100644
index 00000000..96d20b5d
--- /dev/null
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
@@ -0,0 +1,26 @@
+package com.offbytwo.jenkins.integration;
+
+import java.io.IOException;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
+public class NoExecutorStartedFolderIT
+ extends AbstractJenkinsIntegrationCase
+{
+
+
+ @BeforeMethod
+ public void beforeMethod()
+ throws IOException
+ {
+ }
+
+ @Test
+ public void createFolderShouldCreateTheFolder() throws IOException
+ {
+ jenkinsServer.createFolder("First-Folder");
+ }
+
+}
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 d68f0a11..c81c6b95 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -279,6 +279,7 @@ public JobWithDetails getJob(FolderJob folder, String jobName) throws IOExceptio
} catch (HttpResponseException e) {
LOGGER.debug("getJob(folder={}, jobName={}) status={}", folder, jobName, e.getStatusCode());
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+ //TODO: Think hard about this.
return null;
}
throw e;
@@ -379,8 +380,8 @@ public void createJob(FolderJob folder, String jobName, String jobXml, Boolean c
*
* @throws IOException
*/
- public void createFolder(String jobName) throws IOException {
- createFolder(null, jobName, false);
+ public void createFolder(String folderName) throws IOException {
+ createFolder(null, folderName, false);
}
/**
@@ -388,12 +389,12 @@ public void createFolder(String jobName) throws IOException {
*
* @throws IOException
*/
- public void createFolder(String jobName, Boolean crumbFlag) throws IOException {
- createFolder(null, jobName, crumbFlag);
+ public void createFolder(String folderName, Boolean crumbFlag) throws IOException {
+ createFolder(null, folderName, crumbFlag);
}
/**
- * Create a folder on the server (in the given folder)
+ * Create a job on the server (in the given folder)
*
* @throws IOException
*/
@@ -402,7 +403,7 @@ public void createFolder(FolderJob folder, String jobName) throws IOException {
}
/**
- * Create a folder on the server (in the given folder)
+ * Create a job on the server (in the given folder)
*
* @throws IOException
*/
@@ -534,6 +535,21 @@ public void cancelQuietDown() throws IOException {
public void deleteJob(String jobName) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/doDelete");
}
+
+ /**
+ * Delete a job from Jenkins within a folder.
+ *
+ * @param folder The folder where the given job is located.
+ * @param jobName The job which should be deleted.
+ * @throws IOException in case of problems.
+ */
+ public void deleteJob(FolderJob folder, String jobName) throws IOException {
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
+ client.post(path + "/job/" + EncodingUtils.encode(jobName) + "/doDelete");
+ }
/**
* Delete a job from Jenkins.
From 3a047cedb59c4382cd8e5b0ab204cbd3a6e64f20 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 08:50:25 +0200
Subject: [PATCH 024/197] Fixed #169 Added crumbFlag to renameJob o Enhanced
API to have renameJob with and without crumbFlag and with support for
folders.
---
ReleaseNotes.md | 16 ++++
.../com/offbytwo/jenkins/JenkinsServer.java | 80 ++++++++++++++++---
2 files changed, 86 insertions(+), 10 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index bf37dbe4..a04ca45d 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -42,6 +42,21 @@
### API Changes
+ [Fixed issue 169 Add crumbFlag to renameJob][issue-169]
+
+ Added supplemental `renameJob` method which supports crumbFlag. Furthermore
+ added `renameJob` which supports folder with and without `crumbFlag`.
+ So we now have the following methods to rename jobs:
+
+```java
+public class JenkinsServer {
+ public void renameJob(String oldJobName, String newJobName) throws IOException;
+ public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException;
+ public void renameJob(FolderJob folder, String oldJobName, String newJobName) throws IOException;
+ public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag) throws IOException;
+}
+```
+
[Fixed issue 168 deletejobs in folder][issue-168]
Added new method to delete a job within a folder.
@@ -525,6 +540,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
[issue-168]: https://github.com/jenkinsci/java-client-api/issues/168
+[issue-169]: https://github.com/jenkinsci/java-client-api/issues/169
[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
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 c81c6b95..934fc929 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -667,14 +667,74 @@ public Build getBuild(QueueItem q) throws IOException {
}
/**
- * Rename a job
- *
- * @param jobName Existing Job name
- * @param newJobName New Job Name
- * @throws IOException In case of a failure.
- */
- public void renameJob(String jobName, String newJobName) throws IOException {
- client.post(
- "/job/" + EncodingUtils.encode(jobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName));
- }
+ * Rename a job
+ *
+ * @param oldJobName
+ * existing job name.
+ * @param newJobName
+ * The new job name.
+ * @throws IOException
+ * In case of a failure.
+ */
+ public void renameJob(String oldJobName, String newJobName) throws IOException {
+ renameJob(null, oldJobName, newJobName, false);
+ }
+
+ /**
+ * Rename a job
+ *
+ * @param oldJobName
+ * existing job name.
+ * @param newJobName
+ * The new job name.
+ * @param crumbFlag
+ * true to add crumbIssuer false otherwise.
+ * @throws IOException
+ * In case of a failure.
+ */
+ public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
+ renameJob(null, oldJobName, newJobName, crumbFlag);
+ }
+
+ /**
+ * Rename a job
+ *
+ * @param FolderJob
+ * The folder.
+ * @param oldJobName
+ * existing job name.
+ * @param newJobName
+ * The new job name.
+ * @throws IOException
+ * In case of a failure.
+ */
+ public void renameJob(FolderJob folder, String oldJobName, String newJobName) throws IOException {
+ renameJob(folder, oldJobName, newJobName, false);
+ }
+
+ /**
+ * Rename a job
+ *
+ * @param FolderJob
+ * The folder.
+ * @param oldJobName
+ * existing job name.
+ * @param newJobName
+ * The new job name.
+ * @param crumbFlag
+ * true to add crumbIssuer false otherwise.
+ * @throws IOException
+ * In case of a failure.
+ */
+ public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
+
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
+ client.post( path +
+ "job/" + EncodingUtils.encode(oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName), crumbFlag);
+
+ }
+
}
From c9a9aeb753b10921b20dc4ae6f6219339ece717a Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 10:05:20 +0200
Subject: [PATCH 025/197] Fixed #174 An error happen when i get the node List
o Fixed API accordingly to the occured error.
---
ReleaseNotes.md | 22 +++++++++++++++++++
.../integration/ExecutorStartedIT.java | 2 +-
.../integration/ExecutorStartingIT.java | 4 ++--
.../NoExecutorStartedGetComputerSetIT.java | 2 +-
...cutorStartedGetComputersWithDetailsIT.java | 2 +-
.../NoExecutorStartedGetOfflineCauseIT.java | 2 +-
.../offbytwo/jenkins/model/ComputerSet.java | 4 +---
.../com/offbytwo/jenkins/model/Executor.java | 12 +++++-----
.../jenkins/integration/ComputerSetIT.java | 6 ++---
9 files changed, 38 insertions(+), 18 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index a04ca45d..178af220 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -42,6 +42,27 @@
### API Changes
+ [Fixed issue 174][issue-174]
+
+ jenkins.getComputerSet().getComputer() produced an error.
+ Changed getComputer() into getComputers() cause it returns
+ a list an not only a single computer.
+ Based on the above problem the `Executor` needed to be changed to
+ represent the correct data which is being returned.
+
+```java
+public class ComputerSet {
+ public List getComputers();
+}
+```
+
+```java
+public class Executor {
+ public Job getCurrentExecutable();
+ public Job getCurrentWorkUnit();
+}
+```
+
[Fixed issue 169 Add crumbFlag to renameJob][issue-169]
Added supplemental `renameJob` method which supports crumbFlag. Furthermore
@@ -542,6 +563,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-168]: https://github.com/jenkinsci/java-client-api/issues/168
[issue-169]: https://github.com/jenkinsci/java-client-api/issues/169
[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
+[issue-174]: https://github.com/jenkinsci/java-client-api/issues/174
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
index 99cab9c4..f1338b60 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
@@ -29,7 +29,7 @@ public void beforeMethod()
public void shouldTriggerJobTest()
throws IOException
{
- ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get( 0 );
assertThat( computerWithDetailsAfterStarting.getOffline() ).isFalse();
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
index c650c7f5..24ed8591 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
@@ -29,10 +29,10 @@ public void beforeMethod()
public void shouldTriggerJobTest()
throws IOException
{
- ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputers().get( 0 );
computerWithDetails.toggleOffline();
- ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get( 0 );
assertThat( computerWithDetailsAfterStarting.getOffline() ).isFalse();
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
index 0bd2b445..ab3d5fdd 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
@@ -28,7 +28,7 @@ public void beforeMethod()
@Test
public void shouldGetNameOfMasterNode()
{
- List computers = computerSet.getComputer();
+ List computers = computerSet.getComputers();
assertThat( computers ).hasSize( 1 );
assertThat( computers.get( 0 ).getDisplayName() ).isEqualTo( "master" );
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
index 76856fc7..c0c4b683 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
@@ -20,7 +20,7 @@ public class NoExecutorStartedGetComputersWithDetailsIT
public void beforeMethod()
throws IOException
{
- computerWithDetails = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ computerWithDetails = jenkinsServer.getComputerSet().getComputers().get( 0 );
}
@Test
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
index 2700832c..07acda4d 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
@@ -20,7 +20,7 @@ public class NoExecutorStartedGetOfflineCauseIT
public void beforeMethod()
throws IOException
{
- offlineCause = jenkinsServer.getComputerSet().getComputer().get( 0 ).getOfflineCause();
+ offlineCause = jenkinsServer.getComputerSet().getComputers().get( 0 ).getOfflineCause();
}
/**
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
index 4eddf182..2aab97dc 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
@@ -3,9 +3,7 @@
import java.util.List;
import com.google.common.base.Function;
-import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
public class ComputerSet extends BaseModel {
private int busyExecutors;
@@ -42,7 +40,7 @@ public void setTotalExecutors(int totalExecutors) {
this.totalExecutors = totalExecutors;
}
- public List getComputer() {
+ public List getComputers() {
return Lists.transform( computer, new Function() {
@Override
public ComputerWithDetails apply(ComputerWithDetails computerWithDetails) {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
index b6e2c071..57a9a099 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
@@ -9,27 +9,27 @@
*/
public class Executor {
- private String currentExecutable;
+ private Job currentExecutable;
// in XSD it's a reference to a class
- private String currentWorkUnit;
+ private Job currentWorkUnit;
private Boolean idle;
private Boolean likelyStuck;
private int number;
private int progress;
- public String getCurrentExecutable() {
+ public Job getCurrentExecutable() {
return currentExecutable;
}
- public void setCurrentExecutable(String currentExecutable) {
+ public void setCurrentExecutable(Job currentExecutable) {
this.currentExecutable = currentExecutable;
}
- public String getCurrentWorkUnit() {
+ public Job getCurrentWorkUnit() {
return currentWorkUnit;
}
- public void setCurrentWorkUnit(String currentWorkUnit) {
+ public void setCurrentWorkUnit(Job currentWorkUnit) {
this.currentWorkUnit = currentWorkUnit;
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/ComputerSetIT.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/ComputerSetIT.java
index e83a31d5..b2be9010 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/ComputerSetIT.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/ComputerSetIT.java
@@ -32,7 +32,7 @@ public void shouldGetTotalExecutors() throws JAXBException, IOException, Documen
public void shouldGetComputerWithDetailsAndExecutors() throws IOException {
Jenkins ji = jenkinsRule.getInstance();
- List computerSet = jenkinsServer.getComputerSet().getComputer();
+ List computerSet = jenkinsServer.getComputerSet().getComputers();
ComputerWithDetails computerWithDetails = computerSet.get(0);
assertThat(computerWithDetails.getExecutors()).isNotNull();
assertThat(computerWithDetails.getNumExecutors()).isEqualTo(ji.getNumExecutors());
@@ -41,10 +41,10 @@ public void shouldGetComputerWithDetailsAndExecutors() throws IOException {
@Test
public void shouldTrunFromOnlineToOffline() throws IOException {
- ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputers().get( 0 );
computerWithDetails.toggleOffline(true);
- ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputer().get( 0 );
+ ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get( 0 );
assertThat( computerWithDetailsAfterStarting.getOffline() ).isTrue();
}
From 97eec980390c95d3fcb482ec4ec58c98efc72f58 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 20:43:37 +0200
Subject: [PATCH 026/197] Removed ManualTest cause it is intended to run in CI
---
.../java/com/offbytwo/jenkins/ManualTest.java | 47 -------------------
1 file changed, 47 deletions(-)
delete mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
deleted file mode 100644
index 19100347..00000000
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/ManualTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.offbytwo.jenkins;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.offbytwo.jenkins.model.Computer;
-import com.offbytwo.jenkins.model.Job;
-
-public class ManualTest {
-
- private JenkinsServer server;
-
- @Before
- public void SetUp() throws URISyntaxException {
- server = new JenkinsServer(new URI("http://192.168.0.202:10090/buildserver/"), "admin", "admin");
- }
-
- @Test
- public void testFolderPluginAPIs() throws Exception {
- Map jobs = server.getJobs();
-
- for (Entry item : jobs.entrySet()) {
- System.out.println("Item: " + item.getKey());
-
- System.out.println(" -> v:" + item.getValue());
- Job value = item.getValue();
- System.out.println(" -> Name:" + value.getName());
- System.out.println(" -> URL: " + value.getUrl());
- }
-
- }
-
- @Test
- public void computerSet() throws IOException {
- Map computers = server.getComputers();
- for (Entry computer : computers.entrySet()) {
- System.out.println("Computer: " + computer.getKey() + " " + computer.getValue().getDisplayName());
- }
- }
-
-}
From 7c081fdb58a08761e431ecf4dfda9ca601a58cac Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 22:01:12 +0200
Subject: [PATCH 027/197] Fixed integration tests based on newly creating
folder and added it to the dependency chain.
---
.../offbytwo/jenkins/integration/ExecutorStartingIT.java | 2 +-
.../test/java/com/offbytwo/jenkins/integration/Groups.java | 2 ++
.../jenkins/integration/NoExecutorStartedFolderIT.java | 3 +--
.../jenkins/integration/NoExecutorStartedGetViewIT.java | 2 --
.../integration/NoExecutorStartedPluginManagerIT.java | 6 ++++--
5 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
index 24ed8591..01c8a3ec 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
@@ -10,7 +10,7 @@
import com.offbytwo.jenkins.model.ComputerWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP }, groups = { Groups.EXECUTOR_STARTING_GROUP } )
+@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP, Groups.NO_EXECUTOR_GROUP_FOLDER }, groups = { Groups.EXECUTOR_STARTING_GROUP } )
public class ExecutorStartingIT
extends AbstractJenkinsIntegrationCase
{
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
index 79557371..0ea5ec65 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
@@ -8,6 +8,8 @@ public final class Groups
*/
public static final String NO_EXECUTOR_GROUP = "NoExecutorStarted";
+ public static final String NO_EXECUTOR_GROUP_FOLDER = "NoExecutorStartedFolder";
+
public static final String EXECUTOR_STARTING_GROUP = "ExecutorStarting";
public static final String EXECUTOR_STARTED_GROUP = "ExecutorStarted";
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
index 96d20b5d..6eb3bbed 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
@@ -5,12 +5,11 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
+@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP }, groups = { Groups.NO_EXECUTOR_GROUP_FOLDER } )
public class NoExecutorStartedFolderIT
extends AbstractJenkinsIntegrationCase
{
-
@BeforeMethod
public void beforeMethod()
throws IOException
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
index 5ab7cbee..b6f5728a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
@@ -5,13 +5,11 @@
import java.io.IOException;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.offbytwo.jenkins.model.Job;
-import com.offbytwo.jenkins.model.JobWithDetails;
import com.offbytwo.jenkins.model.View;
@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
index b33827e7..c1d0732e 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
@@ -37,14 +37,14 @@ public void getPluginsShouldReturn9ForJenkins20()
assertThat( pluginManager.getPlugins() ).hasSize( 9 );
}
@Test
- public void getPluginsShouldReturn26ForJenkins1651()
+ public void getPluginsShouldReturn27ForJenkins1651()
{
List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
//TODO: Check why there is such a difference in the number of Plugins?
if (!asList.contains(jenkinsServer.getVersion())) {
throw new SkipException("Not Version 1.651");
}
- assertThat( pluginManager.getPlugins() ).hasSize( 26 );
+ assertThat( pluginManager.getPlugins() ).hasSize( 27 );
}
private Plugin createPlugin(String shortName, String version) {
@@ -74,6 +74,7 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
createPlugin("timestamper", "1.7.2"),
createPlugin("credentials", "1.24"),
createPlugin("throttle-concurrents", "1.9.0"),
+ createPlugin("cloudbees-folder", "5.12"),
};
List plugins = pluginManager.getPlugins();
@@ -130,6 +131,7 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651()
createPlugin("throttle-concurrents", "1.9.0"),
createPlugin("subversion", "1.54"),
createPlugin("ssh-slaves", "1.9"),
+ createPlugin("cloudbees-folder", "5.12"),
};
List plugins = pluginManager.getPlugins();
From ffce870696a7a7ed08ddee82ad5c49e8d6b86257 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 25 Jul 2016 22:11:57 +0200
Subject: [PATCH 028/197] Fixed order of groups.
---
.../com/offbytwo/jenkins/integration/ExecutorStartingIT.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
index 01c8a3ec..d5d0fb7e 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
@@ -10,7 +10,7 @@
import com.offbytwo.jenkins.model.ComputerWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP, Groups.NO_EXECUTOR_GROUP_FOLDER }, groups = { Groups.EXECUTOR_STARTING_GROUP } )
+@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP_FOLDER }, groups = { Groups.EXECUTOR_STARTING_GROUP } )
public class ExecutorStartingIT
extends AbstractJenkinsIntegrationCase
{
From 9feaa7213116d92516f9785bbe0c8b09a766b60d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 29 Jul 2016 19:10:02 +0200
Subject: [PATCH 029/197] Made attributes private
---
ReleaseNotes.md | 7 ++++
.../com/offbytwo/jenkins/model/Artifact.java | 6 +--
.../com/offbytwo/jenkins/model/BaseModel.java | 7 +++-
.../com/offbytwo/jenkins/model/Computer.java | 4 ++
.../offbytwo/jenkins/model/ComputerSet.java | 6 +++
.../jenkins/model/ComputerWithDetails.java | 28 ++++++-------
.../offbytwo/jenkins/model/Executable.java | 4 +-
.../com/offbytwo/jenkins/model/FolderJob.java | 4 +-
.../java/com/offbytwo/jenkins/model/Job.java | 5 +++
.../jenkins/model/JobWithDetails.java | 40 +++++++++----------
.../offbytwo/jenkins/model/MavenArtifact.java | 16 ++++----
.../jenkins/model/MavenJobWithDetails.java | 26 ++++++------
.../offbytwo/jenkins/model/MavenModule.java | 2 +-
.../jenkins/model/MavenModuleRecord.java | 10 ++---
.../offbytwo/jenkins/model/PluginManager.java | 6 ++-
.../java/com/offbytwo/jenkins/model/View.java | 4 +-
16 files changed, 104 insertions(+), 71 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 178af220..43440b47 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -42,6 +42,13 @@
### API Changes
+ The attributes of the following classes have been made
+ private. They are only accessible via getters/setters.
+
+ `MavenArtifact`, `ComputerWithDetails`, `Executable`, `FolderJob`,
+ `JobWithDetails`, `MavenJobWithDetails`, `MavenModule`, `MavenModuleRecord`,
+ `PluginManager`
+
[Fixed issue 174][issue-174]
jenkins.getComputerSet().getComputer() produced an error.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
index 89b5683d..6d0b0e69 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
@@ -8,9 +8,9 @@
public class Artifact extends BaseModel {
- String displayPath;
- String fileName;
- String relativePath;
+ private String displayPath;
+ private String fileName;
+ private String relativePath;
public String getDisplayPath() {
return displayPath;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
index 14f788b5..496cbfec 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
@@ -8,9 +8,14 @@
import com.offbytwo.jenkins.client.JenkinsHttpClient;
+/**
+ * The base model.
+ *
+ */
public class BaseModel {
- JenkinsHttpClient client;
+ //TODO: We should make this private
+ protected JenkinsHttpClient client;
public JenkinsHttpClient getClient() {
return client;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
index ae0232ef..edc7350c 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
@@ -11,6 +11,10 @@
import com.google.common.net.UrlEscapers;
+/**
+ * @author Kelly Plummer
+ *
+ */
public class Computer extends BaseModel {
private String displayName;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
index 2aab97dc..7bebc43f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
@@ -1,3 +1,9 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
package com.offbytwo.jenkins.model;
import java.util.List;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
index 06236e5f..826539b7 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
@@ -16,20 +16,20 @@
public class ComputerWithDetails extends Computer {
- String displayName;
- List actions;
- List executors;
- Boolean idle;
- Boolean jnlp;
- Boolean launchSupported;
- Boolean manualLaunchAllowed;
- Map monitorData;
- Integer numExecutors;
- Boolean offline;
- OfflineCause offlineCause;
- String offlineCauseReason;
- List oneOffExecutors;
- Boolean temporarilyOffline;
+ private String displayName;
+ private List actions; //TODO: What kind of List?
+ private List executors;
+ private Boolean idle;
+ private Boolean jnlp;
+ private Boolean launchSupported;
+ private Boolean manualLaunchAllowed;
+ private Map monitorData; //TODO: What kind of map?
+ private Integer numExecutors;
+ private Boolean offline;
+ private OfflineCause offlineCause;
+ private String offlineCauseReason;
+ private List oneOffExecutors; //TODO: What kind of List?
+ private Boolean temporarilyOffline;
public ComputerWithDetails()
{
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
index 8722d524..ff1b6e27 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
@@ -1,9 +1,9 @@
package com.offbytwo.jenkins.model;
public class Executable {
- Long number;
+ private Long number;
- String url;
+ private String url;
public Long getNumber() {
return number;
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 10b9dbdb..8d5ef81e 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
@@ -11,8 +11,8 @@
public class FolderJob extends Job {
- String displayName;
- List jobs;
+ private String displayName;
+ private List jobs;
public FolderJob() {
}
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 b42902fc..bd808014 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
@@ -71,6 +71,11 @@ public void build() throws IOException {
client.post(url + "build");
}
+ /**
+ * Trigger a build with crumbFlag.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of an error.
+ */
public void build(boolean crumbFlag) throws IOException {
client.post(url + "build", crumbFlag);
}
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 e9faa7fa..e3a25783 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
@@ -24,39 +24,39 @@
public class JobWithDetails extends Job {
- String description;
+ private String description;
- String displayName;
+ private String displayName;
- boolean buildable;
+ private boolean buildable;
- List builds;
+ private List builds;
- Build firstBuild;
+ private Build firstBuild;
- Build lastBuild;
+ private Build lastBuild;
- Build lastCompletedBuild;
+ private Build lastCompletedBuild;
- Build lastFailedBuild;
+ private Build lastFailedBuild;
- Build lastStableBuild;
+ private Build lastStableBuild;
- Build lastSuccessfulBuild;
+ private Build lastSuccessfulBuild;
- Build lastUnstableBuild;
+ private Build lastUnstableBuild;
- Build lastUnsuccessfulBuild;
+ private Build lastUnsuccessfulBuild;
- int nextBuildNumber;
+ private int nextBuildNumber;
- boolean inQueue;
+ private boolean inQueue;
- QueueItem queueItem;
+ private QueueItem queueItem;
- List downstreamProjects;
+ private List downstreamProjects;
- List upstreamProjects;
+ private List upstreamProjects;
public String getDescription()
{
@@ -138,7 +138,7 @@ public Build apply(Build from) {
});
}
} catch (HttpResponseException e) {
- // TODO: Thinks about a better handline if the job does not exist?
+ // TODO: Thinks about a better handling if the job does not exist?
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
// TODO: Check this if this is necessary or a good idea?
@@ -282,7 +282,7 @@ public int getNextBuildNumber() {
/**
* @return the list of downstream projects.
* If no downstream projects exist just return
- * an {@link Collections#emptyList()}
+ * an empty list {@link Collections#emptyList()}.
*/
public List getDownstreamProjects() {
if (downstreamProjects == null) {
@@ -295,7 +295,7 @@ public List getDownstreamProjects() {
/**
* @return the list of upstream projects.
* If no upstream projects exist just return
- * an {@link Collections#emptyList()}
+ * an empty list {@link Collections#emptyList()}.
*/
public List getUpstreamProjects() {
if (upstreamProjects == null) {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
index fe78091e..184ccc37 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
@@ -2,14 +2,14 @@
public class MavenArtifact extends BaseModel {
- String artifactId;
- String canonicalName;
- String classifier;
- String fileName;
- String groupId;
- String md5sum;
- String type;
- String version;
+ private String artifactId;
+ private String canonicalName;
+ private String classifier;
+ private String fileName;
+ private String groupId;
+ private String md5sum;
+ private String type;
+ private String version;
public MavenArtifact() {
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
index ae30ee55..6553d20d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
@@ -7,19 +7,19 @@
public class MavenJobWithDetails extends MavenJob {
- String displayName;
- boolean buildable;
- List builds;
- MavenBuild lastBuild;
- MavenBuild lastCompletedBuild;
- MavenBuild lastFailedBuild;
- MavenBuild lastStableBuild;
- MavenBuild lastSuccessfulBuild;
- MavenBuild lastUnstableBuild;
- MavenBuild lastUnsuccessfulBuild;
- int nextBuildNumber;
- List downstreamProjects;
- List upstreamProjects;
+ private String displayName;
+ private boolean buildable;
+ private List builds;
+ private MavenBuild lastBuild;
+ private MavenBuild lastCompletedBuild;
+ private MavenBuild lastFailedBuild;
+ private MavenBuild lastStableBuild;
+ private MavenBuild lastSuccessfulBuild;
+ private MavenBuild lastUnstableBuild;
+ private MavenBuild lastUnsuccessfulBuild;
+ private int nextBuildNumber;
+ private List downstreamProjects;
+ private List upstreamProjects;
public MavenJobWithDetails() {
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
index b3f4eeb8..07c61bb1 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
@@ -4,7 +4,7 @@
public class MavenModule extends BaseModel {
- List moduleRecords;
+ private List moduleRecords;
public List getModuleRecords() {
return moduleRecords;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
index d8fa13cd..3684c21d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
@@ -4,11 +4,11 @@
public class MavenModuleRecord extends BaseModel {
- List attachedArtifacts;
- Build parent;
- MavenArtifact mainArtifact;
- MavenArtifact pomArtifact;
- String url;
+ private List attachedArtifacts;
+ private Build parent;
+ private MavenArtifact mainArtifact;
+ private MavenArtifact pomArtifact;
+ private String url;
public MavenModuleRecord() {
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
index ea1bd5e7..f23ccaba 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
@@ -7,12 +7,16 @@
*/
public class PluginManager extends BaseModel
{
- List plugins;
+ private List plugins;
public List getPlugins()
{
return plugins;
}
+
+ public void setPlugins(List plugins) {
+ this.plugins = plugins;
+ }
@Override
public int hashCode()
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
index bac08fc3..5267e4f1 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
@@ -2,6 +2,9 @@
public class View extends MainView {
+ //TODO: Think about the initialization of
+ // the attributes? Better being done in
+ // ctor.
private String name = "";
private String description = "";
private String url = "";
@@ -15,7 +18,6 @@ public void setName(String name) {
}
public View() {
-
}
public String getDescription() {
From 412fd88864b7a2973c97ddd7abf9c58af4be703b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 29 Jul 2016 19:15:23 +0200
Subject: [PATCH 030/197] Reformatted POM files.
---
jenkins-client-it-docker/pom.xml | 2 +-
jenkins-client/pom.xml | 5 ++-
pom.xml | 67 +++++++++++++++++---------------
3 files changed, 40 insertions(+), 34 deletions(-)
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 38234530..35d3eb8c 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -71,7 +71,7 @@
org.apache.logging.log4j
log4j-slf4j-impl
test
-
+
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index f85509f9..411eb90a 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -5,7 +5,10 @@
~ Distributed under the MIT license: http://opensource.org/licenses/MIT
-->
-
+
4.0.0
diff --git a/pom.xml b/pom.xml
index 2d0ab9b0..a5f46324 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,10 @@
~ Distributed under the MIT license: http://opensource.org/licenses/MIT
-->
-
+
4.0.0
@@ -158,7 +161,7 @@
org.testng
testng
- 6.8.21
+ 6.8.21
test
@@ -187,7 +190,7 @@
1.7.1
test
-
+
org.slf4j
slf4j-api
@@ -338,36 +341,36 @@
-
- org.apache.maven.plugins
- maven-site-plugin
-
-
- org.apache.maven.doxia
- doxia-module-markdown
- 1.7
-
-
- org.asciidoctor
- asciidoctor-maven-plugin
- ${asciidoctor-maven-plugin.version}
-
-
-
-
+
+ org.apache.maven.plugins
+ maven-site-plugin
+
+
+ org.apache.maven.doxia
+ doxia-module-markdown
+ 1.7
+
+
+ org.asciidoctor
+ asciidoctor-maven-plugin
+ ${asciidoctor-maven-plugin.version}
+
+
+
+
-
- font
- coderay
- style
- 2
- ${project.version}
- true
- true
-
-
-
-
+
+ font
+ coderay
+ style
+ 2
+ ${project.version}
+ true
+ true
+
+
+
+
From f52cdb053f1135324a0005be5090b80a0cfd152c Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 8 Aug 2016 18:27:50 +0200
Subject: [PATCH 031/197] Improved ReleaseNotes
---
ReleaseNotes.md | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 43440b47..369896ce 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -15,11 +15,13 @@
* maven-resources-plugin to 3.0.1
* Add missing maven-javadoc-plugin 2.10.4
- [Upgraded Maven Plugins][jissue-35108]
- * maven-clean-plugin to 3.0.0
- * maven-resources-plugin to 3.0.0
- * maven-jar-plugin to 3.0.0
+ [Upgraded Maven Plugins JENKINS-35108][jissue-35108]
+
+ * maven-clean-plugin to 3.0.0
+ * maven-resources-plugin to 3.0.0
+ * maven-jar-plugin to 3.0.0
+
[Fixed issue 172][issue-172]
From b0aa7792d9a7e7ce7e03addf50b4c477c7cc2a1e Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 8 Aug 2016 18:31:34 +0200
Subject: [PATCH 032/197] Fixed ReleaseNotes
---
ReleaseNotes.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 369896ce..0e75cc32 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -4,7 +4,7 @@
### General Changes
- [Upgraded Maven Plugins][issue-167]
+[Upgraded Maven Plugins][issue-167]
* maven-release-plugin to 2.5.3
* maven-site-plugin to 3.5.1
@@ -16,20 +16,20 @@
* Add missing maven-javadoc-plugin 2.10.4
- [Upgraded Maven Plugins JENKINS-35108][jissue-35108]
+[Upgraded Maven Plugins JENKINS-35108][jissue-35108]
* maven-clean-plugin to 3.0.0
* maven-resources-plugin to 3.0.0
* maven-jar-plugin to 3.0.0
- [Fixed issue 172][issue-172]
+[Fixed issue 172][issue-172]
The implementation `BuildWithDetails.getCauses()` could cause an
NPE which now has been imroved to prevent it. Thanks for hint
which brought me to reconsider the implementation.
- [Fixed issue 162][issue-162]
+[Fixed issue 162][issue-162]
Serveral issues fixed related to using logging framework
[issue-161][issue-161], [issue-113][issue-113] and
@@ -40,7 +40,7 @@
As a user you can now decide which logging framework
you would like to use.
- [Changed the structure and integrated Docker IT][issue-160]
+[Changed the structure and integrated Docker IT][issue-160]
### API Changes
From 16adfbc15757a673451a4d74da6c155b93402364 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 8 Aug 2016 18:38:57 +0200
Subject: [PATCH 033/197] Improved ReleaseNotes.
---
ReleaseNotes.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 0e75cc32..2650810a 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -22,6 +22,9 @@
* maven-resources-plugin to 3.0.0
* maven-jar-plugin to 3.0.0
+[Fixed issue 162][issue-162]
+
+ JenkinsJob.details() produced NPE which has been got via view.getJob().
[Fixed issue 172][issue-172]
@@ -29,8 +32,6 @@
NPE which now has been imroved to prevent it. Thanks for hint
which brought me to reconsider the implementation.
-[Fixed issue 162][issue-162]
-
Serveral issues fixed related to using logging framework
[issue-161][issue-161], [issue-113][issue-113] and
[JENKINS-35002][jissue-35002]
From 426797a49e260a3f45b81c0e537d2659a063cb28 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 17 Aug 2016 22:31:17 +0200
Subject: [PATCH 034/197] Fixed #176 HttpResponseException: Not Found
(createJob) o Using the crumbFlag = false instead of true.
---
ReleaseNotes.md | 5 +++++
.../src/main/java/com/offbytwo/jenkins/JenkinsServer.java | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2650810a..bd4db3b8 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -22,6 +22,10 @@
* maven-resources-plugin to 3.0.0
* maven-jar-plugin to 3.0.0
+[Fixed issue 176 HttpResponseException: Not Found (createJob)][issue-176]
+ Based on the wrong usage of the sub methods using crumbFlag=true instead
+ of crumbFlag=false.
+
[Fixed issue 162][issue-162]
JenkinsJob.details() produced NPE which has been got via view.getJob().
@@ -574,6 +578,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-169]: https://github.com/jenkinsci/java-client-api/issues/169
[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
[issue-174]: https://github.com/jenkinsci/java-client-api/issues/174
+[issue-176]: https://github.com/jenkinsci/java-client-api/issues/176
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
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 934fc929..2178e63c 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -336,7 +336,7 @@ public Optional getFolderJob(Job job) throws IOException {
* @throws IOException
*/
public void createJob(String jobName, String jobXml) throws IOException {
- createJob(null, jobName, jobXml, true);
+ createJob(null, jobName, jobXml, false);
}
/**
@@ -357,7 +357,7 @@ public void createJob(String jobName, String jobXml, Boolean crumbFlag) throws I
* @throws IOException
*/
public void createJob(FolderJob folder, String jobName, String jobXml) throws IOException {
- createJob(folder, jobName, jobXml, true);
+ createJob(folder, jobName, jobXml, false);
}
/**
From c60dd5a6eb74f5ee45bb4c83b91746cfc582c47d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 18 Aug 2016 17:48:42 +0200
Subject: [PATCH 035/197] Fixed #176 HttpResponseException: Not Found
(createJob) o Followup and fix the appropriate test to use the correct
verifier.
---
.../offbytwo/jenkins/FolderManualTests.java | 75 -------------------
.../offbytwo/jenkins/JenkinsServerTest.java | 2 +-
2 files changed, 1 insertion(+), 76 deletions(-)
delete mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/FolderManualTests.java
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/FolderManualTests.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/FolderManualTests.java
deleted file mode 100644
index edcbafc7..00000000
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/FolderManualTests.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.offbytwo.jenkins;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import com.google.common.base.Optional;
-import com.offbytwo.jenkins.model.FolderJob;
-import com.offbytwo.jenkins.model.Job;
-import com.offbytwo.jenkins.model.JobWithDetails;
-
-public class FolderManualTests {
-
- private JenkinsServer server;
-
- @Before
- public void SetUp() throws URISyntaxException {
- // point this at a local instance of jenkins which has the cloudbees
- // folder plugin installed.
- server = new JenkinsServer(new URI("http://localhost:8080/"));
- }
-
- @Ignore
- @Test
- public void testFolderPluginAPIs() throws Exception {
- server.createFolder("root");
- JobWithDetails root = server.getJob("root");
- Assert.assertNotNull(root);
-
- Optional rootFolder = server.getFolderJob(root);
- Assert.assertTrue(rootFolder.isPresent());
-
- server.createFolder(rootFolder.get(), "subfolder");
- JobWithDetails subfolder = server.getJob(rootFolder.get(), "subfolder");
- Assert.assertNotNull(subfolder);
-
- Optional subfolderFolder = server.getFolderJob(subfolder);
- Assert.assertTrue(subfolderFolder.isPresent());
-
- server.deleteJob("root");
- root = server.getJob("root");
- Assert.assertNull(root);
- }
-
- @Ignore
- @Test
- public void testStuff() {
- try {
-
- String f1 = "test-root";
- String f2 = "test-nested";
- String f3 = "test-double-nested";
-
- server.createFolder(f1);
- Job job1 = server.getJob(f1);
- FolderJob fjob = server.getFolderJob(job1).get();
- server.createFolder(fjob, f2);
-
- Job job2 = server.getJob(fjob, f2);
- FolderJob fjob2 = server.getFolderJob(job2).get();
- server.createFolder(fjob2, f3);
-
- Job job3 = server.getJob(fjob2, f3);
- FolderJob fjob3 = server.getFolderJob(job3).get();
-
- JobWithDetails dj = fjob3.details();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
index 2051c5ef..2cb27aa2 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
@@ -219,7 +219,7 @@ public void testCreateJob() throws Exception {
// then
ArgumentCaptor captureString = ArgumentCaptor.forClass(String.class);
- verify(client).post_xml(eq("/createItem?name=" + jobName), captureString.capture(), eq(true));
+ verify(client).post_xml(eq("/createItem?name=" + jobName), captureString.capture(), eq(false));
String xmlReturn = captureString.getValue();
assertEquals(xmlReturn, xmlString);
}
From c77149dfe44a1bb49fc1ff4ff3e613a78cb70277 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 18 Aug 2016 17:58:10 +0200
Subject: [PATCH 036/197] Fixed #176 HttpResponseException: Not Found
(createJob) o Followup and fix the appropriate integration test to use
crumbFlag=true.
---
.../java/com/offbytwo/jenkins/integration/JenkinsServerIT.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
index 6815db03..59100302 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
@@ -141,7 +141,7 @@ public void testCreateJob() throws Exception {
jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB);
String sourceXml = server.getJobXml(JENKINS_TEST_JOB);
- server.createJob(jobName, sourceXml);
+ server.createJob(jobName, sourceXml, true);
Map jobs = server.getJobs();
assertTrue(jobs.containsKey(jobName));
From 8cd78f887a509f71d00ce4ab29c9a718867562ca Mon Sep 17 00:00:00 2001
From: Tom
Date: Wed, 24 Aug 2016 18:42:12 +0100
Subject: [PATCH 037/197] Move getTestReport method from MavenBuild to the
Build object as it's a Build concept rather than a Maven one
---
.../src/main/java/com/offbytwo/jenkins/model/Build.java | 4 ++++
.../src/main/java/com/offbytwo/jenkins/model/MavenBuild.java | 4 ----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 1d134a8b..6e749816 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -57,6 +57,10 @@ public BuildWithDetails details() throws IOException {
return client.get(url, BuildWithDetails.class);
}
+ public TestReport getTestReport() throws IOException {
+ return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
+ }
+
/*
* This Change (Bad Practice) is due to inconsistencies in Jenkins various
* versions. Jenkins changed their API from post to get and from get to post
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
index ec46719a..3b2dec73 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
@@ -18,8 +18,4 @@ public MavenBuild(int number, String url) {
public MavenModule getMavenModule() throws IOException {
return client.get(this.getUrl() + "/mavenArtifacts/", MavenModule.class);
}
-
- public TestReport getTestReport() throws IOException {
- return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
- }
}
From f922407554802a628b524a6a5fc7accaa2339fdb Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 24 Aug 2016 21:41:37 +0200
Subject: [PATCH 038/197] Improved Contribution description.
---
README.md | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index ef07a5ea..d77dd79a 100644
--- a/README.md
+++ b/README.md
@@ -109,7 +109,16 @@ to add. Afterwards you can create an appropriate pull request.
It is required if you want to get a Pull request to be integrated into please
squash your commits into a single commit which references the issue in the
-commit message.
+commit message which looks like this:
+
+```
+Fixed #Issue
+ o Description.
+```
+
+This makes it simpler to merge it and this will also close the
+appropriate issue automatically in one go. This make the life as
+maintainer a little bit easier.
A pull request has to fulfill only a single ticket and should never
create/add/fix several issues in one, cause otherwise the history is hard to
From f2a11073567ddf70bc2961541bc3ddef81e13e2b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 24 Aug 2016 21:49:17 +0200
Subject: [PATCH 039/197] Improved ReleaseNotes.
---
ReleaseNotes.md | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index bd4db3b8..3a46f0bd 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -56,10 +56,16 @@
`JobWithDetails`, `MavenJobWithDetails`, `MavenModule`, `MavenModuleRecord`,
`PluginManager`
+ [Fixed issue 179][issue-179]
+
+ The `getTestReport` has been moved up from `MavenBuild` into
+ `Build` class. This makes the `TestReport` accessible
+ from any kind of build and not only from a Maven build.
+
[Fixed issue 174][issue-174]
- jenkins.getComputerSet().getComputer() produced an error.
- Changed getComputer() into getComputers() cause it returns
+ `jenkins.getComputerSet().getComputer()` produced an error.
+ Changed `getComputer()` into `getComputers()` cause it returns
a list an not only a single computer.
Based on the above problem the `Executor` needed to be changed to
represent the correct data which is being returned.
@@ -579,6 +585,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-172]: https://github.com/jenkinsci/java-client-api/issues/172
[issue-174]: https://github.com/jenkinsci/java-client-api/issues/174
[issue-176]: https://github.com/jenkinsci/java-client-api/issues/176
+[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
From 42355ae7a27a0c20fa837feb59ff437699d9effd Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 24 Aug 2016 21:58:05 +0200
Subject: [PATCH 040/197] Updated README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d77dd79a..cf4e3f27 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ To get started add the following dependency to your project
com.offbytwo.jenkins
jenkins-client
- 0.3.5
+ 0.3.6
```
From e42f2e335e8cad39489da3a11c5189620cb9668c Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 27 Aug 2016 17:24:17 +0200
Subject: [PATCH 041/197] Improved README.
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index cf4e3f27..59b1cd39 100644
--- a/README.md
+++ b/README.md
@@ -20,11 +20,11 @@ To get started add the following dependency to your project
```
-Starting with Release 0.4.0 the groupId/artifactId will change (NOT YET DONE!)
+Starting with a future release 0.4.0 the groupId/artifactId will change (NOT YET DONE!)
```xml
- NOT YET FINALIZED
+ NOT YET FINALIZED NOR RELEASED !!!
org.jenkins-ci.lib
java-client-api
0.4.0
From 9d388e5ff13e1101037d9e19b3ab27df43bd0a4e Mon Sep 17 00:00:00 2001
From: Raphael Pionke
Date: Sat, 27 Aug 2016 11:09:03 +0200
Subject: [PATCH 042/197] Fixed #182 remove duplicated code
---
.../jenkins/client/JenkinsHttpClient.java | 20 -------------------
1 file changed, 20 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 322ecd0f..535880e1 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -32,9 +32,6 @@
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.CoreConnectionPNames;
-import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
@@ -56,9 +53,6 @@
public class JenkinsHttpClient {
private final Logger LOGGER = LoggerFactory.getLogger( getClass() );
-
- private static final int SO_TIMEOUT_IN_MILLISECONDS = 3000;
- private static final int CONNECTION_TIMEOUT_IN_MILLISECONDS = 500;
private URI uri;
private CloseableHttpClient client;
@@ -113,20 +107,6 @@ public JenkinsHttpClient(URI uri, HttpClientBuilder builder) {
*/
public JenkinsHttpClient(URI uri) {
this(uri, HttpClientBuilder.create());
- this.context = uri.getPath();
-
- if (!context.endsWith("/")) {
- context += "/";
- }
- this.uri = uri;
- this.mapper = getDefaultMapper();
-
- HttpParams httpParams = new BasicHttpParams();
- httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT_IN_MILLISECONDS);
- httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT_IN_MILLISECONDS);
-
- this.httpResponseValidator = new HttpResponseValidator();
- LOGGER.debug("uri={}", uri.toString());
}
/**
From 584b94aaa37a73329bfa562f41e79a2d846e6c90 Mon Sep 17 00:00:00 2001
From: khmarbaise
Date: Mon, 29 Aug 2016 19:42:28 +0200
Subject: [PATCH 043/197] Added information about fixed Issue #182 to
ReleaseNotes
---
ReleaseNotes.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 3a46f0bd..bae95a93 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -4,6 +4,8 @@
### General Changes
+[Fixed #182 remove duplicated code][issue-182]
+
[Upgraded Maven Plugins][issue-167]
* maven-release-plugin to 2.5.3
@@ -586,6 +588,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-174]: https://github.com/jenkinsci/java-client-api/issues/174
[issue-176]: https://github.com/jenkinsci/java-client-api/issues/176
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
+[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
From 7674485b9235dd1079cfec647ef54bcb0a14d6bf Mon Sep 17 00:00:00 2001
From: khmarbaise
Date: Wed, 31 Aug 2016 21:04:02 +0200
Subject: [PATCH 044/197] [maven-release-plugin] prepare release
jenkins-client-parent-0.3.6
---
jenkins-client-it-docker/pom.xml | 7 ++-----
jenkins-client/pom.xml | 7 ++-----
pom.xml | 9 +++------
3 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 35d3eb8c..6a7407b9 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -5,16 +5,13 @@
~ Distributed under the MIT license: http://opensource.org/licenses/MIT
-->
-
+
4.0.0
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6-SNAPSHOT
+ 0.3.6
jenkins-client-it-docker
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index 411eb90a..e1cf9f6a 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -5,16 +5,13 @@
~ Distributed under the MIT license: http://opensource.org/licenses/MIT
-->
-
+
4.0.0
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6-SNAPSHOT
+ 0.3.6
jenkins-client
diff --git a/pom.xml b/pom.xml
index a5f46324..127132f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,10 +5,7 @@
~ Distributed under the MIT license: http://opensource.org/licenses/MIT
-->
-
+
4.0.0
@@ -23,14 +20,14 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6-SNAPSHOT
+ 0.3.6
pom
scm:git:https://github.com/jenkinsci/java-client-api.git
scm:git:ssh://git@github.com/jenkinsci/java-client-api.git
https://github.com/jenkinsci/java-client-api
- HEAD
+ jenkins-client-parent-0.3.6
From a64c353fb8ce88c7336ff45ba7e52d3e89b1b097 Mon Sep 17 00:00:00 2001
From: khmarbaise
Date: Wed, 31 Aug 2016 21:04:15 +0200
Subject: [PATCH 045/197] [maven-release-plugin] prepare for next development
iteration
---
jenkins-client-it-docker/pom.xml | 2 +-
jenkins-client/pom.xml | 2 +-
pom.xml | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 6a7407b9..f5ee00c9 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -11,7 +11,7 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6
+ 0.3.7-SNAPSHOT
jenkins-client-it-docker
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index e1cf9f6a..be81d4bf 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -11,7 +11,7 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6
+ 0.3.7-SNAPSHOT
jenkins-client
diff --git a/pom.xml b/pom.xml
index 127132f1..8282b325 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,14 +20,14 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.6
+ 0.3.7-SNAPSHOT
pom
scm:git:https://github.com/jenkinsci/java-client-api.git
scm:git:ssh://git@github.com/jenkinsci/java-client-api.git
https://github.com/jenkinsci/java-client-api
- jenkins-client-parent-0.3.6
+ HEAD
From b763db9d924c97a3c13ec795c4bf4894b83e029e Mon Sep 17 00:00:00 2001
From: khmarbaise
Date: Wed, 31 Aug 2016 21:14:52 +0200
Subject: [PATCH 046/197] Updated README.md and ReleaseNotes to newest release.
---
README.md | 1 -
ReleaseNotes.md | 5 ++++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 59b1cd39..a6bdff29 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,6 @@ covered by the usual integration tests.
You can find details about the different releases in the [Release Notes](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md).
- * [Release 0.4.0](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-040).
* [Release 0.3.6](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-036).
* [Release 0.3.5](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-035).
* [Release 0.3.4](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-034).
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index bae95a93..233b4696 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,6 +1,9 @@
# Release Notes
-## Release 0.3.6 (NOT RELEASED YET)
+## Release 0.3.7 (NOT RELEASED YET)
+
+
+## Release 0.3.6
### General Changes
From ea23a4b87fa75d643f520051aeb8fc621be308b9 Mon Sep 17 00:00:00 2001
From: khmarbaise
Date: Mon, 19 Sep 2016 21:26:23 +0200
Subject: [PATCH 047/197] Fixed #186 IllegalStateException is thrown when
calling JobWithDetails.getAllBuilds(Range range)
---
ReleaseNotes.md | 4 +
.../com/offbytwo/jenkins/helper/Range.java | 141 +++++++++---------
.../offbytwo/jenkins/helper/RangeTest.java | 41 ++---
3 files changed, 98 insertions(+), 88 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 233b4696..23aff322 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,9 @@
## Release 0.3.7 (NOT RELEASED YET)
+[Fixed Issue 186][issue-186]
+
+ * Correctly escaping `{` and `}` for range syntax.
## Release 0.3.6
@@ -592,6 +595,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-176]: https://github.com/jenkinsci/java-client-api/issues/176
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
+[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
index 642fd8d5..8b70eb09 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
@@ -31,104 +31,107 @@
*/
public final class Range {
+ public static final String CURLY_BRACKET_OPEN = "%7B"; // {
+ public static final String CURLY_BRACKET_CLOSE = "%7D"; // }
+
private Integer from;
private Integer to;
private Range() {
- this.from = null;
- this.to = null;
+ this.from = null;
+ this.to = null;
}
private Range setFrom(int from) {
- if (from < 0) {
- throw new IllegalArgumentException("from value must be greater or equal null.");
- }
- this.from = new Integer(from);
- return this;
+ if (from < 0) {
+ throw new IllegalArgumentException("from value must be greater or equal null.");
+ }
+ this.from = new Integer(from);
+ return this;
}
private Range setTo(int to) {
- if (to < 0) {
- throw new IllegalArgumentException("to must be greater or equal null.");
- }
- this.to = new Integer(to);
- return this;
+ if (to < 0) {
+ throw new IllegalArgumentException("to must be greater or equal null.");
+ }
+ this.to = new Integer(to);
+ return this;
}
public String getRangeString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- if (this.from != null) {
- sb.append(String.format("%d", this.from));
- }
+ StringBuilder sb = new StringBuilder();
+ sb.append(CURLY_BRACKET_OPEN);
+ if (this.from != null) {
+ sb.append(String.format("%d", this.from));
+ }
- sb.append(',');
+ sb.append(',');
- if (this.to != null) {
- sb.append(String.format("%d", this.to));
- }
+ if (this.to != null) {
+ sb.append(String.format("%d", this.to));
+ }
- sb.append('}');
- return sb.toString();
+ sb.append(CURLY_BRACKET_CLOSE);
+ return sb.toString();
}
public static final class FromBuilder {
- private Range range;
-
- public FromBuilder(Range range) {
- this.range = range;
- }
-
- public Range to(int t) {
- this.range.setTo(t);
- if (range.to <= range.from) {
- throw new IllegalArgumentException("to must be greater than from");
- }
- return this.range;
- }
-
- public Range build() {
- return this.range;
- }
+ private Range range;
+
+ public FromBuilder(Range range) {
+ this.range = range;
+ }
+
+ public Range to(int t) {
+ this.range.setTo(t);
+ if (range.to <= range.from) {
+ throw new IllegalArgumentException("to must be greater than from");
+ }
+ return this.range;
+ }
+
+ public Range build() {
+ return this.range;
+ }
}
public static final class ToBuilder {
- private Range range;
+ private Range range;
- public ToBuilder(Range range) {
- this.range = range;
- }
+ public ToBuilder(Range range) {
+ this.range = range;
+ }
- public Range build() {
- return this.range;
- }
+ public Range build() {
+ return this.range;
+ }
}
public static final class Builder {
- private Range range;
-
- protected Builder() {
- this.range = new Range();
- }
-
- public FromBuilder from(int f) {
- this.range.setFrom(f);
- return new FromBuilder(this.range);
- }
-
- public ToBuilder to(int t) {
- this.range.setTo(t);
- return new ToBuilder(this.range);
- }
-
- public Range only(int only) {
- this.range.from = new Integer(only);
- this.range.to = new Integer(only + 1);
- return this.range;
- }
+ private Range range;
+
+ protected Builder() {
+ this.range = new Range();
+ }
+
+ public FromBuilder from(int f) {
+ this.range.setFrom(f);
+ return new FromBuilder(this.range);
+ }
+
+ public ToBuilder to(int t) {
+ this.range.setTo(t);
+ return new ToBuilder(this.range);
+ }
+
+ public Range only(int only) {
+ this.range.from = new Integer(only);
+ this.range.to = new Integer(only + 1);
+ return this.range;
+ }
}
public static Builder build() {
- return new Builder();
+ return new Builder();
}
}
\ No newline at end of file
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
index 095ff292..d156a317 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
@@ -25,32 +25,35 @@
*
*
* @author Karl Heinz Marbaise
- *
*/
public class RangeTest {
+ private String getEscaped(String m) {
+ return Range.CURLY_BRACKET_OPEN + m + Range.CURLY_BRACKET_CLOSE;
+ }
+
@Test
public void fromToGiven() {
- Range r = Range.build().from(1).to(5);
- assertThat(r.getRangeString()).isEqualTo("{1,5}");
+ Range r = Range.build().from(1).to(5);
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("1,5"));
}
-
+
@Test
public void onlyFromGiven() {
- Range r = Range.build().from(3).build();
- assertThat(r.getRangeString()).isEqualTo("{3,}");
+ Range r = Range.build().from(3).build();
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("3,"));
}
@Test
public void onlyToGiven() {
- Range r = Range.build().to(5).build();
- assertThat(r.getRangeString()).isEqualTo("{,5}");
+ Range r = Range.build().to(5).build();
+ assertThat(r.getRangeString()).isEqualTo(getEscaped(",5"));
}
@Test
public void onlyGiven() {
- Range r = Range.build().only(3);
- assertThat(r.getRangeString()).isEqualTo("{3,4}");
+ Range r = Range.build().only(3);
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("3,4"));
}
@Rule
@@ -58,22 +61,22 @@ public void onlyGiven() {
@Test
public void toIsGivenLargerThanFromShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater than from");
- Range.build().from(5).to(1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("to must be greater than from");
+ Range.build().from(5).to(1);
}
@Test
public void fromGivenNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("from value must be greater or equal null.");
- Range.build().from(-1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("from value must be greater or equal null.");
+ Range.build().from(-1);
}
@Test
public void fromGivenPositiveToNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater or equal null.");
- Range.build().from(5).to(-1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("to must be greater or equal null.");
+ Range.build().from(5).to(-1);
}
}
From 7a1877beb389bc16887f706898ccd4884a5d66f3 Mon Sep 17 00:00:00 2001
From: Peter Laszlo
Date: Thu, 6 Oct 2016 14:55:46 +0100
Subject: [PATCH 048/197] Fixed #38787 Returning null instead of IOException if
view is not found in JenkinsServer.getView
---
.../com/offbytwo/jenkins/JenkinsServer.java | 31 ++++++++++++-------
1 file changed, 20 insertions(+), 11 deletions(-)
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 2178e63c..6be99be9 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -236,18 +236,27 @@ public View getView(FolderJob folder, String name) throws IOException {
if (folder != null) {
path = folder.getUrl();
}
-
- View resultView = client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
- resultView.setClient(client);
-
- //TODO: Think about the following? Does there exists a simpler/more elegant method?
- for (Job job : resultView.getJobs()) {
- job.setClient(client);
- }
- for (View view : resultView.getViews()) {
- view.setClient(client);
+
+ try {
+ View resultView = client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
+ resultView.setClient(client);
+
+ //TODO: Think about the following? Does there exists a simpler/more elegant method?
+ for (Job job : resultView.getJobs()) {
+ job.setClient(client);
+ }
+ for (View view : resultView.getViews()) {
+ view.setClient(client);
+ }
+ return resultView;
+ } catch (HttpResponseException e) {
+ LOGGER.debug("getView(folder={}, name={}) status={}", folder, name, e.getStatusCode());
+ if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+ //TODO: Think hard about this.
+ return null;
+ }
+ throw e;
}
- return resultView;
}
/**
From ba23bb9a1a1c1d5de82844c7ed75c11ca5488c31 Mon Sep 17 00:00:00 2001
From: Peter Laszlo
Date: Fri, 7 Oct 2016 10:55:35 +0100
Subject: [PATCH 049/197] Fixed issue #38816: Adding methods for creating and
updating views
---
.../com/offbytwo/jenkins/JenkinsServer.java | 60 +++++++++++++++++++
1 file changed, 60 insertions(+)
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 2178e63c..bd9526c7 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -375,6 +375,52 @@ public void createJob(FolderJob folder, String jobName, String jobXml, Boolean c
client.post_xml(path + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
}
+ /**
+ * Create a view on the server using the provided xml
+ *
+ * @return the new view object
+ * @throws IOException
+ */
+ public void createView(String viewName, String viewXml) throws IOException {
+ createView(null, viewName, viewXml, false);
+ }
+
+ /**
+ * Create a view on the server using the provided xml
+ *
+ * @return the new view object
+ * @throws IOException
+ */
+ public void createView(String viewName, String viewXml, Boolean crumbFlag) throws IOException {
+ createView(null, viewName, viewXml, crumbFlag);
+ }
+
+ /**
+ * Create a view on the server using the provided xml and in the provided
+ * folder
+ *
+ * @return the new view object
+ * @throws IOException
+ */
+ public void createView(FolderJob folder, String viewName, String viewXml) throws IOException {
+ createView(folder, viewName, viewXml, false);
+ }
+
+ /**
+ * Create a view on the server using the provided xml and in the provided
+ * folder
+ *
+ * @return the new view object
+ * @throws IOException
+ */
+ public void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag) throws IOException {
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
+ client.post_xml(path + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml, crumbFlag);
+ }
+
/**
* Create a folder on the server (in the root)
*
@@ -478,6 +524,20 @@ public PluginManager getPluginManager() throws IOException {
return client.get( "pluginManager/?depth=2", PluginManager.class );
}
+ /**
+ * Update the xml description of an existing view
+ *
+ * @return the new view object
+ * @throws IOException
+ */
+ public void updateView(String viewName, String viewXml) throws IOException {
+ this.updateView(viewName, viewXml, true);
+ }
+
+ public void updateView(String viewName, String viewXml, boolean crumbFlag) throws IOException {
+ client.post_xml("/view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
+ }
+
/**
* Update the xml description of an existing job
*
From f863f5f707b704dd2ab9734087cecbef9663dff7 Mon Sep 17 00:00:00 2001
From: Peter Laszlo
Date: Thu, 6 Oct 2016 15:27:31 +0100
Subject: [PATCH 050/197] Fixed 38823 Adding a new JenkinsServer.deleteJob
function with folder, jobName and crumbFlag parameters
---
.../com/offbytwo/jenkins/JenkinsServer.java | 27 ++++++++++++++-----
1 file changed, 20 insertions(+), 7 deletions(-)
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 2178e63c..890c3d56 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -527,28 +527,41 @@ public void cancelQuietDown() throws IOException {
}
}
- /*
- * Delete a job from jenkins
+ /**
+ * Delete a job from Jenkins within a folder.
+ *
+ * @param folder The folder where the given job is located.
+ * @param jobName The job which should be deleted.
*
* @throws IOException
*/
- public void deleteJob(String jobName) throws IOException {
- client.post("/job/" + EncodingUtils.encode(jobName) + "/doDelete");
+ public void deleteJob(FolderJob folder, String jobName) throws IOException {
+ deleteJob(folder, jobName, false);
}
-
+
/**
* Delete a job from Jenkins within a folder.
*
* @param folder The folder where the given job is located.
* @param jobName The job which should be deleted.
+ * @param crumbFlag The crumbFlag
* @throws IOException in case of problems.
*/
- public void deleteJob(FolderJob folder, String jobName) throws IOException {
+ public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
String path = "/";
if (folder != null) {
path = folder.getUrl();
}
- client.post(path + "/job/" + EncodingUtils.encode(jobName) + "/doDelete");
+ client.post(path + "/job/" + EncodingUtils.encode(jobName) + "/doDelete", crumbFlag);
+ }
+
+ /*
+ * Delete a job from jenkins
+ *
+ * @throws IOException
+ */
+ public void deleteJob(String jobName) throws IOException {
+ client.post("/job/" + EncodingUtils.encode(jobName) + "/doDelete");
}
/**
From e6f2b65d2f5f65a83d75b6ff638f232531213c3c Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 2 Nov 2016 17:41:55 +0100
Subject: [PATCH 051/197] Updated ReleaseNotes for Issue 38823
---
ReleaseNotes.md | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 23aff322..f368f6c4 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -6,6 +6,19 @@
* Correctly escaping `{` and `}` for range syntax.
+
+### API Changes
+
+ * [Fixed Issue 38823[jissue-38823]
+
+ Added an deleteJob method with a crumbFlag.
+
+```java
+public class JenkinsServer {
+ deleteJob(FolderJob folder, String jobName, boolean crumbFlag);
+}
+```
+
## Release 0.3.6
### General Changes
@@ -602,3 +615,4 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
+[jissue-38823]: https://issues.jenkins-ci.org/browse/JENKINS-38823
From 83aa09a9e6df21f840127ccda34c82a45672780b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 2 Nov 2016 17:53:56 +0100
Subject: [PATCH 052/197] Updated ReleaseNotes according to issue 38816.
---
ReleaseNotes.md | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index f368f6c4..85e059c7 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -19,6 +19,22 @@ public class JenkinsServer {
}
```
+ * [Fixed Issue 38816][jissue-38816]
+
+ Added several methods for creating/updating views.
+
+```java
+public class JenkinsServer {
+ void createView(String viewName, String viewXml);
+ void createView(String viewName, String viewXml, Boolean crumbFlag);
+ void createView(FolderJob folder, String viewName, String viewXml);
+ void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag);
+ void updateView(String viewName, String viewXml);
+ void updateView(String viewName, String viewXml, boolean crumbFlag);
+}
+```
+
+
## Release 0.3.6
### General Changes
@@ -615,4 +631,5 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
+[jissue-38816]: https://issues.jenkins-ci.org/browse/JENKINS-38816
[jissue-38823]: https://issues.jenkins-ci.org/browse/JENKINS-38823
From 7356c44a9129be5a41408182259d3d1f656c2b85 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Wed, 2 Nov 2016 17:56:52 +0100
Subject: [PATCH 053/197] Updated ReleaseNotes according to issue 38787.
---
ReleaseNotes.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 85e059c7..959c4278 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -34,6 +34,10 @@ public class JenkinsServer {
}
```
+ * [Fixed Issue 38787][jissue-38787]
+
+ Returning null instead of IOException if view is not found in JenkinsServer.getView
+
## Release 0.3.6
@@ -631,5 +635,6 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
+[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
[jissue-38816]: https://issues.jenkins-ci.org/browse/JENKINS-38816
[jissue-38823]: https://issues.jenkins-ci.org/browse/JENKINS-38823
From 6b12b6a0edbf3ecd8ae79e8e7c4d2e87db765f35 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 4 Nov 2016 17:31:32 +0100
Subject: [PATCH 054/197] Fixed #201 o MavenJobWithDetails behaves different
than JobWithDetails for methods
---
ReleaseNotes.md | 23 ++
.../com/offbytwo/jenkins/model/Build.java | 12 +
.../jenkins/model/JobWithDetails.java | 237 +++++++++---------
.../offbytwo/jenkins/model/MavenBuild.java | 12 +
.../jenkins/model/MavenJobWithDetails.java | 106 ++++++--
5 files changed, 255 insertions(+), 135 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 959c4278..73fd5c9c 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -39,6 +39,28 @@ public class JenkinsServer {
Returning null instead of IOException if view is not found in JenkinsServer.getView
+ * [Fixed Issue 201][issue-201]
+
+ `MavenJobsWithDetails` is now in line with `JobWithDetails` and returns
+ `MavenBuild.BUILD_HAS_NEVER_RUN` in cases where the run has not taken
+ place yet.
+
+```java
+public class MavenJobWithDetails {
+ public MavenBuild getLastBuild();
+ public MavenBuild getLastCompletedBuild();
+ public MavenBuild getLastFailedBuild();
+ public MavenBuild getLastStableBuild();
+ public MavenBuild getLastSuccessfulBuild();
+ public MavenBuild getLastUnstableBuild();
+ public MavenBuild getLastUnsuccessfulBuild();
+
+}
+```
+
+ The `getBuilds()` method will return an empty list instead of `NULL` in cases no
+ builds exists.
+
## Release 0.3.6
### General Changes
@@ -629,6 +651,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
+[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 6e749816..4eae5fe7 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -53,6 +53,18 @@ public String getUrl() {
return url;
}
+ protected void setNumber(int number) {
+ this.number = number;
+ }
+
+ protected void setQueueId(int queueId) {
+ this.queueId = queueId;
+ }
+
+ protected void setUrl(String url) {
+ this.url = url;
+ }
+
public BuildWithDetails details() throws IOException {
return client.get(url, BuildWithDetails.class);
}
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 e3a25783..f536db25 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
@@ -25,7 +25,7 @@
public class JobWithDetails extends Job {
private String description;
-
+
private String displayName;
private boolean buildable;
@@ -58,13 +58,11 @@ public class JobWithDetails extends Job {
private List upstreamProjects;
- public String getDescription()
- {
+ public String getDescription() {
return description;
}
- public boolean hasDescription()
- {
+ public boolean hasDescription() {
return description != null && !description.isEmpty();
}
@@ -87,14 +85,13 @@ public boolean isInQueue() {
* won't get back all builds via this method. In such cases you need to use
* {@link #getAllBuilds()}.
*
- * @return the list of {@link Build}. In case of no builds have been
- * executed yet return {@link Collections#emptyList()}.
+ * @return the list of {@link Build}. In case of no builds have been
+ * executed yet return {@link Collections#emptyList()}.
*/
public List getBuilds() {
if (builds == null) {
return Collections.emptyList();
- }
- else {
+ } else {
return transform(builds, new Function() {
@Override
public Build apply(Build from) {
@@ -113,8 +110,8 @@ public Build apply(Build from) {
* particular build {@link Build#details()} to reduce the amount of data
* which needed to be transfered.
*
- * @return the list of {@link Build}. In case of no builds have been
- * executed yet return {@link Collections#emptyList()}.
+ * @return the list of {@link Build}. In case of no builds have been
+ * executed yet return {@link Collections#emptyList()}.
* @throws IOException
* In case of failure.
* @see Jenkins
@@ -164,10 +161,12 @@ public Build apply(Build from) {
* existing builds for a job. The only option is to get all builds via
* {@link #getAllBuilds()}.
*
- * @param range {@link Range}
- * @return the list of {@link Build}. In case of no builds have been
- * executed yet return {@link Collections#emptyList()}.
- * @throws IOException in case of an error.
+ * @param range
+ * {@link Range}
+ * @return the list of {@link Build}. In case of no builds have been
+ * executed yet return {@link Collections#emptyList()}.
+ * @throws IOException
+ * in case of an error.
*/
public List getAllBuilds(Range range) throws IOException {
String path = "/" + "job/" + EncodingUtils.encode(this.getName())
@@ -208,8 +207,8 @@ private Build buildWithClient(Build from) {
/**
* @return the first build which has been executed or
- * {@link Build#BUILD_HAS_NEVER_RAN} is this has never
- * been executed.
+ * {@link Build#BUILD_HAS_NEVER_RAN} is this has never been
+ * executed.
*/
public Build getFirstBuild() {
if (firstBuild == null) {
@@ -219,6 +218,10 @@ public Build getFirstBuild() {
}
}
+ /**
+ * @return The lastBuild. If {@link #lastBuild} has never been run
+ * {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ */
public Build getLastBuild() {
if (lastBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -227,6 +230,10 @@ public Build getLastBuild() {
}
}
+ /**
+ * @return The lastCompletedBuild. If {@link #lastCompletedBuild} has never
+ * been run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ */
public Build getLastCompletedBuild() {
if (lastCompletedBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -235,6 +242,10 @@ public Build getLastCompletedBuild() {
}
}
+ /**
+ * @return The lastFailedBuild. If {@link #lastFailedBuild} has never been
+ * run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ */
public Build getLastFailedBuild() {
if (lastFailedBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -243,6 +254,10 @@ public Build getLastFailedBuild() {
}
}
+ /**
+ * @return The lastStableBuild. If {@link #lastStableBuild} has never been
+ * run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ */
public Build getLastStableBuild() {
if (lastStableBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -251,6 +266,11 @@ public Build getLastStableBuild() {
}
}
+ /**
+ * @return The lastSuccessfulBuild. If {@link #lastSuccessfulBuild} has
+ * never been run {@link Build#BUILD_HAS_NEVER_RAN} will be
+ * returned.
+ */
public Build getLastSuccessfulBuild() {
if (lastSuccessfulBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -259,6 +279,10 @@ public Build getLastSuccessfulBuild() {
}
}
+ /**
+ * @return The lastUnstableBuild. If {@link #lastUnstableBuild} has never
+ * been run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ */
public Build getLastUnstableBuild() {
if (lastUnstableBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -267,6 +291,11 @@ public Build getLastUnstableBuild() {
}
}
+ /**
+ * @return The lastUnsuccessfulBuild. If {@link #lastUnsuccessfulBuild} has
+ * never been run {@link Build#BUILD_HAS_NEVER_RAN} will be
+ * returned.
+ */
public Build getLastUnsuccessfulBuild() {
if (lastUnsuccessfulBuild == null) {
return Build.BUILD_HAS_NEVER_RAN;
@@ -280,9 +309,8 @@ public int getNextBuildNumber() {
}
/**
- * @return the list of downstream projects.
- * If no downstream projects exist just return
- * an empty list {@link Collections#emptyList()}.
+ * @return the list of downstream projects. If no downstream projects exist
+ * just return an empty list {@link Collections#emptyList()}.
*/
public List getDownstreamProjects() {
if (downstreamProjects == null) {
@@ -293,9 +321,8 @@ public List getDownstreamProjects() {
}
/**
- * @return the list of upstream projects.
- * If no upstream projects exist just return
- * an empty list {@link Collections#emptyList()}.
+ * @return the list of upstream projects. If no upstream projects exist just
+ * return an empty list {@link Collections#emptyList()}.
*/
public List getUpstreamProjects() {
if (upstreamProjects == null) {
@@ -320,7 +347,7 @@ public boolean apply(Build input) {
};
Optional optionalBuild = Iterables.tryFind(builds, isMatchingBuildNumber);
- //TODO: Check if we could use Build#NO...instead of Null?
+ // TODO: Check if we could use Build#NO...instead of Null?
return optionalBuild.orNull() == null ? null : buildWithClient(optionalBuild.orNull());
}
@@ -333,143 +360,113 @@ public Job apply(Job job) {
}
@Override
- public int hashCode()
- {
+ public int hashCode() {
final int prime = 31;
int result = super.hashCode();
- result = prime * result + ( buildable ? 1231 : 1237 );
- result = prime * result + ( ( builds == null ) ? 0 : builds.hashCode() );
- result = prime * result + ( ( description == null ) ? 0 : description.hashCode() );
- result = prime * result + ( ( displayName == null ) ? 0 : displayName.hashCode() );
- result = prime * result + ( ( downstreamProjects == null ) ? 0 : downstreamProjects.hashCode() );
- result = prime * result + ( ( firstBuild == null ) ? 0 : firstBuild.hashCode() );
- result = prime * result + ( inQueue ? 1231 : 1237 );
- result = prime * result + ( ( lastBuild == null ) ? 0 : lastBuild.hashCode() );
- result = prime * result + ( ( lastCompletedBuild == null ) ? 0 : lastCompletedBuild.hashCode() );
- result = prime * result + ( ( lastFailedBuild == null ) ? 0 : lastFailedBuild.hashCode() );
- result = prime * result + ( ( lastStableBuild == null ) ? 0 : lastStableBuild.hashCode() );
- result = prime * result + ( ( lastSuccessfulBuild == null ) ? 0 : lastSuccessfulBuild.hashCode() );
- result = prime * result + ( ( lastUnstableBuild == null ) ? 0 : lastUnstableBuild.hashCode() );
- result = prime * result + ( ( lastUnsuccessfulBuild == null ) ? 0 : lastUnsuccessfulBuild.hashCode() );
+ result = prime * result + (buildable ? 1231 : 1237);
+ result = prime * result + ((builds == null) ? 0 : builds.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
+ result = prime * result + ((downstreamProjects == null) ? 0 : downstreamProjects.hashCode());
+ result = prime * result + ((firstBuild == null) ? 0 : firstBuild.hashCode());
+ result = prime * result + (inQueue ? 1231 : 1237);
+ result = prime * result + ((lastBuild == null) ? 0 : lastBuild.hashCode());
+ result = prime * result + ((lastCompletedBuild == null) ? 0 : lastCompletedBuild.hashCode());
+ result = prime * result + ((lastFailedBuild == null) ? 0 : lastFailedBuild.hashCode());
+ result = prime * result + ((lastStableBuild == null) ? 0 : lastStableBuild.hashCode());
+ result = prime * result + ((lastSuccessfulBuild == null) ? 0 : lastSuccessfulBuild.hashCode());
+ result = prime * result + ((lastUnstableBuild == null) ? 0 : lastUnstableBuild.hashCode());
+ result = prime * result + ((lastUnsuccessfulBuild == null) ? 0 : lastUnsuccessfulBuild.hashCode());
result = prime * result + nextBuildNumber;
- result = prime * result + ( ( queueItem == null ) ? 0 : queueItem.hashCode() );
- result = prime * result + ( ( upstreamProjects == null ) ? 0 : upstreamProjects.hashCode() );
+ result = prime * result + ((queueItem == null) ? 0 : queueItem.hashCode());
+ result = prime * result + ((upstreamProjects == null) ? 0 : upstreamProjects.hashCode());
return result;
}
@Override
- public boolean equals( Object obj )
- {
- if ( this == obj )
+ public boolean equals(Object obj) {
+ if (this == obj)
return true;
- if ( !super.equals( obj ) )
+ if (!super.equals(obj))
return false;
- if ( getClass() != obj.getClass() )
+ if (getClass() != obj.getClass())
return false;
JobWithDetails other = (JobWithDetails) obj;
- if ( buildable != other.buildable )
+ if (buildable != other.buildable)
return false;
- if ( builds == null )
- {
- if ( other.builds != null )
+ if (builds == null) {
+ if (other.builds != null)
return false;
- }
- else if ( !builds.equals( other.builds ) )
+ } else if (!builds.equals(other.builds))
return false;
- if ( description == null )
- {
- if ( other.description != null )
+ if (description == null) {
+ if (other.description != null)
return false;
- }
- else if ( !description.equals( other.description ) )
+ } else if (!description.equals(other.description))
return false;
- if ( displayName == null )
- {
- if ( other.displayName != null )
+ if (displayName == null) {
+ if (other.displayName != null)
return false;
- }
- else if ( !displayName.equals( other.displayName ) )
+ } else if (!displayName.equals(other.displayName))
return false;
- if ( downstreamProjects == null )
- {
- if ( other.downstreamProjects != null )
+ if (downstreamProjects == null) {
+ if (other.downstreamProjects != null)
return false;
- }
- else if ( !downstreamProjects.equals( other.downstreamProjects ) )
+ } else if (!downstreamProjects.equals(other.downstreamProjects))
return false;
- if ( firstBuild == null )
- {
- if ( other.firstBuild != null )
+ if (firstBuild == null) {
+ if (other.firstBuild != null)
return false;
- }
- else if ( !firstBuild.equals( other.firstBuild ) )
+ } else if (!firstBuild.equals(other.firstBuild))
return false;
- if ( inQueue != other.inQueue )
+ if (inQueue != other.inQueue)
return false;
- if ( lastBuild == null )
- {
- if ( other.lastBuild != null )
+ if (lastBuild == null) {
+ if (other.lastBuild != null)
return false;
- }
- else if ( !lastBuild.equals( other.lastBuild ) )
+ } else if (!lastBuild.equals(other.lastBuild))
return false;
- if ( lastCompletedBuild == null )
- {
- if ( other.lastCompletedBuild != null )
+ if (lastCompletedBuild == null) {
+ if (other.lastCompletedBuild != null)
return false;
- }
- else if ( !lastCompletedBuild.equals( other.lastCompletedBuild ) )
+ } else if (!lastCompletedBuild.equals(other.lastCompletedBuild))
return false;
- if ( lastFailedBuild == null )
- {
- if ( other.lastFailedBuild != null )
+ if (lastFailedBuild == null) {
+ if (other.lastFailedBuild != null)
return false;
- }
- else if ( !lastFailedBuild.equals( other.lastFailedBuild ) )
+ } else if (!lastFailedBuild.equals(other.lastFailedBuild))
return false;
- if ( lastStableBuild == null )
- {
- if ( other.lastStableBuild != null )
+ if (lastStableBuild == null) {
+ if (other.lastStableBuild != null)
return false;
- }
- else if ( !lastStableBuild.equals( other.lastStableBuild ) )
+ } else if (!lastStableBuild.equals(other.lastStableBuild))
return false;
- if ( lastSuccessfulBuild == null )
- {
- if ( other.lastSuccessfulBuild != null )
+ if (lastSuccessfulBuild == null) {
+ if (other.lastSuccessfulBuild != null)
return false;
- }
- else if ( !lastSuccessfulBuild.equals( other.lastSuccessfulBuild ) )
+ } else if (!lastSuccessfulBuild.equals(other.lastSuccessfulBuild))
return false;
- if ( lastUnstableBuild == null )
- {
- if ( other.lastUnstableBuild != null )
+ if (lastUnstableBuild == null) {
+ if (other.lastUnstableBuild != null)
return false;
- }
- else if ( !lastUnstableBuild.equals( other.lastUnstableBuild ) )
+ } else if (!lastUnstableBuild.equals(other.lastUnstableBuild))
return false;
- if ( lastUnsuccessfulBuild == null )
- {
- if ( other.lastUnsuccessfulBuild != null )
+ if (lastUnsuccessfulBuild == null) {
+ if (other.lastUnsuccessfulBuild != null)
return false;
- }
- else if ( !lastUnsuccessfulBuild.equals( other.lastUnsuccessfulBuild ) )
+ } else if (!lastUnsuccessfulBuild.equals(other.lastUnsuccessfulBuild))
return false;
- if ( nextBuildNumber != other.nextBuildNumber )
+ if (nextBuildNumber != other.nextBuildNumber)
return false;
- if ( queueItem == null )
- {
- if ( other.queueItem != null )
+ if (queueItem == null) {
+ if (other.queueItem != null)
return false;
- }
- else if ( !queueItem.equals( other.queueItem ) )
+ } else if (!queueItem.equals(other.queueItem))
return false;
- if ( upstreamProjects == null )
- {
- if ( other.upstreamProjects != null )
+ if (upstreamProjects == null) {
+ if (other.upstreamProjects != null)
return false;
- }
- else if ( !upstreamProjects.equals( other.upstreamProjects ) )
+ } else if (!upstreamProjects.equals(other.upstreamProjects))
return false;
return true;
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
index 3b2dec73..e8cd5c1f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
@@ -4,6 +4,18 @@
public class MavenBuild extends Build {
+ /**
+ * This will be returned by the API in cases where no build has ever
+ * been executed like {@link JobWithDetails#getLastBuild()} etc.
+ */
+ public static final MavenBuild BUILD_HAS_NEVER_RUN = new MavenBuild(-1, -1, "UNKNOWN");
+
+ private MavenBuild(int number, int queueId, String url) {
+ setNumber(number);
+ setQueueId(queueId);
+ setUrl(url);
+ }
+
public MavenBuild() {
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
index 6553d20d..e1e7c0ce 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
@@ -1,5 +1,6 @@
package com.offbytwo.jenkins.model;
+import java.util.Collections;
import java.util.List;
import com.google.common.base.Function;
@@ -10,6 +11,7 @@ public class MavenJobWithDetails extends MavenJob {
private String displayName;
private boolean buildable;
private List builds;
+ // TODO: What about firstBuild
private MavenBuild lastBuild;
private MavenBuild lastCompletedBuild;
private MavenBuild lastFailedBuild;
@@ -32,41 +34,107 @@ public boolean isBuildable() {
return buildable;
}
+ /**
+ * @return the list of {@link MavenBuild}. In case of no builds have been
+ * executed yet {@link Collections#emptyList()} will be returned.
+ */
public List getBuilds() {
- return Lists.transform(builds, new Function() {
- @Override
- public MavenBuild apply(MavenBuild from) {
- return buildWithClient(from);
- }
- });
+ if (builds == null) {
+ return Collections.emptyList();
+ } else {
+ return Lists.transform(builds, new Function() {
+ @Override
+ public MavenBuild apply(MavenBuild from) {
+ return buildWithClient(from);
+ }
+ });
+ }
}
+ /**
+ * @return The lastBuild. If {@link #lastBuild} has never been run
+ * {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
public MavenBuild getLastBuild() {
- return buildWithClient(lastBuild);
+ if (lastBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastBuild);
+ }
}
+ /**
+ * @return The lastCompletedBuild. If {@link #lastCompletedBuild} has never
+ * been run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
public MavenBuild getLastCompletedBuild() {
- return buildWithClient(lastCompletedBuild);
+ if (lastCompletedBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastCompletedBuild);
+ }
}
+ /**
+ * @return The lastFailedBuild. If {@link #lastFailedBuild} has never been
+ * run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
public MavenBuild getLastFailedBuild() {
- return buildWithClient(lastFailedBuild);
+ if (lastFailedBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastFailedBuild);
+ }
}
+ /**
+ * @return The lastStableBuild. If {@link #lastStableBuild} has never been
+ * run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
public MavenBuild getLastStableBuild() {
- return buildWithClient(lastStableBuild);
+ if (lastStableBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastStableBuild);
+ }
}
+ /**
+ * @return The lastSuccessfulBuild. If {@link #lastSuccessfulBuild} has
+ * never been run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be
+ * returned.
+ */
public MavenBuild getLastSuccessfulBuild() {
- return buildWithClient(lastSuccessfulBuild);
+ if (lastSuccessfulBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastSuccessfulBuild);
+ }
}
+ /**
+ * @return The lastUnstableBuild. If {@link #lastUnstableBuild} has never
+ * been run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
public MavenBuild getLastUnstableBuild() {
- return buildWithClient(lastUnstableBuild);
+ if (lastUnstableBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastUnstableBuild);
+ }
}
+ /**
+ * @return The lastUnsuccessfulBuild. If {@link #lastUnsuccessfulBuild} has
+ * never been run {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be
+ * returned.
+ */
public MavenBuild getLastUnsuccessfulBuild() {
- return buildWithClient(lastUnsuccessfulBuild);
+ if (lastUnsuccessfulBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(lastUnsuccessfulBuild);
+ }
}
public int getNextBuildNumber() {
@@ -74,11 +142,19 @@ public int getNextBuildNumber() {
}
public List getDownstreamProjects() {
- return Lists.transform(downstreamProjects, new MavenJobWithClient());
+ if (downstreamProjects == null) {
+ return Collections.emptyList();
+ } else {
+ return Lists.transform(downstreamProjects, new MavenJobWithClient());
+ }
}
public List getUpstreamProjects() {
- return Lists.transform(upstreamProjects, new MavenJobWithClient());
+ if (upstreamProjects == null) {
+ return Collections.emptyList();
+ } else {
+ return Lists.transform(upstreamProjects, new MavenJobWithClient());
+ }
}
private MavenBuild buildWithClient(MavenBuild from) {
From 3ade255eb753ed9711261ce1a009f9286f84d4eb Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 5 Nov 2016 12:36:19 +0100
Subject: [PATCH 055/197] Fixed grammar.
---
ReleaseNotes.md | 2 ++
.../NoExecutorStartedGetJobIT.java | 6 ++--
.../com/offbytwo/jenkins/model/Build.java | 2 +-
.../jenkins/model/JobWithDetails.java | 32 +++++++++----------
.../jenkins/model/JobWithDetailsTest.java | 2 +-
5 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 73fd5c9c..ae84577d 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -61,6 +61,8 @@ public class MavenJobWithDetails {
The `getBuilds()` method will return an empty list instead of `NULL` in cases no
builds exists.
+ Fixed grammar and changed `Build.BUILD_HAS_NEVER_RAN` into `Build.BUILD_HAS_NEVER_RUN`
+
## Release 0.3.6
### General Changes
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 6153b380..63c95fd1 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -93,7 +93,7 @@ public void getLastCompletedBuldShouldNotBeNull()
@Test
public void getLastFailedBuildShouldBeBUILD_HAS_NEVER_RAN()
{
- assertThat( job.getLastFailedBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RAN);
+ assertThat( job.getLastFailedBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
@@ -115,13 +115,13 @@ public void getLastSuccessfulBuildShouldNotBeNull()
@Test
public void getLastUnstableBuildShouldBeBUILD_HAS_NEVER_RAN()
{
- assertThat( job.getLastUnstableBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RAN);
+ assertThat( job.getLastUnstableBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
public void getLastUnsuccessfulBuildShouldBeBUILD_HAS_NEVER_RAN()
{
- assertThat( job.getLastUnsuccessfulBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RAN);
+ assertThat( job.getLastUnsuccessfulBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 4eae5fe7..f5f04bbe 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -16,7 +16,7 @@ public class Build extends BaseModel {
* This will be returned by the API in cases where no build has ever
* been executed like {@link JobWithDetails#getLastBuild()} etc.
*/
- public static final Build BUILD_HAS_NEVER_RAN = new Build (-1, -1, "UNKNOWN");
+ public static final Build BUILD_HAS_NEVER_RUN = new Build (-1, -1, "UNKNOWN");
private int number;
private int queueId;
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 f536db25..4828ba01 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
@@ -207,12 +207,12 @@ private Build buildWithClient(Build from) {
/**
* @return the first build which has been executed or
- * {@link Build#BUILD_HAS_NEVER_RAN} is this has never been
+ * {@link Build#BUILD_HAS_NEVER_RUN} is this has never been
* executed.
*/
public Build getFirstBuild() {
if (firstBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(firstBuild);
}
@@ -220,11 +220,11 @@ public Build getFirstBuild() {
/**
* @return The lastBuild. If {@link #lastBuild} has never been run
- * {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ * {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
*/
public Build getLastBuild() {
if (lastBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastBuild);
}
@@ -232,11 +232,11 @@ public Build getLastBuild() {
/**
* @return The lastCompletedBuild. If {@link #lastCompletedBuild} has never
- * been run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ * been run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
*/
public Build getLastCompletedBuild() {
if (lastCompletedBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastCompletedBuild);
}
@@ -244,11 +244,11 @@ public Build getLastCompletedBuild() {
/**
* @return The lastFailedBuild. If {@link #lastFailedBuild} has never been
- * run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ * run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
*/
public Build getLastFailedBuild() {
if (lastFailedBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastFailedBuild);
}
@@ -256,11 +256,11 @@ public Build getLastFailedBuild() {
/**
* @return The lastStableBuild. If {@link #lastStableBuild} has never been
- * run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ * run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
*/
public Build getLastStableBuild() {
if (lastStableBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastStableBuild);
}
@@ -268,12 +268,12 @@ public Build getLastStableBuild() {
/**
* @return The lastSuccessfulBuild. If {@link #lastSuccessfulBuild} has
- * never been run {@link Build#BUILD_HAS_NEVER_RAN} will be
+ * never been run {@link Build#BUILD_HAS_NEVER_RUN} will be
* returned.
*/
public Build getLastSuccessfulBuild() {
if (lastSuccessfulBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastSuccessfulBuild);
}
@@ -281,11 +281,11 @@ public Build getLastSuccessfulBuild() {
/**
* @return The lastUnstableBuild. If {@link #lastUnstableBuild} has never
- * been run {@link Build#BUILD_HAS_NEVER_RAN} will be returned.
+ * been run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
*/
public Build getLastUnstableBuild() {
if (lastUnstableBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastUnstableBuild);
}
@@ -293,12 +293,12 @@ public Build getLastUnstableBuild() {
/**
* @return The lastUnsuccessfulBuild. If {@link #lastUnsuccessfulBuild} has
- * never been run {@link Build#BUILD_HAS_NEVER_RAN} will be
+ * never been run {@link Build#BUILD_HAS_NEVER_RUN} will be
* returned.
*/
public Build getLastUnsuccessfulBuild() {
if (lastUnsuccessfulBuild == null) {
- return Build.BUILD_HAS_NEVER_RAN;
+ return Build.BUILD_HAS_NEVER_RUN;
} else {
return buildWithClient(lastUnsuccessfulBuild);
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/model/JobWithDetailsTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/JobWithDetailsTest.java
index 20d7e57c..36af7c96 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/model/JobWithDetailsTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/JobWithDetailsTest.java
@@ -21,7 +21,7 @@ private JobWithDetails givenNewJobWithoutAnyBuilds() {
}
private void failIfNotBuildHasNeverRanReturned(Build build) {
- assertThat(build).isEqualTo(Build.BUILD_HAS_NEVER_RAN);
+ assertThat(build).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
From 30651294852314198a76682eb1772672150b4523 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 5 Nov 2016 13:08:02 +0100
Subject: [PATCH 056/197] Fixed #202 o Added getFirstBuild() in
MavenJobWithDetails.
---
ReleaseNotes.md | 10 ++++++++++
.../jenkins/model/MavenJobWithDetails.java | 14 +++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index ae84577d..fcf78c78 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -63,6 +63,15 @@ public class MavenJobWithDetails {
Fixed grammar and changed `Build.BUILD_HAS_NEVER_RAN` into `Build.BUILD_HAS_NEVER_RUN`
+ * [Fixed Issue 202][issue-202]
+
+```java
+public class MavenJobWithDetails {
+ public MavenBuild getFirstBuild();
+}
+```
+
+
## Release 0.3.6
### General Changes
@@ -654,6 +663,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
+[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
index e1e7c0ce..b90240d3 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
@@ -11,7 +11,7 @@ public class MavenJobWithDetails extends MavenJob {
private String displayName;
private boolean buildable;
private List builds;
- // TODO: What about firstBuild
+ private MavenBuild firstBuild;
private MavenBuild lastBuild;
private MavenBuild lastCompletedBuild;
private MavenBuild lastFailedBuild;
@@ -51,6 +51,18 @@ public MavenBuild apply(MavenBuild from) {
}
}
+ /**
+ * @return The firstBuild. If {@link #firstBuild} has never been run
+ * {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
+ */
+ public MavenBuild getFirstBuild() {
+ if (firstBuild == null) {
+ return MavenBuild.BUILD_HAS_NEVER_RUN;
+ } else {
+ return buildWithClient(firstBuild);
+ }
+ }
+
/**
* @return The lastBuild. If {@link #lastBuild} has never been run
* {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
From d4a474165dd1f7288ac3fb414df684d4a965df0f Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 5 Nov 2016 14:16:22 +0100
Subject: [PATCH 057/197] Fixed #198 o Enhanced QueueItem to add information
about Task.
---
ReleaseNotes.md | 12 +++-
.../com/offbytwo/jenkins/model/QueueItem.java | 21 +++++--
.../com/offbytwo/jenkins/model/QueueTask.java | 60 +++++++++++++++++++
3 files changed, 87 insertions(+), 6 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index fcf78c78..c45a5758 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -54,7 +54,6 @@ public class MavenJobWithDetails {
public MavenBuild getLastSuccessfulBuild();
public MavenBuild getLastUnstableBuild();
public MavenBuild getLastUnsuccessfulBuild();
-
}
```
@@ -71,6 +70,16 @@ public class MavenJobWithDetails {
}
```
+ * [Fixed Issue 198][issue-198]
+
+ Enhanced the `QueueItem` to add information about the task (QueueTask).
+
+```java
+public class QueueItem {
+ public QueueTask getTask();
+}
+```
+
## Release 0.3.6
@@ -662,6 +671,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
+[issue-198]: https://github.com/jenkinsci/java-client-api/issues/198
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
index 1ada54b9..77eeca81 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
@@ -15,13 +15,10 @@ public class QueueItem extends BaseModel {
private boolean stuck;
- // task
- // name
- // url
- // color?
+ private QueueTask task;
private String url;
-
+
private String why;
private boolean cancelled;
@@ -72,6 +69,14 @@ public boolean isStuck() {
return stuck;
}
+ public QueueTask getTask() {
+ return task;
+ }
+
+ public void setTask(QueueTask task) {
+ this.task = task;
+ }
+
public void setStuck(boolean stuck) {
this.stuck = stuck;
}
@@ -120,6 +125,7 @@ public int hashCode() {
result = prime * result + ((inQueueSince == null) ? 0 : inQueueSince.hashCode());
result = prime * result + ((params == null) ? 0 : params.hashCode());
result = prime * result + (stuck ? 1231 : 1237);
+ result = prime * result + ((task == null) ? 0 : task.hashCode());
result = prime * result + ((url == null) ? 0 : url.hashCode());
result = prime * result + ((why == null) ? 0 : why.hashCode());
return result;
@@ -162,6 +168,11 @@ public boolean equals(Object obj) {
return false;
if (stuck != other.stuck)
return false;
+ if (task == null) {
+ if (other.task != null)
+ return false;
+ } else if (!task.equals(other.task))
+ return false;
if (url == null) {
if (other.url != null)
return false;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
new file mode 100644
index 00000000..539541fc
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
@@ -0,0 +1,60 @@
+package com.offbytwo.jenkins.model;
+
+public class QueueTask {
+
+ private String name;
+
+ private String url;
+
+ private String color;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((color == null) ? 0 : color.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ QueueTask other = (QueueTask) obj;
+ if (color == null) {
+ if (other.color != null)
+ return false;
+ } else if (!color.equals(other.color))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
+ return false;
+ return true;
+ }
+
+}
From 50023d2484608748c1bd0777921363e9d618e989 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 7 Nov 2016 08:31:49 +0100
Subject: [PATCH 058/197] Fixed #200 o Added getAllBuilds() and
getAllBuilds(Range range) in MavenJobWithDetails class.
---
ReleaseNotes.md | 12 ++
.../jenkins/model/AllMavenBuilds.java | 28 ++++
.../jenkins/model/MavenJobWithDetails.java | 128 ++++++++++++++++++
3 files changed, 168 insertions(+)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/AllMavenBuilds.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index c45a5758..6fc9af64 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -80,6 +80,17 @@ public class QueueItem {
}
```
+ * [Fixed Issue 200][issue-200]
+
+ Added two methods to get all builds and a range of builds
+ so we are more in line wiht JobWithDetails.
+
+```java
+public class MavenJobWithDetails {
+ public List getAllBuilds();
+ public List getAllBuilds(Range range);
+}
+```
## Release 0.3.6
@@ -672,6 +683,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
[issue-198]: https://github.com/jenkinsci/java-client-api/issues/198
+[issue-200]: https://github.com/jenkinsci/java-client-api/issues/200
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/AllMavenBuilds.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/AllMavenBuilds.java
new file mode 100644
index 00000000..3503b0f2
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/AllMavenBuilds.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
+package com.offbytwo.jenkins.model;
+
+import java.util.List;
+
+/**
+ * This class is only needed to get all builds in
+ * {@link MavenJobWithDetails#getAllBuilds()}.
+ *
+ * @author Karl Heinz Marbaise
+ *
+ * NOTE: This class is not part of any public API
+ */
+class AllMavenBuilds extends BaseModel {
+ private List allBuilds;
+
+ public AllMavenBuilds() {
+ }
+
+ public List getAllBuilds() {
+ return this.allBuilds;
+ }
+}
\ No newline at end of file
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
index b90240d3..2804e591 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
@@ -1,10 +1,21 @@
package com.offbytwo.jenkins.model;
+import static com.google.common.collect.Lists.transform;
+
+import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.HttpResponseException;
+
import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.offbytwo.jenkins.client.util.EncodingUtils;
+import com.offbytwo.jenkins.helper.Range;
public class MavenJobWithDetails extends MavenJob {
@@ -35,6 +46,12 @@ public boolean isBuildable() {
}
/**
+ * This method will give you back the builds of a particular job.
+ * Note: Jenkins limits the number of results to a maximum of 100 builds
+ * which you will get back.. In case you have more than 100 build you
+ * won't get back all builds via this method. In such cases you need to use
+ * {@link #getAllBuilds()}.
+ *
* @return the list of {@link MavenBuild}. In case of no builds have been
* executed yet {@link Collections#emptyList()} will be returned.
*/
@@ -51,6 +68,102 @@ public MavenBuild apply(MavenBuild from) {
}
}
+ /**
+ * This method will give you back all builds which exists independent of the
+ * number. You should be aware that this can be much in some cases if you
+ * have more than 100 builds which is by default limited by Jenkins
+ * {@link #getBuilds()}. This method limits it to particular information
+ * which can be later used to get supplemental information about a
+ * particular build {@link Build#details()} to reduce the amount of data
+ * which needed to be transfered.
+ *
+ * @return the list of {@link Build}. In case of no builds have been
+ * executed yet return {@link Collections#emptyList()}.
+ * @throws IOException
+ * In case of failure.
+ * @see Jenkins
+ * Issue
+ */
+ public List getAllBuilds() throws IOException {
+ String path = "/";
+
+ try {
+ List builds = client.get(path + "job/" + EncodingUtils.encode(this.getName())
+ + "?tree=allBuilds[number[*],url[*],queueId[*]]", AllMavenBuilds.class).getAllBuilds();
+
+ if (builds == null) {
+ return Collections.emptyList();
+ } else {
+ return transform(builds, new Function() {
+ @Override
+ public MavenBuild apply(MavenBuild from) {
+ return buildWithClient(from);
+ }
+ });
+ }
+ } catch (HttpResponseException e) {
+ // TODO: Thinks about a better handling if the job does not exist?
+ if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+ // TODO: Check this if this is necessary or a good idea?
+
+ return null;
+ }
+ throw e;
+ }
+
+ }
+
+ /**
+ *
+ *
+ * - {M,N}: From the M-th element (inclusive) to the N-th element
+ * (exclusive).
+ * - {M,}: From the M-th element (inclusive) to the end.
+ * - {,N}: From the first element (inclusive) to the N-th element
+ * (exclusive). The same as {0,N}.
+ * - {N}: Just retrieve the N-th element. The same as {N,N+1}.
+ *
+ *
+ * Note: At the moment there seemed to be no option to get the number of
+ * existing builds for a job. The only option is to get all builds via
+ * {@link #getAllBuilds()}.
+ *
+ * @param range
+ * {@link Range}
+ * @return the list of {@link Build}. In case of no builds have been
+ * executed yet return {@link Collections#emptyList()}.
+ * @throws IOException
+ * in case of an error.
+ */
+ public List getAllBuilds(Range range) throws IOException {
+ String path = "/" + "job/" + EncodingUtils.encode(this.getName())
+ + "?tree=allBuilds[number[*],url[*],queueId[*]]";
+
+ try {
+ List builds = client.get(path + range.getRangeString(), AllMavenBuilds.class).getAllBuilds();
+
+ if (builds == null) {
+ return Collections.emptyList();
+ } else {
+ return transform(builds, new Function() {
+ @Override
+ public MavenBuild apply(MavenBuild from) {
+ return buildWithClient(from);
+ }
+ });
+ }
+ } catch (HttpResponseException e) {
+ // TODO: Thinks about a better handline if the job does not exist?
+ if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+ // TODO: Check this if this is necessary or a good idea?
+
+ return null;
+ }
+ throw e;
+ }
+ }
+
+
/**
* @return The firstBuild. If {@link #firstBuild} has never been run
* {@link MavenBuild#BUILD_HAS_NEVER_RUN} will be returned.
@@ -169,6 +282,21 @@ public List getUpstreamProjects() {
}
}
+ public MavenBuild getBuildByNumber(final int buildNumber) {
+
+ Predicate isMatchingBuildNumber = new Predicate() {
+
+ @Override
+ public boolean apply(MavenBuild input) {
+ return input.getNumber() == buildNumber;
+ }
+ };
+
+ Optional optionalBuild = Iterables.tryFind(builds, isMatchingBuildNumber);
+ // TODO: Check if we could use Build#NO...instead of Null?
+ return optionalBuild.orNull() == null ? null : buildWithClient(optionalBuild.orNull());
+ }
+
private MavenBuild buildWithClient(MavenBuild from) {
MavenBuild ret = new MavenBuild(from);
ret.setClient(client);
From fd5ea4441c30a0ff12f685cb11ebd4050d59aea4 Mon Sep 17 00:00:00 2001
From: RainerW
Date: Thu, 24 Nov 2016 12:03:52 +0100
Subject: [PATCH 059/197] add crumb parameter to runScript
---
.../com/offbytwo/jenkins/JenkinsServer.java | 21 ++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
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 115109d8..03fd45cc 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -708,7 +708,26 @@ public void enableJob(String jobName, boolean crumbFlag) throws IOException {
* @throws IOException
*/
public String runScript(String script) throws IOException {
- return client.post_text("/scriptText", "script=" + script, ContentType.APPLICATION_FORM_URLENCODED, false);
+ return runScript(script,false);
+ }
+
+ /**
+ * Runs the provided groovy script on the server and returns the result.
+ *
+ * This is similar to running groovy scripts using the script console.
+ *
+ * In the instance where your script causes an exception, the server still
+ * returns a 200 status, so detecting errors is very challenging. It is
+ * recommended to use heuristics to check your return string for stack
+ * traces by detecting strings like "groovy.lang.(something)Exception".
+ *
+ * @param script
+ * @param crumb enable crumb
+ * @return results
+ * @throws IOException
+ */
+ public String runScript(String script,boolean crumb) throws IOException {
+ return client.post_text("/scriptText", "script=" + script, ContentType.APPLICATION_FORM_URLENCODED, crumb);
}
public Queue getQueue() throws IOException {
From 15d6b1b95bf0a0e608bd4205012160ef50e93389 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 10:55:45 +0100
Subject: [PATCH 060/197] Reformatted code based on code style.
---
.../AbstractJenkinsIntegrationCase.java | 55 +++----
.../jenkins/integration/Constant.java | 4 +-
.../integration/ExecutorStartedIT.java | 22 +--
.../integration/ExecutorStartingIT.java | 24 ++-
.../offbytwo/jenkins/integration/Groups.java | 5 +-
.../NoExecutorStartedFolderIT.java | 17 +--
.../NoExecutorStartedGetComputerSetIT.java | 32 ++--
.../NoExecutorStartedGetComputersIT.java | 20 +--
...cutorStartedGetComputersWithDetailsIT.java | 62 +++-----
.../NoExecutorStartedGetJobDetailsIT.java | 24 ++-
.../NoExecutorStartedGetJobIT.java | 128 +++++++---------
.../NoExecutorStartedGetJobXmlIT.java | 53 +++----
.../NoExecutorStartedGetJobsIT.java | 22 +--
.../NoExecutorStartedGetOfflineCauseIT.java | 34 ++---
.../NoExecutorStartedGetViewIT.java | 37 ++---
.../NoExecutorStartedPluginManagerIT.java | 142 +++++++-----------
.../integration/NoExecutorStartedTrigger.java | 13 +-
.../com/offbytwo/jenkins/JenkinsServer.java | 88 ++++++-----
.../offbytwo/jenkins/JenkinsServerTest.java | 41 +++--
19 files changed, 340 insertions(+), 483 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/AbstractJenkinsIntegrationCase.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/AbstractJenkinsIntegrationCase.java
index 6321be93..bb0bd99f 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/AbstractJenkinsIntegrationCase.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/AbstractJenkinsIntegrationCase.java
@@ -8,63 +8,56 @@
import com.offbytwo.jenkins.JenkinsServer;
-@Listeners( { MethodListener.class } )
-public class AbstractJenkinsIntegrationCase
-{
+@Listeners({ MethodListener.class })
+public class AbstractJenkinsIntegrationCase {
protected static JenkinsServer jenkinsServer;
/**
- * The time we wait until we break the beforeSuit method to prevent to wait forever.
+ * The time we wait until we break the beforeSuit method to prevent to wait
+ * forever.
*/
- public static final Long TIME_OUT_MILLISECONDS = TimeUnit.MILLISECONDS.convert( 1L, TimeUnit.MINUTES );
+ public static final Long TIME_OUT_MILLISECONDS = TimeUnit.MILLISECONDS.convert(1L, TimeUnit.MINUTES);
@BeforeSuite
- public void waitUntilJenkinsHasBeenStartedUp()
- throws TimeoutException
- {
+ public void waitUntilJenkinsHasBeenStartedUp() throws TimeoutException {
final long start = System.currentTimeMillis();
- jenkinsServer = new JenkinsServer( Constant.JENKINS_URI );
- System.out.print( "Wait until Jenkins is started..." );
- while ( !jenkinsServer.isRunning() && !timeOut( start ) )
- {
- try
- {
- System.out.print( "." );
- Thread.sleep( TimeUnit.MILLISECONDS.convert( 1L, TimeUnit.SECONDS ) );
- }
- catch ( InterruptedException e )
- {
+ jenkinsServer = new JenkinsServer(Constant.JENKINS_URI);
+ System.out.print("Wait until Jenkins is started...");
+ while (!jenkinsServer.isRunning() && !timeOut(start)) {
+ try {
+ System.out.print(".");
+ Thread.sleep(TimeUnit.MILLISECONDS.convert(1L, TimeUnit.SECONDS));
+ } catch (InterruptedException e) {
e.printStackTrace();
}
}
- if ( !jenkinsServer.isRunning() && timeOut( start ) )
- {
- System.out.println( "Failure." );
- throw new TimeoutException( "Jenkins startup check has failed. Took more than one minute." );
+ if (!jenkinsServer.isRunning() && timeOut(start)) {
+ System.out.println("Failure.");
+ throw new TimeoutException("Jenkins startup check has failed. Took more than one minute.");
}
- System.out.println( "done." );
+ System.out.println("done.");
}
/**
- * Check if we have reached timeout related to the {@link #TIME_OUT_MILLISECONDS}.
+ * Check if we have reached timeout related to the
+ * {@link #TIME_OUT_MILLISECONDS}.
*
- * @param start The start time in milliseconds.
+ * @param start
+ * The start time in milliseconds.
* @return true if timeout false otherwise.
*/
- private boolean timeOut( final long start )
- {
+ private boolean timeOut(final long start) {
boolean result = false;
long elapsed = System.currentTimeMillis() - start;
- if ( elapsed >= TIME_OUT_MILLISECONDS )
- {
+ if (elapsed >= TIME_OUT_MILLISECONDS) {
result = true;
}
return result;
}
-
+
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
index 066e2a87..12961c4e 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
@@ -6,8 +6,8 @@ public final class Constant {
/**
* The URL for the running Jenkins server (currently a Docker image). On
- * travis it is localhost (127.0.0.1) on my machine it is different.
- * At the moment it is solved by a profile in pom..but could that somehow
+ * travis it is localhost (127.0.0.1) on my machine it is different. At the
+ * moment it is solved by a profile in pom..but could that somehow
* identified by docker itself ?
*/
public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
index f1338b60..697e9349 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartedIT.java
@@ -10,27 +10,21 @@
import com.offbytwo.jenkins.model.ComputerWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( dependsOnGroups = { Groups.EXECUTOR_STARTING_GROUP }, groups = { Groups.EXECUTOR_STARTED_GROUP } )
-public class ExecutorStartedIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(dependsOnGroups = { Groups.EXECUTOR_STARTING_GROUP }, groups = { Groups.EXECUTOR_STARTED_GROUP })
+public class ExecutorStartedIT extends AbstractJenkinsIntegrationCase {
private JobWithDetails job;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- job = jenkinsServer.getJob( "test" );
- assertThat( job ).isNotNull();
+ public void beforeMethod() throws IOException {
+ job = jenkinsServer.getJob("test");
+ assertThat(job).isNotNull();
}
@Test
- public void shouldTriggerJobTest()
- throws IOException
- {
- ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get( 0 );
- assertThat( computerWithDetailsAfterStarting.getOffline() ).isFalse();
+ public void shouldTriggerJobTest() throws IOException {
+ ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get(0);
+ assertThat(computerWithDetailsAfterStarting.getOffline()).isFalse();
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
index d5d0fb7e..e78e55f7 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/ExecutorStartingIT.java
@@ -10,31 +10,25 @@
import com.offbytwo.jenkins.model.ComputerWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP_FOLDER }, groups = { Groups.EXECUTOR_STARTING_GROUP } )
-public class ExecutorStartingIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(dependsOnGroups = { Groups.NO_EXECUTOR_GROUP_FOLDER }, groups = { Groups.EXECUTOR_STARTING_GROUP })
+public class ExecutorStartingIT extends AbstractJenkinsIntegrationCase {
private JobWithDetails job;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- job = jenkinsServer.getJob( "test" );
- assertThat( job ).isNotNull();
+ public void beforeMethod() throws IOException {
+ job = jenkinsServer.getJob("test");
+ assertThat(job).isNotNull();
}
@Test
- public void shouldTriggerJobTest()
- throws IOException
- {
- ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputers().get( 0 );
+ public void shouldTriggerJobTest() throws IOException {
+ ComputerWithDetails computerWithDetails = jenkinsServer.getComputerSet().getComputers().get(0);
computerWithDetails.toggleOffline();
- ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get( 0 );
+ ComputerWithDetails computerWithDetailsAfterStarting = jenkinsServer.getComputerSet().getComputers().get(0);
- assertThat( computerWithDetailsAfterStarting.getOffline() ).isFalse();
+ assertThat(computerWithDetailsAfterStarting.getOffline()).isFalse();
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
index 0ea5ec65..c4f6e49d 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Groups.java
@@ -1,7 +1,6 @@
package com.offbytwo.jenkins.integration;
-public final class Groups
-{
+public final class Groups {
/**
* The group for test which expect that no executor is running.
@@ -11,6 +10,6 @@ public final class Groups
public static final String NO_EXECUTOR_GROUP_FOLDER = "NoExecutorStartedFolder";
public static final String EXECUTOR_STARTING_GROUP = "ExecutorStarting";
-
+
public static final String EXECUTOR_STARTED_GROUP = "ExecutorStarted";
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
index 6eb3bbed..b3ce0f19 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedFolderIT.java
@@ -5,21 +5,16 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-@Test( dependsOnGroups = { Groups.NO_EXECUTOR_GROUP }, groups = { Groups.NO_EXECUTOR_GROUP_FOLDER } )
-public class NoExecutorStartedFolderIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(dependsOnGroups = { Groups.NO_EXECUTOR_GROUP }, groups = { Groups.NO_EXECUTOR_GROUP_FOLDER })
+public class NoExecutorStartedFolderIT extends AbstractJenkinsIntegrationCase {
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
}
@Test
- public void createFolderShouldCreateTheFolder() throws IOException
- {
- jenkinsServer.createFolder("First-Folder");
+ public void createFolderShouldCreateTheFolder() throws IOException {
+ jenkinsServer.createFolder("First-Folder");
}
-
+
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
index ab3d5fdd..4fe4fc6a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputerSetIT.java
@@ -11,43 +11,35 @@
import com.offbytwo.jenkins.model.ComputerSet;
import com.offbytwo.jenkins.model.ComputerWithDetails;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetComputerSetIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetComputerSetIT extends AbstractJenkinsIntegrationCase {
private ComputerSet computerSet;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
computerSet = jenkinsServer.getComputerSet();
}
@Test
- public void shouldGetNameOfMasterNode()
- {
+ public void shouldGetNameOfMasterNode() {
List computers = computerSet.getComputers();
- assertThat( computers ).hasSize( 1 );
- assertThat( computers.get( 0 ).getDisplayName() ).isEqualTo( "master" );
+ assertThat(computers).hasSize(1);
+ assertThat(computers.get(0).getDisplayName()).isEqualTo("master");
}
@Test
- public void getTotalExecutorsShouldReturnZero()
- {
- assertThat( computerSet.getTotalExecutors() ).isEqualTo( 0 );
+ public void getTotalExecutorsShouldReturnZero() {
+ assertThat(computerSet.getTotalExecutors()).isEqualTo(0);
}
@Test
- public void getBusyExecutorsShouldReturnZero()
- {
- assertThat( computerSet.getBusyExecutors() ).isEqualTo( 0 );
+ public void getBusyExecutorsShouldReturnZero() {
+ assertThat(computerSet.getBusyExecutors()).isEqualTo(0);
}
@Test
- public void getDisplayNameShouldReturnNodes()
- {
- assertThat( computerSet.getDisplayName() ).isEqualTo( "Nodes" );
+ public void getDisplayNameShouldReturnNodes() {
+ assertThat(computerSet.getDisplayName()).isEqualTo("Nodes");
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersIT.java
index 3dc3f125..1538868d 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersIT.java
@@ -10,30 +10,24 @@
import com.offbytwo.jenkins.model.Computer;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetComputersIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetComputersIT extends AbstractJenkinsIntegrationCase {
private Map computers;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
computers = jenkinsServer.getComputers();
}
@Test
- public void numberOfComputersIsEqualOne()
- {
- assertThat( computers ).hasSize( 1 );
+ public void numberOfComputersIsEqualOne() {
+ assertThat(computers).hasSize(1);
}
@Test
- public void getNameShouldReturnMaster()
- {
+ public void getNameShouldReturnMaster() {
String key = computers.keySet().iterator().next();
- assertThat( computers.get( key ).getDisplayName() ).isEqualTo( "master" );
+ assertThat(computers.get(key).getDisplayName()).isEqualTo("master");
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
index c0c4b683..9a22eb0a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetComputersWithDetailsIT.java
@@ -9,78 +9,64 @@
import com.offbytwo.jenkins.model.ComputerWithDetails;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetComputersWithDetailsIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetComputersWithDetailsIT extends AbstractJenkinsIntegrationCase {
private ComputerWithDetails computerWithDetails;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- computerWithDetails = jenkinsServer.getComputerSet().getComputers().get( 0 );
+ public void beforeMethod() throws IOException {
+ computerWithDetails = jenkinsServer.getComputerSet().getComputers().get(0);
}
@Test
- public void getIdleShouldReturnTrue()
- {
- assertThat( computerWithDetails.getIdle() ).isTrue();
+ public void getIdleShouldReturnTrue() {
+ assertThat(computerWithDetails.getIdle()).isTrue();
}
@Test
- public void getJnlpShouldReturnTrue()
- {
- assertThat( computerWithDetails.getJnlp() ).isNull();
+ public void getJnlpShouldReturnTrue() {
+ assertThat(computerWithDetails.getJnlp()).isNull();
}
@Test
- public void getExecutorsShouldReturnTwo()
- {
- assertThat( computerWithDetails.getExecutors() ).hasSize( 2 );
+ public void getExecutorsShouldReturnTwo() {
+ assertThat(computerWithDetails.getExecutors()).hasSize(2);
}
@Test
- public void getLaunchSupportedShouldReturnTrue()
- {
- assertThat( computerWithDetails.getLaunchSupported() ).isTrue();
+ public void getLaunchSupportedShouldReturnTrue() {
+ assertThat(computerWithDetails.getLaunchSupported()).isTrue();
}
@Test
- public void getManualLanuchShouldReturnTrue()
- {
- assertThat( computerWithDetails.getManualLaunchAllowed() ).isTrue();
+ public void getManualLanuchShouldReturnTrue() {
+ assertThat(computerWithDetails.getManualLaunchAllowed()).isTrue();
}
@Test
- public void getNumExecutorsShouldReturnTwo()
- {
- assertThat( computerWithDetails.getNumExecutors() ).isEqualTo( 2 );
+ public void getNumExecutorsShouldReturnTwo() {
+ assertThat(computerWithDetails.getNumExecutors()).isEqualTo(2);
}
@Test
- public void getOffLineShouldReturnTrue()
- {
- assertThat( computerWithDetails.getOffline() ).isTrue();
+ public void getOffLineShouldReturnTrue() {
+ assertThat(computerWithDetails.getOffline()).isTrue();
}
@Test
- public void getOfflineReasonShouldReturnNonNull()
- {
- assertThat( computerWithDetails.getOfflineCauseReason() ).isEqualTo( "Manually turned off" );
+ public void getOfflineReasonShouldReturnNonNull() {
+ assertThat(computerWithDetails.getOfflineCauseReason()).isEqualTo("Manually turned off");
}
@Test
- public void getTemporarilyOfflineShouldReturnTrue() throws IOException
- {
- assertThat( computerWithDetails.getTemporarilyOffline() ).isTrue();
+ public void getTemporarilyOfflineShouldReturnTrue() throws IOException {
+ assertThat(computerWithDetails.getTemporarilyOffline()).isTrue();
}
@Test
- public void getOfflineCauseShouldReturnNonNull() throws IOException
- {
- assertThat( computerWithDetails.getOfflineCause() ).isNotNull();
+ public void getOfflineCauseShouldReturnNonNull() throws IOException {
+ assertThat(computerWithDetails.getOfflineCause()).isNotNull();
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
index 5b169b71..1f01d782 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobDetailsIT.java
@@ -12,35 +12,29 @@
import com.offbytwo.jenkins.model.BuildWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetJobDetailsIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetJobDetailsIT extends AbstractJenkinsIntegrationCase {
private JobWithDetails job;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- job = jenkinsServer.getJob( "test" );
+ public void beforeMethod() throws IOException {
+ job = jenkinsServer.getJob("test");
}
@Test
- public void shouldCheckTheBuildCause() throws IOException
- {
- BuildWithDetails details = job.getFirstBuild().details();
- List causes = details.getCauses();
+ public void shouldCheckTheBuildCause() throws IOException {
+ BuildWithDetails details = job.getFirstBuild().details();
+ List causes = details.getCauses();
assertThat(causes).hasSize(1);
BuildCause buildCause = causes.get(0);
-
+
assertThat(buildCause.getShortDescription()).isEqualTo("Started by user anonymous");
assertThat(buildCause.getUserName()).isEqualTo("anonymous");
assertThat(buildCause.getUpstreamBuild()).isEqualTo(0);
assertThat(buildCause.getUpstreamProject()).isNull();
assertThat(buildCause.getUserId()).isNull();
-
+
}
-
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 63c95fd1..d0f77b18 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -13,121 +13,97 @@
import com.offbytwo.jenkins.model.BuildWithDetails;
import com.offbytwo.jenkins.model.JobWithDetails;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetJobIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetJobIT extends AbstractJenkinsIntegrationCase {
private JobWithDetails job;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- job = jenkinsServer.getJob( "test" );
+ public void beforeMethod() throws IOException {
+ job = jenkinsServer.getJob("test");
}
@Test
- public void getBuildsShouldContainOnlyASingleBuild()
- {
- assertThat( job.getBuilds() ).hasSize( 1 );
+ public void getBuildsShouldContainOnlyASingleBuild() {
+ assertThat(job.getBuilds()).hasSize(1);
}
- private void checkJob( BuildWithDetails details ) throws IOException
- {
- assertThat( details.getResult() ).isEqualTo( BuildResult.SUCCESS );
- assertThat( details.isBuilding() ).isFalse();
- assertThat( details.getNumber() ).isEqualTo( 1 );
- assertThat( details.getQueueId() ).isEqualTo( 1 );
- assertThat( details.getChangeSet() ).isNotNull();
+ private void checkJob(BuildWithDetails details) throws IOException {
+ assertThat(details.getResult()).isEqualTo(BuildResult.SUCCESS);
+ assertThat(details.isBuilding()).isFalse();
+ assertThat(details.getNumber()).isEqualTo(1);
+ assertThat(details.getQueueId()).isEqualTo(1);
+ assertThat(details.getChangeSet()).isNotNull();
// FIXME: Currently getActions is only a plain List should be improved.
- assertThat( details.getActions() ).isNotNull();
- assertThat( details.getFullDisplayName() ).isEqualTo( "test #1" );
- assertThat( details.getDescription() ).isNull();
- assertThat( details.getId() ).isEqualTo( "1" );
+ assertThat(details.getActions()).isNotNull();
+ assertThat(details.getFullDisplayName()).isEqualTo("test #1");
+ assertThat(details.getDescription()).isNull();
+ assertThat(details.getId()).isEqualTo("1");
// FIXME: Think hard about this, cause this is only valid for this
- // special case which is committed in the current state of the git repository
+ // special case which is committed in the current state of the git
+ // repository
// for this job.
- assertThat( details.getDuration() ).isEqualTo( 236 );
- assertThat( details.getEstimatedDuration() ).isEqualTo( 236 );
-
- String[] expectedOutputLines = {
- "Started by user anonymous",
- "Building in workspace /var/jenkins_home/jobs/test/workspace",
- "[workspace] $ /bin/sh -xe /tmp/hudson2556403647634111927.sh",
- "+ echo test",
- "test",
- "Finished: SUCCESS",
- ""
- };
- String expectedOutput = Joiner.on( "\r\n" ).join( expectedOutputLines ) ;
- //Hint: It looks like the consoleOutputText contains CR+LF
+ assertThat(details.getDuration()).isEqualTo(236);
+ assertThat(details.getEstimatedDuration()).isEqualTo(236);
+
+ String[] expectedOutputLines = { "Started by user anonymous",
+ "Building in workspace /var/jenkins_home/jobs/test/workspace",
+ "[workspace] $ /bin/sh -xe /tmp/hudson2556403647634111927.sh", "+ echo test", "test",
+ "Finished: SUCCESS", "" };
+ String expectedOutput = Joiner.on("\r\n").join(expectedOutputLines);
+ // Hint: It looks like the consoleOutputText contains CR+LF
String resultingOutput = details.getConsoleOutputText();
- assertThat( resultingOutput ).isEqualTo( expectedOutput);
+ assertThat(resultingOutput).isEqualTo(expectedOutput);
}
@Test
- public void getFirstBuildShouldNotBeNull()
- throws IOException
- {
- assertThat( job.getFirstBuild() ).isNotNull();
- checkJob( job.getFirstBuild().details() );
+ public void getFirstBuildShouldNotBeNull() throws IOException {
+ assertThat(job.getFirstBuild()).isNotNull();
+ checkJob(job.getFirstBuild().details());
}
@Test
- public void getLastBuildShouldNotBeNull()
- throws IOException
- {
- assertThat( job.getLastBuild() ).isNotNull();
- checkJob( job.getLastBuild().details() );
+ public void getLastBuildShouldNotBeNull() throws IOException {
+ assertThat(job.getLastBuild()).isNotNull();
+ checkJob(job.getLastBuild().details());
}
@Test
- public void getLastCompletedBuldShouldNotBeNull()
- throws IOException
- {
- assertThat( job.getLastCompletedBuild() ).isNotNull();
- checkJob( job.getLastCompletedBuild().details() );
+ public void getLastCompletedBuldShouldNotBeNull() throws IOException {
+ assertThat(job.getLastCompletedBuild()).isNotNull();
+ checkJob(job.getLastCompletedBuild().details());
}
@Test
- public void getLastFailedBuildShouldBeBUILD_HAS_NEVER_RAN()
- {
- assertThat( job.getLastFailedBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
+ public void getLastFailedBuildShouldBeBUILD_HAS_NEVER_RAN() {
+ assertThat(job.getLastFailedBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
- public void getLastStableBuildShouldNotBeNull()
- throws IOException
- {
- assertThat( job.getLastStableBuild() ).isNotNull();
- checkJob( job.getLastStableBuild().details() );
+ public void getLastStableBuildShouldNotBeNull() throws IOException {
+ assertThat(job.getLastStableBuild()).isNotNull();
+ checkJob(job.getLastStableBuild().details());
}
@Test
- public void getLastSuccessfulBuildShouldNotBeNull()
- throws IOException
- {
- assertThat( job.getLastSuccessfulBuild() ).isNotNull();
- checkJob( job.getLastSuccessfulBuild().details() );
+ public void getLastSuccessfulBuildShouldNotBeNull() throws IOException {
+ assertThat(job.getLastSuccessfulBuild()).isNotNull();
+ checkJob(job.getLastSuccessfulBuild().details());
}
@Test
- public void getLastUnstableBuildShouldBeBUILD_HAS_NEVER_RAN()
- {
- assertThat( job.getLastUnstableBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
+ public void getLastUnstableBuildShouldBeBUILD_HAS_NEVER_RAN() {
+ assertThat(job.getLastUnstableBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
- public void getLastUnsuccessfulBuildShouldBeBUILD_HAS_NEVER_RAN()
- {
- assertThat( job.getLastUnsuccessfulBuild() ).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
+ public void getLastUnsuccessfulBuildShouldBeBUILD_HAS_NEVER_RAN() {
+ assertThat(job.getLastUnsuccessfulBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
@Test
- public void getDescriptionShouldRetrunTheDescription()
- {
- assertThat( job.getDescription() ).isEqualTo("This is the description with umlauts äöü");
+ public void getDescriptionShouldRetrunTheDescription() {
+ assertThat(job.getDescription()).isEqualTo("This is the description with umlauts äöü");
}
-
+
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
index de0ade30..279b844d 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
@@ -9,49 +9,30 @@
import com.google.common.base.Joiner;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetJobXmlIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetJobXmlIT extends AbstractJenkinsIntegrationCase {
private String jobXml;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- jobXml = jenkinsServer.getJobXml( "test" );
+ public void beforeMethod() throws IOException {
+ jobXml = jenkinsServer.getJobXml("test");
}
-
- private static final String[] CONFIG_XML = {
- "",
- "",
- " ",
- " This is the description with umlauts äöü",
- " false",
- " ",
- " ",
- " true",
- " false",
- " false",
- " false",
- " ",
- " false",
- " ",
- " ",
- " echo "test"",
- " ",
- " ",
- " ",
- " ",
- ""
- };
+
+ private static final String[] CONFIG_XML = { "", "", " ",
+ " This is the description with umlauts äöü",
+ " false", " ", " ",
+ " true", " false",
+ " false",
+ " false", " ",
+ " false", " ", " ",
+ " echo "test"", " ", " ",
+ " ", " ", "" };
@Test
- public void getJobXmlShouldReturnTheExpectedConfigXml()
- {
- String expectedXml = Joiner.on( "\n" ).join( CONFIG_XML );
- assertThat( jobXml ).isEqualTo( expectedXml );
+ public void getJobXmlShouldReturnTheExpectedConfigXml() {
+ String expectedXml = Joiner.on("\n").join(CONFIG_XML);
+ assertThat(jobXml).isEqualTo(expectedXml);
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobsIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobsIT.java
index 652d6a9d..9e8fe10c 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobsIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobsIT.java
@@ -10,31 +10,25 @@
import com.offbytwo.jenkins.model.Job;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetJobsIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetJobsIT extends AbstractJenkinsIntegrationCase {
private Map jobs;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
jobs = jenkinsServer.getJobs();
}
@Test
- public void numberOfJobsIsEqualOne()
- {
- assertThat( jobs ).hasSize( 1 );
+ public void numberOfJobsIsEqualOne() {
+ assertThat(jobs).hasSize(1);
}
@Test
- public void getNameShouldReturnTest()
- {
+ public void getNameShouldReturnTest() {
String key = jobs.keySet().iterator().next();
- assertThat( jobs.get( key ).getName() ).isEqualTo( "test" );
+ assertThat(jobs.get(key).getName()).isEqualTo("test");
}
-
+
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
index 07acda4d..321e7326 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetOfflineCauseIT.java
@@ -9,41 +9,35 @@
import com.offbytwo.jenkins.model.OfflineCause;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetOfflineCauseIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetOfflineCauseIT extends AbstractJenkinsIntegrationCase {
private OfflineCause offlineCause;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- offlineCause = jenkinsServer.getComputerSet().getComputers().get( 0 ).getOfflineCause();
+ public void beforeMethod() throws IOException {
+ offlineCause = jenkinsServer.getComputerSet().getComputers().get(0).getOfflineCause();
}
/**
- * This is a timestamp so I really can't make a test which compares to a real value. TODO: Think about this...
+ * This is a timestamp so I really can't make a test which compares to a
+ * real value. TODO: Think about this...
*/
@Test
- public void getTimestampShouldReturnNonZero()
- {
+ public void getTimestampShouldReturnNonZero() {
// FIXME: This magic number is in the config.xml
- // I need to find a simply way to read the config.xml and get the value from there.
- assertThat( offlineCause.getTimestamp() ).isEqualTo( 1453986179962L );
+ // I need to find a simply way to read the config.xml and get the value
+ // from there.
+ assertThat(offlineCause.getTimestamp()).isEqualTo(1453986179962L);
}
@Test
- public void getOfflineCauseGetDescriptionShouldReturnDescription()
- throws IOException
- {
- assertThat( offlineCause.getDescription() ).isEqualTo( "Disconnected by anonymous : Manually turned off" );
+ public void getOfflineCauseGetDescriptionShouldReturnDescription() throws IOException {
+ assertThat(offlineCause.getDescription()).isEqualTo("Disconnected by anonymous : Manually turned off");
}
@Test
- public void getDescriptionShouldReturnTheAppropriateMessage()
- {
- assertThat( offlineCause.getDescription() ).isEqualTo( "Disconnected by anonymous : Manually turned off" );
+ public void getDescriptionShouldReturnTheAppropriateMessage() {
+ assertThat(offlineCause.getDescription()).isEqualTo("Disconnected by anonymous : Manually turned off");
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
index b6f5728a..7a6b71a9 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetViewIT.java
@@ -12,55 +12,46 @@
import com.offbytwo.jenkins.model.Job;
import com.offbytwo.jenkins.model.View;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedGetViewIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedGetViewIT extends AbstractJenkinsIntegrationCase {
private Map views;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
views = jenkinsServer.getViews();
}
@Test
- public void numberOfViewsIsEqualOne()
- {
- assertThat( views ).hasSize( 2 );
+ public void numberOfViewsIsEqualOne() {
+ assertThat(views).hasSize(2);
}
@Test
- public void viewNameShouldBeTestView()
- {
- assertThat(views.containsKey("Test-View")).isTrue();
- assertThat(views.containsKey("All")).isTrue();
+ public void viewNameShouldBeTestView() {
+ assertThat(views.containsKey("Test-View")).isTrue();
+ assertThat(views.containsKey("All")).isTrue();
}
@Test
- public void getJobsFromGetViews() throws IOException
- {
+ public void getJobsFromGetViews() throws IOException {
List jobs = views.get("Test-View").getJobs();
assertThat(jobs).hasSize(1);
}
@Test
- public void getJobsViaView() throws IOException
- {
- View view = jenkinsServer.getView("Test-View");
+ public void getJobsViaView() throws IOException {
+ View view = jenkinsServer.getView("Test-View");
List jobs = view.getJobs();
assertThat(jobs).hasSize(1);
}
@Test
- public void getJobsViaViewWithDetails() throws IOException
- {
- View view = jenkinsServer.getView("Test-View");
+ public void getJobsViaViewWithDetails() throws IOException {
+ View view = jenkinsServer.getView("Test-View");
List jobs = view.getJobs();
assertThat(jobs).hasSize(1);
-
+
Job job = jobs.get(0);
assertThat(job.getName()).isEqualTo("test");
assertThat(job.details()).isNotNull();
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
index c1d0732e..2c62878a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
@@ -13,139 +13,109 @@
import com.offbytwo.jenkins.model.Plugin;
import com.offbytwo.jenkins.model.PluginManager;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedPluginManagerIT
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedPluginManagerIT extends AbstractJenkinsIntegrationCase {
private PluginManager pluginManager;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
+ public void beforeMethod() throws IOException {
pluginManager = jenkinsServer.getPluginManager();
}
@Test
- public void getPluginsShouldReturn9ForJenkins20()
- {
- //TODO: Check why there is such a difference in the number of Plugins?
+ public void getPluginsShouldReturn9ForJenkins20() {
+ // TODO: Check why there is such a difference in the number of Plugins?
if (!jenkinsServer.getVersion().equals("2.0")) {
throw new SkipException("Not Version 2.0");
}
- assertThat( pluginManager.getPlugins() ).hasSize( 9 );
+ assertThat(pluginManager.getPlugins()).hasSize(9);
}
+
@Test
- public void getPluginsShouldReturn27ForJenkins1651()
- {
- List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
- //TODO: Check why there is such a difference in the number of Plugins?
+ public void getPluginsShouldReturn27ForJenkins1651() {
+ List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
+ // TODO: Check why there is such a difference in the number of Plugins?
if (!asList.contains(jenkinsServer.getVersion())) {
throw new SkipException("Not Version 1.651");
}
- assertThat( pluginManager.getPlugins() ).hasSize( 27 );
+ assertThat(pluginManager.getPlugins()).hasSize(27);
}
private Plugin createPlugin(String shortName, String version) {
Plugin result = new Plugin();
- result.setShortName( shortName );
- result.setVersion( version );
+ result.setShortName(shortName);
+ result.setVersion(version);
return result;
- }
-
+ }
+
@Test
public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
-
+
if (!jenkinsServer.getVersion().equals("2.0")) {
throw new SkipException("Not Version 2.0");
}
-
- //TODO: The list of plugins is contained in the plugin.txt
+
+ // TODO: The list of plugins is contained in the plugin.txt
// which should be read and used as base of comparison.
// instead of maintaining at two locations.
- Plugin[] expectedPlugins = {
- createPlugin("token-macro", "1.12.1"),
- createPlugin("testng-plugin", "1.10"),
- createPlugin("job-dsl", "1.41"),
- createPlugin("junit", "1.10"),
- createPlugin("jacoco", "1.0.19"),
- createPlugin("config-file-provider", "2.10.0"),
- createPlugin("timestamper", "1.7.2"),
- createPlugin("credentials", "1.24"),
- createPlugin("throttle-concurrents", "1.9.0"),
- createPlugin("cloudbees-folder", "5.12"),
- };
+ Plugin[] expectedPlugins = { createPlugin("token-macro", "1.12.1"), createPlugin("testng-plugin", "1.10"),
+ createPlugin("job-dsl", "1.41"), createPlugin("junit", "1.10"), createPlugin("jacoco", "1.0.19"),
+ createPlugin("config-file-provider", "2.10.0"), createPlugin("timestamper", "1.7.2"),
+ createPlugin("credentials", "1.24"), createPlugin("throttle-concurrents", "1.9.0"),
+ createPlugin("cloudbees-folder", "5.12"), };
List plugins = pluginManager.getPlugins();
-
- for ( Plugin plugin : plugins )
- {
+
+ for (Plugin plugin : plugins) {
boolean found = false;
- for ( int i = 0; i < expectedPlugins.length; i++ )
- {
- if (plugin.getShortName().equals( expectedPlugins[i].getShortName()) &&
- plugin.getVersion().equals( expectedPlugins[i].getVersion())) {
+ for (int i = 0; i < expectedPlugins.length; i++) {
+ if (plugin.getShortName().equals(expectedPlugins[i].getShortName())
+ && plugin.getVersion().equals(expectedPlugins[i].getVersion())) {
found = true;
}
}
- assertThat( found ).isTrue().as("Plugin shortName:{} version:{} couldn't be found.", plugin.getShortName(), plugin.getVersion());
+ assertThat(found).isTrue().as("Plugin shortName:{} version:{} couldn't be found.", plugin.getShortName(),
+ plugin.getVersion());
}
-
+
}
+
@Test
- public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651()
- {
- List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
+ public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651() {
+ List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
- //TODO: Check why there is such a difference in the number of Plugins?
+ // TODO: Check why there is such a difference in the number of Plugins?
if (!asList.contains(jenkinsServer.getVersion())) {
throw new SkipException("Not Version 1.651");
}
- //TODO: The list of plugins is contained in the plugin.txt
+ // TODO: The list of plugins is contained in the plugin.txt
// which should be read and used as base of comparison.
// instead of maintaining at two locations.
- Plugin[] expectedPlugins = {
- createPlugin("token-macro", "1.12.1"),
- createPlugin("translation", "1.10"),
- createPlugin("testng-plugin", "1.10"),
- createPlugin("matrix-project", "1.4.1"),
- createPlugin("job-dsl", "1.41"),
- createPlugin("windows-slaves", "1.0"),
- createPlugin("antisamy-markup-formatter", "1.1"),
- createPlugin("junit", "1.10"),
- createPlugin("maven-plugin", "2.7.1"),
- createPlugin("external-monitor-job", "1.4"),
- createPlugin("jacoco", "1.0.19"),
- createPlugin("pam-auth", "1.1"),
- createPlugin("ldap", "1.11"),
- createPlugin("script-security", "1.13"),
- createPlugin("mailer", "1.11"),
- createPlugin("cvs", "2.11"),
- createPlugin("ant", "1.2"),
- createPlugin("config-file-provider", "2.10.0"),
- createPlugin("ssh-credentials", "1.10"),
- createPlugin("matrix-auth", "1.1"),
- createPlugin("javadoc", "1.1"),
- createPlugin("timestamper", "1.7.2"),
- createPlugin("credentials", "1.24"),
- createPlugin("throttle-concurrents", "1.9.0"),
- createPlugin("subversion", "1.54"),
- createPlugin("ssh-slaves", "1.9"),
- createPlugin("cloudbees-folder", "5.12"),
- };
+ Plugin[] expectedPlugins = { createPlugin("token-macro", "1.12.1"), createPlugin("translation", "1.10"),
+ createPlugin("testng-plugin", "1.10"), createPlugin("matrix-project", "1.4.1"),
+ createPlugin("job-dsl", "1.41"), createPlugin("windows-slaves", "1.0"),
+ createPlugin("antisamy-markup-formatter", "1.1"), createPlugin("junit", "1.10"),
+ createPlugin("maven-plugin", "2.7.1"), createPlugin("external-monitor-job", "1.4"),
+ createPlugin("jacoco", "1.0.19"), createPlugin("pam-auth", "1.1"), createPlugin("ldap", "1.11"),
+ createPlugin("script-security", "1.13"), createPlugin("mailer", "1.11"), createPlugin("cvs", "2.11"),
+ createPlugin("ant", "1.2"), createPlugin("config-file-provider", "2.10.0"),
+ createPlugin("ssh-credentials", "1.10"), createPlugin("matrix-auth", "1.1"),
+ createPlugin("javadoc", "1.1"), createPlugin("timestamper", "1.7.2"),
+ createPlugin("credentials", "1.24"), createPlugin("throttle-concurrents", "1.9.0"),
+ createPlugin("subversion", "1.54"), createPlugin("ssh-slaves", "1.9"),
+ createPlugin("cloudbees-folder", "5.12"), };
List plugins = pluginManager.getPlugins();
-
- for ( Plugin plugin : plugins )
- {
+
+ for (Plugin plugin : plugins) {
boolean found = false;
- for ( int i = 0; i < expectedPlugins.length; i++ )
- {
- if (plugin.getShortName().equals( expectedPlugins[i].getShortName()) &&
- plugin.getVersion().equals( expectedPlugins[i].getVersion())) {
+ for (int i = 0; i < expectedPlugins.length; i++) {
+ if (plugin.getShortName().equals(expectedPlugins[i].getShortName())
+ && plugin.getVersion().equals(expectedPlugins[i].getVersion())) {
found = true;
}
}
- assertThat( found ).isTrue().as("Plugin shortName:{} version:{} couldn't be found.", plugin.getShortName(), plugin.getVersion());
+ assertThat(found).isTrue().as("Plugin shortName:{} version:{} couldn't be found.", plugin.getShortName(),
+ plugin.getVersion());
}
}
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedTrigger.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedTrigger.java
index 215dce0b..d6f91b49 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedTrigger.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedTrigger.java
@@ -7,21 +7,16 @@
import com.offbytwo.jenkins.model.Job;
-@Test( groups = { Groups.NO_EXECUTOR_GROUP } )
-public class NoExecutorStartedTrigger
- extends AbstractJenkinsIntegrationCase
-{
+@Test(groups = { Groups.NO_EXECUTOR_GROUP })
+public class NoExecutorStartedTrigger extends AbstractJenkinsIntegrationCase {
private Job pluginManager;
@BeforeMethod
- public void beforeMethod()
- throws IOException
- {
- pluginManager = jenkinsServer.getJob( "test" );
+ public void beforeMethod() throws IOException {
+ pluginManager = jenkinsServer.getJob("test");
}
-
@Test
public void buildWillStartABuildButWillNotBeingExecuted() throws IOException {
pluginManager.build();
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 115109d8..6018bbce 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -46,7 +46,7 @@
* The main starting point for interacting with a Jenkins server.
*/
public class JenkinsServer {
- private final Logger LOGGER = LoggerFactory.getLogger( getClass() );
+ private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private final JenkinsHttpClient client;
@@ -104,8 +104,8 @@ public boolean isRunning() {
*/
public String getVersion() {
if (client.getJenkinsVersion().isEmpty()) {
- //Force a request to get at least once
- //HttpHeader
+ // Force a request to get at least once
+ // HttpHeader
isRunning();
}
return client.getJenkinsVersion();
@@ -195,16 +195,17 @@ public Map getViews(FolderJob folder) throws IOException {
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
-
+
view.setClient(client);
- //TODO: Think about the following? Does there exists a simpler/more elegant method?
+ // TODO: Think about the following? Does there exists a
+ // simpler/more elegant method?
for (Job job : view.getJobs()) {
job.setClient(client);
}
for (View item : view.getViews()) {
item.setClient(client);
}
-
+
// return view.getName().toLowerCase();
return view.getName();
}
@@ -225,7 +226,9 @@ public View getView(String name) throws IOException {
/**
* Get a single view object from the given folder
- * @param folder The name of the folder.
+ *
+ * @param folder
+ * The name of the folder.
* @param name
* name of the view in Jenkins
* @return the view object
@@ -241,7 +244,8 @@ public View getView(FolderJob folder, String name) throws IOException {
View resultView = client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
resultView.setClient(client);
- //TODO: Think about the following? Does there exists a simpler/more elegant method?
+ // TODO: Think about the following? Does there exists a simpler/more
+ // elegant method?
for (Job job : resultView.getJobs()) {
job.setClient(client);
}
@@ -252,7 +256,7 @@ public View getView(FolderJob folder, String name) throws IOException {
} catch (HttpResponseException e) {
LOGGER.debug("getView(folder={}, name={}) status={}", folder, name, e.getStatusCode());
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
- //TODO: Think hard about this.
+ // TODO: Think hard about this.
return null;
}
throw e;
@@ -288,7 +292,7 @@ public JobWithDetails getJob(FolderJob folder, String jobName) throws IOExceptio
} catch (HttpResponseException e) {
LOGGER.debug("getJob(folder={}, jobName={}) status={}", folder, jobName, e.getStatusCode());
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
- //TODO: Think hard about this.
+ // TODO: Think hard about this.
return null;
}
throw e;
@@ -331,7 +335,8 @@ public Optional getFolderJob(Job job) throws IOException {
} catch (HttpResponseException e) {
LOGGER.debug("getForlderJob(job={}) status={}", job, e.getStatusCode());
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
- //TODO: Check if this is a good idea ? What about Optional.absent() ?
+ // TODO: Check if this is a good idea ? What about
+ // Optional.absent() ?
return null;
}
throw e;
@@ -523,14 +528,16 @@ public String apply(Computer computer) {
public ComputerSet getComputerSet() throws IOException {
return client.get("computer/?depth=2", ComputerSet.class);
}
-
+
/**
* This will give you back the {@link PluginManager}.
+ *
* @return {@link PluginManager}
- * @throws IOException in case of a failure.
+ * @throws IOException
+ * in case of a failure.
*/
public PluginManager getPluginManager() throws IOException {
- return client.get( "pluginManager/?depth=2", PluginManager.class );
+ return client.get("pluginManager/?depth=2", PluginManager.class);
}
/**
@@ -599,8 +606,10 @@ public void cancelQuietDown() throws IOException {
/**
* Delete a job from Jenkins within a folder.
*
- * @param folder The folder where the given job is located.
- * @param jobName The job which should be deleted.
+ * @param folder
+ * The folder where the given job is located.
+ * @param jobName
+ * The job which should be deleted.
*
* @throws IOException
*/
@@ -611,16 +620,20 @@ public void deleteJob(FolderJob folder, String jobName) throws IOException {
/**
* Delete a job from Jenkins within a folder.
*
- * @param folder The folder where the given job is located.
- * @param jobName The job which should be deleted.
- * @param crumbFlag The crumbFlag
- * @throws IOException in case of problems.
+ * @param folder
+ * The folder where the given job is located.
+ * @param jobName
+ * The job which should be deleted.
+ * @param crumbFlag
+ * The crumbFlag
+ * @throws IOException
+ * in case of problems.
*/
public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
client.post(path + "/job/" + EncodingUtils.encode(jobName) + "/doDelete", crumbFlag);
}
@@ -747,7 +760,7 @@ public Build getBuild(QueueItem q) throws IOException {
throw e;
}
}
-
+
/**
* Rename a job
*
@@ -759,7 +772,7 @@ public Build getBuild(QueueItem q) throws IOException {
* In case of a failure.
*/
public void renameJob(String oldJobName, String newJobName) throws IOException {
- renameJob(null, oldJobName, newJobName, false);
+ renameJob(null, oldJobName, newJobName, false);
}
/**
@@ -770,19 +783,20 @@ public void renameJob(String oldJobName, String newJobName) throws IOException {
* @param newJobName
* The new job name.
* @param crumbFlag
- * true to add crumbIssuer false otherwise.
+ * true to add crumbIssuer false
+ * otherwise.
* @throws IOException
* In case of a failure.
*/
public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
- renameJob(null, oldJobName, newJobName, crumbFlag);
+ renameJob(null, oldJobName, newJobName, crumbFlag);
}
/**
* Rename a job
*
* @param FolderJob
- * The folder.
+ * The folder.
* @param oldJobName
* existing job name.
* @param newJobName
@@ -798,25 +812,27 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName) th
* Rename a job
*
* @param FolderJob
- * The folder.
+ * The folder.
* @param oldJobName
* existing job name.
* @param newJobName
* The new job name.
* @param crumbFlag
- * true to add crumbIssuer false otherwise.
+ * true to add crumbIssuer false
+ * otherwise.
* @throws IOException
* In case of a failure.
*/
- public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
-
+ public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
+ throws IOException {
+
String path = "/";
if (folder != null) {
path = folder.getUrl();
}
- client.post( path +
- "job/" + EncodingUtils.encode(oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName), crumbFlag);
-
+ client.post(path + "job/" + EncodingUtils.encode(oldJobName) + "/doRename?newName="
+ + EncodingUtils.encodeParam(newJobName), crumbFlag);
+
}
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
index 2cb27aa2..b98a9fb3 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
@@ -73,8 +73,8 @@ public void testGetJobXml() throws Exception {
@Test
public void testFolderGetJobs() throws Exception {
-
- String[] jobNames = { "job-the-first", "Job-The-Next", "Job-the-Next"};
+
+ String[] jobNames = { "job-the-first", "Job-The-Next", "Job-the-Next" };
// given
String path = "http://localhost/jobs/someFolder/";
Job someJob = new Job("jobname", path + "jobname");
@@ -84,19 +84,19 @@ public void testFolderGetJobs() throws Exception {
MainView mv = createTestView(someJobs);
given(client.get(eq(path), eq(MainView.class))).willReturn(mv);
-
+
// when
Map map = server.getJobs(folderJob);
-
+
// then
verify(client).get(path, MainView.class);
- for(String name : jobNames)
+ for (String name : jobNames)
assertTrue(someJobs.contains(map.get(name)));
assertEquals(jobNames.length, map.size());
}
-
+
@Test
public void testFolderGetJob() throws Exception {
// given
@@ -158,7 +158,7 @@ public void testGetFolderJobInvalidFolder() throws Exception {
given(folderJob.isFolder()).willReturn(false);
given(client.get(eq(path), eq(FolderJob.class))).willReturn(folderJob);
-
+
// when
Optional oj = server.getFolderJob(someJob);
@@ -190,7 +190,7 @@ public void testCreateSubFolderJob() throws Exception {
// then
verify(client).post_form(eq(path + "createItem?"), anyMap(), eq(false));
}
-
+
@Test
public void testUpdateJobXml() throws Exception {
// given
@@ -251,7 +251,7 @@ public void testQuietDown() throws IOException {
@Test
public void testScriptPosts() throws IOException, URISyntaxException {
given(client.post_text("/scriptText", "script=script", ContentType.APPLICATION_FORM_URLENCODED, false))
- .willReturn("result");
+ .willReturn("result");
String result = server.runScript("script");
verify(client).post_text("/scriptText", "script=script", ContentType.APPLICATION_FORM_URLENCODED, false);
assertEquals("result", result);
@@ -273,14 +273,13 @@ private MainView createTestView(String baseUrl, String... jobNames) {
private List createTestJobs(String baseUrl, String... jobNames) {
List jobs = new ArrayList();
- for(String name: jobNames) {
- jobs.add(new Job(name, baseUrl+name));
+ for (String name : jobNames) {
+ jobs.add(new Job(name, baseUrl + name));
}
return jobs;
}
-
@Test
public void testReturnSingleJob() throws Exception {
shouldReturnListOfJobs("hello");
@@ -296,16 +295,15 @@ public void testFolderGetSingleJob() throws Exception {
shouldGetFolderJobs("jobname");
}
-
- private void shouldReturnListOfJobs(String...jobNames) throws Exception {
+ private void shouldReturnListOfJobs(String... jobNames) throws Exception {
MainView mainView = createTestView("http://localhost/job/", jobNames);
given(client.get("/", MainView.class)).willReturn(mainView);
Map jobs = server.getJobs();
- for(String name : jobNames)
+ for (String name : jobNames)
assertTrue(jobs.containsKey(name));
assertEquals(jobNames.length, jobs.size());
- }
+ }
@Test
public void testGetJobXmls() throws Exception {
@@ -325,18 +323,19 @@ private void shouldGetFolderJobs(String... jobNames) throws IOException {
MainView mv = createTestView(someJobs);
given(client.get(eq(path), eq(MainView.class))).willReturn(mv);
-
+
// when
Map map = server.getJobs(folderJob);
-
+
// then
verify(client).get(path, MainView.class);
- for(String name : jobNames)
+ for (String name : jobNames)
assertTrue(someJobs.contains(map.get(name)));
assertEquals(jobNames.length, map.size());
}
+
private void shouldGetJobXml(String jobName) throws Exception {
// given
String xmlString = "some xml goes here";
@@ -347,8 +346,8 @@ private void shouldGetJobXml(String jobName) throws Exception {
String xmlReturn = server.getJobXml(jobName);
// then
- verify(client).get("/job/"+jobName+"/config.xml");
- verify(client).get("/job/"+jobName+"/config.xml");
+ verify(client).get("/job/" + jobName + "/config.xml");
+ verify(client).get("/job/" + jobName + "/config.xml");
assertEquals(xmlString, xmlReturn);
}
}
From 3667378a27c12756ec6a91a255cd3654215227ea Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 11:08:36 +0100
Subject: [PATCH 061/197] Fixed link to integration-test project.
---
README.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index a6bdff29..12884ec4 100644
--- a/README.md
+++ b/README.md
@@ -72,8 +72,8 @@ To run integration tests simply start
mvn -Prun-its clean verify
```
-There is also a separate project which contains [integration
-tests][integration-tests] which are running with a special version of Jenkins
+There is also a separate project which contains [integration tests][integration-tests]
+which are running with a special version of Jenkins
within a Docker container to check several aspects of the API which can't be
covered by the usual integration tests.
@@ -142,3 +142,5 @@ http://jenkinsci.github.io/java-client-api/
Copyright (C) 2013, Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
Distributed under the MIT license: http://opensource.org/licenses/MIT
+
+[integration-tests]: https://github.com/jenkinsci/java-client-api/tree/master/jenkins-client-it-docker
\ No newline at end of file
From 27eebd2e803f8cad4fd7e6d8cc08f168204f5919 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 11:14:21 +0100
Subject: [PATCH 062/197] Fixed wrong links.
---
jenkins-client-it-docker/README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/jenkins-client-it-docker/README.md b/jenkins-client-it-docker/README.md
index 50703eb6..738d3cf4 100644
--- a/jenkins-client-it-docker/README.md
+++ b/jenkins-client-it-docker/README.md
@@ -36,7 +36,7 @@ STATUS
Proof of Concept how to write integration tests
based on Docker image for Jenkins.
-[1]: https://github.com/RisingOak/jenkins-client
-[issue-119]: https://github.com/RisingOak/jenkins-client/issues/119
-[pr-99]: https://github.com/RisingOak/jenkins-client/pull/99
-[pr-127]: https://github.com/RisingOak/jenkins-client/pull/127
+[1]: https://github.com/jenkinsci/java-client-api/
+[issue-119]: https://github.com/jenkinsci/java-client-api//issues/119
+[pr-99]: https://github.com/jenkinsci/java-client-api//pull/99
+[pr-127]: https://github.com/jenkinsci/java-client-api//pull/127
From 83d2ebe6d83e6dbe2946afdb72714afc1bab651e Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 11:20:37 +0100
Subject: [PATCH 063/197] Added link to Release 0.3.7
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 12884ec4..ff3dd98d 100644
--- a/README.md
+++ b/README.md
@@ -81,6 +81,7 @@ covered by the usual integration tests.
You can find details about the different releases in the [Release Notes](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md).
+ * [Release 0.3.7](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-037).
* [Release 0.3.6](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-036).
* [Release 0.3.5](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-035).
* [Release 0.3.4](https://github.com/jenkinsci/java-client-api/blob/master/ReleaseNotes.md#release-034).
From 4203ef66b3457b469ddceb90015880fada241c79 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 11:28:22 +0100
Subject: [PATCH 064/197] Fixed #166 o Please shade / repackage Apache HTTP
components
---
ReleaseNotes.md | 6 ++++++
jenkins-client/pom.xml | 24 ++++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 6fc9af64..dac99cf6 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -6,6 +6,11 @@
* Correctly escaping `{` and `}` for range syntax.
+[Fixed Issue 166][issue-166]
+
+ * Added a supplemental package with classifier `apachehttp` which
+ includes the packages `org.apache.httpcomponents:httpclient` and
+ `org.apache.httpcomponents:httpcore`.
### API Changes
@@ -673,6 +678,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-161]: https://github.com/jenkinsci/java-client-api/issues/161
[issue-162]: https://github.com/jenkinsci/java-client-api/issues/162
[issue-165]: https://github.com/jenkinsci/java-client-api/issues/165
+[issue-166]: https://github.com/jenkinsci/java-client-api/issues/166
[issue-167]: https://github.com/jenkinsci/java-client-api/issues/167
[issue-168]: https://github.com/jenkinsci/java-client-api/issues/168
[issue-169]: https://github.com/jenkinsci/java-client-api/issues/169
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index be81d4bf..3133f243 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -118,6 +118,7 @@
maven-shade-plugin
+ stash
package
shade
@@ -138,6 +139,29 @@
+
+ httpclient
+ package
+
+ shade
+
+
+
+
+ org.apache.httpcomponents:httpclient
+ org.apache.httpcomponents:httpcore
+
+
+ true
+ apachehttp
+
+
+ com.google.common
+ com.google.common.jenkins_client_jarjar
+
+
+
+
From f08f7818efe2f8eee1e144957a56922cc4af9b6b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 18 Aug 2016 17:44:13 +0200
Subject: [PATCH 065/197] Added JavaDoc.
---
.../java/com/offbytwo/jenkins/model/JobWithDetails.java | 7 +++++++
1 file changed, 7 insertions(+)
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 4828ba01..db06f237 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
@@ -336,6 +336,13 @@ public QueueItem getQueueItem() {
return this.queueItem;
}
+ /**
+ * Get a build by the given buildNumber.
+ *
+ * @param buildNumber The number to select the build by.
+ * @return The {@link Build} selected by the given buildnumber
+ *
+ */
public Build getBuildByNumber(final int buildNumber) {
Predicate isMatchingBuildNumber = new Predicate() {
From ea42c9fe9a7350aa8930f90718771350c6597c13 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 13:42:44 +0100
Subject: [PATCH 066/197] Fixed #207 o Added actions to QueueItem.
---
ReleaseNotes.md | 14 ++++
.../com/offbytwo/jenkins/model/BaseModel.java | 6 ++
.../offbytwo/jenkins/model/BuildCause.java | 6 ++
.../offbytwo/jenkins/model/CauseAction.java | 69 +++++++++++++++++++
.../com/offbytwo/jenkins/model/Queue.java | 6 ++
.../com/offbytwo/jenkins/model/QueueItem.java | 25 ++++++-
.../jenkins/model/QueueItemActions.java | 22 ++++++
.../com/offbytwo/jenkins/model/QueueTask.java | 8 ++-
8 files changed, 154 insertions(+), 2 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index dac99cf6..149523c9 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,19 @@
### API Changes
+ * [Fixed Issue 207][issue-207]
+
+ Added
+```Java
+public class QueueItem extends BaseModel {
+
+ List getActions();
+}
+```
+
+ and the new `QueueItemActions` will offer access to the
+ actions.
+
* [Fixed Issue 38823[jissue-38823]
Added an deleteJob method with a crumbFlag.
@@ -692,6 +705,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-200]: https://github.com/jenkinsci/java-client-api/issues/200
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
+[issue-207]: https://github.com/jenkinsci/java-client-api/issues/207
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
index 496cbfec..dd473ee8 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
@@ -14,6 +14,12 @@
*/
public class BaseModel {
+ private String _class;
+
+ public String get_class() {
+ return _class;
+ }
+
//TODO: We should make this private
protected JenkinsHttpClient client;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
index 30a9a98d..ab15f94f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
@@ -1,3 +1,9 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
package com.offbytwo.jenkins.model;
public class BuildCause {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
new file mode 100644
index 00000000..e481f03a
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
@@ -0,0 +1,69 @@
+package com.offbytwo.jenkins.model;
+
+public class CauseAction extends BaseModel {
+ private String shortDescription;
+ private String userId;
+ private String userName;
+
+ public String getShortDescription() {
+ return shortDescription;
+ }
+
+ public void setShortDescription(String shortDescription) {
+ this.shortDescription = shortDescription;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((shortDescription == null) ? 0 : shortDescription.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ result = prime * result + ((userName == null) ? 0 : userName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CauseAction other = (CauseAction) obj;
+ if (shortDescription == null) {
+ if (other.shortDescription != null)
+ return false;
+ } else if (!shortDescription.equals(other.shortDescription))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ if (userName == null) {
+ if (other.userName != null)
+ return false;
+ } else if (!userName.equals(other.userName))
+ return false;
+ return true;
+ }
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
index 2e484dd5..3320ecb5 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
@@ -1,3 +1,9 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
package com.offbytwo.jenkins.model;
import java.util.List;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
index 77eeca81..662b3e2b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
@@ -1,7 +1,16 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
package com.offbytwo.jenkins.model;
+import java.util.List;
+
public class QueueItem extends BaseModel {
- // actions
+
+ private List actions;
private boolean blocked;
@@ -25,6 +34,14 @@ public class QueueItem extends BaseModel {
private Executable executable;
+ public List getActions() {
+ return actions;
+ }
+
+ public void setActions(List actions) {
+ this.actions = actions;
+ }
+
public boolean isBlocked() {
return blocked;
}
@@ -117,6 +134,7 @@ public void setExecutable(Executable executable) {
public int hashCode() {
final int prime = 31;
int result = 1;
+ result = prime * result + ((actions == null) ? 0 : actions.hashCode());
result = prime * result + (blocked ? 1231 : 1237);
result = prime * result + (buildable ? 1231 : 1237);
result = prime * result + (cancelled ? 1231 : 1237);
@@ -140,6 +158,11 @@ public boolean equals(Object obj) {
if (getClass() != obj.getClass())
return false;
QueueItem other = (QueueItem) obj;
+ if (actions == null) {
+ if (other.actions != null)
+ return false;
+ } else if (!actions.equals(other.actions))
+ return false;
if (blocked != other.blocked)
return false;
if (buildable != other.buildable)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
new file mode 100644
index 00000000..4c49ba5f
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
+package com.offbytwo.jenkins.model;
+
+import java.util.List;
+
+public class QueueItemActions extends BaseModel {
+ private List causes;
+
+ public List getCauses() {
+ return causes;
+ }
+
+ public void setCauses(List causes) {
+ this.causes = causes;
+ }
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
index 539541fc..4cc53978 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueTask.java
@@ -1,6 +1,12 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
package com.offbytwo.jenkins.model;
-public class QueueTask {
+public class QueueTask extends BaseModel {
private String name;
From e759bfdcddd77592d892cc5976d9d8cfd602de82 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 13:47:36 +0100
Subject: [PATCH 067/197] Fixed typo in link.
---
ReleaseNotes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 149523c9..1f18f5e0 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -27,7 +27,7 @@ public class QueueItem extends BaseModel {
and the new `QueueItemActions` will offer access to the
actions.
- * [Fixed Issue 38823[jissue-38823]
+ * [Fixed Issue 38823][jissue-38823]
Added an deleteJob method with a crumbFlag.
From 9ba5525492f46a5749389cb8dac18368e22b72b0 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 26 Nov 2016 20:03:08 +0100
Subject: [PATCH 068/197] Fixed #203 o added methods getJobXml and updateJob
with folder parameters.
Patch applied of RainerW
---
ReleaseNotes.md | 14 ++
.../com/offbytwo/jenkins/JenkinsServer.java | 130 ++++++++++--------
2 files changed, 87 insertions(+), 57 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 1f18f5e0..7a2e806e 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,18 @@
### API Changes
+ * [Fixed Issue 203][issue-203] with [pull request #204][pull-204]
+ of RainerW
+
+ Added methods getJobXml and updateJob with folder parameter.
+
+```java
+public class JenkinsServer {
+ String getJobXml(FolderJob folder, String jobName);
+ void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag);
+}
+```
+
* [Fixed Issue 207][issue-207]
Added
@@ -705,11 +717,13 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-200]: https://github.com/jenkinsci/java-client-api/issues/200
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
+[issue-203]: https://github.com/jenkinsci/java-client-api/issues/203
[issue-207]: https://github.com/jenkinsci/java-client-api/issues/207
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
+[pull-204]: https://github.com/jenkinsci/java-client-api/pull/204
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
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 6018bbce..79793b99 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -150,10 +150,7 @@ public Map getJobs(String view) throws IOException {
* @throws IOException
*/
public Map getJobs(FolderJob folder, String view) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
+ String path = toBaseUrl(folder);
Class extends MainView> viewClass = MainView.class;
if (view != null) {
path = path + "view/" + EncodingUtils.encode(view) + "/";
@@ -187,11 +184,7 @@ public Map getViews() throws IOException {
* @throws IOException
*/
public Map getViews(FolderJob folder) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- List views = client.get(path + "?depth=1", MainView.class).getViews();
+ List views = client.get(toBaseUrl(folder) + "?depth=1", MainView.class).getViews();
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
@@ -235,13 +228,8 @@ public View getView(String name) throws IOException {
* @throws IOException
*/
public View getView(FolderJob folder, String name) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
-
try {
- View resultView = client.get(path + "view/" + EncodingUtils.encode(name) + "/", View.class);
+ View resultView = client.get(toViewBaseUrl(folder,name) + "/", View.class);
resultView.setClient(client);
// TODO: Think about the following? Does there exists a simpler/more
@@ -280,12 +268,8 @@ public JobWithDetails getJob(String jobName) throws IOException {
* @throws IOException
*/
public JobWithDetails getJob(FolderJob folder, String jobName) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
try {
- JobWithDetails job = client.get(path + "job/" + EncodingUtils.encode(jobName), JobWithDetails.class);
+ JobWithDetails job = client.get(toJobBaseUrl(folder,jobName), JobWithDetails.class);
job.setClient(client);
return job;
@@ -304,12 +288,8 @@ public MavenJobWithDetails getMavenJob(String jobName) throws IOException {
}
public MavenJobWithDetails getMavenJob(FolderJob folder, String jobName) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
try {
- MavenJobWithDetails job = client.get(path + "job/" + EncodingUtils.encode(jobName),
+ MavenJobWithDetails job = client.get(toJobBaseUrl(folder, jobName),
MavenJobWithDetails.class);
job.setClient(client);
@@ -382,11 +362,7 @@ public void createJob(FolderJob folder, String jobName, String jobXml) throws IO
* @throws IOException
*/
public void createJob(FolderJob folder, String jobName, String jobXml, Boolean crumbFlag) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- client.post_xml(path + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
+ client.post_xml( toBaseUrl(folder) + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
}
/**
@@ -428,11 +404,7 @@ public void createView(FolderJob folder, String viewName, String viewXml) throws
* @throws IOException
*/
public void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- client.post_xml(path + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml, crumbFlag);
+ client.post_xml(toBaseUrl(folder) + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml, crumbFlag);
}
/**
@@ -468,15 +440,11 @@ public void createFolder(FolderJob folder, String jobName) throws IOException {
* @throws IOException
*/
public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
// https://gist.github.com/stuart-warren/7786892 was slightly helpful
// here
ImmutableMap params = ImmutableMap.of("mode", "com.cloudbees.hudson.plugins.folder.Folder",
"name", EncodingUtils.encodeParam(jobName), "from", "", "Submit", "OK");
- client.post_form(path + "createItem?", params, crumbFlag);
+ client.post_form(toBaseUrl(folder) + "createItem?", params, crumbFlag);
}
/**
@@ -486,7 +454,18 @@ public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) th
* @throws IOException
*/
public String getJobXml(String jobName) throws IOException {
- return client.get("/job/" + EncodingUtils.encode(jobName) + "/config.xml");
+ return getJobXml(null,jobName);
+ }
+
+ /**
+ * Get the xml description of an existing job
+ *
+ * @return the new job object
+ * @throws IOException
+ */
+ public String getJobXml(FolderJob folder, String jobName) throws IOException
+ {
+ return client.get(toJobBaseUrl(folder, jobName) + "/config.xml");
}
/**
@@ -557,15 +536,29 @@ public void updateView(String viewName, String viewXml, boolean crumbFlag) throw
/**
* Update the xml description of an existing job
*
- * @return the new job object
* @throws IOException
*/
public void updateJob(String jobName, String jobXml) throws IOException {
this.updateJob(jobName, jobXml, true);
}
+ /**
+ * Update the xml description of an existing job
+ *
+ * @throws IOException
+ */
public void updateJob(String jobName, String jobXml, boolean crumbFlag) throws IOException {
- client.post_xml("/job/" + EncodingUtils.encode(jobName) + "/config.xml", jobXml, crumbFlag);
+ updateJob(null,jobName,jobXml,crumbFlag);
+ }
+
+ /**
+ * Update the xml description of an existing job
+ *
+ * @throws IOException
+ */
+ public void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag) throws IOException
+ {
+ client.post_xml(toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
}
public void addStringParam(String jobName, String name, String description, String defaultValue)
@@ -630,11 +623,7 @@ public void deleteJob(FolderJob folder, String jobName) throws IOException {
* in case of problems.
*/
public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- client.post(path + "/job/" + EncodingUtils.encode(jobName) + "/doDelete", crumbFlag);
+ client.post(toJobBaseUrl(folder, jobName) + "/doDelete", crumbFlag);
}
/*
@@ -825,14 +814,41 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName) th
*/
public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
throws IOException {
-
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- client.post(path + "job/" + EncodingUtils.encode(oldJobName) + "/doRename?newName="
- + EncodingUtils.encodeParam(newJobName), crumbFlag);
-
- }
+ client.post( toJobBaseUrl(folder, oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName), crumbFlag);
+ }
+
+ /**
+ * Helper to create a base url in case a folder is given
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toBaseUrl(FolderJob folder)
+ {
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
+ return path;
+ }
+
+ /**
+ * Helper to create the base url for a job, with or without a given folder
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toJobBaseUrl(FolderJob folder, String jobName)
+ {
+ return toBaseUrl(folder) + "job/" + EncodingUtils.encode(jobName);
+ }
+
+ /**
+ * Helper to create the base url for a view, with or without a given folder
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toViewBaseUrl(FolderJob folder, String name)
+ {
+ return toBaseUrl(folder) + "view/" + EncodingUtils.encode(name);
+ }
}
From 06ffef7e2cbdfd71f9a5e4df12dd6de68c8f3df7 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 27 Nov 2016 15:56:59 +0100
Subject: [PATCH 069/197] Fixed #104 o Added consistently QueueReference as
return type to all build methods of the Job class.
---
ReleaseNotes.md | 14 ++++++++
.../com/offbytwo/jenkins/JenkinsServer.java | 7 ++--
.../java/com/offbytwo/jenkins/model/Job.java | 36 +++++++++++++------
3 files changed, 44 insertions(+), 13 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 7a2e806e..7c97e605 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,19 @@
### API Changes
+ * [Fixed Issue 104][issue-104] all build* methods now return consistently `QueueReference`
+ to make it possible to query for a queued build and if a build from the queue has
+ been cancelled or to see if a build is running.
+
+```java
+ public class Job extends BaseModel {
+ public QueueReference build();
+ public QueueReference build(boolean crumbFlag);
+ public QueueReference build(Map params);
+ public QueueReference build(Map params, boolean crumbFlag);
+}
+```
+
* [Fixed Issue 203][issue-203] with [pull request #204][pull-204]
of RainerW
@@ -682,6 +695,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-104]: https://github.com/jenkinsci/java-client-api/issues/104
[issue-111]: https://github.com/jenkinsci/java-client-api/issues/111
[issue-116]: https://github.com/jenkinsci/java-client-api/issues/116
+[issue-104]: https://github.com/jenkinsci/java-client-api/issues/104
[issue-108]: https://github.com/jenkinsci/java-client-api/issues/108
[issue-113]: https://github.com/jenkinsci/java-client-api/issues/113
[issue-119]: https://github.com/jenkinsci/java-client-api/issues/119
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 79793b99..18a15dce 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -714,6 +714,7 @@ public String runScript(String script) throws IOException {
}
public Queue getQueue() throws IOException {
+ //TODO: Check if using depth=1 is a good idea?
return client.get("queue/?depth=1", Queue.class);
}
@@ -721,10 +722,10 @@ public QueueItem getQueueItem(QueueReference ref) throws IOException {
try {
String url = ref.getQueueItemUrlPart();
// "/queue/item/" + id
- QueueItem job = client.get(url, QueueItem.class);
- job.setClient(client);
+ QueueItem queueItem = client.get(url, QueueItem.class);
+ queueItem.setClient(client);
- return job;
+ return queueItem;
} catch (HttpResponseException e) {
if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
return null;
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 bd808014..d01d5fea 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
@@ -48,13 +48,14 @@ public JobWithDetails details() throws IOException {
/**
* Get a file from workspace.
*
- * @param fileName The name of the file to download from workspace.
- * You can also access files which are in sub folders of the workspace.
+ * @param fileName
+ * The name of the file to download from workspace. You can also
+ * access files which are in sub folders of the workspace.
* @return The string which contains the content of the file.
* @throws IOException
*/
public String getFileFromWorkspace(String fileName) throws IOException {
- InputStream is = client.getFile( URI.create( url + "/ws/" + fileName ));
+ InputStream is = client.getFile(URI.create(url + "/ws/" + fileName));
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
@@ -66,18 +67,29 @@ public String getFileFromWorkspace(String fileName) throws IOException {
/**
* Trigger a build without parameters
+ *
+ * @return {@link QueueReference} for further analysis of the queued build.
+ * @throws IOException
+ * in case of an error.
*/
- public void build() throws IOException {
- client.post(url + "build");
+ public QueueReference build() throws IOException {
+ ExtractHeader location = client.post(url + "build", null, ExtractHeader.class, false);
+ return new QueueReference(location.getLocation());
+
}
/**
* Trigger a build with crumbFlag.
- * @param crumbFlag true or false.
- * @throws IOException in case of an error.
+ *
+ * @param crumbFlag
+ * true or false.
+ * @return {@link QueueReference} for further analysis of the queued build.
+ * @throws IOException
+ * in case of an error.
*/
- public void build(boolean crumbFlag) throws IOException {
- client.post(url + "build", crumbFlag);
+ public QueueReference build(boolean crumbFlag) throws IOException {
+ ExtractHeader location = client.post(url + "build", null, ExtractHeader.class, crumbFlag);
+ return new QueueReference(location.getLocation());
}
/**
@@ -85,11 +97,14 @@ public void build(boolean crumbFlag) throws IOException {
*
* @param params
* the job parameters
+ * @return {@link QueueReference} for further analysis of the queued build.
* @throws IOException
*/
- public void build(Map params) throws IOException {
+ public QueueReference build(Map params) throws IOException {
String qs = join(Collections2.transform(params.entrySet(), new MapEntryToQueryStringPair()), "&");
client.post(url + "buildWithParameters?" + qs);
+ ExtractHeader location = client.post(url + "buildWithParameters?" + qs, null, ExtractHeader.class, false);
+ return new QueueReference(location.getLocation());
}
/**
@@ -99,6 +114,7 @@ public void build(Map params) throws IOException {
* the job parameters
* @param crumbFlag
* determines whether crumb flag is used
+ * @return {@link QueueReference} for further analysis of the queued build.
* @throws IOException
*/
public QueueReference build(Map params, boolean crumbFlag) throws IOException {
From a7d0d4f228eec9deaf9a190d29cf4e6c1f212b60 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 27 Nov 2016 16:15:30 +0100
Subject: [PATCH 070/197] Reformatted based on Coding style.
---
.../jenkins/model/BuildWithDetails.java | 69 +++++++++----------
1 file changed, 34 insertions(+), 35 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index e16b9237..16771f6c 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -18,9 +18,8 @@
import static com.google.common.collect.Collections2.filter;
/**
- * This class represents build information with
- * details about what has been done like
- * duration start and of course the build result.
+ * This class represents build information with details about what has been done
+ * like duration start and of course the build result.
*
*/
public class BuildWithDetails extends Build {
@@ -79,38 +78,38 @@ public boolean apply(Map action) {
private BuildCause convertToBuildCause(Map cause) {
BuildCause cause_object = new BuildCause();
-
- //TODO: Think about it. Can this be done more simpler?
- String description = (String) cause.get("shortDescription");
- if (!Strings.isNullOrEmpty(description)) {
- cause_object.setShortDescription(description);
- }
-
- Integer upstreamBuild = (Integer) cause.get("upstreamBuild");
- if (upstreamBuild != null) {
- cause_object.setUpstreamBuild(upstreamBuild);
- }
-
- String upstreamProject = (String) cause.get("upstreamProject");
- if (!Strings.isNullOrEmpty(upstreamProject)) {
- cause_object.setUpstreamProject(upstreamProject);
- }
-
- String upstreamUrl = (String) cause.get("upstreamUrl");
- if (!Strings.isNullOrEmpty(upstreamProject)) {
- cause_object.setUpstreamUrl(upstreamUrl);
- }
-
- String userId = (String) cause.get("userId");
- if (!Strings.isNullOrEmpty(userId)) {
- cause_object.setUserId(userId);
- }
-
- String userName = (String) cause.get("userName");
- if (!Strings.isNullOrEmpty(userName)) {
- cause_object.setUserName(userName);
- }
- return cause_object;
+
+ // TODO: Think about it. Can this be done more simpler?
+ String description = (String) cause.get("shortDescription");
+ if (!Strings.isNullOrEmpty(description)) {
+ cause_object.setShortDescription(description);
+ }
+
+ Integer upstreamBuild = (Integer) cause.get("upstreamBuild");
+ if (upstreamBuild != null) {
+ cause_object.setUpstreamBuild(upstreamBuild);
+ }
+
+ String upstreamProject = (String) cause.get("upstreamProject");
+ if (!Strings.isNullOrEmpty(upstreamProject)) {
+ cause_object.setUpstreamProject(upstreamProject);
+ }
+
+ String upstreamUrl = (String) cause.get("upstreamUrl");
+ if (!Strings.isNullOrEmpty(upstreamProject)) {
+ cause_object.setUpstreamUrl(upstreamUrl);
+ }
+
+ String userId = (String) cause.get("userId");
+ if (!Strings.isNullOrEmpty(userId)) {
+ cause_object.setUserId(userId);
+ }
+
+ String userName = (String) cause.get("userName");
+ if (!Strings.isNullOrEmpty(userName)) {
+ cause_object.setUserName(userName);
+ }
+ return cause_object;
}
public String getDescription() {
From c1c5245fe0c3c01734b07e1bd1f1b3aa9a5802bb Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 27 Nov 2016 16:55:10 +0100
Subject: [PATCH 071/197] Fixed #197 o Provided methods for waiting until a
job has finished. Added JenkinsTriggerHelper class which contains such
methods.
---
ReleaseNotes.md | 14 ++
.../jenkins/JenkinsTriggerHelper.java | 170 ++++++++++++++++++
.../com/offbytwo/jenkins/model/Build.java | 13 +-
.../offbytwo/jenkins/model/BuildResult.java | 7 +-
.../jenkins/model/BuildWithDetails.java | 23 +++
5 files changed, 222 insertions(+), 5 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 7c97e605..3cbfbda4 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,19 @@
### API Changes
+ * [Fixed issue 197][issue-197] Provide method for waiting until job has finished.
+
+ Added a helper class to support this.
+
+```java
+public class JenkinsTriggerHelper {
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName);
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params);
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params,boolean crumbFlag);
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean crumbFlag);
+}
+```
+
* [Fixed Issue 104][issue-104] all build* methods now return consistently `QueueReference`
to make it possible to query for a queued build and if a build from the queue has
been cancelled or to see if a build is running.
@@ -727,6 +740,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
+[issue-197]: https://github.com/jenkinsci/java-client-api/issues/197
[issue-198]: https://github.com/jenkinsci/java-client-api/issues/198
[issue-200]: https://github.com/jenkinsci/java-client-api/issues/200
[issue-201]: https://github.com/jenkinsci/java-client-api/issues/201
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
new file mode 100644
index 00000000..b2bb39df
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
@@ -0,0 +1,170 @@
+package com.offbytwo.jenkins;
+
+import java.io.IOException;
+import java.util.Map;
+
+import com.offbytwo.jenkins.model.Build;
+import com.offbytwo.jenkins.model.BuildResult;
+import com.offbytwo.jenkins.model.BuildWithDetails;
+import com.offbytwo.jenkins.model.JobWithDetails;
+import com.offbytwo.jenkins.model.QueueItem;
+import com.offbytwo.jenkins.model.QueueReference;
+
+/**
+ * collection of convenient methods which use methods from {@link JenkinsServer}
+ * etc.
+ *
+ * @author Karl Heinz Marbaise
+ *
+ */
+public class JenkinsTriggerHelper {
+
+ private JenkinsServer server;
+
+ public JenkinsTriggerHelper(JenkinsServer server) {
+ this.server = server;
+ }
+
+ /**
+ * This method will trigger a build of the given job and will wait until the
+ * builds is ended or if the build has been cancelled.
+ *
+ * @param jobName
+ * The name of the job which should be triggered.
+ * @return In case of an cancelled job you will get
+ * {@link BuildWithDetails#getResult()}
+ * {@link BuildResult#CANCELLED}. So you have to check first if the
+ * build result is {@code CANCELLED}.
+ * @throws IOException
+ * in case of errors.
+ * @throws InterruptedException
+ * In case of interrupts.
+ */
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName) throws IOException, InterruptedException {
+ return triggerJobAndWaitUntilFinished(jobName, false);
+ }
+
+ /**
+ * This method will trigger a build of the given job and will wait until the
+ * builds is ended or if the build has been cancelled.
+ *
+ * @param jobName
+ * The name of the job which should be triggered.
+ * @param params
+ * the job parameters
+ * @return In case of an cancelled job you will get
+ * {@link BuildWithDetails#getResult()}
+ * {@link BuildResult#CANCELLED}. So you have to check first if the
+ * build result is {@code CANCELLED}.
+ * @throws IOException
+ * in case of errors.
+ * @throws InterruptedException
+ * In case of interrupts.
+ */
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params)
+ throws IOException, InterruptedException {
+ return triggerJobAndWaitUntilFinished(jobName, params, false);
+ }
+
+ /**
+ * This method will trigger a build of the given job and will wait until the
+ * builds is ended or if the build has been cancelled.
+ *
+ * @param jobName
+ * The name of the job which should be triggered.
+ * @param params
+ * the job parameters
+ * @param crumbFlag
+ * set to true or false.
+ * @return In case of an cancelled job you will get
+ * {@link BuildWithDetails#getResult()}
+ * {@link BuildResult#CANCELLED}. So you have to check first if the
+ * build result is {@code CANCELLED}.
+ * @throws IOException
+ * in case of errors.
+ * @throws InterruptedException
+ * In case of interrupts.
+ */
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params,
+ boolean crumbFlag) throws IOException, InterruptedException {
+ JobWithDetails job = this.server.getJob(jobName);
+ QueueReference queueRef = job.build(params, crumbFlag);
+
+ return triggerJobAndWaitUntilFinished(jobName, queueRef);
+ }
+
+ /**
+ * This method will trigger a build of the given job and will wait until the
+ * builds is ended or if the build has been cancelled.
+ *
+ * @param jobName
+ * The name of the job which should be triggered.
+ * @param crumbFlag
+ * set to true or false.
+ * @return In case of an cancelled job you will get
+ * {@link BuildWithDetails#getResult()}
+ * {@link BuildResult#CANCELLED}. So you have to check first if the
+ * build result is {@code CANCELLED}.
+ * @throws IOException
+ * in case of errors.
+ * @throws InterruptedException
+ * In case of interrupts.
+ */
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean crumbFlag)
+ throws IOException, InterruptedException {
+ JobWithDetails job = this.server.getJob(jobName);
+ QueueReference queueRef = job.build(crumbFlag);
+
+ return triggerJobAndWaitUntilFinished(jobName, queueRef);
+ }
+
+ /**
+ * @param jobName
+ * The name of the job.
+ * @param queueRef
+ * {@link QueueReference}
+ * @return In case of an cancelled job you will get
+ * {@link BuildWithDetails#getResult()}
+ * {@link BuildResult#CANCELLED}. So you have to check first if the
+ * build result is {@code CANCELLED}.
+ * @throws IOException
+ * in case of errors.
+ * @throws InterruptedException
+ * In case of interrupts.
+ */
+ private BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, QueueReference queueRef)
+ throws IOException, InterruptedException {
+ JobWithDetails job;
+ job = this.server.getJob(jobName);
+ QueueItem queueItem = this.server.getQueueItem(queueRef);
+ while (!queueItem.isCancelled() && job.isInQueue()) {
+ // TODO: May be we should make this configurable?
+ Thread.sleep(200);
+ job = this.server.getJob(jobName);
+ queueItem = this.server.getQueueItem(queueRef);
+ }
+
+ if (queueItem.isCancelled()) {
+ // TODO: Check if this is ok?
+ // We will get the details of the last build. NOT of the cancelled
+ // build, cause there is no information about that available cause
+ // it does not exist.
+ BuildWithDetails result = new BuildWithDetails(job.getLastBuild().details());
+ // TODO: Should we add more information here?
+ result.setResult(BuildResult.CANCELLED);
+ return result;
+ }
+
+ job = this.server.getJob(jobName);
+ Build lastBuild = job.getLastBuild();
+
+ boolean isBuilding = lastBuild.details().isBuilding();
+ while (isBuilding) {
+ // TODO: May be we should make this configurable?
+ Thread.sleep(200);
+ isBuilding = lastBuild.details().isBuilding();
+ }
+
+ return lastBuild.details();
+ }
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index f5f04bbe..b0585243 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -13,10 +13,15 @@
public class Build extends BaseModel {
/**
- * This will be returned by the API in cases where no build has ever
- * been executed like {@link JobWithDetails#getLastBuild()} etc.
+ * This will be returned by the API in cases where no build has ever been
+ * executed like {@link JobWithDetails#getLastBuild()} etc.
*/
- public static final Build BUILD_HAS_NEVER_RUN = new Build (-1, -1, "UNKNOWN");
+ public static final Build BUILD_HAS_NEVER_RUN = new Build(-1, -1, "UNKNOWN");
+ /**
+ * This will be returned by the API in cases where a build has been
+ * cancelled.
+ */
+ public static final Build BUILD_HAS_BEEN_CANCELLED = new Build(-1, -1, "CANCELLED");
private int number;
private int queueId;
@@ -28,7 +33,7 @@ private Build(int number, int queueId, String url) {
this.queueId = queueId;
this.url = url;
}
-
+
public Build() {
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
index e4aad42f..d46ed9cb 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
@@ -7,5 +7,10 @@
package com.offbytwo.jenkins.model;
public enum BuildResult {
- FAILURE, UNSTABLE, REBUILDING, BUILDING, ABORTED, SUCCESS, UNKNOWN, NOT_BUILT
+ FAILURE, UNSTABLE, REBUILDING, BUILDING, ABORTED, SUCCESS, UNKNOWN, NOT_BUILT,
+ /**
+ * This will be the result of a job in cases where it has been
+ * cancelled during the time in the queue.
+ */
+ CANCELLED
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 16771f6c..f2924714 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -40,6 +40,25 @@ public class BuildWithDetails extends Build {
private String builtOn;
private List culprits;
+ public BuildWithDetails(BuildWithDetails details) {
+ this.actions = details.actions;
+ this.description = details.description;
+ this.building = details.building;
+ this.duration = details.duration;
+ this.estimatedDuration = details.estimatedDuration;
+ this.fullDisplayName = details.fullDisplayName;
+ this.id = details.id;
+ this.timestamp = details.timestamp;
+ this.result = details.result;
+ this.artifacts = details.artifacts;
+ this.consoleOutputHtml = details.consoleOutputHtml;
+ this.consoleOutputText = details.consoleOutputText;
+ this.changeSet = details.changeSet;
+ this.builtOn = details.builtOn;
+ this.culprits = details.culprits;
+ this.setClient(details.getClient());
+ }
+
public List getArtifacts() {
return artifacts;
}
@@ -200,6 +219,10 @@ public void setCulprits(List culprits) {
this.culprits = culprits;
}
+ public void setResult(BuildResult result) {
+ this.result = result;
+ }
+
public InputStream downloadArtifact(Artifact a) throws IOException, URISyntaxException {
// We can't just put the artifact's relative path at the end of the url
// string, as there could be characters that need to be escaped.
From 9888d4f53da420505de750d9a78b7e56e404ccb4 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 27 Nov 2016 17:01:11 +0100
Subject: [PATCH 072/197] Added PR#206 to added runScript with crumbFlag.
---
ReleaseNotes.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 3cbfbda4..facbdab4 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,16 @@
### API Changes
+ * [Pull Request #206][pull-206] added runScript with `crumbFlag`.
+
+ Thanks Rainer W.
+
+```java
+public class JenkinsServer {
+ public String runScript(String script,boolean crumb);
+}
+```
+
* [Fixed issue 197][issue-197] Provide method for waiting until job has finished.
Added a helper class to support this.
@@ -752,6 +762,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[pull-204]: https://github.com/jenkinsci/java-client-api/pull/204
+[pull-206]: https://github.com/jenkinsci/java-client-api/pull/206
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
From 8c1ffb34fbf363e8a5c814933d8c1598841bb14b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 27 Nov 2016 17:11:21 +0100
Subject: [PATCH 073/197] Build fix for IT's.
---
.../main/java/com/offbytwo/jenkins/model/BuildWithDetails.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index f2924714..8e88b9da 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -40,6 +40,9 @@ public class BuildWithDetails extends Build {
private String builtOn;
private List culprits;
+ public BuildWithDetails() {
+ // Default ctor is needed to jackson.
+ }
public BuildWithDetails(BuildWithDetails details) {
this.actions = details.actions;
this.description = details.description;
From 72945414e840963bfc3e8a0cdeff5b73234e8e9f Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 28 Nov 2016 08:33:15 +0100
Subject: [PATCH 074/197] Fixed #188 o Added methods to change displayName and
description of a build.
---
ReleaseNotes.md | 16 ++++
.../com/offbytwo/jenkins/model/Build.java | 2 +
.../jenkins/model/BuildWithDetails.java | 94 +++++++++++++++++++
3 files changed, 112 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index facbdab4..11adeec2 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,21 @@
### API Changes
+ * [Fixed issue 188][issue-188]
+
+ Added methods to update the description and the display name of a build.
+
+```java
+public class BuildWithDetails .. {
+ public void updateDisplayNameAndDescription(String displayName, String description, boolean crumbFlag);
+ public void updateDisplayNameAndDescription(String displayName, String description);
+ public void updateDisplayName(String displayName, boolean crumbFlag);
+ public void updateDisplayName(String displayName);
+ public void updateDescription(String description, boolean crumbFlag);
+ public void updateDescription(String description);
+}
+```
+
* [Pull Request #206][pull-206] added runScript with `crumbFlag`.
Thanks Rainer W.
@@ -750,6 +765,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
+[issue-188]: https://github.com/jenkinsci/java-client-api/issues/188
[issue-197]: https://github.com/jenkinsci/java-client-api/issues/197
[issue-198]: https://github.com/jenkinsci/java-client-api/issues/198
[issue-200]: https://github.com/jenkinsci/java-client-api/issues/200
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index b0585243..961af75c 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -10,6 +10,8 @@
import org.apache.http.client.HttpResponseException;
+import com.google.common.collect.ImmutableMap;
+
public class Build extends BaseModel {
/**
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 8e88b9da..4453bbac 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -8,6 +8,7 @@
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.io.InputStream;
@@ -27,6 +28,7 @@ public class BuildWithDetails extends Build {
private List actions; // TODO: Should be improved.
private boolean building;
private String description;
+ private String displayName;
private long duration;
private long estimatedDuration;
private String fullDisplayName;
@@ -43,9 +45,11 @@ public class BuildWithDetails extends Build {
public BuildWithDetails() {
// Default ctor is needed to jackson.
}
+
public BuildWithDetails(BuildWithDetails details) {
this.actions = details.actions;
this.description = details.description;
+ this.displayName = details.displayName;
this.building = details.building;
this.duration = details.duration;
this.estimatedDuration = details.estimatedDuration;
@@ -98,6 +102,81 @@ public boolean apply(Map action) {
return result;
}
+ /**
+ * Update displayName and the description of a build.
+ * @param displayName The new displayName which should be set.
+ * @param description The description which should be set.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of errors.
+ */
+ public void updateDisplayNameAndDescription(String displayName, String description, boolean crumbFlag)
+ throws IOException {
+ Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
+ Objects.requireNonNull(description, "description is not allowed to be null.");
+ //TODO: Check what the "core:apply" means?
+ ImmutableMap params = ImmutableMap.of("displayName", displayName, "description", description,
+ "core:apply", "", "Submit", "Save");
+ client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ }
+
+ /**
+ * Update displayName and the description of a build.
+ * @param displayName The new displayName which should be set.
+ * @param description The description which should be set.
+ * @throws IOException in case of errors.
+ */
+ public void updateDisplayNameAndDescription(String displayName, String description) throws IOException {
+ updateDisplayNameAndDescription(displayName, description, false);
+ }
+
+ /**
+ * Update displayName of a build.
+ * @param displayName The new displayName which should be set.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of errors.
+ */
+ public void updateDisplayName(String displayName, boolean crumbFlag) throws IOException {
+ Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
+ String description = getDescription() == null ? "" : getDescription();
+ //TODO: Check what the "core:apply" means?
+ ImmutableMap params = ImmutableMap.of("displayName", displayName, "description",
+ description, "core:apply", "", "Submit", "Save");
+ client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ }
+
+ /**
+ * Update displayName of a build.
+ * @param displayName The new displayName which should be set.
+ * @throws IOException in case of errors.
+ */
+ public void updateDisplayName(String displayName) throws IOException {
+ updateDisplayName(displayName, false);
+ }
+
+ /**
+ * Update the description of a build.
+ * @param description The description which should be set.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of errors.
+ */
+ public void updateDescription(String description, boolean crumbFlag) throws IOException {
+ Objects.requireNonNull(description, "description is not allowed to be null.");
+ String displayName = getDisplayName() == null ? "" : getDisplayName();
+ //TODO: Check what the "core:apply" means?
+ ImmutableMap params = ImmutableMap.of("displayName", displayName, "description",
+ description, "core:apply", "", "Submit", "Save");
+ client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ }
+
+ /**
+ * Update the description of a build.
+ * @param description The description which should be set.
+ * @throws IOException in case of errors.
+ */
+ public void updateDescription(String description) throws IOException {
+ updateDescription(description, false);
+ }
+
private BuildCause convertToBuildCause(Map cause) {
BuildCause cause_object = new BuildCause();
@@ -150,6 +229,10 @@ public String getFullDisplayName() {
return fullDisplayName;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
public String getId() {
return id;
}
@@ -202,6 +285,11 @@ public String getConsoleOutputText() throws IOException {
return client.get(getUrl() + "/logText/progressiveText");
}
+ /**
+ * The console output with HTML.
+ * @return The console output as HTML.
+ * @throws IOException
+ */
public String getConsoleOutputHtml() throws IOException {
return client.get(getUrl() + "/logText/progressiveHtml");
}
@@ -287,6 +375,11 @@ public boolean equals(Object obj) {
return false;
} else if (!description.equals(other.description))
return false;
+ if (displayName == null) {
+ if (other.displayName != null)
+ return false;
+ } else if (!displayName.equals(other.displayName))
+ return false;
if (duration != other.duration)
return false;
if (estimatedDuration != other.estimatedDuration)
@@ -321,6 +414,7 @@ public int hashCode() {
result = prime * result + ((consoleOutputText == null) ? 0 : consoleOutputText.hashCode());
result = prime * result + ((culprits == null) ? 0 : culprits.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
result = prime * result + (int) (duration ^ (duration >>> 32));
result = prime * result + (int) (estimatedDuration ^ (estimatedDuration >>> 32));
result = prime * result + ((fullDisplayName == null) ? 0 : fullDisplayName.hashCode());
From 647d176f3944572ffe821c5556f076da0cce4a49 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 2 Dec 2016 17:04:36 +0100
Subject: [PATCH 075/197] Removed unused import.
---
.../src/main/java/com/offbytwo/jenkins/model/Build.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 961af75c..b0585243 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -10,8 +10,6 @@
import org.apache.http.client.HttpResponseException;
-import com.google.common.collect.ImmutableMap;
-
public class Build extends BaseModel {
/**
From 1b0c1e888a91f5c9601580fc07b77bc8533f03a2 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 3 Dec 2016 10:28:08 +0100
Subject: [PATCH 076/197] Changed order of methods in ReleaseNotes.
---
ReleaseNotes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 11adeec2..5527ca05 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -46,9 +46,9 @@ public class JenkinsServer {
```java
public class JenkinsTriggerHelper {
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName);
+ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean crumbFlag);
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params);
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params,boolean crumbFlag);
- public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean crumbFlag);
}
```
From 59685653bf7fa5f85fa1194088b7fb609a148657 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 3 Dec 2016 11:07:18 +0100
Subject: [PATCH 077/197] Fixed #211 o Added methods to update/clear the
description of a job.
---
ReleaseNotes.md | 13 ++++
.../jenkins/model/JobWithDetails.java | 67 ++++++++++++++++++-
2 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 5527ca05..5cfed749 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,6 +14,18 @@
### API Changes
+ * [Fixed issue 211][issue-211]
+
+ Added methods to update/clear the description of a job.
+
+```java
+public class JobWithDetails .. {
+ public void updateDescription(String description);
+ public void updateDescription(String description, boolean crumbFlag);
+ public void clearDescription();
+ public void clearDescription(boolean crumbFlag);
+```
+
* [Fixed issue 188][issue-188]
Added methods to update the description and the display name of a build.
@@ -773,6 +785,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
[issue-203]: https://github.com/jenkinsci/java-client-api/issues/203
[issue-207]: https://github.com/jenkinsci/java-client-api/issues/207
+[issue-211]: https://github.com/jenkinsci/java-client-api/issues/211
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
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 db06f237..3242528b 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
@@ -11,6 +11,7 @@
import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
@@ -18,6 +19,7 @@
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.offbytwo.jenkins.client.util.EncodingUtils;
import com.offbytwo.jenkins.helper.Range;
@@ -339,9 +341,10 @@ public QueueItem getQueueItem() {
/**
* Get a build by the given buildNumber.
*
- * @param buildNumber The number to select the build by.
+ * @param buildNumber
+ * The number to select the build by.
* @return The {@link Build} selected by the given buildnumber
- *
+ *
*/
public Build getBuildByNumber(final int buildNumber) {
@@ -366,6 +369,66 @@ public Job apply(Job job) {
}
}
+ /**
+ * Empty description to be used for {@link #updateDescription(String)}
+ * or {@link #updateDescription(String, boolean)}.
+ */
+ public static final String EMPTY_DESCRIPTION = "";
+
+ /**
+ * Update the description of a Job.
+ *
+ * @param description
+ * The description which should be set.
+ * If you like to set an empty description
+ * you should use {@link #EMPTY_DESCRIPTION}.
+ * @throws IOException
+ * in case of errors.
+ */
+ public void updateDescription(String description) throws IOException {
+ updateDescription(description, false);
+ }
+
+ /**
+ * Update the description of a Job.
+ *
+ * @param description
+ * The description which should be set.
+ * If you like to set an empty description
+ * you should use {@link #EMPTY_DESCRIPTION}.
+ * @param crumbFlag
+ * true or false.
+ * @throws IOException
+ * in case of errors.
+ */
+ public void updateDescription(String description, boolean crumbFlag) throws IOException {
+ Objects.requireNonNull(description, "description is not allowed to be null.");
+ ImmutableMap params = ImmutableMap.of("description", description);
+ client.post_form(this.getUrl() + "/submitDescription?", params, crumbFlag);
+ }
+
+ /**
+ * clear the description of a job.
+ *
+ * @throws IOException
+ * in case of errors.
+ */
+ public void clearDescription() throws IOException {
+ updateDescription(EMPTY_DESCRIPTION);
+ }
+
+ /**
+ * clear the description of a job.
+ *
+ * @param crumbFlag
+ * true or false.
+ * @throws IOException
+ * in case of errors.
+ */
+ public void clearDescription(boolean crumbFlag) throws IOException {
+ updateDescription(EMPTY_DESCRIPTION, crumbFlag);
+ }
+
@Override
public int hashCode() {
final int prime = 31;
From dc74cf9a5713027ecfa9ca9c47e2de51c6609bdf Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 3 Dec 2016 21:36:28 +0100
Subject: [PATCH 078/197] Fixed formatting.
---
.../NoExecutorStartedPluginManagerIT.java | 63 +++++++++++++------
1 file changed, 45 insertions(+), 18 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
index 2c62878a..9c44a71e 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
@@ -59,11 +59,20 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
// TODO: The list of plugins is contained in the plugin.txt
// which should be read and used as base of comparison.
// instead of maintaining at two locations.
- Plugin[] expectedPlugins = { createPlugin("token-macro", "1.12.1"), createPlugin("testng-plugin", "1.10"),
- createPlugin("job-dsl", "1.41"), createPlugin("junit", "1.10"), createPlugin("jacoco", "1.0.19"),
- createPlugin("config-file-provider", "2.10.0"), createPlugin("timestamper", "1.7.2"),
- createPlugin("credentials", "1.24"), createPlugin("throttle-concurrents", "1.9.0"),
- createPlugin("cloudbees-folder", "5.12"), };
+ //@formatter:off
+ Plugin[] expectedPlugins = {
+ createPlugin("token-macro", "1.12.1"),
+ createPlugin("testng-plugin", "1.10"),
+ createPlugin("job-dsl", "1.41"),
+ createPlugin("junit", "1.10"),
+ createPlugin("jacoco", "1.0.19"),
+ createPlugin("config-file-provider", "2.10.0"),
+ createPlugin("timestamper", "1.7.2"),
+ createPlugin("credentials", "1.24"),
+ createPlugin("throttle-concurrents", "1.9.0"),
+ createPlugin("cloudbees-folder", "5.12"),
+ };
+ //@formatter:on
List plugins = pluginManager.getPlugins();
for (Plugin plugin : plugins) {
@@ -91,19 +100,37 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651() {
// TODO: The list of plugins is contained in the plugin.txt
// which should be read and used as base of comparison.
// instead of maintaining at two locations.
- Plugin[] expectedPlugins = { createPlugin("token-macro", "1.12.1"), createPlugin("translation", "1.10"),
- createPlugin("testng-plugin", "1.10"), createPlugin("matrix-project", "1.4.1"),
- createPlugin("job-dsl", "1.41"), createPlugin("windows-slaves", "1.0"),
- createPlugin("antisamy-markup-formatter", "1.1"), createPlugin("junit", "1.10"),
- createPlugin("maven-plugin", "2.7.1"), createPlugin("external-monitor-job", "1.4"),
- createPlugin("jacoco", "1.0.19"), createPlugin("pam-auth", "1.1"), createPlugin("ldap", "1.11"),
- createPlugin("script-security", "1.13"), createPlugin("mailer", "1.11"), createPlugin("cvs", "2.11"),
- createPlugin("ant", "1.2"), createPlugin("config-file-provider", "2.10.0"),
- createPlugin("ssh-credentials", "1.10"), createPlugin("matrix-auth", "1.1"),
- createPlugin("javadoc", "1.1"), createPlugin("timestamper", "1.7.2"),
- createPlugin("credentials", "1.24"), createPlugin("throttle-concurrents", "1.9.0"),
- createPlugin("subversion", "1.54"), createPlugin("ssh-slaves", "1.9"),
- createPlugin("cloudbees-folder", "5.12"), };
+ //@formatter:off
+ Plugin[] expectedPlugins = {
+ createPlugin("token-macro", "1.12.1"),
+ createPlugin("translation", "1.10"),
+ createPlugin("testng-plugin", "1.10"),
+ createPlugin("matrix-project", "1.4.1"),
+ createPlugin("job-dsl", "1.41"),
+ createPlugin("windows-slaves", "1.0"),
+ createPlugin("antisamy-markup-formatter", "1.1"),
+ createPlugin("junit", "1.10"),
+ createPlugin("maven-plugin", "2.7.1"),
+ createPlugin("external-monitor-job", "1.4"),
+ createPlugin("jacoco", "1.0.19"),
+ createPlugin("pam-auth", "1.1"),
+ createPlugin("ldap", "1.11"),
+ createPlugin("script-security", "1.13"),
+ createPlugin("mailer", "1.11"),
+ createPlugin("cvs", "2.11"),
+ createPlugin("ant", "1.2"),
+ createPlugin("config-file-provider", "2.10.0"),
+ createPlugin("ssh-credentials", "1.10"),
+ createPlugin("matrix-auth", "1.1"),
+ createPlugin("javadoc", "1.1"),
+ createPlugin("timestamper", "1.7.2"),
+ createPlugin("credentials", "1.24"),
+ createPlugin("throttle-concurrents", "1.9.0"),
+ createPlugin("subversion", "1.54"),
+ createPlugin("ssh-slaves", "1.9"),
+ createPlugin("cloudbees-folder", "5.12"),
+ };
+ //@formatter:on
List plugins = pluginManager.getPlugins();
for (Plugin plugin : plugins) {
From 4957e893fda11e6e23762e39b9770af94c7f2f56 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 4 Dec 2016 10:34:36 +0100
Subject: [PATCH 079/197] Regenerated equals/hashCode
---
.../com/offbytwo/jenkins/model/Build.java | 29 ++++++++++++-------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index b0585243..07f815de 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -107,26 +107,33 @@ private void stopPost() throws HttpResponseException, IOException {
}
@Override
- public boolean equals(Object o) {
- if (this == o)
+ public boolean equals(Object obj) {
+ if (this == obj)
return true;
- if (o == null || getClass() != o.getClass())
+ if (obj == null)
return false;
-
- Build build = (Build) o;
-
- if (number != build.number)
+ if (getClass() != obj.getClass())
return false;
- if (url != null ? !url.equals(build.url) : build.url != null)
+ Build other = (Build) obj;
+ if (number != other.number)
+ return false;
+ if (queueId != other.queueId)
+ return false;
+ if (url == null) {
+ if (other.url != null)
+ return false;
+ } else if (!url.equals(other.url))
return false;
-
return true;
}
@Override
public int hashCode() {
- int result = number;
- result = 31 * result + (url != null ? url.hashCode() : 0);
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + number;
+ result = prime * result + queueId;
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
return result;
}
}
From 2d33bb1f333c27fce8afaa527388693b6a8fdff4 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 5 Dec 2016 08:57:47 +0100
Subject: [PATCH 080/197] Changed formatting rules for code.
---
Eclipse-JenkinsClient.xml | 19 ++-----------------
ReleaseNotes.md | 2 ++
2 files changed, 4 insertions(+), 17 deletions(-)
diff --git a/Eclipse-JenkinsClient.xml b/Eclipse-JenkinsClient.xml
index 6b46c4ff..dbeb09e2 100644
--- a/Eclipse-JenkinsClient.xml
+++ b/Eclipse-JenkinsClient.xml
@@ -6,23 +6,19 @@
-
-
+
-
-
-
@@ -35,7 +31,6 @@
-
@@ -57,7 +52,6 @@
-
@@ -89,7 +83,6 @@
-
@@ -108,7 +101,6 @@
-
@@ -124,7 +116,6 @@
-
@@ -163,7 +154,6 @@
-
@@ -173,7 +163,6 @@
-
@@ -196,7 +185,6 @@
-
@@ -208,17 +196,15 @@
-
-
-
+
@@ -272,7 +258,6 @@
-
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 5cfed749..1281fa9c 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,8 @@
## Release 0.3.7 (NOT RELEASED YET)
+ * Changed Eclipse Formatting configuration.
+
[Fixed Issue 186][issue-186]
* Correctly escaping `{` and `}` for range syntax.
From 28d9dbf31241a7b7453488f06408b19c387538b2 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 2 Dec 2016 16:59:29 +0100
Subject: [PATCH 081/197] Fixed #209 Return TestReport.NO_TEST_REPORT etc.
---
ReleaseNotes.md | 48 +++++
.../NoExecutorStartedGetJobIT.java | 5 +
.../com/offbytwo/jenkins/model/Build.java | 37 +++-
.../offbytwo/jenkins/model/BuildResult.java | 22 ++-
.../jenkins/model/BuildWithDetails.java | 96 ++++++++--
.../jenkins/model/JobWithDetails.java | 166 ++++++++++++++----
.../offbytwo/jenkins/model/TestReport.java | 28 +++
7 files changed, 352 insertions(+), 50 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 1281fa9c..8da6d0a5 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -16,6 +16,53 @@
### API Changes
+
+ * [Fixed issue 209][issue-209]
+
+ Consider Returning null from the "getTestReport()" of Build.java class for builds that Never run.
+
+ The type `BUILD_HAS_NEVER_RUN` has been enhanced to return `TestReport.NO_TEST_REPORT` if you
+ call `getTestReport()` and return `BuildWithDetails.BUILD_HAS_NEVER_RUN` if you call `details()` on the
+ type.
+
+ Furthermore `JobWithDetails` class has been enhanced with the following methods:
+
+```java
+public class JobWithDetails ... {
+ public boolean hasFirstBuildRun();
+ public boolean hasLastBuildRun(;
+ public boolean hasLastCompletedBuildRun();
+ public boolean hasLastFailedBuildRun();
+ public boolean hasLastStableBuildRun();
+ public boolean hasLastSuccessfulBuildRun();
+ public boolean hasLastUnstableBuildRun();
+ public boolean hasLastUnsuccessfulBuildRun();
+}
+```
+ to make checking more convenient. The following code snippet
+ shows how you need to go before this change:
+
+```java
+JobWithDetails job = server.getJob(jobName);
+if (Build.BUILD_HAS_NEVER_RUN.equals(job.getLastBuild()) {
+ ...
+} else {
+ // Now we can get the TestReport
+ job.getLastBuild().getTestReport();
+}
+```
+
+ This can now be simplified to the following:
+
+```java
+JobWithDetails job = server.getJob(jobName);
+if (job.hasLastBuildRun()) {
+ // Now we can get the TestReport
+ job.getLastBuild().getTestReport();
+} else {
+}
+```
+
* [Fixed issue 211][issue-211]
Added methods to update/clear the description of a job.
@@ -787,6 +834,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-202]: https://github.com/jenkinsci/java-client-api/issues/202
[issue-203]: https://github.com/jenkinsci/java-client-api/issues/203
[issue-207]: https://github.com/jenkinsci/java-client-api/issues/207
+[issue-209]: https://github.com/jenkinsci/java-client-api/issues/209
[issue-211]: https://github.com/jenkinsci/java-client-api/issues/211
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index d0f77b18..36bca435 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -79,6 +79,11 @@ public void getLastFailedBuildShouldBeBUILD_HAS_NEVER_RAN() {
assertThat(job.getLastFailedBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
+ @Test
+ public void hasLastFailedBuildShouldBeTrue() {
+ assertThat(job.hasLastFailedBuildRun()).isTrue();
+ }
+
@Test
public void getLastStableBuildShouldNotBeNull() throws IOException {
assertThat(job.getLastStableBuild()).isNotNull();
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 07f815de..edb457ca 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -14,14 +14,38 @@ public class Build extends BaseModel {
/**
* This will be returned by the API in cases where no build has ever been
- * executed like {@link JobWithDetails#getLastBuild()} etc.
+ * executed like {@link JobWithDetails#getLastBuild()} etc. This will also
+ * be returned by {@link #details()} is the build has not been run.
*/
- public static final Build BUILD_HAS_NEVER_RUN = new Build(-1, -1, "UNKNOWN");
+ public static final Build BUILD_HAS_NEVER_RUN = new Build(-1, -1, "UNKNOWN") {
+ @Override
+ public TestReport getTestReport() {
+ return TestReport.NO_TEST_REPORT;
+ }
+
+ @Override
+ public BuildWithDetails details() {
+ // For a build which never has been run you couldn't get
+ // details about!
+ return BuildWithDetails.BUILD_HAS_NEVER_RUN;
+ }
+ };
+
/**
* This will be returned by the API in cases where a build has been
* cancelled.
*/
- public static final Build BUILD_HAS_BEEN_CANCELLED = new Build(-1, -1, "CANCELLED");
+ public static final Build BUILD_HAS_BEEN_CANCELLED = new Build(-1, -1, "CANCELLED") {
+ @Override
+ public TestReport getTestReport() {
+ return TestReport.NO_TEST_REPORT;
+ }
+
+ @Override
+ public BuildWithDetails details() {
+ return BuildWithDetails.BUILD_HAS_BEEN_CANCELLED;
+ }
+ };
private int number;
private int queueId;
@@ -70,6 +94,13 @@ protected void setUrl(String url) {
this.url = url;
}
+ /**
+ *
+ * @return The information from Jenkins. In cases the build has never run
+ * {@link #BUILD_HAS_NEVER_RUN} will be returned.
+ * @throws IOException
+ * in case of an error.
+ */
public BuildWithDetails details() throws IOException {
return client.get(url, BuildWithDetails.class);
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
index d46ed9cb..64b695c6 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildResult.java
@@ -7,10 +7,26 @@
package com.offbytwo.jenkins.model;
public enum BuildResult {
- FAILURE, UNSTABLE, REBUILDING, BUILDING, ABORTED, SUCCESS, UNKNOWN, NOT_BUILT,
+ FAILURE, UNSTABLE, REBUILDING, BUILDING,
/**
- * This will be the result of a job in cases where it has been
- * cancelled during the time in the queue.
+ * This means a job was already running and has been aborted.
+ */
+ ABORTED,
+ /**
+ *
+ */
+ SUCCESS,
+ /**
+ * ?
+ */
+ UNKNOWN,
+ /**
+ * This is returned if a job has never been built.
+ */
+ NOT_BUILT,
+ /**
+ * This will be the result of a job in cases where it has been cancelled
+ * during the time in the queue.
*/
CANCELLED
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 4453bbac..0848fa93 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -25,6 +25,72 @@
*/
public class BuildWithDetails extends Build {
+ /**
+ * This will be returned by the API in cases where the build has never run.
+ * For example {@link Build#BUILD_HAS_NEVER_RUN}
+ */
+ public static final BuildWithDetails BUILD_HAS_NEVER_RUN = new BuildWithDetails() {
+
+ @Override
+ public List getActions() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getArtifacts() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getCauses() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getCulprits() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public BuildResult getResult() {
+ return BuildResult.NOT_BUILT;
+ }
+
+ };
+
+ /**
+ * This will be returned by the API in cases where the build has been
+ * cancelled. For example {@link Build#BUILD_HAS_BEEN_CANCELLED}
+ */
+ public static final BuildWithDetails BUILD_HAS_BEEN_CANCELLED = new BuildWithDetails() {
+
+ @Override
+ public List getActions() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getArtifacts() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getCauses() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getCulprits() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public BuildResult getResult() {
+ return BuildResult.CANCELLED;
+ }
+
+ };
+
private List actions; // TODO: Should be improved.
private boolean building;
private String description;
@@ -103,7 +169,9 @@ public boolean apply(Map action) {
}
/**
- * Update displayName and the description of a build.
+ * Update displayName and the description of a
+ * build.
+ *
* @param displayName The new displayName which should be set.
* @param description The description which should be set.
* @param crumbFlag true or false.
@@ -113,14 +181,16 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
throws IOException {
Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
Objects.requireNonNull(description, "description is not allowed to be null.");
- //TODO: Check what the "core:apply" means?
+ // TODO: Check what the "core:apply" means?
ImmutableMap params = ImmutableMap.of("displayName", displayName, "description", description,
"core:apply", "", "Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
}
/**
- * Update displayName and the description of a build.
+ * Update displayName and the description of a
+ * build.
+ *
* @param displayName The new displayName which should be set.
* @param description The description which should be set.
* @throws IOException in case of errors.
@@ -131,6 +201,7 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
/**
* Update displayName of a build.
+ *
* @param displayName The new displayName which should be set.
* @param crumbFlag true or false.
* @throws IOException in case of errors.
@@ -138,14 +209,15 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
public void updateDisplayName(String displayName, boolean crumbFlag) throws IOException {
Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
String description = getDescription() == null ? "" : getDescription();
- //TODO: Check what the "core:apply" means?
- ImmutableMap params = ImmutableMap.of("displayName", displayName, "description",
- description, "core:apply", "", "Submit", "Save");
+ // TODO: Check what the "core:apply" means?
+ ImmutableMap params = ImmutableMap.of("displayName", displayName, "description", description,
+ "core:apply", "", "Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
}
/**
* Update displayName of a build.
+ *
* @param displayName The new displayName which should be set.
* @throws IOException in case of errors.
*/
@@ -155,6 +227,7 @@ public void updateDisplayName(String displayName) throws IOException {
/**
* Update the description of a build.
+ *
* @param description The description which should be set.
* @param crumbFlag true or false.
* @throws IOException in case of errors.
@@ -162,14 +235,15 @@ public void updateDisplayName(String displayName) throws IOException {
public void updateDescription(String description, boolean crumbFlag) throws IOException {
Objects.requireNonNull(description, "description is not allowed to be null.");
String displayName = getDisplayName() == null ? "" : getDisplayName();
- //TODO: Check what the "core:apply" means?
- ImmutableMap params = ImmutableMap.of("displayName", displayName, "description",
- description, "core:apply", "", "Submit", "Save");
+ // TODO: Check what the "core:apply" means?
+ ImmutableMap params = ImmutableMap.of("displayName", displayName, "description", description,
+ "core:apply", "", "Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
}
/**
* Update the description of a build.
+ *
* @param description The description which should be set.
* @throws IOException in case of errors.
*/
@@ -278,8 +352,7 @@ public boolean apply(Map action) {
/**
* @return The console output of the build. The line separation is done by
* {@code CR+LF}.
- * @throws IOException
- * in case of a failure.
+ * @throws IOException in case of a failure.
*/
public String getConsoleOutputText() throws IOException {
return client.get(getUrl() + "/logText/progressiveText");
@@ -287,6 +360,7 @@ public String getConsoleOutputText() throws IOException {
/**
* The console output with HTML.
+ *
* @return The console output as HTML.
* @throws IOException
*/
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 3242528b..f3d38d9e 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
@@ -114,8 +114,7 @@ public Build apply(Build from) {
*
* @return the list of {@link Build}. In case of no builds have been
* executed yet return {@link Collections#emptyList()}.
- * @throws IOException
- * In case of failure.
+ * @throws IOException In case of failure.
* @see Jenkins
* Issue
*/
@@ -163,12 +162,10 @@ public Build apply(Build from) {
* existing builds for a job. The only option is to get all builds via
* {@link #getAllBuilds()}.
*
- * @param range
- * {@link Range}
+ * @param range {@link Range}
* @return the list of {@link Build}. In case of no builds have been
* executed yet return {@link Collections#emptyList()}.
- * @throws IOException
- * in case of an error.
+ * @throws IOException in case of an error.
*/
public List getAllBuilds(Range range) throws IOException {
String path = "/" + "job/" + EncodingUtils.encode(this.getName())
@@ -209,8 +206,8 @@ private Build buildWithClient(Build from) {
/**
* @return the first build which has been executed or
- * {@link Build#BUILD_HAS_NEVER_RUN} is this has never been
- * executed.
+ * {@link Build#BUILD_HAS_NEVER_RUN} if the build has never been
+ * run.
*/
public Build getFirstBuild() {
if (firstBuild == null) {
@@ -220,6 +217,20 @@ public Build getFirstBuild() {
}
}
+ /**
+ * Check if the {@link #firstBuild} has been run or not.
+ *
+ * @return true if a build has been run false
+ * otherwise.
+ */
+ public boolean hasFirstBuildRun() {
+ if (firstBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastBuild. If {@link #lastBuild} has never been run
* {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
@@ -232,6 +243,20 @@ public Build getLastBuild() {
}
}
+ /**
+ * Check if the {@link #lastBuild} has been run or not.
+ *
+ * @return true if the last build has been run
+ * false otherwise.
+ */
+ public boolean hasLastBuildRun() {
+ if (lastBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastCompletedBuild. If {@link #lastCompletedBuild} has never
* been run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
@@ -244,6 +269,20 @@ public Build getLastCompletedBuild() {
}
}
+ /**
+ * Check if the {@link #lastCompletedBuild} has been run or not.
+ *
+ * @return true if the last completed build has been run
+ * false otherwise.
+ */
+ public boolean hasLastCompletedBuildRun() {
+ if (lastCompletedBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastFailedBuild. If {@link #lastFailedBuild} has never been
* run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
@@ -256,6 +295,20 @@ public Build getLastFailedBuild() {
}
}
+ /**
+ * Check if the {@link #lastFailedBuild} has been run or not.
+ *
+ * @return true if the last failed build has been run
+ * false otherwise.
+ */
+ public boolean hasLastFailedBuildRun() {
+ if (lastFailedBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastStableBuild. If {@link #lastStableBuild} has never been
* run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
@@ -268,6 +321,20 @@ public Build getLastStableBuild() {
}
}
+ /**
+ * Check if the {@link #lastStableBuild} has been run or not.
+ *
+ * @return true if the last stable build has been run
+ * false otherwise.
+ */
+ public boolean hasLastStableBuildRun() {
+ if (lastStableBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastSuccessfulBuild. If {@link #lastSuccessfulBuild} has
* never been run {@link Build#BUILD_HAS_NEVER_RUN} will be
@@ -281,6 +348,20 @@ public Build getLastSuccessfulBuild() {
}
}
+ /**
+ * Check if the {@link #lastSuccessfulBuild} has been run or not.
+ *
+ * @return true if the last successful build has been run
+ * false otherwise.
+ */
+ public boolean hasLastSuccessfulBuildRun() {
+ if (lastSuccessfulBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastUnstableBuild. If {@link #lastUnstableBuild} has never
* been run {@link Build#BUILD_HAS_NEVER_RUN} will be returned.
@@ -293,6 +374,20 @@ public Build getLastUnstableBuild() {
}
}
+ /**
+ * Check if the {@link #lastUnstableBuild} has been run or not.
+ *
+ * @return true if the last unstable build has been run
+ * false otherwise.
+ */
+ public boolean hasLastUnstableBuildRun() {
+ if (lastUnstableBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
/**
* @return The lastUnsuccessfulBuild. If {@link #lastUnsuccessfulBuild} has
* never been run {@link Build#BUILD_HAS_NEVER_RUN} will be
@@ -306,6 +401,20 @@ public Build getLastUnsuccessfulBuild() {
}
}
+ /**
+ * Check if the {@link #lastUnsuccessfulBuild} has been run or not.
+ *
+ * @return true if the last unsuccessful build has been run
+ * false otherwise.
+ */
+ public boolean hasLastUnsuccessfulBuildRun() {
+ if (lastUnsuccessfulBuild == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
public int getNextBuildNumber() {
return nextBuildNumber;
}
@@ -341,8 +450,7 @@ public QueueItem getQueueItem() {
/**
* Get a build by the given buildNumber.
*
- * @param buildNumber
- * The number to select the build by.
+ * @param buildNumber The number to select the build by.
* @return The {@link Build} selected by the given buildnumber
*
*/
@@ -370,36 +478,31 @@ public Job apply(Job job) {
}
/**
- * Empty description to be used for {@link #updateDescription(String)}
- * or {@link #updateDescription(String, boolean)}.
+ * Empty description to be used for {@link #updateDescription(String)} or
+ * {@link #updateDescription(String, boolean)}.
*/
public static final String EMPTY_DESCRIPTION = "";
/**
* Update the description of a Job.
*
- * @param description
- * The description which should be set.
- * If you like to set an empty description
- * you should use {@link #EMPTY_DESCRIPTION}.
- * @throws IOException
- * in case of errors.
+ * @param description The description which should be set. If you like to
+ * set an empty description you should use
+ * {@link #EMPTY_DESCRIPTION}.
+ * @throws IOException in case of errors.
*/
public void updateDescription(String description) throws IOException {
updateDescription(description, false);
}
-
+
/**
* Update the description of a Job.
*
- * @param description
- * The description which should be set.
- * If you like to set an empty description
- * you should use {@link #EMPTY_DESCRIPTION}.
- * @param crumbFlag
- * true or false.
- * @throws IOException
- * in case of errors.
+ * @param description The description which should be set. If you like to
+ * set an empty description you should use
+ * {@link #EMPTY_DESCRIPTION}.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of errors.
*/
public void updateDescription(String description, boolean crumbFlag) throws IOException {
Objects.requireNonNull(description, "description is not allowed to be null.");
@@ -410,8 +513,7 @@ public void updateDescription(String description, boolean crumbFlag) throws IOEx
/**
* clear the description of a job.
*
- * @throws IOException
- * in case of errors.
+ * @throws IOException in case of errors.
*/
public void clearDescription() throws IOException {
updateDescription(EMPTY_DESCRIPTION);
@@ -420,10 +522,8 @@ public void clearDescription() throws IOException {
/**
* clear the description of a job.
*
- * @param crumbFlag
- * true or false.
- * @throws IOException
- * in case of errors.
+ * @param crumbFlag true or false.
+ * @throws IOException in case of errors.
*/
public void clearDescription(boolean crumbFlag) throws IOException {
updateDescription(EMPTY_DESCRIPTION, crumbFlag);
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
index 808f7d30..b775c3f2 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
@@ -1,5 +1,6 @@
package com.offbytwo.jenkins.model;
+import java.util.Collections;
import java.util.List;
/**
@@ -8,11 +9,38 @@
*/
public class TestReport extends BaseModel {
+ public static final String EMPTY_STRING = "";
+
+ /**
+ * This will be returned by the API in cases where the build has not been
+ * run.
+ */
+ public static final TestReport NO_TEST_REPORT = new TestReport(0, 0, 0, EMPTY_STRING,
+ Collections.emptyList());
+
private int failCount;
private int skipCount;
private int totalCount;
private String urlName;
+ private TestReport(int failCount, int skipCount, int totalCount, String urlName,
+ List childReports) {
+ super();
+ this.failCount = failCount;
+ this.skipCount = skipCount;
+ this.totalCount = totalCount;
+ this.urlName = urlName;
+ this.childReports = childReports;
+ }
+
+ public TestReport() {
+ this.failCount = 0;
+ this.skipCount = 0;
+ this.totalCount = 0;
+ // FIXME: What is the best choice to initialize?
+ this.urlName = EMPTY_STRING;
+ }
+
private List childReports;
public int getFailCount() {
From 97a0ded3d35fda25c1f8a935bbc93afe7fa09aa7 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 6 Dec 2016 08:32:52 +0100
Subject: [PATCH 082/197] Fixed missing closing bracket.
---
ReleaseNotes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 8da6d0a5..9db0be9d 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -30,7 +30,7 @@
```java
public class JobWithDetails ... {
public boolean hasFirstBuildRun();
- public boolean hasLastBuildRun(;
+ public boolean hasLastBuildRun();
public boolean hasLastCompletedBuildRun();
public boolean hasLastFailedBuildRun();
public boolean hasLastStableBuildRun();
From eebebeaa8639cff59c0613be8869712e476dd594 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 6 Dec 2016 20:14:31 +0100
Subject: [PATCH 083/197] Fixed build issue.
---
.../integration/NoExecutorStartedGetJobIT.java | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 36bca435..75b73949 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -80,10 +80,15 @@ public void getLastFailedBuildShouldBeBUILD_HAS_NEVER_RAN() {
}
@Test
- public void hasLastFailedBuildShouldBeTrue() {
- assertThat(job.hasLastFailedBuildRun()).isTrue();
+ public void hasLastBuildShouldBeTrue() {
+ assertThat(job.hasLastBuildRun()).isTrue();
}
-
+
+ @Test
+ public void hasLastFailedBuildShouldBeFalse() {
+ assertThat(job.hasLastFailedBuildRun()).isFalse();
+ }
+
@Test
public void getLastStableBuildShouldNotBeNull() throws IOException {
assertThat(job.getLastStableBuild()).isNotNull();
From 74eac366b15b490a6ade6e6dacbb42319d9fe924 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 6 Dec 2016 20:21:54 +0100
Subject: [PATCH 084/197] Added some more IT's.
---
.../jenkins/integration/NoExecutorStartedGetJobIT.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 75b73949..279bb40a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -106,11 +106,21 @@ public void getLastUnstableBuildShouldBeBUILD_HAS_NEVER_RAN() {
assertThat(job.getLastUnstableBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
+ @Test
+ public void hasLastUnstableBuildShouldBeFalse() {
+ assertThat(job.hasLastUnstableBuildRun()).isFalse();
+ }
+
@Test
public void getLastUnsuccessfulBuildShouldBeBUILD_HAS_NEVER_RAN() {
assertThat(job.getLastUnsuccessfulBuild()).isEqualTo(Build.BUILD_HAS_NEVER_RUN);
}
+ @Test
+ public void hasLastUnsuccessfulBuildShouldBeFalse() {
+ assertThat(job.hasLastUnsuccessfulBuildRun()).isFalse();
+ }
+
@Test
public void getDescriptionShouldRetrunTheDescription() {
assertThat(job.getDescription()).isEqualTo("This is the description with umlauts äöü");
From 6b15ddf73989cca4fa261cde99dcb90576ad6e58 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 10 Dec 2016 23:10:20 +0100
Subject: [PATCH 085/197] Fixed #184 o Breaking API changes for TestReport in
Jenkins 2 which is caused by different REST API answers for Maven Job
type and other job types.
---
ReleaseNotes.md | 80 +++++++++++++++++++
.../com/offbytwo/jenkins/model/Build.java | 5 ++
.../offbytwo/jenkins/model/TestResult.java | 2 +-
.../jenkins/JenkinsTestManualTestReport.java | 41 ++++++++++
4 files changed, 127 insertions(+), 1 deletion(-)
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 9db0be9d..3b95e87a 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -16,6 +16,85 @@
### API Changes
+ * [Fixed issue 184][issue-184]
+
+ Based on the differences between getting a TestReport for a MavenJob type and
+ a freestyle job etc. you would have hit by getting 0 from `getTotalCount()` like
+ in the following code snippet:
+
+```java
+JobWithDetails job = js.getJob("non-maven-test");
+Build lastCompletedBuild = job.getLastCompletedBuild();
+TestReport testReport = lastCompletedBuild.getTestReport();
+```
+
+ This is caused by the difference in the API of Jenkins which results in the following
+ for a MavenJob type:
+
+ {
+ "_class" : "hudson.maven.reporters.SurefireAggregatedReport",
+ "failCount" : 0,
+ "skipCount" : 0,
+ "totalCount" : 489,
+ "urlName" : "testReport",
+ "childReports" : [
+ {
+ "child" : {
+ "_class" : "hudson.maven.MavenBuild",
+ "number" : 2,
+ "url" : "http://localhost:27100/buildserver/job/maven-test/com.soebes.subversion.sapm$sapm/2/"
+ },
+ "result" : {
+ "_class" : "hudson.tasks.junit.TestResult",
+ "testActions" : [
+
+ ],
+ "duration" : 0.009,
+ "empty" : false,
+ "failCount" : 0,
+ "passCount" : 489,
+ "skipCount" : 0,
+ "suites" : [
+ {
+ "cases" : [
+
+ But for a non Maven job like freestyle job you will get the following:
+
+ {
+ "_class" : "hudson.tasks.junit.TestResult",
+ "testActions" : [
+
+ ],
+ "duration" : 0.01,
+ "empty" : false,
+ "failCount" : 0,
+ "passCount" : 489,
+ "skipCount" : 0,
+ "suites" : [
+ {
+ "cases" : [
+ {
+ "testActions" : [
+
+ ],
+ "age" : 0,
+ "className" : "com.soebes.subversion.sapm.AccessRuleGroupTest",
+ "duration" : 0.003,
+
+ This is exactly the cause for this result.
+
+ The API has been enhanced to get the correct result. This can be achieved by calling
+ the following in cases where you have a non Maven job type.
+
+```java
+TestResult testResult = lastCompletedBuild.getTestResult();
+```
+
+ This means you need to take care yourself if you are getting the test results from
+ Maven job type or non Maven job. (Future releases of the lib hopefully handle that
+ in a more convenient way).
+
+
* [Fixed issue 209][issue-209]
@@ -825,6 +904,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-176]: https://github.com/jenkinsci/java-client-api/issues/176
[issue-179]: https://github.com/jenkinsci/java-client-api/issues/179
[issue-182]: https://github.com/jenkinsci/java-client-api/issues/182
+[issue-184]: https://github.com/jenkinsci/java-client-api/issues/184
[issue-186]: https://github.com/jenkinsci/java-client-api/issues/186
[issue-188]: https://github.com/jenkinsci/java-client-api/issues/188
[issue-197]: https://github.com/jenkinsci/java-client-api/issues/197
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index edb457ca..2a1ffdcb 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -109,6 +109,11 @@ public TestReport getTestReport() throws IOException {
return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
}
+ //Only for non Maven Jobs..
+ public TestResult getTestResult() throws IOException {
+ return client.get(this.getUrl() + "/testReport/?depth=1", TestResult.class);
+ }
+
/*
* This Change (Bad Practice) is due to inconsistencies in Jenkins various
* versions. Jenkins changed their API from post to get and from get to post
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
index d4b6f9e4..934b32d4 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
@@ -6,7 +6,7 @@
* @author Karl Heinz Marbaise
*
*/
-public class TestResult {
+public class TestResult extends BaseModel {
private double duration;
private boolean empty;
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
new file mode 100644
index 00000000..2d81f93b
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
@@ -0,0 +1,41 @@
+package com.offbytwo.jenkins;
+
+import java.net.URI;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.offbytwo.jenkins.model.Build;
+import com.offbytwo.jenkins.model.JobWithDetails;
+import com.offbytwo.jenkins.model.TestReport;
+import com.offbytwo.jenkins.model.TestResult;
+import com.offbytwo.jenkins.model.TestSuites;
+
+public class JenkinsTestManualTestReport {
+
+ @Test
+ public void firstTest() throws Exception {
+
+ JenkinsServer js = new JenkinsServer(URI.create("http://localhost:10090/buildserver/"), "admin", "admin");
+ JobWithDetails job = js.getJob("non-maven-test");
+ Build lastCompletedBuild = job.getLastCompletedBuild();
+ TestReport testReport = lastCompletedBuild.getTestReport();
+
+ System.out.println(" --- TestReport ---");
+ System.out.println("totalCount: " + testReport.getTotalCount());
+ System.out.println(" failCount: " + testReport.getFailCount());
+ System.out.println(" skipCount: " + testReport.getSkipCount());
+
+ TestResult testResult = lastCompletedBuild.getTestResult();
+ System.out.println(" --- TestResult ---");
+
+ System.out.println(" PassCount: " + testResult.getPassCount());
+ System.out.println(" failCount: " + testResult.getFailCount());
+ System.out.println(" skipCount: " + testResult.getSkipCount());
+ System.out.println(" duration: " + testResult.getDuration());
+ System.out.println(" isEmpty: " + testResult.isEmpty());
+ List suites = testResult.getSuites();
+
+
+ }
+}
From 0fb41b70718b7536d3263ae4cbe4a372b22150c3 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 10 Dec 2016 23:18:39 +0100
Subject: [PATCH 086/197] Fixed formatting based on Eclipse formatting.
---
.../jenkins/JenkinsTestManualTestReport.java | 5 ++-
.../offbytwo/jenkins/helper/RangeTest.java | 36 +++++++++----------
2 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
index 2d81f93b..09b24d96 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsTestManualTestReport.java
@@ -25,7 +25,7 @@ public void firstTest() throws Exception {
System.out.println("totalCount: " + testReport.getTotalCount());
System.out.println(" failCount: " + testReport.getFailCount());
System.out.println(" skipCount: " + testReport.getSkipCount());
-
+
TestResult testResult = lastCompletedBuild.getTestResult();
System.out.println(" --- TestResult ---");
@@ -35,7 +35,6 @@ public void firstTest() throws Exception {
System.out.println(" duration: " + testResult.getDuration());
System.out.println(" isEmpty: " + testResult.isEmpty());
List suites = testResult.getSuites();
-
-
+
}
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
index d156a317..5dcc9e38 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
@@ -29,31 +29,31 @@
public class RangeTest {
private String getEscaped(String m) {
- return Range.CURLY_BRACKET_OPEN + m + Range.CURLY_BRACKET_CLOSE;
+ return Range.CURLY_BRACKET_OPEN + m + Range.CURLY_BRACKET_CLOSE;
}
@Test
public void fromToGiven() {
- Range r = Range.build().from(1).to(5);
- assertThat(r.getRangeString()).isEqualTo(getEscaped("1,5"));
+ Range r = Range.build().from(1).to(5);
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("1,5"));
}
@Test
public void onlyFromGiven() {
- Range r = Range.build().from(3).build();
- assertThat(r.getRangeString()).isEqualTo(getEscaped("3,"));
+ Range r = Range.build().from(3).build();
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("3,"));
}
@Test
public void onlyToGiven() {
- Range r = Range.build().to(5).build();
- assertThat(r.getRangeString()).isEqualTo(getEscaped(",5"));
+ Range r = Range.build().to(5).build();
+ assertThat(r.getRangeString()).isEqualTo(getEscaped(",5"));
}
@Test
public void onlyGiven() {
- Range r = Range.build().only(3);
- assertThat(r.getRangeString()).isEqualTo(getEscaped("3,4"));
+ Range r = Range.build().only(3);
+ assertThat(r.getRangeString()).isEqualTo(getEscaped("3,4"));
}
@Rule
@@ -61,22 +61,22 @@ public void onlyGiven() {
@Test
public void toIsGivenLargerThanFromShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater than from");
- Range.build().from(5).to(1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("to must be greater than from");
+ Range.build().from(5).to(1);
}
@Test
public void fromGivenNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("from value must be greater or equal null.");
- Range.build().from(-1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("from value must be greater or equal null.");
+ Range.build().from(-1);
}
@Test
public void fromGivenPositiveToNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater or equal null.");
- Range.build().from(5).to(-1);
+ exception.expect(IllegalArgumentException.class);
+ exception.expectMessage("to must be greater or equal null.");
+ Range.build().from(5).to(-1);
}
}
From 25309974bea6569cc4c83c0b7368269b22179d81 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 11 Dec 2016 11:25:18 +0100
Subject: [PATCH 087/197] Added some JavaDoc.
---
.../main/java/com/offbytwo/jenkins/model/Build.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 2a1ffdcb..7c8ce908 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -105,11 +105,22 @@ public BuildWithDetails details() throws IOException {
return client.get(url, BuildWithDetails.class);
}
+ /**
+ * This is to get the information about {@link TestReport}
+ * for a Maven Job type.
+ * @return {@link TestReport}
+ * @throws IOException in casae of an error.
+ */
public TestReport getTestReport() throws IOException {
return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
}
- //Only for non Maven Jobs..
+ /**
+ * This is to get the information about run tests for a
+ * non Maven job type.
+ * @return {@link TestResult}
+ * @throws IOException in case of an error.
+ */
public TestResult getTestResult() throws IOException {
return client.get(this.getUrl() + "/testReport/?depth=1", TestResult.class);
}
From c59605097412a371ca930747d08de2bef3a63763 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 11 Dec 2016 11:31:05 +0100
Subject: [PATCH 088/197] Fixed typo.
---
.../src/main/java/com/offbytwo/jenkins/model/Build.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 7c8ce908..602b4a8f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -109,7 +109,7 @@ public BuildWithDetails details() throws IOException {
* This is to get the information about {@link TestReport}
* for a Maven Job type.
* @return {@link TestReport}
- * @throws IOException in casae of an error.
+ * @throws IOException in case of an error.
*/
public TestReport getTestReport() throws IOException {
return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
From 344b791604e399fefc485711e4b428c1dd0dea40 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 19 May 2016 21:55:29 +0200
Subject: [PATCH 089/197] Fixed #215 o Added JenkinsVersion which is capable
of comparing different versions correctly. The implementation is taken
from the Maven project which contains a class ComparableVersion which
handled everything I need here.
---
.gitignore | 1 +
ReleaseNotes.md | 25 +
jenkins-client-it-docker/pom.xml | 2 +-
.../NoExecutorStartedGetJobXmlIT.java | 34 +-
.../NoExecutorStartedPluginManagerIT.java | 25 +-
.../com/offbytwo/jenkins/JenkinsServer.java | 8 +-
.../jenkins/helper/ComparableVersion.java | 505 ++++++++++++++++++
.../jenkins/helper/JenkinsVersion.java | 114 ++++
.../jenkins/helper/JenkinsVersionTest.java | 139 +++++
9 files changed, 827 insertions(+), 26 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/helper/JenkinsVersionTest.java
diff --git a/.gitignore b/.gitignore
index d7f0f2a4..e73a9e03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ target
.classpath
.project
.settings
+test-output
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 3b95e87a..e060d195 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -16,6 +16,30 @@
### API Changes
+ * [Fixed Issue 215][issue-215]
+
+ The JenkinsServer class will return `JenkinsVersion` instead of String if you
+ call `getJenkinsVersion()`.
+
+```java
+public class JenkinsVersion ... {
+ public boolean isGreaterThan(String version);
+ public boolean isGreaterOrEqual(String version);
+ public boolean isLessThan(String version);
+ public boolean isLessOrEqual(String version);
+ public boolean isEqualTo(String version);
+}
+```
+
+ The `JenkinsVersion` class can be used to compare different versions with
+ each other.
+
+```java
+JenkinsVersion jv = new JenkinsVersion("1.651.1");
+assertThat(jv.isGreaterThan("1.651.1")).isFalse();
+```
+
+
* [Fixed issue 184][issue-184]
Based on the differences between getting a TestReport for a MavenJob type and
@@ -916,6 +940,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-207]: https://github.com/jenkinsci/java-client-api/issues/207
[issue-209]: https://github.com/jenkinsci/java-client-api/issues/209
[issue-211]: https://github.com/jenkinsci/java-client-api/issues/211
+[issue-215]: https://github.com/jenkinsci/java-client-api/issues/215
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index f5ee00c9..ff75e20b 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -82,7 +82,7 @@
- http://192.168.99.100:8080
+ http://127.0.0.1:8080
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
index 279b844d..451e7585 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
@@ -19,15 +19,31 @@ public void beforeMethod() throws IOException {
jobXml = jenkinsServer.getJobXml("test");
}
- private static final String[] CONFIG_XML = { "", "", " ",
- " This is the description with umlauts äöü",
- " false", " ", " ",
- " true", " false",
- " false",
- " false", " ",
- " false", " ", " ",
- " echo "test"", " ", " ",
- " ", " ", "" };
+ //@formatter:off
+ private static final String[] CONFIG_XML = {
+ "",
+ "",
+ " ",
+ " This is the description with umlauts äöü",
+ " false",
+ " ",
+ " ",
+ " true",
+ " false",
+ " false",
+ " false",
+ " ",
+ " false",
+ " ",
+ " ",
+ " echo "test"",
+ " ",
+ " ",
+ " ",
+ " ",
+ ""
+ };
+ //@formatter:on
@Test
public void getJobXmlShouldReturnTheExpectedConfigXml() {
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
index 9c44a71e..bf39e06e 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedPluginManagerIT.java
@@ -3,13 +3,13 @@
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
import org.testng.SkipException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import com.offbytwo.jenkins.helper.JenkinsVersion;
import com.offbytwo.jenkins.model.Plugin;
import com.offbytwo.jenkins.model.PluginManager;
@@ -26,18 +26,17 @@ public void beforeMethod() throws IOException {
@Test
public void getPluginsShouldReturn9ForJenkins20() {
// TODO: Check why there is such a difference in the number of Plugins?
- if (!jenkinsServer.getVersion().equals("2.0")) {
- throw new SkipException("Not Version 2.0");
+ if (jenkinsServer.getVersion().isLessThan("2.0")) {
+ throw new SkipException("Not Version 2.0 (" + jenkinsServer.getVersion() + ")");
}
assertThat(pluginManager.getPlugins()).hasSize(9);
}
@Test
public void getPluginsShouldReturn27ForJenkins1651() {
- List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
- // TODO: Check why there is such a difference in the number of Plugins?
- if (!asList.contains(jenkinsServer.getVersion())) {
- throw new SkipException("Not Version 1.651");
+ JenkinsVersion jv = jenkinsServer.getVersion();
+ if (jv.isLessThan("1.651") && jv.isGreaterThan("1.651.3")) {
+ throw new SkipException("Not Version 1.651 (" + jv.toString() + ")");
}
assertThat(pluginManager.getPlugins()).hasSize(27);
}
@@ -52,8 +51,8 @@ private Plugin createPlugin(String shortName, String version) {
@Test
public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
- if (!jenkinsServer.getVersion().equals("2.0")) {
- throw new SkipException("Not Version 2.0");
+ if (jenkinsServer.getVersion().isLessThan("2.0")) {
+ throw new SkipException("Not Version 2.0 (" + jenkinsServer.getVersion() + ")");
}
// TODO: The list of plugins is contained in the plugin.txt
@@ -91,12 +90,12 @@ public void getPluginsShouldReturnTheListOfInstalledPluginsForJenkins20() {
@Test
public void getPluginsShouldReturnTheListOfInstalledPluginsFor1651() {
- List asList = Arrays.asList("1.651", "1.651.1", "1.651.2", "1.651.3");
+ JenkinsVersion jv = jenkinsServer.getVersion();
+ if (jv.isLessThan("1.651") && jv.isGreaterThan("1.651.3")) {
+ throw new SkipException("Not Version 1.651 (" + jv + ")");
+ }
// TODO: Check why there is such a difference in the number of Plugins?
- if (!asList.contains(jenkinsServer.getVersion())) {
- throw new SkipException("Not Version 1.651");
- }
// TODO: The list of plugins is contained in the plugin.txt
// which should be read and used as base of comparison.
// instead of maintaining at two locations.
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 5be7961a..5982408e 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -26,6 +26,7 @@
import com.google.common.collect.Maps;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.client.util.EncodingUtils;
+import com.offbytwo.jenkins.helper.JenkinsVersion;
import com.offbytwo.jenkins.model.Build;
import com.offbytwo.jenkins.model.Computer;
import com.offbytwo.jenkins.model.ComputerSet;
@@ -100,15 +101,16 @@ public boolean isRunning() {
}
/**
- * @return The Jenkins version.
+ * @return {@link JenkinsVersion}
*/
- public String getVersion() {
+ public JenkinsVersion getVersion() {
if (client.getJenkinsVersion().isEmpty()) {
// Force a request to get at least once
// HttpHeader
isRunning();
}
- return client.getJenkinsVersion();
+ JenkinsVersion jv = new JenkinsVersion(client.getJenkinsVersion());
+ return jv;
}
/**
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
new file mode 100644
index 00000000..53579aa0
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
@@ -0,0 +1,505 @@
+package com.offbytwo.jenkins.helper;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Stack;
+
+/**
+ * This code is copied from Maven Core with slight modifications. Generic implementation of version comparison.
+ *
+ * Features:
+ *
+ * - mixing of '
-' (hyphen) and '.' (dot) separators,
+ * - transition between characters and digits also constitutes a separator:
+ *
1.0alpha1 => [1, 0, alpha, 1]
+ * - unlimited number of version components,
+ * - version components in the text can be digits or strings,
+ * - strings are checked for well-known qualifiers and the qualifier ordering is used for version ordering. Well-known
+ * qualifiers (case insensitive) are:
+ *
+ * alpha or a
+ * beta or b
+ * milestone or m
+ * rc or cr
+ * snapshot
+ * (the empty string) or ga or final
+ * sp
+ *
+ * Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
+ * - a hyphen usually precedes a qualifier, and is always less important than something preceded with a dot.
+ *
+ *
+ *
+ * @see "Versioning" on Maven Wiki
+ * @author Kenney Westerhof
+ * @author Hervé Boutemy
+ */
+public class ComparableVersion
+ implements Comparable
+{
+ private String value;
+
+ private String canonical;
+
+ private ListItem items;
+
+ interface Item
+ {
+ int INTEGER_ITEM = 0;
+
+ int STRING_ITEM = 1;
+
+ int LIST_ITEM = 2;
+
+ int compareTo( Item item );
+
+ int getType();
+
+ boolean isNull();
+ }
+
+ /**
+ * Represents a numeric item in the version item list.
+ */
+ static class IntegerItem
+ implements Item
+ {
+ private static final BigInteger BIG_INTEGER_ZERO = new BigInteger( "0" );
+
+ private final BigInteger value;
+
+ public static final IntegerItem ZERO = new IntegerItem();
+
+ private IntegerItem()
+ {
+ this.value = BIG_INTEGER_ZERO;
+ }
+
+ public IntegerItem( String str )
+ {
+ this.value = new BigInteger( str );
+ }
+
+ public int getType()
+ {
+ return INTEGER_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return BIG_INTEGER_ZERO.equals( value );
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ return BIG_INTEGER_ZERO.equals( value ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
+ }
+
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return value.compareTo( ( (IntegerItem) item ).value );
+
+ case STRING_ITEM:
+ return 1; // 1.1 > 1-sp
+
+ case LIST_ITEM:
+ return 1; // 1.1 > 1-1
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ return value.toString();
+ }
+ }
+
+ /**
+ * Represents a string in the version item list, usually a qualifier.
+ */
+ static class StringItem
+ implements Item
+ {
+ private static final List QUALIFIERS =
+ Arrays.asList( "alpha", "beta", "milestone", "rc", "snapshot", "", "sp" );
+
+ private static final Properties ALIASES = new Properties();
+ static
+ {
+ ALIASES.put( "ga", "" );
+ ALIASES.put( "final", "" );
+ ALIASES.put( "cr", "rc" );
+ }
+
+ /**
+ * A comparable value for the empty-string qualifier. This one is used to determine if a given qualifier makes
+ * the version older than one without a qualifier, or more recent.
+ */
+ private static final String RELEASE_VERSION_INDEX = String.valueOf( QUALIFIERS.indexOf( "" ) );
+
+ private String value;
+
+ public StringItem( String value, boolean followedByDigit )
+ {
+ if ( followedByDigit && value.length() == 1 )
+ {
+ // a1 = alpha-1, b1 = beta-1, m1 = milestone-1
+ switch ( value.charAt( 0 ) )
+ {
+ case 'a':
+ value = "alpha";
+ break;
+ case 'b':
+ value = "beta";
+ break;
+ case 'm':
+ value = "milestone";
+ break;
+ default:
+ }
+ }
+ this.value = ALIASES.getProperty( value, value );
+ }
+
+ public int getType()
+ {
+ return STRING_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return ( comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX ) == 0 );
+ }
+
+ /**
+ * Returns a comparable value for a qualifier. This method takes into account the ordering of known qualifiers
+ * then unknown qualifiers with lexical ordering. just returning an Integer with the index here is faster, but
+ * requires a lot of if/then/else to check for -1 or QUALIFIERS.size and then resort to lexical ordering. Most
+ * comparisons are decided by the first character, so this is still fast. If more characters are needed then it
+ * requires a lexical sort anyway.
+ *
+ * @param qualifier
+ * @return an equivalent value that can be used with lexical comparison
+ */
+ public static String comparableQualifier( String qualifier )
+ {
+ int i = QUALIFIERS.indexOf( qualifier );
+
+ return i == -1 ? ( QUALIFIERS.size() + "-" + qualifier ) : String.valueOf( i );
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ // 1-rc < 1, 1-ga > 1
+ return comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX );
+ }
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return -1; // 1.any < 1.1 ?
+
+ case STRING_ITEM:
+ return comparableQualifier( value ).compareTo( comparableQualifier( ( (StringItem) item ).value ) );
+
+ case LIST_ITEM:
+ return -1; // 1.any < 1-1
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ return value;
+ }
+ }
+
+ /**
+ * Represents a version list item. This class is used both for the global item list and for sub-lists (which start
+ * with '-(number)' in the version specification).
+ */
+ public static class ListItem
+ extends ArrayList-
+ implements Item
+ {
+ public int getType()
+ {
+ return LIST_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return ( size() == 0 );
+ }
+
+ void normalize()
+ {
+ for ( int i = size() - 1; i >= 0; i-- )
+ {
+ Item lastItem = get( i );
+
+ if ( lastItem.isNull() )
+ {
+ // remove null trailing items: 0, "", empty list
+ remove( i );
+ }
+ else if ( !( lastItem instanceof ListItem ) )
+ {
+ break;
+ }
+ }
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ if ( size() == 0 )
+ {
+ return 0; // 1-0 = 1- (normalize) = 1
+ }
+ Item first = get( 0 );
+ return first.compareTo( null );
+ }
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return -1; // 1-1 < 1.0.x
+
+ case STRING_ITEM:
+ return 1; // 1-1 > 1-sp
+
+ case LIST_ITEM:
+ Iterator
- left = iterator();
+ Iterator
- right = ( (ListItem) item ).iterator();
+
+ while ( left.hasNext() || right.hasNext() )
+ {
+ Item l = left.hasNext() ? left.next() : null;
+ Item r = right.hasNext() ? right.next() : null;
+
+ // if this is shorter, then invert the compare and mul with -1
+ int result = l == null ? ( r == null ? 0 : -1 * r.compareTo( l ) ) : l.compareTo( r );
+
+ if ( result != 0 )
+ {
+ return result;
+ }
+ }
+
+ return 0;
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder();
+ for ( Item item : this )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ( item instanceof ListItem ) ? '-' : '.' );
+ }
+ buffer.append( item );
+ }
+ return buffer.toString();
+ }
+ }
+
+ public ComparableVersion( String version )
+ {
+ parseVersion( version );
+ }
+
+ public final void parseVersion( String version )
+ {
+ this.value = version;
+
+ items = new ListItem();
+
+ version = version.toLowerCase( Locale.ENGLISH );
+
+ ListItem list = items;
+
+ Stack
- stack = new Stack<>();
+ stack.push( list );
+
+ boolean isDigit = false;
+
+ int startIndex = 0;
+
+ for ( int i = 0; i < version.length(); i++ )
+ {
+ char c = version.charAt( i );
+
+ if ( c == '.' )
+ {
+ if ( i == startIndex )
+ {
+ list.add( IntegerItem.ZERO );
+ }
+ else
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+ }
+ startIndex = i + 1;
+ }
+ else if ( c == '-' )
+ {
+ if ( i == startIndex )
+ {
+ list.add( IntegerItem.ZERO );
+ }
+ else
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+ }
+ startIndex = i + 1;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+ else if ( Character.isDigit( c ) )
+ {
+ if ( !isDigit && i > startIndex )
+ {
+ list.add( new StringItem( version.substring( startIndex, i ), true ) );
+ startIndex = i;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+
+ isDigit = true;
+ }
+ else
+ {
+ if ( isDigit && i > startIndex )
+ {
+ list.add( parseItem( true, version.substring( startIndex, i ) ) );
+ startIndex = i;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+
+ isDigit = false;
+ }
+ }
+
+ if ( version.length() > startIndex )
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex ) ) );
+ }
+
+ while ( !stack.isEmpty() )
+ {
+ list = (ListItem) stack.pop();
+ list.normalize();
+ }
+
+ canonical = items.toString();
+ }
+
+ private static Item parseItem( boolean isDigit, String buf )
+ {
+ return isDigit ? new IntegerItem( buf ) : new StringItem( buf, false );
+ }
+
+ public int compareTo( ComparableVersion o )
+ {
+ return items.compareTo( o.items );
+ }
+
+ public String toString()
+ {
+ return value;
+ }
+
+ public String getCanonical()
+ {
+ return canonical;
+ }
+
+ public boolean equals( Object o )
+ {
+ return ( o instanceof ComparableVersion ) && canonical.equals( ( (ComparableVersion) o ).canonical );
+ }
+
+ public int hashCode()
+ {
+ return canonical.hashCode();
+ }
+
+ public ListItem getItems()
+ {
+ return this.items;
+ }
+
+ /**
+ * Main to test version parsing and comparison.
+ *
+ * @param args the version strings to parse and compare
+ */
+ public static void main( String... args )
+ {
+ System.out.println( "Display parameters as parsed by Maven (in canonical form) and comparison result:" );
+ if ( args.length == 0 )
+ {
+ return;
+ }
+
+ ComparableVersion prev = null;
+ int i = 1;
+ for ( String version : args )
+ {
+ ComparableVersion c = new ComparableVersion( version );
+
+ if ( prev != null )
+ {
+ int compare = prev.compareTo( c );
+ System.out.println( " " + prev.toString() + ' '
+ + ( ( compare == 0 ) ? "==" : ( ( compare < 0 ) ? "<" : ">" ) ) + ' ' + version );
+ }
+
+ System.out.println( String.valueOf( i++ ) + ". " + version + " == " + c.getCanonical() );
+
+ prev = c;
+ }
+ }
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
new file mode 100644
index 00000000..66d1fc95
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
@@ -0,0 +1,114 @@
+package com.offbytwo.jenkins.helper;
+
+public class JenkinsVersion implements Comparable {
+ private ComparableVersion cv;
+ private String literalVersion;
+
+ public final static JenkinsVersion create(String version) {
+ JenkinsVersion jv = new JenkinsVersion(version);
+ return jv;
+ }
+
+ public JenkinsVersion() {
+ this.cv = new ComparableVersion("0");
+ }
+
+ public JenkinsVersion(String version) {
+ this.literalVersion = version;
+ this.cv = new ComparableVersion(version);
+ }
+
+ /**
+ * This will check if the current instance version is
> the
+ * given version.
+ *
+ * @param version The version to compare with.
+ * @return true or false.
+ */
+ public boolean isGreaterThan(String version) {
+ JenkinsVersion create = create(version);
+ return this.cv.compareTo(create.cv) > 0;
+ }
+
+ public boolean isGreaterThan(JenkinsVersion jv) {
+ return this.cv.compareTo(jv.cv) > 0;
+ }
+
+ /**
+ * This will check if the current instance version is >= the
+ * given version.
+ *
+ * @param version The version to compare with.
+ * @return true or false.
+ */
+ public boolean isGreaterOrEqual(String version) {
+ JenkinsVersion create = create(version);
+ return this.cv.compareTo(create.cv) >= 0;
+ }
+
+ public boolean isGreaterOrEqual(JenkinsVersion jv) {
+ return this.cv.compareTo(jv.cv) >= 0;
+ }
+
+ /**
+ * This will check if the current instance version is < the
+ * given version.
+ *
+ * @param version The version to compare with.
+ * @return true or false.
+ */
+ public boolean isLessThan(String version) {
+ JenkinsVersion create = create(version);
+ return this.cv.compareTo(create.cv) < 0;
+ }
+
+ public boolean isLessThan(JenkinsVersion jv) {
+ return this.cv.compareTo(jv.cv) < 0;
+ }
+
+ /**
+ * This will check if the current instance version is <= the
+ * given version.
+ *
+ * @param version The version to compare with.
+ * @return true or false.
+ */
+ public boolean isLessOrEqual(String version) {
+ JenkinsVersion create = create(version);
+ return this.cv.compareTo(create.cv) <= 0;
+ }
+
+ public boolean isLessOrEqual(JenkinsVersion jv) {
+ return this.cv.compareTo(jv.cv) <= 0;
+ }
+
+ /**
+ * This will check if the current instance version is = the
+ * given version.
+ *
+ * @param version The version to compare with.
+ * @return true or false.
+ */
+ public boolean isEqualTo(String version) {
+ JenkinsVersion create = create(version);
+ return this.cv.compareTo(create.cv) == 0;
+ }
+
+ public boolean isEqualTo(JenkinsVersion jv) {
+ return this.cv.compareTo(jv.cv) == 0;
+ }
+
+ @Override
+ public int compareTo(JenkinsVersion o) {
+ return this.compareTo(o);
+ }
+
+ public String getLiteralVersion() {
+ return literalVersion;
+ }
+
+ @Override
+ public String toString() {
+ return literalVersion;
+ }
+}
\ No newline at end of file
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/JenkinsVersionTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/JenkinsVersionTest.java
new file mode 100644
index 00000000..e55a24ae
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/JenkinsVersionTest.java
@@ -0,0 +1,139 @@
+package com.offbytwo.jenkins.helper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class JenkinsVersionTest {
+
+ @Test
+ public void isGreaterThanTrue() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isGreaterThan("1.548")).isTrue();
+ }
+
+ @Test
+ public void isGreaterThanFalse() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isGreaterThan("1.651.1")).isFalse();
+ }
+
+ @Test
+ public void isGreaterThanTrueJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.548");
+ assertThat(a.isGreaterThan(b)).isTrue();
+ }
+
+ @Test
+ public void isGreaterThanFalseJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.1");
+ assertThat(a.isGreaterThan(b)).isFalse();
+ }
+
+ @Test
+ public void isEqualToTrue() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isEqualTo("1.651.1")).isTrue();
+ }
+
+ @Test
+ public void isEqualToFalse() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isEqualTo("1.651.0")).isFalse();
+ }
+
+ @Test
+ public void isEqualToTrueJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.1");
+ assertThat(a.isEqualTo(b)).isTrue();
+ }
+
+ @Test
+ public void isEqualToFalseJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.0");
+ assertThat(a.isEqualTo(b)).isFalse();
+ }
+
+ @Test
+ public void isGreaterOrEqualTrue() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isGreaterOrEqual("1.651.1")).isTrue();
+ }
+
+ @Test
+ public void isGreaterOrEqualFalse() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isGreaterOrEqual("1.651.2")).isFalse();
+ }
+
+ @Test
+ public void isGreaterOrEqualTrueJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.1");
+ assertThat(a.isGreaterOrEqual(b)).isTrue();
+ }
+
+ @Test
+ public void isGreaterOrEqualFalseJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.2");
+ assertThat(a.isGreaterOrEqual(b)).isFalse();
+ }
+
+ @Test
+ public void isLessOrEqualTrue() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isLessOrEqual("1.651.1")).isTrue();
+ }
+
+ @Test
+ public void isLessOrEqualFalse() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isLessOrEqual("1.651.0")).isFalse();
+ }
+
+ @Test
+ public void isLessOrEqualTrueJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.1");
+ assertThat(a.isLessOrEqual(b)).isTrue();
+ }
+
+ @Test
+ public void isLessOrEqualFalseJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.0");
+ assertThat(a.isLessOrEqual(b)).isFalse();
+ }
+
+ @Test
+ public void isLessThanTrue() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isLessThan("1.651.2")).isTrue();
+ }
+
+ @Test
+ public void isLessThanFalse() {
+ JenkinsVersion jv = new JenkinsVersion("1.651.1");
+ assertThat(jv.isLessThan("1.651.1")).isFalse();
+ }
+
+ @Test
+ public void isLessThanTrueJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.2");
+ assertThat(a.isLessThan(b)).isTrue();
+ }
+
+ @Test
+ public void isLessThanFalseJenkinsVersion() {
+ JenkinsVersion a = new JenkinsVersion("1.651.1");
+ JenkinsVersion b = new JenkinsVersion("1.651.1");
+ assertThat(a.isLessThan(b)).isFalse();
+ }
+
+}
From bd6580704a104537896d67238360da3e6b43d814 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 12 Dec 2016 07:55:49 +0100
Subject: [PATCH 090/197] Reformatted code.
---
.../com/offbytwo/jenkins/JenkinsServer.java | 237 ++++++++----------
.../jenkins/JenkinsTriggerHelper.java | 60 ++---
2 files changed, 119 insertions(+), 178 deletions(-)
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 5982408e..347da0eb 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -54,8 +54,8 @@ public class JenkinsServer {
/**
* Create a new Jenkins server reference given only the server address
*
- * @param serverUri
- * address of jenkins server (ex. http://localhost:8080/jenkins)
+ * @param serverUri address of jenkins server (ex.
+ * http://localhost:8080/jenkins)
*/
public JenkinsServer(URI serverUri) {
this(new JenkinsHttpClient(serverUri));
@@ -64,12 +64,10 @@ public JenkinsServer(URI serverUri) {
/**
* Create a new Jenkins server reference given the address and credentials
*
- * @param serverUri
- * address of jenkins server (ex. http://localhost:8080/jenkins)
- * @param username
- * username to use when connecting
- * @param passwordOrToken
- * password (not recommended) or token (recommended)
+ * @param serverUri address of jenkins server (ex.
+ * http://localhost:8080/jenkins)
+ * @param username username to use when connecting
+ * @param passwordOrToken password (not recommended) or token (recommended)
*/
public JenkinsServer(URI serverUri, String username, String passwordOrToken) {
this(new JenkinsHttpClient(serverUri, username, passwordOrToken));
@@ -78,8 +76,7 @@ public JenkinsServer(URI serverUri, String username, String passwordOrToken) {
/**
* Create a new Jenkins server directly from an HTTP client (ADVANCED)
*
- * @param client
- * Specialized client to use.
+ * @param client Specialized client to use.
*/
public JenkinsServer(JenkinsHttpClient client) {
this.client = client;
@@ -210,8 +207,7 @@ public String apply(View view) {
/**
* Get a single view object from the server
*
- * @param name
- * name of the view in Jenkins
+ * @param name name of the view in Jenkins
* @return the view object
* @throws IOException
*/
@@ -222,16 +218,14 @@ public View getView(String name) throws IOException {
/**
* Get a single view object from the given folder
*
- * @param folder
- * The name of the folder.
- * @param name
- * name of the view in Jenkins
+ * @param folder The name of the folder.
+ * @param name name of the view in Jenkins
* @return the view object
* @throws IOException
*/
public View getView(FolderJob folder, String name) throws IOException {
try {
- View resultView = client.get(toViewBaseUrl(folder,name) + "/", View.class);
+ View resultView = client.get(toViewBaseUrl(folder, name) + "/", View.class);
resultView.setClient(client);
// TODO: Think about the following? Does there exists a simpler/more
@@ -271,7 +265,7 @@ public JobWithDetails getJob(String jobName) throws IOException {
*/
public JobWithDetails getJob(FolderJob folder, String jobName) throws IOException {
try {
- JobWithDetails job = client.get(toJobBaseUrl(folder,jobName), JobWithDetails.class);
+ JobWithDetails job = client.get(toJobBaseUrl(folder, jobName), JobWithDetails.class);
job.setClient(client);
return job;
@@ -291,8 +285,7 @@ public MavenJobWithDetails getMavenJob(String jobName) throws IOException {
public MavenJobWithDetails getMavenJob(FolderJob folder, String jobName) throws IOException {
try {
- MavenJobWithDetails job = client.get(toJobBaseUrl(folder, jobName),
- MavenJobWithDetails.class);
+ MavenJobWithDetails job = client.get(toJobBaseUrl(folder, jobName), MavenJobWithDetails.class);
job.setClient(client);
return job;
@@ -364,7 +357,7 @@ public void createJob(FolderJob folder, String jobName, String jobXml) throws IO
* @throws IOException
*/
public void createJob(FolderJob folder, String jobName, String jobXml, Boolean crumbFlag) throws IOException {
- client.post_xml( toBaseUrl(folder) + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
+ client.post_xml(toBaseUrl(folder) + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
}
/**
@@ -406,7 +399,8 @@ public void createView(FolderJob folder, String viewName, String viewXml) throws
* @throws IOException
*/
public void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag) throws IOException {
- client.post_xml(toBaseUrl(folder) + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml, crumbFlag);
+ client.post_xml(toBaseUrl(folder) + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml,
+ crumbFlag);
}
/**
@@ -456,18 +450,17 @@ public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) th
* @throws IOException
*/
public String getJobXml(String jobName) throws IOException {
- return getJobXml(null,jobName);
+ return getJobXml(null, jobName);
}
-
+
/**
* Get the xml description of an existing job
*
* @return the new job object
* @throws IOException
*/
- public String getJobXml(FolderJob folder, String jobName) throws IOException
- {
- return client.get(toJobBaseUrl(folder, jobName) + "/config.xml");
+ public String getJobXml(FolderJob folder, String jobName) throws IOException {
+ return client.get(toJobBaseUrl(folder, jobName) + "/config.xml");
}
/**
@@ -514,8 +507,7 @@ public ComputerSet getComputerSet() throws IOException {
* This will give you back the {@link PluginManager}.
*
* @return {@link PluginManager}
- * @throws IOException
- * in case of a failure.
+ * @throws IOException in case of a failure.
*/
public PluginManager getPluginManager() throws IOException {
return client.get("pluginManager/?depth=2", PluginManager.class);
@@ -550,17 +542,16 @@ public void updateJob(String jobName, String jobXml) throws IOException {
* @throws IOException
*/
public void updateJob(String jobName, String jobXml, boolean crumbFlag) throws IOException {
- updateJob(null,jobName,jobXml,crumbFlag);
+ updateJob(null, jobName, jobXml, crumbFlag);
}
-
+
/**
* Update the xml description of an existing job
*
* @throws IOException
*/
- public void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag) throws IOException
- {
- client.post_xml(toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
+ public void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag) throws IOException {
+ client.post_xml(toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
}
public void addStringParam(String jobName, String name, String description, String defaultValue)
@@ -601,10 +592,8 @@ public void cancelQuietDown() throws IOException {
/**
* Delete a job from Jenkins within a folder.
*
- * @param folder
- * The folder where the given job is located.
- * @param jobName
- * The job which should be deleted.
+ * @param folder The folder where the given job is located.
+ * @param jobName The job which should be deleted.
*
* @throws IOException
*/
@@ -615,14 +604,10 @@ public void deleteJob(FolderJob folder, String jobName) throws IOException {
/**
* Delete a job from Jenkins within a folder.
*
- * @param folder
- * The folder where the given job is located.
- * @param jobName
- * The job which should be deleted.
- * @param crumbFlag
- * The crumbFlag
- * @throws IOException
- * in case of problems.
+ * @param folder The folder where the given job is located.
+ * @param jobName The job which should be deleted.
+ * @param crumbFlag The crumbFlag
+ * @throws IOException in case of problems.
*/
public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
client.post(toJobBaseUrl(folder, jobName) + "/doDelete", crumbFlag);
@@ -640,12 +625,9 @@ public void deleteJob(String jobName) throws IOException {
/**
* Delete a job from Jenkins.
*
- * @param jobName
- * The name of the job to be deleted.
- * @param crumbFlag
- * The crumFlag.
- * @throws IOException
- * In case of an failure.
+ * @param jobName The name of the job to be deleted.
+ * @param crumbFlag The crumFlag.
+ * @throws IOException In case of an failure.
*/
public void deleteJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/doDelete", crumbFlag);
@@ -663,12 +645,9 @@ public void disableJob(String jobName) throws IOException {
/**
* Disable a job from Jenkins.
*
- * @param jobName
- * The name of the job to be deleted.
- * @param crumbFlag
- * The crumFlag.
- * @throws IOException
- * In case of an failure.
+ * @param jobName The name of the job to be deleted.
+ * @param crumbFlag The crumFlag.
+ * @throws IOException In case of an failure.
*/
public void disableJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/disable", crumbFlag);
@@ -686,12 +665,9 @@ public void enableJob(String jobName) throws IOException {
/**
* Enable a job from Jenkins.
*
- * @param jobName
- * The name of the job to be deleted.
- * @param crumbFlag
- * The crumFlag.
- * @throws IOException
- * In case of an failure.
+ * @param jobName The name of the job to be deleted.
+ * @param crumbFlag The crumFlag.
+ * @throws IOException In case of an failure.
*/
public void enableJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/enable", crumbFlag);
@@ -712,9 +688,9 @@ public void enableJob(String jobName, boolean crumbFlag) throws IOException {
* @throws IOException
*/
public String runScript(String script) throws IOException {
- return runScript(script,false);
+ return runScript(script, false);
}
-
+
/**
* Runs the provided groovy script on the server and returns the result.
*
@@ -730,12 +706,12 @@ public String runScript(String script) throws IOException {
* @return results
* @throws IOException
*/
- public String runScript(String script,boolean crumb) throws IOException {
+ public String runScript(String script, boolean crumb) throws IOException {
return client.post_text("/scriptText", "script=" + script, ContentType.APPLICATION_FORM_URLENCODED, crumb);
}
public Queue getQueue() throws IOException {
- //TODO: Check if using depth=1 is a good idea?
+ // TODO: Check if using depth=1 is a good idea?
return client.get("queue/?depth=1", Queue.class);
}
@@ -775,12 +751,9 @@ public Build getBuild(QueueItem q) throws IOException {
/**
* Rename a job
*
- * @param oldJobName
- * existing job name.
- * @param newJobName
- * The new job name.
- * @throws IOException
- * In case of a failure.
+ * @param oldJobName existing job name.
+ * @param newJobName The new job name.
+ * @throws IOException In case of a failure.
*/
public void renameJob(String oldJobName, String newJobName) throws IOException {
renameJob(null, oldJobName, newJobName, false);
@@ -789,15 +762,11 @@ public void renameJob(String oldJobName, String newJobName) throws IOException {
/**
* Rename a job
*
- * @param oldJobName
- * existing job name.
- * @param newJobName
- * The new job name.
- * @param crumbFlag
- * true to add crumbIssuer false
- * otherwise.
- * @throws IOException
- * In case of a failure.
+ * @param oldJobName existing job name.
+ * @param newJobName The new job name.
+ * @param crumbFlag true to add crumbIssuer
+ * false otherwise.
+ * @throws IOException In case of a failure.
*/
public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
renameJob(null, oldJobName, newJobName, crumbFlag);
@@ -806,14 +775,10 @@ public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) t
/**
* Rename a job
*
- * @param FolderJob
- * The folder.
- * @param oldJobName
- * existing job name.
- * @param newJobName
- * The new job name.
- * @throws IOException
- * In case of a failure.
+ * @param FolderJob The folder.
+ * @param oldJobName existing job name.
+ * @param newJobName The new job name.
+ * @throws IOException In case of a failure.
*/
public void renameJob(FolderJob folder, String oldJobName, String newJobName) throws IOException {
renameJob(folder, oldJobName, newJobName, false);
@@ -822,55 +787,51 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName) th
/**
* Rename a job
*
- * @param FolderJob
- * The folder.
- * @param oldJobName
- * existing job name.
- * @param newJobName
- * The new job name.
- * @param crumbFlag
- * true to add crumbIssuer false
- * otherwise.
- * @throws IOException
- * In case of a failure.
+ * @param FolderJob The folder.
+ * @param oldJobName existing job name.
+ * @param newJobName The new job name.
+ * @param crumbFlag true to add crumbIssuer
+ * false otherwise.
+ * @throws IOException In case of a failure.
*/
public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
throws IOException {
- client.post( toJobBaseUrl(folder, oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName), crumbFlag);
- }
-
- /**
- * Helper to create a base url in case a folder is given
- * @param folder the folder or {@code null}
- * @return
- */
- private String toBaseUrl(FolderJob folder)
- {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- return path;
- }
-
- /**
- * Helper to create the base url for a job, with or without a given folder
- * @param folder the folder or {@code null}
- * @return
- */
- private String toJobBaseUrl(FolderJob folder, String jobName)
- {
- return toBaseUrl(folder) + "job/" + EncodingUtils.encode(jobName);
- }
-
- /**
- * Helper to create the base url for a view, with or without a given folder
- * @param folder the folder or {@code null}
- * @return
- */
- private String toViewBaseUrl(FolderJob folder, String name)
- {
- return toBaseUrl(folder) + "view/" + EncodingUtils.encode(name);
- }
+ client.post(toJobBaseUrl(folder, oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName),
+ crumbFlag);
+ }
+
+ /**
+ * Helper to create a base url in case a folder is given
+ *
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toBaseUrl(FolderJob folder) {
+ String path = "/";
+ if (folder != null) {
+ path = folder.getUrl();
+ }
+ return path;
+ }
+
+ /**
+ * Helper to create the base url for a job, with or without a given folder
+ *
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toJobBaseUrl(FolderJob folder, String jobName) {
+ return toBaseUrl(folder) + "job/" + EncodingUtils.encode(jobName);
+ }
+
+ /**
+ * Helper to create the base url for a view, with or without a given folder
+ *
+ * @param folder the folder or {@code null}
+ * @return
+ */
+ private String toViewBaseUrl(FolderJob folder, String name) {
+ return toBaseUrl(folder) + "view/" + EncodingUtils.encode(name);
+ }
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
index b2bb39df..56b0d9a3 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
@@ -29,16 +29,13 @@ public JenkinsTriggerHelper(JenkinsServer server) {
* This method will trigger a build of the given job and will wait until the
* builds is ended or if the build has been cancelled.
*
- * @param jobName
- * The name of the job which should be triggered.
+ * @param jobName The name of the job which should be triggered.
* @return In case of an cancelled job you will get
* {@link BuildWithDetails#getResult()}
* {@link BuildResult#CANCELLED}. So you have to check first if the
* build result is {@code CANCELLED}.
- * @throws IOException
- * in case of errors.
- * @throws InterruptedException
- * In case of interrupts.
+ * @throws IOException in case of errors.
+ * @throws InterruptedException In case of interrupts.
*/
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName) throws IOException, InterruptedException {
return triggerJobAndWaitUntilFinished(jobName, false);
@@ -48,18 +45,14 @@ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName) throws IO
* This method will trigger a build of the given job and will wait until the
* builds is ended or if the build has been cancelled.
*
- * @param jobName
- * The name of the job which should be triggered.
- * @param params
- * the job parameters
+ * @param jobName The name of the job which should be triggered.
+ * @param params the job parameters
* @return In case of an cancelled job you will get
* {@link BuildWithDetails#getResult()}
* {@link BuildResult#CANCELLED}. So you have to check first if the
* build result is {@code CANCELLED}.
- * @throws IOException
- * in case of errors.
- * @throws InterruptedException
- * In case of interrupts.
+ * @throws IOException in case of errors.
+ * @throws InterruptedException In case of interrupts.
*/
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params)
throws IOException, InterruptedException {
@@ -70,20 +63,15 @@ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Maptrue or false.
+ * @param jobName The name of the job which should be triggered.
+ * @param params the job parameters
+ * @param crumbFlag set to true or false.
* @return In case of an cancelled job you will get
* {@link BuildWithDetails#getResult()}
* {@link BuildResult#CANCELLED}. So you have to check first if the
* build result is {@code CANCELLED}.
- * @throws IOException
- * in case of errors.
- * @throws InterruptedException
- * In case of interrupts.
+ * @throws IOException in case of errors.
+ * @throws InterruptedException In case of interrupts.
*/
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Map params,
boolean crumbFlag) throws IOException, InterruptedException {
@@ -97,18 +85,14 @@ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, Maptrue or false.
+ * @param jobName The name of the job which should be triggered.
+ * @param crumbFlag set to true or false.
* @return In case of an cancelled job you will get
* {@link BuildWithDetails#getResult()}
* {@link BuildResult#CANCELLED}. So you have to check first if the
* build result is {@code CANCELLED}.
- * @throws IOException
- * in case of errors.
- * @throws InterruptedException
- * In case of interrupts.
+ * @throws IOException in case of errors.
+ * @throws InterruptedException In case of interrupts.
*/
public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean crumbFlag)
throws IOException, InterruptedException {
@@ -119,18 +103,14 @@ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean c
}
/**
- * @param jobName
- * The name of the job.
- * @param queueRef
- * {@link QueueReference}
+ * @param jobName The name of the job.
+ * @param queueRef {@link QueueReference}
* @return In case of an cancelled job you will get
* {@link BuildWithDetails#getResult()}
* {@link BuildResult#CANCELLED}. So you have to check first if the
* build result is {@code CANCELLED}.
- * @throws IOException
- * in case of errors.
- * @throws InterruptedException
- * In case of interrupts.
+ * @throws IOException in case of errors.
+ * @throws InterruptedException In case of interrupts.
*/
private BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, QueueReference queueRef)
throws IOException, InterruptedException {
From a1a04967770738d3df49fb250670ecfc8b64434d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 12 Dec 2016 08:17:55 +0100
Subject: [PATCH 091/197] Added package comments etc.
---
.../com/offbytwo/jenkins/helper/ComparableVersion.java | 4 ++--
.../java/com/offbytwo/jenkins/helper/JenkinsVersion.java | 8 ++++++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
index 53579aa0..e2e20c80 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/ComparableVersion.java
@@ -1,5 +1,3 @@
-package com.offbytwo.jenkins.helper;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -19,6 +17,8 @@
* under the License.
*/
+package com.offbytwo.jenkins.helper;
+
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
index 66d1fc95..d83ce087 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/JenkinsVersion.java
@@ -1,5 +1,13 @@
+/*
+ * Copyright (c) 2016 Karl Heinz Marbaise
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
package com.offbytwo.jenkins.helper;
+/**
+ * @author Karl Heinz Marbaise
+ */
public class JenkinsVersion implements Comparable {
private ComparableVersion cv;
private String literalVersion;
From 86458ac582d175932d2897c64668a2d18f3f6b54 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 17 Dec 2016 14:59:26 +0100
Subject: [PATCH 092/197] Updated maven plugins: o maven-resources-plugin from
3.0.1 to 3.0.2 o maven-compiler-plugin from 3.5.1 to 3.6.0
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8282b325..b372fb86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -222,7 +222,7 @@
org.apache.maven.plugins
maven-resources-plugin
- 3.0.1
+ 3.0.2
org.apache.maven.plugins
@@ -277,7 +277,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.5.1
+ 3.6.0
@@ -292,6 +292,11 @@
maven-deploy-plugin
2.8.2
+
+ org.apache.maven.plugins
+ maven-install-plugin
+ 2.5.2
+
org.apache.maven.plugins
maven-release-plugin
From c3bf2dec7b277c2ad18a3eff5972743299fecdd3 Mon Sep 17 00:00:00 2001
From: Kaspar Tint
Date: Fri, 3 Feb 2017 15:08:35 +0200
Subject: [PATCH 106/197] Fix race condition in JenkinsTriggerHelper
---
.../com/offbytwo/jenkins/JenkinsTriggerHelper.java | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
index 56b0d9a3..e647bc3f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
@@ -135,16 +135,13 @@ private BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, QueueRef
return result;
}
- job = this.server.getJob(jobName);
- Build lastBuild = job.getLastBuild();
-
- boolean isBuilding = lastBuild.details().isBuilding();
+ Build build = server.getBuild(queueItem);
+ boolean isBuilding = build.details().isBuilding();
while (isBuilding) {
- // TODO: May be we should make this configurable?
Thread.sleep(200);
- isBuilding = lastBuild.details().isBuilding();
+ isBuilding = build.details().isBuilding();
}
- return lastBuild.details();
+ return build.details();
}
}
From 1ea35251a26d48b30e2d72409e43f890f7ac0870 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 3 Feb 2017 20:40:50 +0100
Subject: [PATCH 107/197] Fixed #220 Followup o getViews() default
api/json?depth=1 cause timeout but that change has caused in a failing
integration test case which is now fixed by using tree=.. parameters.
---
jenkins-client-it-docker/pom.xml | 13 -------------
.../com/offbytwo/jenkins/integration/Constant.java | 6 ++----
.../java/com/offbytwo/jenkins/JenkinsServer.java | 5 +++--
3 files changed, 5 insertions(+), 19 deletions(-)
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 977fb045..72752fee 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -102,20 +102,7 @@
-
- http://127.0.0.1:8080
-
-
-
-
- env.TRAVIS
-
-
-
- http://127.0.0.1:8080/
-
-
run-docker-its
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
index 12961c4e..400a85ac 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
@@ -6,10 +6,8 @@ public final class Constant {
/**
* The URL for the running Jenkins server (currently a Docker image). On
- * travis it is localhost (127.0.0.1) on my machine it is different. At the
- * moment it is solved by a profile in pom..but could that somehow
- * identified by docker itself ?
+ * travis it is localhost (127.0.0.1).
*/
- public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
+ public static final URI JENKINS_URI = URI.create("http://127.0.0.1:8080/");
}
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 0ae72b67..b9147ad3 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -188,11 +188,12 @@ public Map getViews() throws IOException {
* @throws IOException in case of an error.
*/
public Map getViews(FolderJob folder) throws IOException {
- List views = client.get(toBaseUrl(folder), MainView.class).getViews();
+ // This is much better than using &depth=2
+ // http://localhost:8080/api/json?pretty&tree=views[name,url,jobs[name,url]]
+ List views = client.get(toBaseUrl(folder) + "?tree=views[name,url,jobs[name,url]]", MainView.class).getViews();
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
-
view.setClient(client);
// TODO: Think about the following? Does there exists a
// simpler/more elegant method?
From 984d8284fb01eb406024e57b43d4dced031e0116 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 3 Feb 2017 20:40:50 +0100
Subject: [PATCH 108/197] Fixed #220 Followup o getViews() default
api/json?depth=1 cause timeout but that change has caused in a failing
integration test case which is now fixed by using tree=.. parameters.
---
jenkins-client-it-docker/pom.xml | 13 -------------
.../com/offbytwo/jenkins/integration/Constant.java | 6 ++----
.../java/com/offbytwo/jenkins/JenkinsServer.java | 5 +++--
3 files changed, 5 insertions(+), 19 deletions(-)
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 977fb045..72752fee 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -102,20 +102,7 @@
-
- http://127.0.0.1:8080
-
-
-
-
- env.TRAVIS
-
-
-
- http://127.0.0.1:8080/
-
-
run-docker-its
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
index 12961c4e..400a85ac 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/Constant.java
@@ -6,10 +6,8 @@ public final class Constant {
/**
* The URL for the running Jenkins server (currently a Docker image). On
- * travis it is localhost (127.0.0.1) on my machine it is different. At the
- * moment it is solved by a profile in pom..but could that somehow
- * identified by docker itself ?
+ * travis it is localhost (127.0.0.1).
*/
- public static final URI JENKINS_URI = URI.create(System.getProperty("docker.container.network"));
+ public static final URI JENKINS_URI = URI.create("http://127.0.0.1:8080/");
}
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 0ae72b67..b9147ad3 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -188,11 +188,12 @@ public Map getViews() throws IOException {
* @throws IOException in case of an error.
*/
public Map getViews(FolderJob folder) throws IOException {
- List views = client.get(toBaseUrl(folder), MainView.class).getViews();
+ // This is much better than using &depth=2
+ // http://localhost:8080/api/json?pretty&tree=views[name,url,jobs[name,url]]
+ List views = client.get(toBaseUrl(folder) + "?tree=views[name,url,jobs[name,url]]", MainView.class).getViews();
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
-
view.setClient(client);
// TODO: Think about the following? Does there exists a
// simpler/more elegant method?
From 628dd1a5e344e78bd616756a1da9997894f56524 Mon Sep 17 00:00:00 2001
From: Kaspar Tint
Date: Fri, 3 Feb 2017 22:45:25 +0200
Subject: [PATCH 109/197] Simplify the triggerJobAndWaitUntilFinished method a
bit Make the polling rate configurable
---
.../jenkins/JenkinsTriggerHelper.java | 30 +++++++++----------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
index e647bc3f..3f1ed2b8 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsTriggerHelper.java
@@ -19,10 +19,18 @@
*/
public class JenkinsTriggerHelper {
- private JenkinsServer server;
+ private final JenkinsServer server;
+ private final Long retryInterval;
+ private static final Long DEFAULT_RETRY_INTERVAL = 200L;
public JenkinsTriggerHelper(JenkinsServer server) {
this.server = server;
+ this.retryInterval = DEFAULT_RETRY_INTERVAL;
+ }
+
+ public JenkinsTriggerHelper(JenkinsServer server, Long retryInterval) {
+ this.server = server;
+ this.retryInterval = retryInterval;
}
/**
@@ -114,31 +122,23 @@ public BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, boolean c
*/
private BuildWithDetails triggerJobAndWaitUntilFinished(String jobName, QueueReference queueRef)
throws IOException, InterruptedException {
- JobWithDetails job;
- job = this.server.getJob(jobName);
+ JobWithDetails job = this.server.getJob(jobName);
QueueItem queueItem = this.server.getQueueItem(queueRef);
+
while (!queueItem.isCancelled() && job.isInQueue()) {
- // TODO: May be we should make this configurable?
- Thread.sleep(200);
+ Thread.sleep(retryInterval);
job = this.server.getJob(jobName);
queueItem = this.server.getQueueItem(queueRef);
}
+ Build build = server.getBuild(queueItem);
if (queueItem.isCancelled()) {
- // TODO: Check if this is ok?
- // We will get the details of the last build. NOT of the cancelled
- // build, cause there is no information about that available cause
- // it does not exist.
- BuildWithDetails result = new BuildWithDetails(job.getLastBuild().details());
- // TODO: Should we add more information here?
- result.setResult(BuildResult.CANCELLED);
- return result;
+ return build.details();
}
- Build build = server.getBuild(queueItem);
boolean isBuilding = build.details().isBuilding();
while (isBuilding) {
- Thread.sleep(200);
+ Thread.sleep(retryInterval);
isBuilding = build.details().isBuilding();
}
From 7126473ba845e74fac8a72e4fdc0e7001a7c2076 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 3 Feb 2017 22:05:23 +0100
Subject: [PATCH 110/197] Added information about PR#229 into ReleaseNotes.
---
ReleaseNotes.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index e166dc27..684dfd29 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -11,6 +11,10 @@
`getViews()` Do not use `api/json?depth=1` cause timeout.
+ * [Pull Request #229][pull-229] Fix race condition in JenkinsTriggerHelper
+
+ Thanks for that to [Veske](https://github.com/Veske).
+
### API Changes
* ?
From b010249528a902ded8b1c3fd9faf3a5391b567af Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 3 Feb 2017 22:07:39 +0100
Subject: [PATCH 111/197] Added missing link to PR#229
---
ReleaseNotes.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 684dfd29..2f4d1d80 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -968,6 +968,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-163]: https://github.com/jenkinsci/java-client-api/pull/163
[pull-204]: https://github.com/jenkinsci/java-client-api/pull/204
[pull-206]: https://github.com/jenkinsci/java-client-api/pull/206
+[pull-229]: https://github.com/jenkinsci/java-client-api/pull/229
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
From 4c59d43103c57e4e802eaf701a94c9c5439ce1c3 Mon Sep 17 00:00:00 2001
From: Wojciech Trocki
Date: Mon, 19 Dec 2016 13:14:12 +0000
Subject: [PATCH 112/197] jenkins-client-217 - Added ability to stream logs and
retrieve chunks for logs
---
ReleaseNotes.md | 14 ++
.../jenkins/client/JenkinsHttpClient.java | 74 ++++++++---
.../helper/BuildConsoleStreamListener.java | 19 +++
.../jenkins/model/BuildWithDetails.java | 107 ++++++++++++++-
.../offbytwo/jenkins/model/ConsoleLog.java | 41 ++++++
.../jenkins/model/BuildWithDetailsTest.java | 122 ++++++++++++++++++
6 files changed, 353 insertions(+), 24 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/helper/BuildConsoleStreamListener.java
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2f4d1d80..a5bae98c 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,20 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [Fixed Issue 217][issue- 217]
+
+ Added new api for streaming build logs
+
+ ```java
+ BuildWithDetails build = ...
+ // Get log with initial offset
+ int offset = 40;
+ String output = build.getConsoleOutputText(offset);
+ // Stream logs (when build is in progress)
+ BuildConsoleStreamListener buildListener = ...
+ build.streamConsoleOutput(listener, 3, 420);
+ ```
+
* [Fixed Issue 222][issue-222]
Fixed WARNING during build.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index df58360f..40abca9a 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -6,22 +6,25 @@
package com.offbytwo.jenkins.client;
-import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
-import static org.apache.commons.lang.StringUtils.isNotBlank;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import com.google.common.io.ByteStreams;
+import com.offbytwo.jenkins.client.util.EncodingUtils;
+import com.offbytwo.jenkins.client.util.RequestReleasingInputStream;
+import com.offbytwo.jenkins.client.validator.HttpResponseValidator;
+import com.offbytwo.jenkins.model.BaseModel;
+import com.offbytwo.jenkins.model.Crumb;
+import com.offbytwo.jenkins.model.ExtractHeader;
+import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
@@ -38,18 +41,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import com.google.common.io.ByteStreams;
-import com.offbytwo.jenkins.client.util.EncodingUtils;
-import com.offbytwo.jenkins.client.util.RequestReleasingInputStream;
-//import com.offbytwo.jenkins.client.util.HttpResponseContentExtractor;
-import com.offbytwo.jenkins.client.validator.HttpResponseValidator;
-import com.offbytwo.jenkins.model.BaseModel;
-import com.offbytwo.jenkins.model.Crumb;
-import com.offbytwo.jenkins.model.ExtractHeader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
-import net.sf.json.JSONObject;
+import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
+import static org.apache.commons.lang.StringUtils.isNotBlank;
+
+//import com.offbytwo.jenkins.client.util.HttpResponseContentExtractor;
public class JenkinsHttpClient {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@@ -312,6 +313,39 @@ public void post_form(String path, Map data, boolean crumbFlag)
}
}
+
+ /**
+ * Perform a POST request using form url encoding and return HttpResponse object
+ * This method is not performing validation and can be used for more generic queries to jenkins.
+ *
+ * @param path
+ * path to request, can be relative or absolute
+ * @param data
+ * data to post
+ * @throws IOException,
+ * HttpResponseException
+ */
+ public HttpResponse post_form_with_result(String path, List data, boolean crumbFlag) throws IOException {
+ HttpPost request;
+ if (data != null) {
+ UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(data);
+ request = new HttpPost(noapi(path));
+ request.setEntity(urlEncodedFormEntity);
+ } else {
+ request = new HttpPost(noapi(path));
+ }
+
+ if (crumbFlag == true) {
+ Crumb crumb = get("/crumbIssuer", Crumb.class);
+ if (crumb != null) {
+ request.addHeader(new BasicHeader(crumb.getCrumbRequestField(), crumb.getCrumb()));
+ }
+ }
+ HttpResponse response = client.execute(request, localContext);
+ getJenkinsVersionFromHeader(response);
+ return response;
+ }
+
/**
* Perform a POST request of XML (instead of using json mapper) and return a
* string rendering of the response entity.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/BuildConsoleStreamListener.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/BuildConsoleStreamListener.java
new file mode 100644
index 00000000..41671fbb
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/BuildConsoleStreamListener.java
@@ -0,0 +1,19 @@
+package com.offbytwo.jenkins.helper;
+
+/**
+ * Listener interface used to obtain build console logs
+ */
+public interface BuildConsoleStreamListener {
+
+ /**
+ * Called by api when new log data available.
+ *
+ * @param newLogChunk - string containing latest chunk of logs
+ */
+ void onData(String newLogChunk);
+
+ /**
+ * Called when streaming console output is finished
+ */
+ void finished();
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 4fbf463c..9812a00d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -9,12 +9,26 @@
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
+import com.offbytwo.jenkins.helper.BuildConsoleStreamListener;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import static com.google.common.collect.Collections2.filter;
@@ -25,6 +39,11 @@
*/
public class BuildWithDetails extends Build {
+ private final Logger LOGGER = LoggerFactory.getLogger(getClass());
+
+ public final static String TEXT_SIZE_HEADER = "x-text-size";
+ public final static String MORE_DATA_HEADER = "x-more-data";
+
/**
* This will be returned by the API in cases where the build has never run.
* For example {@link Build#BUILD_HAS_NEVER_RUN}
@@ -350,8 +369,11 @@ public boolean apply(Map action) {
}
/**
- * @return The console output of the build. The line separation is done by
+ * @return The full console output of the build. The line separation is done by
* {@code CR+LF}.
+ *
+ * @see streamConsoleOutput method for obtaining logs for running build
+ *
* @throws IOException in case of a failure.
*/
public String getConsoleOutputText() throws IOException {
@@ -359,8 +381,10 @@ public String getConsoleOutputText() throws IOException {
}
/**
- * The console output with HTML.
- *
+ * The full console output with HTML.
+ *
+ * @see streamConsoleOutput method for obtaining logs for running build
+ *
* @return The console output as HTML.
* @throws IOException in case of an error.
*/
@@ -368,6 +392,81 @@ public String getConsoleOutputHtml() throws IOException {
return client.get(getUrl() + "/logText/progressiveHtml");
}
+
+ /**
+ * Stream build console output log as text using BuildConsoleStreamListener
+ * Method can be used to asynchronously obtain logs for running build.
+ *
+ * @param listener interface used to asynchronously obtain logs
+ * @param poolingInterval interval (seconds) used to pool jenkins for logs
+ * @param poolingTimeout pooling timeout (seconds) used to break pooling in case build stuck
+ *
+ */
+ public void streamConsoleOutput(final BuildConsoleStreamListener listener, final int poolingInterval, final int poolingTimeout) throws InterruptedException, IOException {
+ // Calculate start and timeout
+ final long startTime = System.currentTimeMillis();
+ final long timeoutTime = startTime + (poolingTimeout * 1000);
+
+ int bufferOffset = 0;
+ while (true) {
+ Thread.sleep(poolingInterval * 1000);
+
+ ConsoleLog consoleLog = null;
+ consoleLog = getConsoleOutputText(bufferOffset);
+ String logString = consoleLog.getConsoleLog();
+ if (logString != null && !logString.isEmpty()) {
+ listener.onData(logString);
+ }
+ if (consoleLog.getHasMoreData()) {
+ bufferOffset = consoleLog.getCurrentBufferSize();
+ } else {
+ listener.finished();
+ break;
+ }
+ long currentTime = System.currentTimeMillis();
+
+ if (currentTime > timeoutTime) {
+ LOGGER.warn("Pooling for build {0} for {2} timeout! Check if job stuck in jenkins",
+ BuildWithDetails.this.getDisplayName(), BuildWithDetails.this.getNumber());
+ break;
+ }
+ }
+ }
+
+ /**
+ * Get build console output log as text.
+ * Use this method to periodically obtain logs from jenkins and skip chunks that were already received
+ *
+ * @param bufferOffset offset in console lo
+ * @return ConsoleLog object containing console output of the build. The line separation is done by
+ * {@code CR+LF}.
+ * @throws IOException in case of a failure.
+ */
+ public ConsoleLog getConsoleOutputText(int bufferOffset) throws IOException {
+ List formData = new ArrayList<>();
+ formData.add(new BasicNameValuePair("start", Integer.toString(bufferOffset)));
+ String path = getUrl() + "logText/progressiveText";
+ HttpResponse httpResponse = client.post_form_with_result(path, formData, false);
+
+ Header moreDataHeader = httpResponse.getFirstHeader(MORE_DATA_HEADER);
+ Header textSizeHeader = httpResponse.getFirstHeader(TEXT_SIZE_HEADER);
+ String response = EntityUtils.toString(httpResponse.getEntity());
+ boolean hasMoreData = false;
+ if (moreDataHeader != null) {
+ hasMoreData = Boolean.TRUE.toString().equals(moreDataHeader.getValue());
+ }
+ Integer currentBufferSize = bufferOffset;
+ if (textSizeHeader != null) {
+ try {
+ currentBufferSize = Integer.parseInt(textSizeHeader.getValue());
+ } catch (NumberFormatException e) {
+ LOGGER.warn("Cannot parse buffer size for job {0} build {1}. Using current offset!", this.getDisplayName(), this.getNumber());
+ }
+ }
+ return new ConsoleLog(response, hasMoreData, currentBufferSize);
+ }
+
+
public BuildChangeSet getChangeSet() {
return changeSet;
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
new file mode 100644
index 00000000..59ef5c6d
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
@@ -0,0 +1,41 @@
+package com.offbytwo.jenkins.model;
+
+/**
+ * Represents build console log
+ */
+public class ConsoleLog {
+
+ private String consoleLog;
+ private Boolean hasMoreData;
+ private Integer currentBufferSize;
+
+ public ConsoleLog(String consoleLog, Boolean hasMoreData, Integer currentBufferSize) {
+ this.consoleLog = consoleLog;
+ this.hasMoreData = hasMoreData;
+ this.currentBufferSize = currentBufferSize;
+ }
+
+ public String getConsoleLog() {
+ return consoleLog;
+ }
+
+ public void setConsoleLog(String consoleLog) {
+ this.consoleLog = consoleLog;
+ }
+
+ public Boolean getHasMoreData() {
+ return hasMoreData;
+ }
+
+ public void setHasMoreData(Boolean hasMoreData) {
+ this.hasMoreData = hasMoreData;
+ }
+
+ public Integer getCurrentBufferSize() {
+ return currentBufferSize;
+ }
+
+ public void setCurrentBufferSize(Integer currentBufferSize) {
+ this.currentBufferSize = currentBufferSize;
+ }
+}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
new file mode 100644
index 00000000..af25f266
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
@@ -0,0 +1,122 @@
+package com.offbytwo.jenkins.model;
+
+import com.offbytwo.jenkins.BaseUnitTest;
+import com.offbytwo.jenkins.client.JenkinsHttpClient;
+import com.offbytwo.jenkins.helper.BuildConsoleStreamListener;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.message.BasicHeader;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyListOf;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+
+/**
+ */
+public class BuildWithDetailsTest extends BaseUnitTest {
+
+ private JenkinsHttpClient client;
+ private BuildWithDetails buildWithDetails;
+
+ @Before
+ public void setUp() {
+ client = mock(JenkinsHttpClient.class);
+ buildWithDetails = givenBuild();
+ }
+
+ private BuildWithDetails givenBuild() {
+ BuildWithDetails buildWithDetails = new BuildWithDetails();
+ buildWithDetails.setClient(client);
+ return buildWithDetails;
+ }
+
+ @Test
+ public void getBuildLogWithBuffer() {
+ try {
+ HttpResponse response = mock(HttpResponse.class);
+ String text = "test test test";
+ int textLength = text.length();
+ given(response.getEntity()).willReturn(new StringEntity(text));
+ BasicHeader moreDataHeader = new BasicHeader(BuildWithDetails.MORE_DATA_HEADER, "false");
+ BasicHeader textSizeHeader = new BasicHeader(BuildWithDetails.TEXT_SIZE_HEADER, Integer.toString(textLength));
+ given(response.getFirstHeader(BuildWithDetails.MORE_DATA_HEADER)).willReturn(moreDataHeader);
+ given(response.getFirstHeader(BuildWithDetails.TEXT_SIZE_HEADER)).willReturn(textSizeHeader);
+ given(client.post_form_with_result(anyString(),anyListOf(NameValuePair.class),anyBoolean())).willReturn(response);
+ ConsoleLog consoleOutputText = buildWithDetails.getConsoleOutputText(500);
+ assertThat(consoleOutputText.getConsoleLog()).isEqualTo(text);
+ assertThat(consoleOutputText.getCurrentBufferSize()).isEqualTo(textLength);
+ assertThat(consoleOutputText.getHasMoreData()).isFalse();
+ } catch (IOException e) {
+ fail("Should not return exception",e);
+ }
+ }
+
+
+ @Test
+ public void poolBuildLog() throws InterruptedException {
+ try {
+ HttpResponse response = mock(HttpResponse.class);
+ final String text = "test test test";
+ int textLength = text.length();
+ given(response.getEntity()).willReturn(new StringEntity(text));
+ BasicHeader moreDataHeader = new BasicHeader(BuildWithDetails.MORE_DATA_HEADER, "false");
+ BasicHeader textSizeHeader = new BasicHeader(BuildWithDetails.TEXT_SIZE_HEADER, Integer.toString(textLength));
+ given(response.getFirstHeader(BuildWithDetails.MORE_DATA_HEADER)).willReturn(moreDataHeader);
+ given(response.getFirstHeader(BuildWithDetails.TEXT_SIZE_HEADER)).willReturn(textSizeHeader);
+ given(client.post_form_with_result(anyString(),anyListOf(NameValuePair.class),anyBoolean())).willReturn(response);
+ final StringBuffer buffer=new StringBuffer();
+ buildWithDetails.streamConsoleOutput(new BuildConsoleStreamListener() {
+ @Override
+ public void onData(String newLogChunk) {
+ assertThat(newLogChunk).isEqualTo(text);
+ buffer.append(text);
+ }
+
+ @Override
+ public void finished() {
+ assertThat(buffer.toString()).isEqualTo(text);
+ }
+ },1,2);
+ } catch (IOException e) {
+ fail("Should not return exception",e);
+ }
+ }
+
+ @Test
+ public void poolBuildLogShouldTimeout() throws InterruptedException {
+ try {
+ HttpResponse response = mock(HttpResponse.class);
+ final String text = "test test test";
+ int textLength = text.length();
+ given(response.getEntity()).willReturn(new StringEntity(text));
+ BasicHeader moreDataHeader = new BasicHeader(BuildWithDetails.MORE_DATA_HEADER, "true");
+ BasicHeader textSizeHeader = new BasicHeader(BuildWithDetails.TEXT_SIZE_HEADER, Integer.toString(textLength));
+ given(response.getFirstHeader(BuildWithDetails.MORE_DATA_HEADER)).willReturn(moreDataHeader);
+ given(response.getFirstHeader(BuildWithDetails.TEXT_SIZE_HEADER)).willReturn(textSizeHeader);
+ given(client.post_form_with_result(anyString(),anyListOf(NameValuePair.class),anyBoolean())).willReturn(response);
+ buildWithDetails.streamConsoleOutput(new BuildConsoleStreamListener() {
+ @Override
+ public void onData(String newLogChunk) {
+ assertThat(newLogChunk).isEqualTo(text);
+ }
+
+ @Override
+ public void finished() {
+ fail("Should timeout");
+ }
+ },1,2);
+ } catch (IOException e) {
+ fail("Should not return exception",e);
+ }
+ }
+
+}
From 3a5775fbe17acd283df9a054e5607b2c30140634 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 6 Feb 2017 07:42:10 +0100
Subject: [PATCH 113/197] Fixed typo in ReleaseNotes.
---
ReleaseNotes.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2f4d1d80..39db74ac 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -8,8 +8,7 @@
* [Fixed Issue 220][issue-220]
- `getViews()` Do not use `api/json?depth=1` cause timeout.
-
+ `getViews()` Do not use `api/json?depth=1` cause of timeout.
* [Pull Request #229][pull-229] Fix race condition in JenkinsTriggerHelper
From c29ee2e4029297c8b0bc742b6edc0dfb0334fde9 Mon Sep 17 00:00:00 2001
From: Artem Bachevsky
Date: Mon, 13 Feb 2017 19:38:01 +0300
Subject: [PATCH 114/197] add availability to update views in folders
---
.../src/main/java/com/offbytwo/jenkins/JenkinsServer.java | 8 ++++++++
1 file changed, 8 insertions(+)
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 b9147ad3..4b8cce3b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -574,6 +574,14 @@ public void updateView(String viewName, String viewXml) throws IOException {
public void updateView(String viewName, String viewXml, boolean crumbFlag) throws IOException {
client.post_xml("/view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
}
+
+ public void updateView(FolderJob folder, String viewName, String viewXml) throws IOException {
+ client.post_xml(toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, true);
+ }
+
+ public void updateView(FolderJob folder, String viewName, String viewXml, boolean crumbFlag) throws IOException {
+ client.post_xml(toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
+ }
/**
* Update the xml description of an existing job
From 92ab39d4f3682f24635c1a3678e4534a5114e6af Mon Sep 17 00:00:00 2001
From: guange <8863824@gmail.com>
Date: Mon, 20 Feb 2017 12:05:31 +0800
Subject: [PATCH 115/197] httpclient didn't release when http validateResponse
false.
---
.gitignore | 1 +
.../java/com/offbytwo/jenkins/client/JenkinsHttpClient.java | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
mode change 100644 => 100755 jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
diff --git a/.gitignore b/.gitignore
index e73a9e03..9dc43422 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ target
.project
.settings
test-output
+.DS_Store
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
old mode 100644
new mode 100755
index df58360f..ee4342bd
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -339,8 +339,8 @@ public String post_xml(String path, String xml_data, boolean crumbFlag) throws I
}
HttpResponse response = client.execute(request, localContext);
getJenkinsVersionFromHeader(response);
- httpResponseValidator.validateResponse(response);
try {
+ httpResponseValidator.validateResponse(response);
return IOUtils.toString(response.getEntity().getContent());
} finally {
EntityUtils.consume(response.getEntity());
@@ -386,8 +386,8 @@ public String post_text(String path, String textData, ContentType contentType, b
}
HttpResponse response = client.execute(request, localContext);
getJenkinsVersionFromHeader(response);
- httpResponseValidator.validateResponse(response);
try {
+ httpResponseValidator.validateResponse(response);
return IOUtils.toString(response.getEntity().getContent());
} finally {
EntityUtils.consume(response.getEntity());
From b9c77a475728ee8cc1bfbe789f3b1d56dc8e1c78 Mon Sep 17 00:00:00 2001
From: ladventure <1056102095@qq.com>
Date: Fri, 31 Mar 2017 22:16:16 +0800
Subject: [PATCH 116/197] Update Job.java
When I call the function of build to build a job and it will be built twice. There are two post requests in the function of build.
---
jenkins-client/src/main/java/com/offbytwo/jenkins/model/Job.java | 1 -
1 file changed, 1 deletion(-)
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 edfc9a1f..ffced35a 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
@@ -97,7 +97,6 @@ public QueueReference build(boolean crumbFlag) throws IOException {
*/
public QueueReference build(Map params) throws IOException {
String qs = join(Collections2.transform(params.entrySet(), new MapEntryToQueryStringPair()), "&");
- client.post(url + "buildWithParameters?" + qs);
ExtractHeader location = client.post(url + "buildWithParameters?" + qs, null, ExtractHeader.class, false);
return new QueueReference(location.getLocation());
}
From 5fb8bfa479e3dee2a25b7af91c4af9245f5878fc Mon Sep 17 00:00:00 2001
From: Bremer Jonathan
Date: Fri, 7 Apr 2017 12:02:57 -0400
Subject: [PATCH 117/197] Removed code repeat in method
---
.../src/main/java/com/offbytwo/jenkins/model/Job.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
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 ffced35a..8f411b7f 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
@@ -96,9 +96,7 @@ public QueueReference build(boolean crumbFlag) throws IOException {
* @throws IOException in case of an error.
*/
public QueueReference build(Map params) throws IOException {
- String qs = join(Collections2.transform(params.entrySet(), new MapEntryToQueryStringPair()), "&");
- ExtractHeader location = client.post(url + "buildWithParameters?" + qs, null, ExtractHeader.class, false);
- return new QueueReference(location.getLocation());
+ return build(params, false);
}
/**
From a39918b602c1db9ca2eec11fab35ef792d00a67a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=83=E1=85=A9=E1=86=BC=E1=84=8B?=
=?UTF-8?q?=E1=85=AE=E1=86=A8?=
Date: Thu, 27 Apr 2017 10:02:33 +0900
Subject: [PATCH 118/197] Fixed #244 README.md Code grammar typos
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d01daee5..298aee9b 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ This can also being done by defining a Gradle dependency like this:
```
compile 'com.offbytwo.jenkins:jenkins-client:0.3.7'
-``
+```
Starting with a future release 0.4.0 the groupId/artifactId will change (NOT YET DONE!)
From c707146d0dc65569cf7a4e80037d6a742ebc5bed Mon Sep 17 00:00:00 2001
From: daisuke-yoshimoto
Date: Wed, 3 May 2017 17:19:18 +0900
Subject: [PATCH 119/197] Add javadoc to editType.
---
.../jenkins/model/BuildChangeSetPath.java | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
index 4bd1a055..0b860362 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
@@ -7,16 +7,26 @@
public class BuildChangeSetPath {
/**
- * Usually {@code edit} etc.
+ * The SCM operation, add or edit or delete
+ * @see EditType
*/
- // TODO: Think about it if its possible to use an enum type?
- private String editType; // edit, ?
+ private String editType;
private String file;
+ /**
+ * Return the SCM operation.
+ * @return the SCM operation, add or edit or delete
+ * @see EditType
+ */
public String getEditType() {
return editType;
}
+ /**
+ * Sets the SCM operation.
+ * @param the SCM operation, add or edit or delete
+ * @see EditType
+ */
public void setEditType(String editType) {
this.editType = editType;
}
From ffbd446cc2ef118926945c365ba46a2893120ae5 Mon Sep 17 00:00:00 2001
From: "Shah, Prince"
Date: Tue, 23 May 2017 15:30:16 -0700
Subject: [PATCH 120/197] Fixed 252 Splitting fix made for jacoco reports
from Jenkins #98.
---
ReleaseNotes.md | 4 ++
.../jenkins/model/JacocoCoverageReport.java | 42 ++++++++++++++++++
.../jenkins/model/JacocoCoverageResult.java | 44 +++++++++++++++++++
.../offbytwo/jenkins/model/MavenBuild.java | 4 ++
4 files changed, 94 insertions(+)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 39db74ac..ccee3a38 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,6 +1,10 @@
# Release Notes
## Release 0.3.8 (NOT RELEASED YET)
+
+* [Fixed Issue 252][issue-252]
+
+ Splitting fix made for jacoco reports from Jenkins #98.
* [Fixed Issue 222][issue-222]
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
new file mode 100644
index 00000000..ed623aa1
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
@@ -0,0 +1,42 @@
+package com.offbytwo.jenkins.model;
+
+public class JacocoCoverageReport extends BaseModel {
+
+ private JacocoCoverageResult lineCoverage;
+ private JacocoCoverageResult classCoverage;
+ private JacocoCoverageResult complexityScore;
+ private JacocoCoverageResult instructionCoverage;
+ private JacocoCoverageResult branchCoverage;
+
+ public JacocoCoverageResult getLineCoverage() {
+ return lineCoverage;
+ }
+ public void setLineCoverage(JacocoCoverageResult lineCoverage) {
+ this.lineCoverage = lineCoverage;
+ }
+ public JacocoCoverageResult getClassCoverage() {
+ return classCoverage;
+ }
+ public void setClassCoverage(JacocoCoverageResult classCoverage) {
+ this.classCoverage = classCoverage;
+ }
+ public JacocoCoverageResult getComplexityScore() {
+ return complexityScore;
+ }
+ public void setComplexityScore(JacocoCoverageResult complexityScore) {
+ this.complexityScore = complexityScore;
+ }
+ public JacocoCoverageResult getInstructionCoverage() {
+ return instructionCoverage;
+ }
+ public void setInstructionCoverage(JacocoCoverageResult instructionCoverage) {
+ this.instructionCoverage = instructionCoverage;
+ }
+ public JacocoCoverageResult getBranchCoverage() {
+ return branchCoverage;
+ }
+ public void setBranchCoverage(JacocoCoverageResult branchCoverage) {
+ this.branchCoverage = branchCoverage;
+ }
+
+}
\ No newline at end of file
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
new file mode 100644
index 00000000..760bb610
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
@@ -0,0 +1,44 @@
+package com.offbytwo.jenkins.model;
+
+public class JacocoCoverageResult {
+
+ private int covered;
+ private int missed;
+ private int percentage;
+ private int percentageFloat;
+ private int total;
+
+ public int getCovered() {
+ return covered;
+ }
+ public void setCovered(int covered) {
+ this.covered = covered;
+ }
+ public int getMissed() {
+ return missed;
+ }
+ public void setMissed(int missed) {
+ this.missed = missed;
+ }
+ public int getPercentage() {
+ return percentage;
+ }
+ public void setPercentage(int percentage) {
+ this.percentage = percentage;
+ }
+ public int getPercentageFloat() {
+ return percentageFloat;
+ }
+ public void setPercentageFloat(int percentageFloat) {
+ this.percentageFloat = percentageFloat;
+ }
+ public int getTotal() {
+ return total;
+ }
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
index e8cd5c1f..2ab8de4b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenBuild.java
@@ -30,4 +30,8 @@ public MavenBuild(int number, String url) {
public MavenModule getMavenModule() throws IOException {
return client.get(this.getUrl() + "/mavenArtifacts/", MavenModule.class);
}
+
+ public JacocoCoverageReport getJacocoCodeCoverageReport() throws IOException {
+ return client.get(this.getUrl() + "/jacoco/", JacocoCoverageReport.class);
+ }
}
From caef39a5d5b6ad4dbd9f3d589c453527e629dff4 Mon Sep 17 00:00:00 2001
From: Alberto Scotto
Date: Wed, 14 Jun 2017 15:42:24 +0200
Subject: [PATCH 121/197] README: fix typo
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 298aee9b..04e649c5 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ The Jenkins API Client For Java has now moved under the umbrella of the Jenkins
## What is the "Jenkins API Client for Java"?
-This library is a just a piece of java code which uses the REST API of jenkins.
+This library is just a piece of java code which uses the REST API of jenkins.
This means you can trigger builds, extract informations about jobs or builds
etc. The information you can extract will be represented in java objects which
you can reuse for other purposes or integrate this library into other parts for
From 34ad714db993434ed23e0d179eb93619ec9ae41c Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 16 Jun 2017 12:43:36 +0200
Subject: [PATCH 122/197] Updated ReleaseNotes.md file with contributors.
---
ReleaseNotes.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2819da9c..36dc211d 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -16,6 +16,8 @@
build.streamConsoleOutput(listener, 3, 420);
```
+ Thanks to Wojciech Trocki.
+
* [Fixed Issue 222][issue-222]
Fixed WARNING during build.
@@ -24,10 +26,27 @@
`getViews()` Do not use `api/json?depth=1` cause of timeout.
+ * [Fixed Issue 244][issue-244]
+
+ README.md Code grammar typos; Thanks to .
+
* [Pull Request #229][pull-229] Fix race condition in JenkinsTriggerHelper
Thanks for that to [Veske](https://github.com/Veske).
+ * [Pull Request #239][pull-239] Fixed Bug in build method to prevent
+ building twice.
+
+ Thanks for the pull request #239 from ladventure/master
+
+ * [Pull Request #240][pull-240] Fixed code duplication.
+
+ Thanks for the pull request #240 from Jonathan Bremer.
+
+ * [Pull Request #247][pull-247] Add JavaDoc.
+
+ Thanks to aisuke-yoshimoto
+
### API Changes
* ?
@@ -973,8 +992,10 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-209]: https://github.com/jenkinsci/java-client-api/issues/209
[issue-211]: https://github.com/jenkinsci/java-client-api/issues/211
[issue-215]: https://github.com/jenkinsci/java-client-api/issues/215
+[issue-217]: https://github.com/jenkinsci/java-client-api/issues/217
[issue-220]: https://github.com/jenkinsci/java-client-api/issues/220
[issue-222]: https://github.com/jenkinsci/java-client-api/issues/222
+[issue-244]: https://github.com/jenkinsci/java-client-api/issues/244
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
@@ -982,6 +1003,9 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-204]: https://github.com/jenkinsci/java-client-api/pull/204
[pull-206]: https://github.com/jenkinsci/java-client-api/pull/206
[pull-229]: https://github.com/jenkinsci/java-client-api/pull/229
+[pull-239]: https://github.com/jenkinsci/java-client-api/pull/239
+[pull-240]: https://github.com/jenkinsci/java-client-api/pull/240
+[pull-247]: https://github.com/jenkinsci/java-client-api/pull/247
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
From 7d802564701b3bf43412fbeec93677295f62286d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 16 Jun 2017 12:47:03 +0200
Subject: [PATCH 123/197] Updated the ReleaseNotes accordingly to Issue
reference and not pull request number.
---
ReleaseNotes.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 0c6149fa..7ca2969b 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,9 +2,10 @@
## Release 0.3.8 (NOT RELEASED YET)
-* [Fixed Issue 252][issue-252]
+* [Fixed Issue 98][issue-98]
Splitting fix made for jacoco reports from Jenkins #98.
+ Thanks to Shah, Prince.
* [Fixed Issue 217][issue- 217]
@@ -949,6 +950,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-89]: https://github.com/jenkinsci/java-client-api/issues/89
[issue-90]: https://github.com/jenkinsci/java-client-api/issues/90
[issue-91]: https://github.com/jenkinsci/java-client-api/issues/91
+[issue-98]: https://github.com/jenkinsci/java-client-api/issues/98
[issue-104]: https://github.com/jenkinsci/java-client-api/issues/104
[issue-111]: https://github.com/jenkinsci/java-client-api/issues/111
[issue-116]: https://github.com/jenkinsci/java-client-api/issues/116
From 198f4be8b0e5bb39fc2a9b459f00f97c774baf59 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 16 Jun 2017 12:49:20 +0200
Subject: [PATCH 124/197] Updated information in ReleaseNotes.
---
ReleaseNotes.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 7ca2969b..8c70690e 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -52,6 +52,10 @@
Thanks to aisuke-yoshimoto
+ * [Pull Request #262][pull-262] Fix typo.
+
+ Thanks for Alberto Scotto.
+
### API Changes
* ?
@@ -1012,6 +1016,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[pull-239]: https://github.com/jenkinsci/java-client-api/pull/239
[pull-240]: https://github.com/jenkinsci/java-client-api/pull/240
[pull-247]: https://github.com/jenkinsci/java-client-api/pull/247
+[pull-262]: https://github.com/jenkinsci/java-client-api/pull/262
[jissue-35002]: https://issues.jenkins-ci.org/browse/JENKINS-35002
[jissue-35108]: https://issues.jenkins-ci.org/browse/JENKINS-35108
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
From 6913cac0dce5332924695f5a242867dee95fe687 Mon Sep 17 00:00:00 2001
From: Aaron McGinn
Date: Mon, 19 Jun 2017 14:35:56 -0500
Subject: [PATCH 125/197] Add support for retrieving jobs by fullName (also
return fullName on the Job)
---
.../com/offbytwo/jenkins/JenkinsServer.java | 45 +++++++++++++++++--
.../com/offbytwo/jenkins/model/FolderJob.java | 4 ++
.../java/com/offbytwo/jenkins/model/Job.java | 19 +++++++-
.../jenkins/model/JobWithDetails.java | 2 +-
.../com/offbytwo/jenkins/model/MavenJob.java | 4 ++
5 files changed, 67 insertions(+), 7 deletions(-)
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);
From 7d258a0e8e62b4269870c70999b05bcc888a86f6 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 20 Jul 2017 18:29:47 +0200
Subject: [PATCH 126/197] Removed sudo requirement for travis builds.
---
.travis.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index c00316c0..a94b751f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,4 @@
---
-sudo: required
-
services:
- docker
From 49be530b8243e6cc92e9ee5efe002051db388b3b Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 20 Jul 2017 18:38:49 +0200
Subject: [PATCH 127/197] Upgraded to JDK8 temporarily based on issues on
.travis-ci platform.
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index a94b751f..3ffb8c76 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,7 +34,7 @@ after_script:
- docker rmi -f jenkins-with-plugins
jdk:
- - oraclejdk7
+ - oraclejdk8
cache:
directories:
- $HOME/.m2/repository
From e16dc93a4f8e3752f26f68bd8dd677633269706d Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 20 Jul 2017 19:45:27 +0200
Subject: [PATCH 128/197] Fixed #268 o Prevent to produce an NPE if
getVersion() called before the first communication. So we call isRunning()
which makes the first communication and will transfer http headers
which contain the version which will be read by JenkinsHttpClient.
---
ReleaseNotes.md | 7 ++++++-
.../com/offbytwo/jenkins/JenkinsServer.java | 6 +++---
.../jenkins/client/JenkinsHttpClient.java | 14 ++++++++++++-
.../offbytwo/jenkins/JenkinsServerTest.java | 20 ++++++++++++++++---
4 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 8c70690e..66711150 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,7 +2,11 @@
## Release 0.3.8 (NOT RELEASED YET)
-* [Fixed Issue 98][issue-98]
+ * [Fixed Issue 268][issue-268]
+
+ NullPointerException is thrown unless isRunning() is called first.
+
+ * [Fixed Issue 98][issue-98]
Splitting fix made for jacoco reports from Jenkins #98.
Thanks to Shah, Prince.
@@ -1006,6 +1010,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-220]: https://github.com/jenkinsci/java-client-api/issues/220
[issue-222]: https://github.com/jenkinsci/java-client-api/issues/222
[issue-244]: https://github.com/jenkinsci/java-client-api/issues/244
+[issue-268]: https://github.com/jenkinsci/java-client-api/issues/268
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
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 51788fe8..7b8f77a8 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -8,7 +8,6 @@
import java.io.IOException;
import java.net.URI;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -103,9 +102,10 @@ public boolean isRunning() {
* @return {@link JenkinsVersion}
*/
public JenkinsVersion getVersion() {
- if (client.getJenkinsVersion().isEmpty()) {
+ if (!client.isJenkinsVersionSet()) {
// Force a request to get at least once
- // HttpHeader
+ // HttpHeader. The header contains the version
+ // information.
isRunning();
}
JenkinsVersion jv = new JenkinsVersion(client.getJenkinsVersion());
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index c4f6f0da..8c5c467a 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -66,6 +66,8 @@ public class JenkinsHttpClient {
private String jenkinsVersion;
+ public final static String EMPTY_VERSION = "UNKNOWN";
+
/**
* Create an unauthenticated Jenkins HTTP client
*
@@ -82,7 +84,7 @@ public JenkinsHttpClient(URI uri, CloseableHttpClient client) {
this.client = client;
this.httpResponseValidator = new HttpResponseValidator();
// this.contentExtractor = new HttpResponseContentExtractor();
- this.jenkinsVersion = null;
+ this.jenkinsVersion = EMPTY_VERSION;
LOGGER.debug("uri={}", uri.toString());
}
@@ -496,6 +498,16 @@ public String getJenkinsVersion() {
return this.jenkinsVersion;
}
+ /**
+ * Check to see if the jenkins version has been set
+ * to something different than the initialization value
+ * from the constructor. This means there has never been made
+ * a communication with the Jenkins server.
+ * @return true if jenkinsVersion has been set by communication, false otherwise.
+ */
+ public boolean isJenkinsVersionSet() {
+ return !EMPTY_VERSION.equals( this.jenkinsVersion );
+ }
private void getJenkinsVersionFromHeader(HttpResponse response) {
Header[] headers = response.getHeaders("X-Jenkins");
if (headers.length == 1) {
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
index b98a9fb3..444d6d3b 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
@@ -34,7 +34,9 @@
import com.offbytwo.jenkins.model.View;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public class JenkinsServerTest extends BaseUnitTest {
@@ -42,9 +44,6 @@ public class JenkinsServerTest extends BaseUnitTest {
private JenkinsServer server = new JenkinsServer(client);
private MainView mainView = new MainView(new Job("Hello", "http://localhost/job/Hello/"));
- public JenkinsServerTest() throws Exception {
- }
-
@Before
public void setUp() throws Exception {
given(client.get("/", MainView.class)).willReturn(mainView);
@@ -314,6 +313,21 @@ public void testGetJobXmls() throws Exception {
shouldGetJobXml("HeLLo");
}
+ @Test
+ public void getVersionShouldNotFailWithNPE()
+ throws Exception
+ {
+ when (client.get( "/" )).thenReturn( "TheAnswer");
+ when (client.getJenkinsVersion()).thenReturn( "1.23");
+
+ JenkinsServer server = new JenkinsServer( client);
+ server.getVersion();
+ verify( client, times( 1 )).isJenkinsVersionSet();
+ verify( client, times( 1 )).get( "/" );
+ verify( client, times( 1 )).getJenkinsVersion();
+
+ }
+
private void shouldGetFolderJobs(String... jobNames) throws IOException {
// given
String path = "http://localhost/jobs/someFolder/";
From cec3f47d1c93eeb16818a34a65cf0b90fa6be55a Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Thu, 20 Jul 2017 20:02:28 +0200
Subject: [PATCH 129/197] Using openjdk7 instead of oraclejdk7 cause oraclejdk7
is not supported anymore.
---
.travis.yml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 3ffb8c76..40d3995c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,8 +33,10 @@ after_script:
- docker rm -f -v jenkins-for-testing
- docker rmi -f jenkins-with-plugins
+# http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html
+# - oraclejdk8 is not supported anymore.
jdk:
- - oraclejdk8
+ - openjdk7
cache:
directories:
- $HOME/.m2/repository
From 42a15c9e35ec8c8af61bf3039f76f90396a59d60 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 6 Aug 2017 16:49:42 +0200
Subject: [PATCH 130/197] Fixed link.
---
ReleaseNotes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 66711150..2c43e996 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -11,7 +11,7 @@
Splitting fix made for jacoco reports from Jenkins #98.
Thanks to Shah, Prince.
- * [Fixed Issue 217][issue- 217]
+ * [Fixed Issue 217][issue-217]
Added new api for streaming build logs
From 2f9c8b407aa63ea69bb5ee4c74c0e8ec128d671c Mon Sep 17 00:00:00 2001
From: Jesper Terkelsen
Date: Fri, 25 Aug 2017 09:08:21 +0200
Subject: [PATCH 131/197] JENKINS-46445 Add support for both client TLS and
basic authentication.
In some setups both client certificate TLS authentication and
username password authentication is needed.
Here is how you would set it up:
- Create a sslContext
- add it along with credentials to the new constructor
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setSslcontext(sslContext);
JenkinsHttpClient client = new JenkinsHttpClient(uri, builder, username, password);
JenkinsServer jenkins = new JenkinsServer(client);
---
ReleaseNotes.md | 11 +++++++++++
.../offbytwo/jenkins/client/JenkinsHttpClient.java | 14 +++++++++++++-
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2c43e996..0fee6d50 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,17 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [JENKINS-46445](https://issues.jenkins-ci.org/browse/JENKINS-46445)
+
+ Add support for both client TLS and basic authentication.
+
+ ```java
+ HttpClientBuilder builder = HttpClientBuilder.create();
+ builder.setSslcontext(sslContext);
+ JenkinsHttpClient client = new JenkinsHttpClient(uri, builder, username, password);
+ JenkinsServer jenkins = new JenkinsServer(client);
+ ```
+
* [Fixed Issue 268][issue-268]
NullPointerException is thrown unless isRunning() is called first.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 8c5c467a..33f4b167 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -115,7 +115,19 @@ public JenkinsHttpClient(URI uri) {
* @param password Password or auth token to use when connecting
*/
public JenkinsHttpClient(URI uri, String username, String password) {
- this(uri, addAuthentication(HttpClientBuilder.create(), uri, username, password));
+ this(uri, HttpClientBuilder.create(), username, password);
+ }
+
+ /**
+ * Create an authenticated Jenkins HTTP client
+ *
+ * @param uri Location of the jenkins server (ex. http://localhost:8080)
+ * @param builder Configured HttpClientBuilder to be used
+ * @param username Username to use when connecting
+ * @param password Password or auth token to use when connecting
+ */
+ public JenkinsHttpClient(URI uri, HttpClientBuilder builder, String username, String password) {
+ this(uri, addAuthentication(builder, uri, username, password));
if (isNotBlank(username)) {
localContext = new BasicHttpContext();
localContext.setAttribute("preemptive-auth", new BasicScheme());
From 973958ebc33090b0e33dccc8c87b4bbc760646bd Mon Sep 17 00:00:00 2001
From: Jesper Terkelsen
Date: Fri, 25 Aug 2017 23:56:13 +0200
Subject: [PATCH 132/197] JENKINS-46472 Ability to modify offline cause for
offline computers.
Added ability to modify offline cause for offline computers.
ComputerWithDetails computer = ...
if (!computer.getOffline()){
computer.toggleOffline();
computer.changeOfflineCause("Scheduled for termination");
}
---
ReleaseNotes.md | 12 ++++++++++++
.../jenkins/model/ComputerWithDetails.java | 17 +++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2c43e996..d73d6f40 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,18 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [JENKINS-46472](https://issues.jenkins-ci.org/browse/JENKINS-46472)
+
+ Added ability to modify offline cause for offline computers.
+
+ ```java
+ ComputerWithDetails computer = ...
+ if (!computer.getOffline()){
+ computer.toggleOffline();
+ computer.changeOfflineCause("Scheduled for termination");
+ }
+ ```
+
* [Fixed Issue 268][issue-268]
NullPointerException is thrown unless isRunning() is called first.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
index b1df2eef..c565f8a2 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
@@ -97,6 +97,23 @@ public void toggleOffline() throws IOException {
toggleOffline( false );
}
+ public void changeOfflineCause(String cause, boolean crumbFlag) throws IOException {
+ String name;
+ if ("master".equals(displayName)) {
+ name = "(master)";
+ } else {
+ name = UrlEscapers.urlPathSegmentEscaper().escape(displayName);
+ }
+
+ Map data = new HashMap();
+ data.put( "offlineMessage", cause );
+ client.post_form("/computer/" + name + "/changeOfflineCause?", data, crumbFlag);
+ }
+
+ public void changeOfflineCause(String cause) throws IOException {
+ changeOfflineCause(cause, false);
+ }
+
public Boolean getManualLaunchAllowed() {
return manualLaunchAllowed;
}
From 4e317ed7cd34dbc01169d7b808b06748e33d26db Mon Sep 17 00:00:00 2001
From: Liren Tu
Date: Fri, 8 Sep 2017 20:08:50 -0700
Subject: [PATCH 133/197] Fixed #282 o Check the correct parameter when
converting cause to a BuildCause object.
---
ReleaseNotes.md | 5 +++++
.../java/com/offbytwo/jenkins/model/BuildWithDetails.java | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2c43e996..f0f7142b 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,11 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [Fixed Issue 282][issue-282]
+
+ `NullPointerException` may be thrown if `upstreamUrl` is `null` when
+ converting cause to `BuildCause` object.
+
* [Fixed Issue 268][issue-268]
NullPointerException is thrown unless isRunning() is called first.
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 9812a00d..2feea4f9 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -290,7 +290,7 @@ private BuildCause convertToBuildCause(Map cause) {
}
String upstreamUrl = (String) cause.get("upstreamUrl");
- if (!Strings.isNullOrEmpty(upstreamProject)) {
+ if (!Strings.isNullOrEmpty(upstreamUrl)) {
cause_object.setUpstreamUrl(upstreamUrl);
}
From 610ded57bf9d359b0e979d4c875f67dc6b8f54ef Mon Sep 17 00:00:00 2001
From: Dell Green
Date: Thu, 5 Oct 2017 20:15:38 +0100
Subject: [PATCH 134/197] Refactor: #291, useful utility methods refactored
into utility classes
---
ReleaseNotes.md | 4 +
.../com/offbytwo/jenkins/JenkinsServer.java | 108 +-----
.../jenkins/client/JenkinsHttpClient.java | 90 ++---
.../jenkins/client/util/ResponseUtils.java | 38 ++
.../jenkins/client/util/UrlUtils.java | 156 +++++++++
.../jenkins/client/JenkinsHttpClientTest.java | 56 +++
.../client/util/ResponseUtilsTest.java | 49 +++
.../jenkins/client/util/UrlUtilsTest.java | 324 ++++++++++++++++++
8 files changed, 677 insertions(+), 148 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/ResponseUtils.java
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/UrlUtils.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/ResponseUtilsTest.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/UrlUtilsTest.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index f0f7142b..c4a6f533 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,10 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [Refactor Issue 291][issue-291]
+
+ Useful utility methods refactored into utility classes.
+
* [Fixed Issue 282][issue-282]
`NullPointerException` may be thrown if `upstreamUrl` is `null` when
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 7b8f77a8..0a6f79a4 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -8,7 +8,6 @@
import java.io.IOException;
import java.net.URI;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -27,6 +26,7 @@
import com.google.common.collect.Maps;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.client.util.EncodingUtils;
+import com.offbytwo.jenkins.client.util.UrlUtils;
import com.offbytwo.jenkins.helper.JenkinsVersion;
import com.offbytwo.jenkins.model.Build;
import com.offbytwo.jenkins.model.Computer;
@@ -155,7 +155,7 @@ public Map getJobs(String view) throws IOException {
* @throws IOException in case of an error.
*/
public Map getJobs(FolderJob folder, String view) throws IOException {
- String path = toBaseUrl(folder);
+ String path = UrlUtils.toBaseUrl(folder);
Class extends MainView> viewClass = MainView.class;
if (view != null) {
path = path + "view/" + EncodingUtils.encode(view) + "/";
@@ -192,7 +192,7 @@ public Map getViews() throws IOException {
public Map getViews(FolderJob folder) throws IOException {
// This is much better than using &depth=2
// http://localhost:8080/api/json?pretty&tree=views[name,url,jobs[name,url]]
- List views = client.get(toBaseUrl(folder) + "?tree=views[name,url,jobs[name,url]]", MainView.class).getViews();
+ List views = client.get(UrlUtils.toBaseUrl(folder) + "?tree=views[name,url,jobs[name,url]]", MainView.class).getViews();
return Maps.uniqueIndex(views, new Function() {
@Override
public String apply(View view) {
@@ -232,7 +232,7 @@ public View getView(String name) throws IOException {
*/
public View getView(FolderJob folder, String name) throws IOException {
try {
- View resultView = client.get(toViewBaseUrl(folder, name) + "/", View.class);
+ View resultView = client.get(UrlUtils.toViewBaseUrl(folder, name) + "/", View.class);
resultView.setClient(client);
// TODO: Think about the following? Does there exists a simpler/more
@@ -262,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, parseFullName(jobName));
+ return getJob(null, UrlUtils.toFullJobPath(jobName));
}
/**
@@ -275,7 +275,7 @@ public JobWithDetails getJob(String jobName) throws IOException {
*/
public JobWithDetails getJob(FolderJob folder, String jobName) throws IOException {
try {
- JobWithDetails job = client.get(toJobBaseUrl(folder, jobName), JobWithDetails.class);
+ JobWithDetails job = client.get(UrlUtils.toJobBaseUrl(folder, jobName), JobWithDetails.class);
job.setClient(client);
return job;
@@ -290,12 +290,12 @@ public JobWithDetails getJob(FolderJob folder, String jobName) throws IOExceptio
}
public MavenJobWithDetails getMavenJob(String jobName) throws IOException {
- return getMavenJob(null, parseFullName(jobName));
+ return getMavenJob(null, UrlUtils.toFullJobPath(jobName));
}
public MavenJobWithDetails getMavenJob(FolderJob folder, String jobName) throws IOException {
try {
- MavenJobWithDetails job = client.get(toJobBaseUrl(folder, jobName), MavenJobWithDetails.class);
+ MavenJobWithDetails job = client.get(UrlUtils.toJobBaseUrl(folder, jobName), MavenJobWithDetails.class);
job.setClient(client);
return job;
@@ -381,7 +381,7 @@ public void createJob(FolderJob folder, String jobName, String jobXml) throws IO
* @throws IOException in case of an error.
*/
public void createJob(FolderJob folder, String jobName, String jobXml, Boolean crumbFlag) throws IOException {
- client.post_xml(toBaseUrl(folder) + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
+ client.post_xml(UrlUtils.toBaseUrl(folder) + "createItem?name=" + EncodingUtils.encodeParam(jobName), jobXml, crumbFlag);
}
/**
@@ -433,7 +433,7 @@ public void createView(FolderJob folder, String viewName, String viewXml) throws
* @throws IOException in case of an error.
*/
public void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag) throws IOException {
- client.post_xml(toBaseUrl(folder) + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml,
+ client.post_xml(UrlUtils.toBaseUrl(folder) + "createView?name=" + EncodingUtils.encodeParam(viewName), viewXml,
crumbFlag);
}
@@ -484,7 +484,7 @@ public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) th
// here
ImmutableMap params = ImmutableMap.of("mode", "com.cloudbees.hudson.plugins.folder.Folder",
"name", EncodingUtils.encodeParam(jobName), "from", "", "Submit", "OK");
- client.post_form(toBaseUrl(folder) + "createItem?", params, crumbFlag);
+ client.post_form(UrlUtils.toBaseUrl(folder) + "createItem?", params, crumbFlag);
}
/**
@@ -507,7 +507,7 @@ public String getJobXml(String jobName) throws IOException {
* @throws IOException in case of an error.
*/
public String getJobXml(FolderJob folder, String jobName) throws IOException {
- return client.get(toJobBaseUrl(folder, jobName) + "/config.xml");
+ return client.get(UrlUtils.toJobBaseUrl(folder, jobName) + "/config.xml");
}
/**
@@ -577,11 +577,11 @@ public void updateView(String viewName, String viewXml, boolean crumbFlag) throw
}
public void updateView(FolderJob folder, String viewName, String viewXml) throws IOException {
- client.post_xml(toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, true);
+ client.post_xml(UrlUtils.toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, true);
}
public void updateView(FolderJob folder, String viewName, String viewXml, boolean crumbFlag) throws IOException {
- client.post_xml(toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
+ client.post_xml(UrlUtils.toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
}
/**
@@ -617,7 +617,7 @@ public void updateJob(String jobName, String jobXml, boolean crumbFlag) throws I
* @throws IOException in case of an error.
*/
public void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag) throws IOException {
- client.post_xml(toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
+ client.post_xml(UrlUtils.toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
}
/**
@@ -685,7 +685,7 @@ public void deleteJob(FolderJob folder, String jobName) throws IOException {
* @throws IOException in case of problems.
*/
public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
- client.post(toJobBaseUrl(folder, jobName) + "/doDelete", crumbFlag);
+ client.post(UrlUtils.toJobBaseUrl(folder, jobName) + "/doDelete", crumbFlag);
}
/**
@@ -878,80 +878,10 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName) th
*/
public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
throws IOException {
- client.post(toJobBaseUrl(folder, oldJobName) + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName),
- crumbFlag);
- }
-
- /**
- * Helper to create a base url in case a folder is given
- *
- * @param folder the folder or {@code null}
- * @return The created base url.
- */
- private String toBaseUrl(FolderJob folder) {
- String path = "/";
- if (folder != null) {
- path = folder.getUrl();
- }
- return path;
- }
-
- /**
- * Helper to create the base url for a job, with or without a given folder
- *
- * @param folder the folder or {@code null}
- * @param jobName the name of the job.
- * @return converted base url.
- */
- private String toJobBaseUrl(FolderJob folder, String 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;
+ client.post(UrlUtils.toJobBaseUrl(folder, oldJobName)
+ + "/doRename?newName=" + EncodingUtils.encodeParam(newJobName),
+ crumbFlag);
}
- /**
- * Helper to create the base url for a view, with or without a given folder
- *
- * @param folder the folder or {@code null}
- * @param name the of the view.
- * @return converted view url.
- */
- 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/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 8c5c467a..e527e0b2 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -18,7 +18,6 @@
import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
@@ -48,6 +47,8 @@
import java.util.Map;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
+import com.offbytwo.jenkins.client.util.ResponseUtils;
+import com.offbytwo.jenkins.client.util.UrlUtils;
import static org.apache.commons.lang.StringUtils.isNotBlank;
//import com.offbytwo.jenkins.client.util.HttpResponseContentExtractor;
@@ -132,10 +133,10 @@ public JenkinsHttpClient(URI uri, String username, String password) {
* @throws IOException in case of an error.
*/
public T get(String path, Class cls) throws IOException {
- HttpGet getMethod = new HttpGet(api(path));
+ HttpGet getMethod = new HttpGet(UrlUtils.toJsonApiUri(uri, context, path));
HttpResponse response = client.execute(getMethod, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
try {
httpResponseValidator.validateResponse(response);
return objectFromResponse(cls, response);
@@ -154,9 +155,9 @@ public T get(String path, Class cls) throws IOException
* @throws IOException in case of an error.
*/
public String get(String path) throws IOException {
- HttpGet getMethod = new HttpGet(api(path));
+ HttpGet getMethod = new HttpGet(UrlUtils.toJsonApiUri(uri, context, path));
HttpResponse response = client.execute(getMethod, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
LOGGER.debug("get({}), version={}, responseCode={}", path, this.jenkinsVersion,
response.getStatusLine().getStatusCode());
try {
@@ -200,7 +201,7 @@ public T getQuietly(String path, Class cls) {
public InputStream getFile(URI path) throws IOException {
HttpGet getMethod = new HttpGet(path);
HttpResponse response = client.execute(getMethod, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
httpResponseValidator.validateResponse(response);
return new RequestReleasingInputStream(response.getEntity().getContent(), getMethod);
}
@@ -222,7 +223,7 @@ public R post(String path, D data, Class cls) throws
* @throws IOException in case of an error.
*/
public R post(String path, D data, Class cls, boolean crumbFlag) throws IOException {
- HttpPost request = new HttpPost(api(path));
+ HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
if (crumbFlag == true) {
Crumb crumb = getQuietly("/crumbIssuer", Crumb.class);
if (crumb != null) {
@@ -236,7 +237,7 @@ public R post(String path, D data, Class cls, boolea
request.setEntity(stringEntity);
}
HttpResponse response = client.execute(request, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
try {
httpResponseValidator.validateResponse(response);
@@ -264,14 +265,14 @@ public R post(String path, D data, Class cls, boolea
* Perform a POST request using form url encoding.
*
* This method was added for the purposes of creating folders, but may be
- * useful for other API calls as well.
- *
- * Unlike post and post_xml, the path is *not* modified by adding
- * "/api/json". Additionally, the params in data are provided as both
- * request parameters including a json parameter, *and* in the
- * JSON-formatted StringEntity, because this is what the folder creation
- * call required. It is unclear if any other jenkins APIs operate in this
- * fashion.
+ useful for other API calls as well.
+
+ Unlike post and post_xml, the path is *not* modified by adding
+ "/toJsonApiUri/json". Additionally, the params in data are provided as both
+ request parameters including a json parameter, *and* in the
+ JSON-formatted StringEntity, because this is what the folder creation
+ call required. It is unclear if any other jenkins APIs operate in this
+ fashion.
*
* @param path path to request, can be relative or absolute
* @param data data to post
@@ -291,10 +292,10 @@ public void post_form(String path, Map data, boolean crumbFlag)
queryParams.add("json=" + EncodingUtils.encodeParam(JSONObject.fromObject(data).toString()));
String value = mapper.writeValueAsString(data);
StringEntity stringEntity = new StringEntity(value, ContentType.APPLICATION_FORM_URLENCODED);
- request = new HttpPost(noapi(path) + StringUtils.join(queryParams, "&"));
+ request = new HttpPost(UrlUtils.toNoApiUri(uri, context, path) + StringUtils.join(queryParams, "&"));
request.setEntity(stringEntity);
} else {
- request = new HttpPost(noapi(path));
+ request = new HttpPost(UrlUtils.toNoApiUri(uri, context, path));
}
if (crumbFlag == true) {
@@ -305,7 +306,7 @@ public void post_form(String path, Map data, boolean crumbFlag)
}
HttpResponse response = client.execute(request, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
try {
httpResponseValidator.validateResponse(response);
@@ -331,10 +332,10 @@ public HttpResponse post_form_with_result(String path, List data,
HttpPost request;
if (data != null) {
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(data);
- request = new HttpPost(noapi(path));
+ request = new HttpPost(UrlUtils.toNoApiUri(uri, context, path));
request.setEntity(urlEncodedFormEntity);
} else {
- request = new HttpPost(noapi(path));
+ request = new HttpPost(UrlUtils.toNoApiUri(uri, context, path));
}
if (crumbFlag == true) {
@@ -344,7 +345,7 @@ public HttpResponse post_form_with_result(String path, List data,
}
}
HttpResponse response = client.execute(request, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
return response;
}
@@ -362,7 +363,7 @@ public String post_xml(String path, String xml_data) throws IOException {
}
public String post_xml(String path, String xml_data, boolean crumbFlag) throws IOException {
- HttpPost request = new HttpPost(api(path));
+ HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
if (crumbFlag == true) {
Crumb crumb = getQuietly("/crumbIssuer", Crumb.class);
if (crumb != null) {
@@ -374,7 +375,7 @@ public String post_xml(String path, String xml_data, boolean crumbFlag) throws I
request.setEntity(new StringEntity(xml_data, ContentType.create("text/xml", "utf-8")));
}
HttpResponse response = client.execute(request, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
try {
httpResponseValidator.validateResponse(response);
return IOUtils.toString(response.getEntity().getContent());
@@ -409,7 +410,7 @@ public String post_text(String path, String textData, boolean crumbFlag) throws
*/
public String post_text(String path, String textData, ContentType contentType, boolean crumbFlag)
throws IOException {
- HttpPost request = new HttpPost(api(path));
+ HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
if (crumbFlag == true) {
Crumb crumb = get("/crumbIssuer", Crumb.class);
if (crumb != null) {
@@ -421,7 +422,7 @@ public String post_text(String path, String textData, ContentType contentType, b
request.setEntity(new StringEntity(textData, contentType));
}
HttpResponse response = client.execute(request, localContext);
- getJenkinsVersionFromHeader(response);
+ jenkinsVersion = ResponseUtils.getJenkinsVersion(response);
try {
httpResponseValidator.validateResponse(response);
return IOUtils.toString(response.getEntity().getContent());
@@ -445,35 +446,11 @@ public void post(String path, boolean crumbFlag) throws IOException {
post(path, null, null, crumbFlag);
}
- private String urlJoin(String path1, String path2) {
- if (!path1.endsWith("/")) {
- path1 += "/";
- }
- if (path2.startsWith("/")) {
- path2 = path2.substring(1);
- }
- return path1 + path2;
- }
+
- private URI api(String path) {
- if (!path.toLowerCase().matches("https?://.*")) {
- path = urlJoin(this.context, path);
- }
- if (!path.contains("?")) {
- path = urlJoin(path, "api/json");
- } else {
- String[] components = path.split("\\?", 2);
- path = urlJoin(components[0], "api/json") + "?" + components[1];
- }
- return uri.resolve("/").resolve(path.replace(" ", "%20"));
- }
+
- private URI noapi(String path) {
- if (!path.toLowerCase().matches("https?://.*")) {
- path = urlJoin(this.context, path);
- }
- return uri.resolve("/").resolve(path);
- }
+
private T objectFromResponse(Class cls, HttpResponse response) throws IOException {
InputStream content = response.getEntity().getContent();
@@ -508,12 +485,7 @@ public String getJenkinsVersion() {
public boolean isJenkinsVersionSet() {
return !EMPTY_VERSION.equals( this.jenkinsVersion );
}
- private void getJenkinsVersionFromHeader(HttpResponse response) {
- Header[] headers = response.getHeaders("X-Jenkins");
- if (headers.length == 1) {
- this.jenkinsVersion = headers[0].getValue();
- }
- }
+
private void releaseConnection(HttpRequestBase httpRequestBase) {
httpRequestBase.releaseConnection();
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/ResponseUtils.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/ResponseUtils.java
new file mode 100644
index 00000000..572ff4b6
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/ResponseUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+package com.offbytwo.jenkins.client.util;
+
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+
+/**
+ *
+ * @author Dell Green
+ */
+public final class ResponseUtils {
+
+ /**
+ * Utility Class.
+ */
+ private ResponseUtils() {
+ //do nothing
+ }
+
+
+
+
+ /**
+ * Get Jenkins version from supplied response if any.
+ * @param response the response
+ * @return the version or empty string
+ */
+ public static String getJenkinsVersion(final HttpResponse response) {
+ final Header[] hdrs = response.getHeaders("X-Jenkins");
+ return hdrs.length == 0 ? "" : hdrs[0].getValue();
+ }
+
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/UrlUtils.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/UrlUtils.java
new file mode 100644
index 00000000..6f8b17d9
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/UrlUtils.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+
+package com.offbytwo.jenkins.client.util;
+
+import com.offbytwo.jenkins.model.FolderJob;
+import java.net.URI;
+
+/**
+ * Utility class for manipulating API paths.
+ * @author Dell Green
+ */
+public final class UrlUtils {
+
+ /**
+ * The default size to use for string buffers.
+ */
+ private static final int DEFAULT_BUFFER_SIZE = 64;
+
+ /**
+ * Utility Class.
+ */
+ private UrlUtils() {
+ //do nothing
+ }
+
+
+
+ /**
+ * Helper to create a base url in case a folder is given
+ * @param folder the folder or {@code null}
+ * @return The created base url.
+ */
+ public static String toBaseUrl(final FolderJob folder) {
+ return folder == null ? "/" : folder.getUrl();
+ }
+
+
+
+ /**
+ * Helper to create the base url for a job, with or without a given folder
+ * @param folder the folder or {@code null}
+ * @param jobName the name of the job.
+ * @return converted base url.
+ */
+ public static String toJobBaseUrl(final FolderJob folder, final String jobName) {
+ final StringBuilder sb = new StringBuilder(DEFAULT_BUFFER_SIZE);
+ sb.append(UrlUtils.toBaseUrl(folder));
+ if (sb.charAt(sb.length() - 1) != '/') sb.append('/');
+ sb.append("job/");
+ final String[] jobNameParts = jobName.split("/");
+
+ for (int i = 0; i < jobNameParts.length; i++) {
+ sb.append(EncodingUtils.encode(jobNameParts[i]));
+ if (i != jobNameParts.length - 1) sb.append('/');
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Helper to create the base url for a view, with or without a given folder
+ * @param folder the folder or {@code null}
+ * @param name the of the view.
+ * @return converted view url.
+ */
+ public static String toViewBaseUrl(final FolderJob folder, final String name) {
+ final StringBuilder sb = new StringBuilder(DEFAULT_BUFFER_SIZE);
+ final String base = UrlUtils.toBaseUrl(folder);
+ sb.append(base);
+ if (!base.endsWith("/")) sb.append('/');
+ sb.append("view/")
+ .append(EncodingUtils.encode(name));
+ return sb.toString();
+ }
+
+
+ /**
+ * 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.
+ */
+ public static String toFullJobPath(final String jobName) {
+ final String[] parts = jobName.split("/");
+ if (parts.length == 1) return parts[0];
+ final StringBuilder sb = new StringBuilder(DEFAULT_BUFFER_SIZE);
+
+ for (int i = 0; i < parts.length; i++) {
+ sb.append(parts[i]);
+ if (i != parts.length -1) sb.append("/job/");
+ }
+ return sb.toString();
+ }
+
+
+
+ /**
+ * Join two paths together taking into account leading/trailing slashes.
+ * @param path1 the first path
+ * @param path2 the second path
+ * @return the joins path
+ */
+ public static String join(final String path1, final String path2) {
+ if (path1.isEmpty() && path2.isEmpty()) return "";
+ if (path1.isEmpty() && !path2.isEmpty()) return path2;
+ if (path2.isEmpty() && !path1.isEmpty()) return path1;
+ final StringBuilder sb = new StringBuilder(DEFAULT_BUFFER_SIZE);
+ sb.append(path1);
+ if (sb.charAt(sb.length() - 1) == '/') sb.setLength(sb.length() - 1);
+ if (path2.charAt(0) != '/') sb.append('/');
+ sb.append(path2);
+ return sb.toString();
+ }
+
+
+
+ /**
+ * Create a JSON URI from the supplied parameters.
+ * @param uri the server URI
+ * @param context the server context if any
+ * @param path the specific API path
+ * @return new full URI instance
+ */
+ public static URI toJsonApiUri(final URI uri, final String context, final String path) {
+ String p = path;
+ if (!p.matches("(?i)https?://.*")) p = join(context, p);
+
+ if (!p.contains("?")) {
+ p = join(p, "api/json");
+ } else {
+ final String[] components = p.split("\\?", 2);
+ p = join(components[0], "api/json") + "?" + components[1];
+ }
+ return uri.resolve("/").resolve(p.replace(" ", "%20"));
+ }
+
+
+
+ /**
+ * Create a URI from the supplied parameters.
+ * @param uri the server URI
+ * @param context the server context if any
+ * @param path the specific API path
+ * @return new full URI instance
+ */
+ public static URI toNoApiUri(final URI uri, final String context, final String path) {
+ final String p = path.matches("(?i)https?://.*") ? path : join(context, path);
+ return uri.resolve("/").resolve(p);
+ }
+
+
+
+}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
new file mode 100644
index 00000000..a55e0560
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+package com.offbytwo.jenkins.client;
+
+import java.io.ByteArrayInputStream;
+import java.net.URI;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.protocol.HttpContext;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+
+
+
+/**
+ *
+ * @author Dell Green
+ */
+public class JenkinsHttpClientTest {
+ private static final String URI = "http://localhost/jenkins";
+
+
+
+ @Test
+ public void testGet_String() throws Exception {
+ final CloseableHttpClient client = mock(CloseableHttpClient.class);
+ final CloseableHttpResponse response = mock(CloseableHttpResponse.class);
+ final Header versionHeader = mock(Header.class);
+ final StatusLine statusLine = mock(StatusLine.class);
+ final HttpEntity entity = mock(HttpEntity.class);
+ given(client.execute(any(HttpUriRequest.class), any(HttpContext.class))).willReturn(response);
+ given(response.getHeaders(anyString())).willReturn(new Header[]{versionHeader});
+ given(response.getStatusLine()).willReturn(statusLine);
+ given(versionHeader.getValue()).willReturn("1.234");
+ given(statusLine.getStatusCode()).willReturn(HttpStatus.SC_OK);
+ given(response.getEntity()).willReturn(entity);
+ given(entity.getContent()).willReturn(new ByteArrayInputStream("someJson".getBytes()));
+ final JenkinsHttpClient jclient = new JenkinsHttpClient(new URI(URI), client);
+ final String s = jclient.get("job/someJob");
+ assertEquals("someJson", s);
+ }
+
+
+}
\ No newline at end of file
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/ResponseUtilsTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/ResponseUtilsTest.java
new file mode 100644
index 00000000..57e001ea
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/ResponseUtilsTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+package com.offbytwo.jenkins.client.util;
+
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
+
+
+
+/**
+ *
+ * @author Dell Green
+ */
+public class ResponseUtilsTest {
+
+
+
+ @Test
+ public void testGetJenkinsVersion() {
+ final Header header = mock(Header.class);
+ final HttpResponse response = mock(HttpResponse.class);
+ given(response.getHeaders("X-Jenkins")).willReturn(new Header[]{header});
+ given(header.getValue()).willReturn("1.234");
+ assertEquals("1.234", ResponseUtils.getJenkinsVersion(response));
+ }
+
+
+ @Test
+ public void testGetJenkinsVersion_NoHeader() {
+ final HttpResponse response = mock(HttpResponse.class);
+ given(response.getHeaders("X-Jenkins")).willReturn(new Header[0]);
+ assertEquals("", ResponseUtils.getJenkinsVersion(response));
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testGetJenkinsVersion_NullResponse() {
+ ResponseUtils.getJenkinsVersion(null);
+ }
+
+
+}
\ No newline at end of file
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/UrlUtilsTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/UrlUtilsTest.java
new file mode 100644
index 00000000..780600ba
--- /dev/null
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/util/UrlUtilsTest.java
@@ -0,0 +1,324 @@
+/*
+ * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+package com.offbytwo.jenkins.client.util;
+
+import com.offbytwo.jenkins.model.FolderJob;
+import java.net.URI;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import org.junit.Test;
+
+
+
+/**
+ *
+ * @author Dell Green
+ */
+public class UrlUtilsTest {
+
+
+
+ @Test
+ public void testToBaseUrl_NullFolderJob() {
+ assertEquals("/", UrlUtils.toBaseUrl(null));
+ }
+
+ @Test
+ public void testToBaseUrl_DefaultFolderJob() {
+ assertNull("/", UrlUtils.toBaseUrl(new FolderJob()));
+ }
+
+
+ @Test
+ public void testToBaseUrl() {
+ final String fpath = "http://localhost/jobs/someFolder/";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ assertEquals(fpath, UrlUtils.toBaseUrl(folderJob));
+ }
+
+
+ @Test
+ public void testToJobBaseUrl() {
+ final String fpath = "http://localhost/jobs/someFolder/";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/job/someJob";
+ assertEquals(expected, UrlUtils.toJobBaseUrl(folderJob, "someJob"));
+ }
+
+ @Test
+ public void testToJobBaseUrl_NoTrailingFolderSlash() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/job/someJob";
+ assertEquals(expected, UrlUtils.toJobBaseUrl(folderJob, "someJob"));
+ }
+
+
+ @Test
+ public void testToJobBaseUrl_NullFolderJob() {
+ assertEquals("/job/someJob", UrlUtils.toJobBaseUrl(null, "someJob"));
+ }
+
+
+ @Test
+ public void testToJobBaseUrl_EmptyJobName() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/job/";
+ assertEquals(expected, UrlUtils.toJobBaseUrl(folderJob, ""));
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testToJobBaseUrl_NullJobName() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ UrlUtils.toJobBaseUrl(folderJob, null);
+ }
+
+
+ @Test
+ public void testToViewBaseUrl() {
+ final String fpath = "http://localhost/jobs/someFolder/";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/view/someView";
+ assertEquals(expected, UrlUtils.toViewBaseUrl(folderJob, "someView"));
+ }
+
+ @Test
+ public void testToViewBaseUrl_NoTrailingFolderSlash() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/view/someView";
+ assertEquals(expected, UrlUtils.toViewBaseUrl(folderJob, "someView"));
+ }
+
+
+ @Test
+ public void testToViewBaseUrl_NullFolderJob() {
+ assertEquals("/view/someView", UrlUtils.toViewBaseUrl(null, "someView"));
+ }
+
+
+ @Test
+ public void testToViewBaseUrl_EmptyViewName() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ final String expected = "http://localhost/jobs/someFolder/view/";
+ assertEquals(expected, UrlUtils.toViewBaseUrl(folderJob, ""));
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testToViewBaseUrl_NullViewName() {
+ final String fpath = "http://localhost/jobs/someFolder";
+ final FolderJob folderJob = new FolderJob("someFolder", fpath);
+ UrlUtils.toViewBaseUrl(folderJob, null);
+ }
+
+
+ @Test
+ public void testToFullJobPath_JobNameOnly() {
+ assertEquals("someJob", UrlUtils.toFullJobPath("someJob"));
+ }
+
+
+ @Test
+ public void testToFullJobPath_JobNameWithSingleFolder() {
+ final String expected = "someFolder/job/someJob";
+ assertEquals(expected, UrlUtils.toFullJobPath("someFolder/someJob"));
+ }
+
+ @Test
+ public void testToFullJobPath_JobNameWithMultipleFolders() {
+ final String expected = "someFolder1/job/someFolder2/job/someJob";
+ assertEquals(expected, UrlUtils.toFullJobPath("someFolder1/someFolder2/someJob"));
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testToFullJobPath_NullJobName() {
+ UrlUtils.toFullJobPath(null);
+ }
+
+
+ @Test
+ public void testToFullJobPath_EmptyJobName() {
+ assertEquals("", UrlUtils.toFullJobPath(""));
+ }
+
+
+ @Test
+ public void testJoin_EmptyBothPaths() {
+ assertEquals("", UrlUtils.join("", ""));
+ }
+
+ @Test
+ public void testJoin_SlashesOnly() {
+ assertEquals("/", UrlUtils.join("/", "/"));
+ }
+
+ @Test
+ public void testJoin_EmptyPath2() {
+ assertEquals("1/2/3", UrlUtils.join("1/2/3", ""));
+ }
+
+ @Test
+ public void testJoin_EmptyPath1() {
+ assertEquals("4/5/6", UrlUtils.join("", "4/5/6"));
+ }
+
+ @Test
+ public void testJoin_NoTrailingLeadingSlashes() {
+ assertEquals("1/2/3/4/5/6", UrlUtils.join("1/2/3", "4/5/6"));
+
+ }
+
+ @Test
+ public void testJoin_TrailingLeadingSlashes() {
+ assertEquals("/1/2/3/4/5/6/", UrlUtils.join("/1/2/3/", "/4/5/6/"));
+ }
+
+ @Test
+ public void testJoin_Path1Trailing_Path2NoLeading() {
+ assertEquals("/1/2/3/4/5/6/", UrlUtils.join("/1/2/3/", "4/5/6/"));
+ }
+
+ @Test
+ public void testJoin_Path1NoTrailing_Path2Leading() {
+ assertEquals("/1/2/3/4/5/6/", UrlUtils.join("/1/2/3", "/4/5/6/"));
+ }
+
+
+
+
+
+ @Test(expected = NullPointerException.class)
+ public void testJoin_NullPath1() {
+ UrlUtils.join(null, "4/5/6");
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testJoin_NullPath2() {
+ UrlUtils.join("1/2/3", null);
+ }
+
+
+ @Test
+ public void testToQueryUri_WithoutQuery() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "jenkins", "job/somejob");
+ final String expected = "http://localhost/jenkins/job/somejob/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+ @Test
+ public void testToQueryUri_EmptyContext() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "", "job/somejob");
+ final String expected = "http://localhost/job/somejob/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+ @Test
+ public void testToQueryUri_EmptyPathAndContext() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "", "");
+ final String expected = "http://localhost/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testToQueryUri_NullUri() throws Exception {
+ UrlUtils.toJsonApiUri(null, "jenkins", "job/somejob");
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testToQueryUri_NullPath() throws Exception {
+ UrlUtils.toJsonApiUri(new URI("http://localhost/jenkins"), "jenkins", null);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testToQueryUri_NullContext() throws Exception {
+ UrlUtils.toJsonApiUri(new URI("http://localhost/jenkins"), null, "job/ajob");
+ }
+
+ @Test
+ public void testToQueryUri_EmptyPath() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "jenkins", "");
+ final String expected = "http://localhost/jenkins/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+ @Test
+ public void testToQueryUri_UpperCase() throws Exception {
+ final String suri = "HTTP://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "jenkins", "job/somejob");
+ final String expected = "HTTP://localhost/jenkins/job/somejob/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test
+ public void testToQueryUri_WithQuery() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "jenkins", "job/somejob?pretty=true");
+ final String expected = "http://localhost/jenkins/job/somejob/api/json?pretty=true";
+ assertEquals(expected, uri.toString());
+ }
+
+
+
+ @Test
+ public void testToQueryUri_PathContainsSchemeAndContext() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toJsonApiUri(new URI(suri), "jenkins", "http://localhost/jenkins/job/somejob");
+ final String expected = "http://localhost/jenkins/job/somejob/api/json";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test
+ public void testToNoQueryUri_PathContainsSchemeAndContext() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toNoApiUri(new URI(suri), "jenkins", "http://localhost/jenkins/job/somejob");
+ final String expected = "http://localhost/jenkins/job/somejob";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test
+ public void testToNoQueryUri_UpperCase() throws Exception {
+ final String suri = "HTTP://localhost/jenkins";
+ final URI uri = UrlUtils.toNoApiUri(new URI(suri), "jenkins", "job/somejob");
+ final String expected = "HTTP://localhost/jenkins/job/somejob";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test
+ public void testToNoQueryUri_EmptyPath() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toNoApiUri(new URI(suri), "jenkins", "");
+ final String expected = "http://localhost/jenkins";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test
+ public void testToNoQueryUri_EmptyContext() throws Exception {
+ final String suri = "http://localhost/jenkins";
+ final URI uri = UrlUtils.toNoApiUri(new URI(suri), "", "job/somejob");
+ final String expected = "http://localhost/job/somejob";
+ assertEquals(expected, uri.toString());
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testToNoQueryUri_NullContext() throws Exception {
+ UrlUtils.toNoApiUri(new URI("http://localhost/jenkins"), null, "job/ajob");
+ }
+
+}
\ No newline at end of file
From c4c8c4b89d17b882d68d85b356bf4bda414eb472 Mon Sep 17 00:00:00 2001
From: Dell Green
Date: Wed, 11 Oct 2017 14:43:52 +0100
Subject: [PATCH 135/197] Fixed #298 o Added closeable support to
JenkinsServer and JenkinsHttpClient so as to be able to clean up
resources when instances no longer required.
---
ReleaseNotes.md | 7 ++++++
.../com/offbytwo/jenkins/JenkinsServer.java | 15 ++++++++++-
.../jenkins/client/JenkinsHttpClient.java | 25 ++++++++++++++++++-
.../offbytwo/jenkins/JenkinsServerTest.java | 15 +++++++++++
.../jenkins/client/JenkinsHttpClientTest.java | 10 ++++++++
.../jenkins/integration/JenkinsServerIT.java | 22 ++++++++++++++++
6 files changed, 92 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2d3ad6d6..94243f29 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,13 @@
## Release 0.3.8 (NOT RELEASED YET)
+
+ * [Fixed Issue 298][issue-298]
+
+ Added Closeable support to JenkinsServer and JenkinsHttpClient so that
+ underlying resources can be cleaned up when instances no longer required
+
+
* [JENKINS-46472](https://issues.jenkins-ci.org/browse/JENKINS-46472)
Added ability to modify offline cause for offline computers.
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 0a6f79a4..6f707824 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -43,11 +43,12 @@
import com.offbytwo.jenkins.model.QueueItem;
import com.offbytwo.jenkins.model.QueueReference;
import com.offbytwo.jenkins.model.View;
+import java.io.Closeable;
/**
* The main starting point for interacting with a Jenkins server.
*/
-public class JenkinsServer {
+public class JenkinsServer implements Closeable {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private final JenkinsHttpClient client;
@@ -882,6 +883,18 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName, Bo
+ "/doRename?newName=" + EncodingUtils.encodeParam(newJobName),
crumbFlag);
}
+
+
+
+ /**
+ * Closes underlying resources.
+ * Closed instances should no longer be used
+ * Closing an already closed instance has no side effects
+ */
+ @Override
+ public void close() {
+ client.close();
+ }
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 37414993..ce7428c8 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -49,11 +49,12 @@
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
import com.offbytwo.jenkins.client.util.ResponseUtils;
import com.offbytwo.jenkins.client.util.UrlUtils;
+import java.io.Closeable;
import static org.apache.commons.lang.StringUtils.isNotBlank;
//import com.offbytwo.jenkins.client.util.HttpResponseContentExtractor;
-public class JenkinsHttpClient {
+public class JenkinsHttpClient implements Closeable {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private URI uri;
@@ -498,7 +499,27 @@ public boolean isJenkinsVersionSet() {
return !EMPTY_VERSION.equals( this.jenkinsVersion );
}
+
+
+
+ /**
+ * Closes underlying resources.
+ * Any I/O errors whilst closing are logged with debug log level
+ * Closed instances should no longer be used
+ * Closing an already closed instance has no side effects
+ */
+ @Override
+ public void close() {
+ try {
+ client.close();
+ } catch (final IOException ex) {
+ LOGGER.debug("I/O exception closing client", ex);
+ }
+ }
+
+
+
private void releaseConnection(HttpRequestBase httpRequestBase) {
httpRequestBase.releaseConnection();
}
@@ -524,4 +545,6 @@ protected HttpContext getLocalContext() {
protected void setLocalContext(HttpContext localContext) {
this.localContext = localContext;
}
+
+
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
index 444d6d3b..e9853b30 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
@@ -32,6 +32,7 @@
import com.offbytwo.jenkins.model.JobWithDetails;
import com.offbytwo.jenkins.model.MainView;
import com.offbytwo.jenkins.model.View;
+import java.net.URI;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -328,6 +329,20 @@ public void getVersionShouldNotFailWithNPE()
}
+
+ @Test(expected=IllegalStateException.class)
+ public void testClose() throws Exception {
+ final String uri = "http://localhost/jenkins";
+ JenkinsServer srv = new JenkinsServer(new URI(uri));
+ srv.close();
+ srv.close(); //check multiple calls yield no errors
+ srv.getComputers();
+ }
+
+
+
+
+
private void shouldGetFolderJobs(String... jobNames) throws IOException {
// given
String path = "http://localhost/jobs/someFolder/";
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
index a55e0560..b4a121d6 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
@@ -51,6 +51,16 @@ public void testGet_String() throws Exception {
final String s = jclient.get("job/someJob");
assertEquals("someJson", s);
}
+
+
+
+ @Test(expected=IllegalStateException.class)
+ public void testClose() throws Exception {
+ final JenkinsHttpClient jclient = new JenkinsHttpClient(new URI(URI));
+ jclient.close();
+ jclient.close(); //check multiple calls yield no errors
+ jclient.get("job/someJob");
+ }
}
\ No newline at end of file
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
index 59100302..d7f19a10 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/integration/JenkinsServerIT.java
@@ -183,4 +183,26 @@ public void testUpdateJob() throws Exception {
String confirmXml = server.getJobXml(JENKINS_TEST_JOB);
assertTrue(confirmXml.contains(description));
}
+
+
+ @Test(expected=IllegalStateException.class)
+ public void testClose_ReuseAfterClosed() throws Exception {
+ final FreeStyleProject proj = jenkinsRule.getInstance().createProject(
+ FreeStyleProject.class, JENKINS_TEST_JOB);
+ final Map jobs = server.getJobs();
+ assertNotNull(jobs.get(proj.getName()));
+ server.close();
+ server.getJobs();
+ }
+
+
+ @Test
+ public void testClose_CloseMultipleTimes() throws Exception {
+ final FreeStyleProject proj = jenkinsRule.getInstance().createProject(
+ FreeStyleProject.class, JENKINS_TEST_JOB);
+ final Map jobs = server.getJobs();
+ assertNotNull(jobs.get(proj.getName()));
+ server.close();
+ server.close();
+ }
}
From bf35f47d46474e4444121c96c6c50fc8ee08a505 Mon Sep 17 00:00:00 2001
From: Dell Green
Date: Fri, 13 Oct 2017 11:39:37 +0100
Subject: [PATCH 136/197] Fixed #301 o Decoupled JenkinsServer and
JenkinsHttpClient by extracting JenkinsHttpClient public methods into
public interface
---
ReleaseNotes.md | 7 +
.../com/offbytwo/jenkins/JenkinsServer.java | 8 +-
.../jenkins/client/JenkinsHttpClient.java | 228 +++++++-----------
.../jenkins/client/JenkinsHttpConnection.java | 214 ++++++++++++++++
.../com/offbytwo/jenkins/model/BaseModel.java | 26 +-
.../offbytwo/jenkins/JenkinsServerTest.java | 3 +-
.../jenkins/client/JenkinsHttpClientTest.java | 4 +-
.../jenkins/model/BuildWithDetailsTest.java | 3 +-
8 files changed, 344 insertions(+), 149 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpConnection.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 94243f29..4be5026d 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -3,6 +3,13 @@
## Release 0.3.8 (NOT RELEASED YET)
+ * [Fixed Issue 301][issue-301]
+
+ Decoupled JenkinsServer and JenkinsHttpClient by extracting JenkinsHttpClient
+ methods into public interface so that different implementations can be plugged
+ into JenkinsServer if required
+
+
* [Fixed Issue 298][issue-298]
Added Closeable support to JenkinsServer and JenkinsHttpClient so that
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 6f707824..87f5a0b0 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -25,6 +25,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
+import com.offbytwo.jenkins.client.JenkinsHttpConnection;
import com.offbytwo.jenkins.client.util.EncodingUtils;
import com.offbytwo.jenkins.client.util.UrlUtils;
import com.offbytwo.jenkins.helper.JenkinsVersion;
@@ -51,7 +52,10 @@
public class JenkinsServer implements Closeable {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
- private final JenkinsHttpClient client;
+ /**
+ * The transport client instance to use.
+ */
+ private final JenkinsHttpConnection client;
/**
* Create a new Jenkins server reference given only the server address
@@ -80,7 +84,7 @@ public JenkinsServer(URI serverUri, String username, String passwordOrToken) {
*
* @param client Specialized client to use.
*/
- public JenkinsServer(JenkinsHttpClient client) {
+ public JenkinsServer(final JenkinsHttpConnection client) {
this.client = client;
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index ce7428c8..31c64141 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -3,7 +3,6 @@
*
* Distributed under the MIT license: http://opensource.org/licenses/MIT
*/
-
package com.offbytwo.jenkins.client;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -49,12 +48,10 @@
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
import com.offbytwo.jenkins.client.util.ResponseUtils;
import com.offbytwo.jenkins.client.util.UrlUtils;
-import java.io.Closeable;
import static org.apache.commons.lang.StringUtils.isNotBlank;
-//import com.offbytwo.jenkins.client.util.HttpResponseContentExtractor;
+public class JenkinsHttpClient implements JenkinsHttpConnection {
-public class JenkinsHttpClient implements Closeable {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private URI uri;
@@ -69,7 +66,7 @@ public class JenkinsHttpClient implements Closeable {
private String jenkinsVersion;
public final static String EMPTY_VERSION = "UNKNOWN";
-
+
/**
* Create an unauthenticated Jenkins HTTP client
*
@@ -137,14 +134,9 @@ public JenkinsHttpClient(URI uri, HttpClientBuilder builder, String username, St
}
/**
- * Perform a GET request and parse the response to the given class
- *
- * @param path path to request, can be relative or absolute
- * @param cls class of the response
- * @param type of the response
- * @return an instance of the supplied class
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public T get(String path, Class cls) throws IOException {
HttpGet getMethod = new HttpGet(UrlUtils.toJsonApiUri(uri, context, path));
@@ -160,13 +152,9 @@ public T get(String path, Class cls) throws IOException
}
/**
- * Perform a GET request and parse the response and return a simple string
- * of the content
- *
- * @param path path to request, can be relative or absolute
- * @return the entity text
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public String get(String path) throws IOException {
HttpGet getMethod = new HttpGet(UrlUtils.toJsonApiUri(uri, context, path));
HttpResponse response = client.execute(getMethod, localContext);
@@ -184,14 +172,9 @@ public String get(String path) throws IOException {
}
/**
- * Perform a GET request and parse the response to the given class, logging
- * any IOException that is thrown rather than propagating it.
- *
- * @param path path to request, can be relative or absolute
- * @param cls class of the response
- * @param type of the response
- * @return an instance of the supplied class
+ * {@inheritDoc}
*/
+ @Override
public T getQuietly(String path, Class cls) {
T value;
try {
@@ -205,12 +188,9 @@ public T getQuietly(String path, Class cls) {
}
/**
- * Perform a GET request and return the response as InputStream
- *
- * @param path path to request, can be relative or absolute
- * @return the response stream
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public InputStream getFile(URI path) throws IOException {
HttpGet getMethod = new HttpGet(path);
HttpResponse response = client.execute(getMethod, localContext);
@@ -219,22 +199,18 @@ public InputStream getFile(URI path) throws IOException {
return new RequestReleasingInputStream(response.getEntity().getContent(), getMethod);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public R post(String path, D data, Class cls) throws IOException {
return post(path, data, cls, true);
}
/**
- * Perform a POST request and parse the response to the given class
- *
- * @param path path to request, can be relative or absolute
- * @param data data to post
- * @param cls class of the response
- * @param type of the response
- * @param type of the data
- * @param crumbFlag true / false.
- * @return an instance of the supplied class
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public R post(String path, D data, Class cls, boolean crumbFlag) throws IOException {
HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
if (crumbFlag == true) {
@@ -275,23 +251,9 @@ public R post(String path, D data, Class cls, boolea
}
/**
- * Perform a POST request using form url encoding.
- *
- * This method was added for the purposes of creating folders, but may be
- useful for other API calls as well.
-
- Unlike post and post_xml, the path is *not* modified by adding
- "/toJsonApiUri/json". Additionally, the params in data are provided as both
- request parameters including a json parameter, *and* in the
- JSON-formatted StringEntity, because this is what the folder creation
- call required. It is unclear if any other jenkins APIs operate in this
- fashion.
- *
- * @param path path to request, can be relative or absolute
- * @param data data to post
- * @param crumbFlag true / false.
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public void post_form(String path, Map data, boolean crumbFlag) throws IOException {
HttpPost request;
if (data != null) {
@@ -329,18 +291,10 @@ public void post_form(String path, Map data, boolean crumbFlag)
}
}
-
/**
- * Perform a POST request using form url encoding and return HttpResponse object
- * This method is not performing validation and can be used for more generic queries to jenkins.
- *
- * @param path
- * path to request, can be relative or absolute
- * @param data
- * data to post
- * @throws IOException,
- * HttpResponseException
+ * {@inheritDoc}
*/
+ @Override
public HttpResponse post_form_with_result(String path, List data, boolean crumbFlag) throws IOException {
HttpPost request;
if (data != null) {
@@ -363,18 +317,17 @@ public HttpResponse post_form_with_result(String path, List data,
}
/**
- * Perform a POST request of XML (instead of using json mapper) and return a
- * string rendering of the response entity.
- *
- * @param path path to request, can be relative or absolute
- * @param xml_data data data to post
- * @return A string containing the xml response (if present)
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public String post_xml(String path, String xml_data) throws IOException {
return post_xml(path, xml_data, true);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public String post_xml(String path, String xml_data, boolean crumbFlag) throws IOException {
HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
if (crumbFlag == true) {
@@ -399,28 +352,17 @@ public String post_xml(String path, String xml_data, boolean crumbFlag) throws I
}
/**
- * Post a text entity to the given URL using the default content type
- *
- * @param path The path.
- * @param textData data.
- * @param crumbFlag true/false.
- * @return resulting response
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public String post_text(String path, String textData, boolean crumbFlag) throws IOException {
return post_text(path, textData, ContentType.DEFAULT_TEXT, crumbFlag);
}
/**
- * Post a text entity to the given URL with the given content type
- *
- * @param path The path.
- * @param textData The data.
- * @param contentType {@link ContentType}
- * @param crumbFlag true or false.
- * @return resulting response
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public String post_text(String path, String textData, ContentType contentType, boolean crumbFlag)
throws IOException {
HttpPost request = new HttpPost(UrlUtils.toJsonApiUri(uri, context, path));
@@ -446,67 +388,41 @@ public String post_text(String path, String textData, ContentType contentType, b
}
/**
- * Perform POST request that takes no parameters and returns no response
- *
- * @param path path to request
- * @throws IOException in case of an error.
+ * {@inheritDoc}
*/
+ @Override
public void post(String path) throws IOException {
post(path, null, null, false);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void post(String path, boolean crumbFlag) throws IOException {
post(path, null, null, crumbFlag);
}
-
-
-
-
-
-
- private T objectFromResponse(Class cls, HttpResponse response) throws IOException {
- InputStream content = response.getEntity().getContent();
- byte[] bytes = ByteStreams.toByteArray(content);
- T result = mapper.readValue(bytes, cls);
- // TODO: original:
- // T result = mapper.readValue(content, cls);
- result.setClient(this);
- return result;
- }
-
- private ObjectMapper getDefaultMapper() {
- ObjectMapper mapper = new ObjectMapper();
- mapper.disable(FAIL_ON_UNKNOWN_PROPERTIES);
- return mapper;
- }
-
/**
- * @return the version string.
+ * {@inheritDoc}
*/
+ @Override
public String getJenkinsVersion() {
return this.jenkinsVersion;
}
/**
- * Check to see if the jenkins version has been set
- * to something different than the initialization value
- * from the constructor. This means there has never been made
- * a communication with the Jenkins server.
- * @return true if jenkinsVersion has been set by communication, false otherwise.
+ * {@inheritDoc}
*/
+ @Override
public boolean isJenkinsVersionSet() {
- return !EMPTY_VERSION.equals( this.jenkinsVersion );
+ return !EMPTY_VERSION.equals(this.jenkinsVersion);
}
-
-
-
-
+
/**
- * Closes underlying resources.
- * Any I/O errors whilst closing are logged with debug log level
- * Closed instances should no longer be used
- * Closing an already closed instance has no side effects
+ * Closes underlying resources. Any I/O errors whilst closing are logged
+ * with debug log level Closed instances should no longer be used Closing an
+ * already closed instance has no side effects
*/
@Override
public void close() {
@@ -514,17 +430,20 @@ public void close() {
client.close();
} catch (final IOException ex) {
LOGGER.debug("I/O exception closing client", ex);
- }
+ }
}
-
-
- private void releaseConnection(HttpRequestBase httpRequestBase) {
- httpRequestBase.releaseConnection();
- }
-
- protected static HttpClientBuilder addAuthentication(HttpClientBuilder builder, URI uri, String username,
+ /**
+ * Add authentication to supplied builder.
+ * @param builder the builder to configure
+ * @param uri the server URI
+ * @param username the username
+ * @param password the password
+ * @return the passed in builder
+ */
+ protected static HttpClientBuilder addAuthentication(final HttpClientBuilder builder,
+ final URI uri, final String username,
String password) {
if (isNotBlank(username)) {
CredentialsProvider provider = new BasicCredentialsProvider();
@@ -538,13 +457,46 @@ protected static HttpClientBuilder addAuthentication(HttpClientBuilder builder,
return builder;
}
+
+ /**
+ * Get the local context.
+ * @return context
+ */
protected HttpContext getLocalContext() {
return localContext;
}
- protected void setLocalContext(HttpContext localContext) {
+
+ /**
+ * Set the local context.
+ * @param localContext the context
+ */
+ protected void setLocalContext(final HttpContext localContext) {
this.localContext = localContext;
}
+
+
+
+ private T objectFromResponse(Class cls, HttpResponse response) throws IOException {
+ InputStream content = response.getEntity().getContent();
+ byte[] bytes = ByteStreams.toByteArray(content);
+ T result = mapper.readValue(bytes, cls);
+ // TODO: original:
+ // T result = mapper.readValue(content, cls);
+ result.setClient(this);
+ return result;
+ }
+
+ private ObjectMapper getDefaultMapper() {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.disable(FAIL_ON_UNKNOWN_PROPERTIES);
+ return mapper;
+ }
+
+ private void releaseConnection(HttpRequestBase httpRequestBase) {
+ httpRequestBase.releaseConnection();
+ }
+
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpConnection.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpConnection.java
new file mode 100644
index 00000000..5e1997fa
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpConnection.java
@@ -0,0 +1,214 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.offbytwo.jenkins.client;
+
+import com.offbytwo.jenkins.model.BaseModel;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.entity.ContentType;
+
+/**
+ *
+ * @author Dell Green
+ */
+public interface JenkinsHttpConnection extends Closeable {
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void close();
+
+
+ /**
+ * Perform a GET request and parse the response to the given class
+ *
+ * @param path path to request, can be relative or absolute
+ * @param cls class of the response
+ * @param type of the response
+ * @return an instance of the supplied class
+ * @throws IOException in case of an error.
+ */
+ T get(String path, Class cls) throws IOException;
+
+ /**
+ * Perform a GET request and parse the response and return a simple string
+ * of the content
+ *
+ * @param path path to request, can be relative or absolute
+ * @return the entity text
+ * @throws IOException in case of an error.
+ */
+ String get(String path) throws IOException;
+
+ /**
+ * Perform a GET request and return the response as InputStream
+ *
+ * @param path path to request, can be relative or absolute
+ * @return the response stream
+ * @throws IOException in case of an error.
+ */
+ InputStream getFile(URI path) throws IOException;
+
+ /**
+ * Perform a GET request and parse the response to the given class, logging
+ * any IOException that is thrown rather than propagating it.
+ *
+ * @param path path to request, can be relative or absolute
+ * @param cls class of the response
+ * @param type of the response
+ * @return an instance of the supplied class
+ */
+ T getQuietly(String path, Class cls);
+
+ /**
+ * Check to see if the Jenkins version has been set to something different
+ * than the initialisation value from the constructor. This means there has
+ * never been made a communication with the Jenkins server.
+ * @return true if jenkinsVersion has been set by communication, false
+ * otherwise.
+ */
+ boolean isJenkinsVersionSet();
+
+
+ /**
+ * Perform a POST request and parse the response to the given class
+ *
+ * @param path path to request, can be relative or absolute
+ * @param data data to post
+ * @param cls class of the response
+ * @param type of the response
+ * @param type of the data
+ * @return an instance of the supplied class
+ * @throws IOException in case of an error.
+ */
+ R post(String path, D data, Class cls) throws IOException;
+
+ /**
+ * Perform a POST request and parse the response to the given class
+ *
+ * @param path path to request, can be relative or absolute
+ * @param data data to post
+ * @param cls class of the response
+ * @param type of the response
+ * @param type of the data
+ * @param crumbFlag true / false.
+ * @return an instance of the supplied class
+ * @throws IOException in case of an error.
+ */
+ R post(String path, D data, Class cls, boolean crumbFlag) throws IOException;
+
+ /**
+ * Perform POST request that takes no parameters and returns no response
+ *
+ * @param path path to request
+ * @throws IOException in case of an error.
+ */
+ void post(String path) throws IOException;
+
+
+ /**
+ * Perform POST request that takes no parameters and returns no response
+ *
+ * @param path path to request
+ * @param crumbFlag true / false.
+ * @throws IOException in case of an error.
+ */
+ void post(String path, boolean crumbFlag) throws IOException;
+
+ /**
+ * Perform a POST request using form url encoding.
+ *
+ * This method was added for the purposes of creating folders, but may be
+ * useful for other API calls as well. Unlike post and post_xml, the path is
+ * *not* modified by adding "/toJsonApiUri/json". Additionally, the params
+ * in data are provided as both request parameters including a json
+ * parameter, *and* in the JSON-formatted StringEntity, because this is what
+ * the folder creation call required. It is unclear if any other jenkins
+ * APIs operate in this fashion.
+ *
+ * @param path path to request, can be relative or absolute
+ * @param data data to post
+ * @param crumbFlag true / false.
+ * @throws IOException in case of an error.
+ */
+ void post_form(String path, Map data, boolean crumbFlag) throws IOException;
+
+ /**
+ * Perform a POST request using form url encoding and return HttpResponse
+ * object This method is not performing validation and can be used for more
+ * generic queries to jenkins.
+ *
+ * @param path path to request, can be relative or absolute
+ * @param data data to post
+ * @param crumbFlag true / false.
+ * @return resulting response
+ * @throws IOException, HttpResponseException
+ */
+ HttpResponse post_form_with_result(String path, List data, boolean crumbFlag) throws IOException;
+
+ /**
+ * Post a text entity to the given URL using the default content type
+ *
+ * @param path The path.
+ * @param textData data.
+ * @param crumbFlag true/false.
+ * @return resulting response
+ * @throws IOException in case of an error.
+ */
+ String post_text(String path, String textData, boolean crumbFlag) throws IOException;
+
+ /**
+ * Post a text entity to the given URL with the given content type
+ *
+ * @param path The path.
+ * @param textData The data.
+ * @param contentType {@link ContentType}
+ * @param crumbFlag true or false.
+ * @return resulting response
+ * @throws IOException in case of an error.
+ */
+ String post_text(String path, String textData, ContentType contentType, boolean crumbFlag) throws IOException;
+
+ /**
+ * Perform a POST request of XML (instead of using json mapper) and return a
+ * string rendering of the response entity.
+ *
+ * @param path path to request, can be relative or absolute
+ * @param xml_data data data to post
+ * @return A string containing the xml response (if present)
+ * @throws IOException in case of an error.
+ */
+ String post_xml(String path, String xml_data) throws IOException;
+
+ /**
+ * Perform a POST request of XML (instead of using json mapper) and return a
+ * string rendering of the response entity.
+ *
+ * @param path path to request, can be relative or absolute
+ * @param xml_data data data to post
+ * @param crumbFlag true or false.
+ * @return A string containing the xml response (if present)
+ * @throws IOException in case of an error.
+ */
+ String post_xml(String path, String xml_data, boolean crumbFlag) throws IOException;
+
+ /**
+ * Get the Jenkins server version.
+ *
+ * @return the version string
+ */
+ String getJenkinsVersion();
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
index dd473ee8..90d7f793 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
@@ -6,28 +6,44 @@
package com.offbytwo.jenkins.model;
-import com.offbytwo.jenkins.client.JenkinsHttpClient;
+import com.offbytwo.jenkins.client.JenkinsHttpConnection;
/**
* The base model.
- *
*/
public class BaseModel {
+ /**
+ * The class.
+ */
private String _class;
+
+ /**
+ * Get the class.
+ * @return class
+ */
public String get_class() {
return _class;
}
//TODO: We should make this private
- protected JenkinsHttpClient client;
+ protected JenkinsHttpConnection client;
- public JenkinsHttpClient getClient() {
+
+ /**
+ * Get the HTTP client.
+ * @return client
+ */
+ public JenkinsHttpConnection getClient() {
return client;
}
- public void setClient(JenkinsHttpClient client) {
+ /**
+ * Set the HTTP client.
+ * @param client
+ */
+ public void setClient(final JenkinsHttpConnection client) {
this.client = client;
}
}
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
index e9853b30..9e9d50aa 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/JenkinsServerTest.java
@@ -27,6 +27,7 @@
import com.google.common.base.Optional;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
+import com.offbytwo.jenkins.client.JenkinsHttpConnection;
import com.offbytwo.jenkins.model.FolderJob;
import com.offbytwo.jenkins.model.Job;
import com.offbytwo.jenkins.model.JobWithDetails;
@@ -41,7 +42,7 @@
public class JenkinsServerTest extends BaseUnitTest {
- private JenkinsHttpClient client = mock(JenkinsHttpClient.class);
+ private JenkinsHttpConnection client = mock(JenkinsHttpClient.class);
private JenkinsServer server = new JenkinsServer(client);
private MainView mainView = new MainView(new Job("Hello", "http://localhost/job/Hello/"));
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
index b4a121d6..80f3ba38 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/client/JenkinsHttpClientTest.java
@@ -47,7 +47,7 @@ public void testGet_String() throws Exception {
given(statusLine.getStatusCode()).willReturn(HttpStatus.SC_OK);
given(response.getEntity()).willReturn(entity);
given(entity.getContent()).willReturn(new ByteArrayInputStream("someJson".getBytes()));
- final JenkinsHttpClient jclient = new JenkinsHttpClient(new URI(URI), client);
+ final JenkinsHttpConnection jclient = new JenkinsHttpClient(new URI(URI), client);
final String s = jclient.get("job/someJob");
assertEquals("someJson", s);
}
@@ -56,7 +56,7 @@ public void testGet_String() throws Exception {
@Test(expected=IllegalStateException.class)
public void testClose() throws Exception {
- final JenkinsHttpClient jclient = new JenkinsHttpClient(new URI(URI));
+ final JenkinsHttpConnection jclient = new JenkinsHttpClient(new URI(URI));
jclient.close();
jclient.close(); //check multiple calls yield no errors
jclient.get("job/someJob");
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
index af25f266..83ddd07b 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/model/BuildWithDetailsTest.java
@@ -2,6 +2,7 @@
import com.offbytwo.jenkins.BaseUnitTest;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
+import com.offbytwo.jenkins.client.JenkinsHttpConnection;
import com.offbytwo.jenkins.helper.BuildConsoleStreamListener;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
@@ -24,7 +25,7 @@
*/
public class BuildWithDetailsTest extends BaseUnitTest {
- private JenkinsHttpClient client;
+ private JenkinsHttpConnection client;
private BuildWithDetails buildWithDetails;
@Before
From f9ed73c2427cc16dd0dddfc93771f506a8b408fc Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 2 Dec 2017 10:56:59 +0100
Subject: [PATCH 137/197] Upgraded Test NG from 6.8.21 to 6.13 Upgraded
maven-compiler-plugin from 3.6.0 to 3.7.1
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index cb1291fb..03648a1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -158,7 +158,7 @@
org.testng
testng
- 6.8.21
+ 6.13
test
@@ -277,7 +277,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.6.0
+ 3.7.0
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+
+
+ javadoc-no-fork
+ aggregate-no-fork
+
+
+
+
From 95a33d4f4b0a4cce452900a8da8b4cd63607a599 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 21:13:36 +0200
Subject: [PATCH 168/197] Fixed #400 - Upgrade assertj-core to 3.12.2
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 0bec88bc..d43129bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -198,7 +198,7 @@
org.assertj
assertj-core
- 3.11.1
+ 3.12.2
test
From 62730cb90e972ba8033adc4cecc69a953239d7e7 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 21:25:45 +0200
Subject: [PATCH 169/197] Upgrade ReleaseNotes.
---
ReleaseNotes.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 0a59bcdc..e2416641 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,10 @@
## Release 0.3.9 (NOT RELEASED YET)
+ * [Fixed Issue 400][issue-400]
+
+ Upgrade assertj-core.
+
* [Fixed Issue 399][issue-399]
Upgrade Maven Plugins
@@ -1095,6 +1099,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-394]: https://github.com/jenkinsci/java-client-api/issues/394
[issue-396]: https://github.com/jenkinsci/java-client-api/issues/396
[issue-399]: https://github.com/jenkinsci/java-client-api/issues/399
+[issue-400]: https://github.com/jenkinsci/java-client-api/issues/400
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
From 3251301a917be0ee56dfa2e34020b01abb5e0ef4 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 22:06:30 +0200
Subject: [PATCH 170/197] Fixed #401 - Upgrade JUnit to 4.12
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d43129bd..dacee82e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
1.644
- 4.11
+ 4.12
1.9.5
2.4
1.4.7-jenkins-1
From c033dff4a4af03e51019dd18169d0b538049c6a8 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 22:15:18 +0200
Subject: [PATCH 171/197] Updated ReleaseNotes.
---
ReleaseNotes.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index e2416641..38cd3a83 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,10 @@
## Release 0.3.9 (NOT RELEASED YET)
+ * [Fixed Issue 401][issue-401]
+
+ Upgrade JUnit
+
* [Fixed Issue 400][issue-400]
Upgrade assertj-core.
@@ -1100,6 +1104,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-396]: https://github.com/jenkinsci/java-client-api/issues/396
[issue-399]: https://github.com/jenkinsci/java-client-api/issues/399
[issue-400]: https://github.com/jenkinsci/java-client-api/issues/400
+[issue-401]: https://github.com/jenkinsci/java-client-api/issues/401
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
From 7a05defea155eee23c7f5dc77300394860b60a68 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 22:18:19 +0200
Subject: [PATCH 172/197] Fixed #402 - Upgrade httpclient/httpcore/httpmime to
4.5.8
---
ReleaseNotes.md | 5 +++++
pom.xml | 6 +++---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 38cd3a83..45b054d4 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,10 @@
## Release 0.3.9 (NOT RELEASED YET)
+ * [Fixed Issue 402][issue-402]
+
+ Upgrade httpclient/httpmine/httpcore.
+
* [Fixed Issue 401][issue-401]
Upgrade JUnit
@@ -1105,6 +1109,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-399]: https://github.com/jenkinsci/java-client-api/issues/399
[issue-400]: https://github.com/jenkinsci/java-client-api/issues/400
[issue-401]: https://github.com/jenkinsci/java-client-api/issues/401
+[issue-402]: https://github.com/jenkinsci/java-client-api/issues/402
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/pom.xml b/pom.xml
index dacee82e..51db9575 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,9 +60,9 @@
3.8.1
17.0
2.4
- 4.3.6
- 4.3.3
- 4.3.6
+ 4.5.8
+ 4.4.11
+ 4.5.8
2.9.6
From caf969c801f000d611bd5bc7e318bf71facf9416 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Fri, 5 Apr 2019 18:23:52 +0200
Subject: [PATCH 173/197] Fixed link issues in ReleaseNotes.
---
ReleaseNotes.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 45b054d4..66f5364e 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1106,6 +1106,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-301]: https://github.com/jenkinsci/java-client-api/issues/301
[issue-394]: https://github.com/jenkinsci/java-client-api/issues/394
[issue-396]: https://github.com/jenkinsci/java-client-api/issues/396
+[issue-397]: https://github.com/jenkinsci/java-client-api/issues/397
[issue-399]: https://github.com/jenkinsci/java-client-api/issues/399
[issue-400]: https://github.com/jenkinsci/java-client-api/issues/400
[issue-401]: https://github.com/jenkinsci/java-client-api/issues/401
@@ -1127,5 +1128,5 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[jissue-38787]: https://issues.jenkins-ci.org/browse/JENKINS-38787
[jissue-38816]: https://issues.jenkins-ci.org/browse/JENKINS-38816
[jissue-38823]: https://issues.jenkins-ci.org/browse/JENKINS-38823
-[jissue-46445]: https://issues.jenkins-ci.org/browse/JENKINS-46445)
-[jissue-46472]: https://issues.jenkins-ci.org/browse/JENKINS-46472)
+[jissue-46445]: https://issues.jenkins-ci.org/browse/JENKINS-46445
+[jissue-46472]: https://issues.jenkins-ci.org/browse/JENKINS-46472
From f164cf7f6c865a01e3cc3d1a2fe09ffbf9a4b7a5 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 6 Apr 2019 15:08:32 +0200
Subject: [PATCH 174/197] Cleaned up ReleaseNotes.
---
ReleaseNotes.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 66f5364e..f54d4788 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -34,8 +34,6 @@
Add the crumbFlag as the 2nd parameter of getConsoleOutputText method
-https://github.com/jenkinsci/java-client-api/pull/386
-
## Release 0.3.8
* [Fixed Issue 289][issue-289]
From 23e120ec112c4c696bea144c63b2f56d5a4e3543 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 7 Apr 2019 12:51:06 +0200
Subject: [PATCH 175/197] Fixed #405 - Update jackson-databind to 2.9.8
---
ReleaseNotes.md | 11 +++++++++++
pom.xml | 2 +-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index f54d4788..c142e628 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,16 @@
## Release 0.3.9 (NOT RELEASED YET)
+ * [Fixed Issue 405][issue-405]
+
+ * CVE-2018-14718
+ * CVE-2018-14719
+ * CVE-2018-14720
+ * CVE-2018-14721
+ * CVE-2018-19360
+ * CVE-2018-19361
+ * CVE-2018-19362
+
* [Fixed Issue 402][issue-402]
Upgrade httpclient/httpmine/httpcore.
@@ -1109,6 +1119,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-400]: https://github.com/jenkinsci/java-client-api/issues/400
[issue-401]: https://github.com/jenkinsci/java-client-api/issues/401
[issue-402]: https://github.com/jenkinsci/java-client-api/issues/402
+[issue-405]: https://github.com/jenkinsci/java-client-api/issues/405
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/pom.xml b/pom.xml
index 51db9575..481dedff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
4.5.8
4.4.11
4.5.8
- 2.9.6
+ 2.9.8
From 315bb4fb7cad93a970b64c8d24186a1d6b02429a Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 2 Apr 2019 22:39:24 +0200
Subject: [PATCH 176/197] Fixed #395 - Remove google guava lib - Replaced many
things with base JDK8 constructs. - In JDK9 we can improve some more parts.
- We do not generat shaded artifact 'stash' anymore. - Upgrade version
number based on the change.
---
ReleaseNotes.md | 13 ++-
jenkins-client-it-docker/pom.xml | 7 +-
.../NoExecutorStartedGetJobIT.java | 3 +-
.../NoExecutorStartedGetJobXmlIT.java | 4 +-
jenkins-client/pom.xml | 35 +------
.../com/offbytwo/jenkins/JenkinsServer.java | 70 ++++++-------
.../jenkins/client/JenkinsHttpClient.java | 8 +-
.../jenkins/client/util/EncodingUtils.java | 32 +++++-
.../jenkins/helper/FunctionalHelper.java | 22 +++++
.../jenkins/model/BuildWithDetails.java | 97 ++++++++-----------
.../offbytwo/jenkins/model/ComputerSet.java | 15 +--
.../jenkins/model/ComputerWithDetails.java | 12 +--
.../com/offbytwo/jenkins/model/FolderJob.java | 45 +++++----
.../java/com/offbytwo/jenkins/model/Job.java | 9 +-
.../jenkins/model/JobWithDetails.java | 92 +++++++-----------
.../com/offbytwo/jenkins/model/MainView.java | 7 +-
.../jenkins/model/MavenJobWithDetails.java | 85 +++++++---------
.../java/com/offbytwo/jenkins/FirstTest.java | 56 +++++++++++
.../offbytwo/jenkins/JenkinsServerTest.java | 2 +-
.../client/util/EncodingUtilsTest.java | 14 ++-
.../jenkins/integration/FolderTestsIT.java | 4 +-
.../jenkins/integration/JenkinsServerIT.java | 2 +-
pom.xml | 9 +-
23 files changed, 331 insertions(+), 312 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/helper/FunctionalHelper.java
create mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/FirstTest.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index c142e628..7003cd77 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,6 +1,16 @@
# Release Notes
-## Release 0.3.9 (NOT RELEASED YET)
+## Release 0.4.0 (NOT RELEASED YET)
+
+ * [Fixed Issue 395][issue-395]
+
+ * Remove google guava lib
+ * Removed also the creation of the shaded artifact `stash`
+ cause we do not rely on Guava anymore. So you
+ can use the original artifact directly.
+ * This results in a bumping of the version
+ number cause it a change which is breaking
+ with previous version 0.3.8.
* [Fixed Issue 405][issue-405]
@@ -1113,6 +1123,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-298]: https://github.com/jenkinsci/java-client-api/issues/298
[issue-301]: https://github.com/jenkinsci/java-client-api/issues/301
[issue-394]: https://github.com/jenkinsci/java-client-api/issues/394
+[issue-395]: https://github.com/jenkinsci/java-client-api/issues/395
[issue-396]: https://github.com/jenkinsci/java-client-api/issues/396
[issue-397]: https://github.com/jenkinsci/java-client-api/issues/397
[issue-399]: https://github.com/jenkinsci/java-client-api/issues/399
diff --git a/jenkins-client-it-docker/pom.xml b/jenkins-client-it-docker/pom.xml
index 8f4c7ac7..11e6b485 100644
--- a/jenkins-client-it-docker/pom.xml
+++ b/jenkins-client-it-docker/pom.xml
@@ -11,7 +11,7 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.9-SNAPSHOT
+ 0.4.0-SNAPSHOT
jenkins-client-it-docker
@@ -43,11 +43,6 @@
assertj-core
test
-
- com.google.guava
- guava
- test
-
org.apache.httpcomponents
httpclient
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
index 279bb40a..35c2aeac 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobIT.java
@@ -7,7 +7,6 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.base.Joiner;
import com.offbytwo.jenkins.model.Build;
import com.offbytwo.jenkins.model.BuildResult;
import com.offbytwo.jenkins.model.BuildWithDetails;
@@ -50,7 +49,7 @@ private void checkJob(BuildWithDetails details) throws IOException {
"Building in workspace /var/jenkins_home/jobs/test/workspace",
"[workspace] $ /bin/sh -xe /tmp/hudson2556403647634111927.sh", "+ echo test", "test",
"Finished: SUCCESS", "" };
- String expectedOutput = Joiner.on("\r\n").join(expectedOutputLines);
+ String expectedOutput = String.join("\r\n", expectedOutputLines);
// Hint: It looks like the consoleOutputText contains CR+LF
String resultingOutput = details.getConsoleOutputText();
assertThat(resultingOutput).isEqualTo(expectedOutput);
diff --git a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
index 451e7585..38a3507a 100644
--- a/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
+++ b/jenkins-client-it-docker/src/test/java/com/offbytwo/jenkins/integration/NoExecutorStartedGetJobXmlIT.java
@@ -7,8 +7,6 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.base.Joiner;
-
@Test(groups = { Groups.NO_EXECUTOR_GROUP })
public class NoExecutorStartedGetJobXmlIT extends AbstractJenkinsIntegrationCase {
@@ -47,7 +45,7 @@ public void beforeMethod() throws IOException {
@Test
public void getJobXmlShouldReturnTheExpectedConfigXml() {
- String expectedXml = Joiner.on("\n").join(CONFIG_XML);
+ String expectedXml = String.join("\n", CONFIG_XML);
assertThat(jobXml).isEqualTo(expectedXml);
}
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index 75eb3fc9..ea595a4d 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -11,7 +11,7 @@
com.offbytwo.jenkins
jenkins-client-parent
- 0.3.9-SNAPSHOT
+ 0.4.0-SNAPSHOT
jenkins-client
@@ -51,11 +51,6 @@
-
- com.google.guava
- guava
-
-
org.apache.commons
commons-lang3
@@ -127,28 +122,6 @@
org.apache.maven.plugins
maven-shade-plugin
-
- stash
- package
-
- shade
-
-
-
-
- com.google.guava:guava
-
-
- true
- stash
-
-
- com.google.common
- com.google.common.jenkins_client_jarjar
-
-
-
-
httpclient
package
@@ -164,12 +137,6 @@
true
apachehttp
-
-
- com.google.common
- com.google.common.jenkins_client_jarjar
-
-
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 8753a1a3..f76da927 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -8,11 +8,14 @@
import java.io.IOException;
import java.net.URI;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBException;
+import com.offbytwo.jenkins.helper.FunctionalHelper;
+import com.offbytwo.jenkins.model.BaseModel;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
import org.apache.http.entity.ContentType;
@@ -20,10 +23,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.client.JenkinsHttpConnection;
import com.offbytwo.jenkins.client.util.EncodingUtils;
@@ -45,6 +44,12 @@
import com.offbytwo.jenkins.model.QueueReference;
import com.offbytwo.jenkins.model.View;
import java.io.Closeable;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static com.offbytwo.jenkins.helper.FunctionalHelper.SET_CLIENT;
+import static java.util.stream.Collectors.toMap;
/**
* The main starting point for interacting with a Jenkins server.
@@ -167,13 +172,10 @@ public Map getJobs(FolderJob folder, String view) throws IOExceptio
viewClass = View.class;
}
List jobs = client.get(path, viewClass).getJobs();
- return Maps.uniqueIndex(jobs, new Function() {
- @Override
- public String apply(Job job) {
- job.setClient(client);
- return job.getName();
- }
- });
+
+ return jobs.stream()
+ .map(SET_CLIENT(this.client))
+ .collect(toMap(s -> s.getName(), s -> s));
}
/**
@@ -198,22 +200,23 @@ public Map getViews(FolderJob folder) throws IOException {
// This is much better than using &depth=2
// http://localhost:8080/api/json?pretty&tree=views[name,url,jobs[name,url]]
List views = client.get(UrlUtils.toBaseUrl(folder) + "?tree=views[name,url,jobs[name,url]]", MainView.class).getViews();
- return Maps.uniqueIndex(views, new Function() {
- @Override
- public String apply(View view) {
- view.setClient(client);
- // TODO: Think about the following? Does there exists a
- // simpler/more elegant method?
+
+ //TODO: Think about this Lambda. It's too large? Make it smaller!
+ return views.stream().map(view -> {
+ SET_CLIENT(this.client);
+
+ // TODO: Think about the following? Does there exists a simpler/more
+ // elegant method?
for (Job job : view.getJobs()) {
- job.setClient(client);
+ SET_CLIENT(this.client);
}
- for (View item : view.getViews()) {
- item.setClient(client);
+ for (View viewView : view.getViews()) {
+ SET_CLIENT(this.client);
}
- return view.getName();
- }
- });
+ return view;
+ })
+ .collect(Collectors.toMap(s -> s.getName(), v -> v));
}
/**
@@ -317,10 +320,9 @@ public Optional getFolderJob(Job job) throws IOException {
try {
FolderJob folder = client.get(job.getUrl(), FolderJob.class);
if (!folder.isFolder()) {
- return Optional.absent();
+ return Optional.empty();
}
folder.setClient(client);
-
return Optional.of(folder);
} catch (HttpResponseException e) {
LOGGER.debug("getForlderJob(job={}) status={}", job, e.getStatusCode());
@@ -487,8 +489,12 @@ public void createFolder(FolderJob folder, String jobName) throws IOException {
public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) throws IOException {
// https://gist.github.com/stuart-warren/7786892 was slightly helpful
// here
- ImmutableMap params = ImmutableMap.of("mode", "com.cloudbees.hudson.plugins.folder.Folder",
- "name", EncodingUtils.formParameter(jobName), "from", "", "Submit", "OK");
+ //TODO: JDK9+: Map.of(...)
+ Map params = new HashMap<>();
+ params.put("mode", "com.cloudbees.hudson.plugins.folder.Folder");
+ params.put("name", jobName);
+ params.put("from", "");
+ params.put("Submit", "OK");
client.post_form(UrlUtils.toBaseUrl(folder) + "createItem?", params, crumbFlag);
}
@@ -535,13 +541,9 @@ public LabelWithDetails getLabel(String labelName) throws IOException {
*/
public Map getComputers() throws IOException {
List computers = client.get("computer/", Computer.class).getComputers();
- return Maps.uniqueIndex(computers, new Function() {
- @Override
- public String apply(Computer computer) {
- computer.setClient(client);
- return computer.getDisplayName().toLowerCase();
- }
- });
+ return computers.stream()
+ .map(SET_CLIENT(this.client))
+ .collect(Collectors.toMap(s -> s.getDisplayName().toLowerCase(), Function.identity()));
}
/**
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
index 308a6d0e..4eadc5c9 100755
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java
@@ -6,8 +6,6 @@
package com.offbytwo.jenkins.client;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import com.google.common.io.ByteStreams;
import com.offbytwo.jenkins.client.util.EncodingUtils;
import com.offbytwo.jenkins.client.util.RequestReleasingInputStream;
import com.offbytwo.jenkins.client.validator.HttpResponseValidator;
@@ -47,6 +45,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -291,7 +291,7 @@ public void post_form(String path, Map data, boolean crumbFlag)
if (data != null) {
// https://gist.github.com/stuart-warren/7786892 was slightly
// helpful here
- List queryParams = Lists.newArrayList();
+ List queryParams = new ArrayList<>();
for (String param : data.keySet()) {
queryParams.add(param + "=" + EncodingUtils.formParameter(data.get(param)));
}
@@ -493,7 +493,7 @@ protected void setLocalContext(final HttpContext localContext) {
private T objectFromResponse(Class cls, HttpResponse response) throws IOException {
InputStream content = response.getEntity().getContent();
- byte[] bytes = ByteStreams.toByteArray(content);
+ byte[] bytes = IOUtils.toByteArray(content);
T result = mapper.readValue(bytes, cls);
// TODO: original:
// T result = mapper.readValue(content, cls);
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/EncodingUtils.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/EncodingUtils.java
index 11bd3ff3..4638634b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/EncodingUtils.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/util/EncodingUtils.java
@@ -1,7 +1,21 @@
+/*
+ * Copyright (c) 2019 Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
package com.offbytwo.jenkins.client.util;
-import com.google.common.net.UrlEscapers;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * This class is a help class to centralize the
+ * encoding parts which will call an appropriate library function.
+ *
+ * @author Karl Heinz Marbaise
+ */
public final class EncodingUtils {
private EncodingUtils() {
@@ -9,12 +23,24 @@ private EncodingUtils() {
public static String encode(String pathPart) {
// jenkins doesn't like the + for space, use %20 instead
- return UrlEscapers.urlPathSegmentEscaper().escape(pathPart);
+ try {
+ return URLEncoder.encode(pathPart, StandardCharsets.UTF_8.displayName());
+ } catch (UnsupportedEncodingException e) {
+ // Should never happen, because that would imply that
+ // the parameter StandardCharsets.UTF_8 is wrong.
+ throw new IllegalArgumentException(e);
+ }
}
public static String formParameter(String pathPart) {
// jenkins doesn't like the + for space, use %20 instead
- return UrlEscapers.urlFormParameterEscaper().escape(pathPart);
+ try {
+ return URLEncoder.encode(pathPart, StandardCharsets.UTF_8.displayName());
+ } catch (UnsupportedEncodingException e) {
+ // Should never happen, because that would imply that
+ // the parameter StandardCharsets.UTF_8 is wrong.
+ throw new IllegalArgumentException(e);
+ }
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/FunctionalHelper.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/FunctionalHelper.java
new file mode 100644
index 00000000..d7f507b7
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/FunctionalHelper.java
@@ -0,0 +1,22 @@
+package com.offbytwo.jenkins.helper;
+
+import com.offbytwo.jenkins.client.JenkinsHttpConnection;
+import com.offbytwo.jenkins.model.BaseModel;
+
+import java.util.function.Function;
+
+public final class FunctionalHelper {
+
+ private FunctionalHelper() {
+ // intentionally empty.
+ }
+
+ public static final Function SET_CLIENT(JenkinsHttpConnection client) {
+ return s -> {
+ s.setClient(client);
+ return s;
+ };
+ }
+
+
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 20ffbadc..9272c39e 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -7,9 +7,6 @@
package com.offbytwo.jenkins.model;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableMap;
import com.offbytwo.jenkins.helper.BuildConsoleStreamListener;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
@@ -27,11 +24,17 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.stream.Collectors;
-import static com.google.common.collect.Collections2.filter;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
/**
* This class represents build information with details about what has been done
@@ -111,7 +114,7 @@ public BuildResult getResult() {
};
- private List actions; // TODO: Should be improved.
+ private List>>> actions; // TODO: Should be improved.
private boolean building;
private String description;
private String displayName;
@@ -163,31 +166,12 @@ public boolean isBuilding() {
}
public List getCauses() {
- // actions is a List
-
- com.google.guava
- guava
- ${guava.version}
-
-
org.apache.commons
commons-lang3
From a5a59ca43a1c1ca3f45ad2a7a0178b6f58344346 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 7 Apr 2019 19:23:42 +0200
Subject: [PATCH 177/197] Fixed JavaDoc issues. Generate JavaDoc during site
generation.
---
.../com/offbytwo/jenkins/JenkinsServer.java | 2 -
.../jenkins/model/BuildWithDetails.java | 10 +---
.../java/com/offbytwo/jenkins/FirstTest.java | 56 -------------------
pom.xml | 46 ++++-----------
4 files changed, 14 insertions(+), 100 deletions(-)
delete mode 100644 jenkins-client/src/test/java/com/offbytwo/jenkins/FirstTest.java
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 f76da927..ee1672a4 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -14,8 +14,6 @@
import javax.xml.bind.JAXBException;
-import com.offbytwo.jenkins.helper.FunctionalHelper;
-import com.offbytwo.jenkins.model.BaseModel;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
import org.apache.http.entity.ContentType;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index 9272c39e..b129b732 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -21,17 +21,12 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.stream.Collectors;
-
-import java.util.function.Function;
-import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
@@ -362,7 +357,7 @@ public Map getParameters() {
* @return The full console output of the build. The line separation is done by
* {@code CR+LF}.
*
- * @see {@link #streamConsoleOutput(BuildConsoleStreamListener, int, int, boolean)} method for obtaining logs for running build
+ * @see #streamConsoleOutput(BuildConsoleStreamListener, int, int, boolean) method for obtaining logs for running build
*
* @throws IOException in case of a failure.
*/
@@ -373,7 +368,7 @@ public String getConsoleOutputText() throws IOException {
/**
* The full console output with HTML.
*
- * @see {@link #streamConsoleOutput(BuildConsoleStreamListener, int, int, boolean)} method for obtaining logs for running build
+ * @see #streamConsoleOutput(BuildConsoleStreamListener, int, int, boolean) method for obtaining logs for running build
*
* @return The console output as HTML.
* @throws IOException in case of an error.
@@ -430,6 +425,7 @@ public void streamConsoleOutput(final BuildConsoleStreamListener listener, final
* Use this method to periodically obtain logs from jenkins and skip chunks that were already received
*
* @param bufferOffset offset in console lo
+ * @param crumbFlag true or false.
* @return ConsoleLog object containing console output of the build. The line separation is done by
* {@code CR+LF}.
* @throws IOException in case of a failure.
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/FirstTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/FirstTest.java
deleted file mode 100644
index 7d512198..00000000
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/FirstTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.offbytwo.jenkins;
-
-import com.offbytwo.jenkins.client.util.EncodingUtils;
-import com.offbytwo.jenkins.model.Build;
-import org.apache.http.client.utils.URIBuilder;
-import org.junit.Test;
-
-import java.net.URI;
-import java.util.List;
-
-public class FirstTest {
-
- @Test
- public void name() {
- String url = "http://localhost:8080/job/test/1";
-
- URI uri = URI.create(url);
- System.out.println("Fragement:" + uri.getFragment());
- System.out.println("Host:" + uri.getHost());
- System.out.println("Authority:" + uri.getAuthority());
- System.out.println("Path:" + uri.getPath());
- System.out.println("Query:" + uri.getQuery());
- System.out.println("Port:" + uri.getPort());
- System.out.println("Scheme:" + uri.getScheme());
-
-
- URIBuilder uriBuilder = new URIBuilder(uri);
- uriBuilder.setPath(uri.getPath() + "/testReport");
- uriBuilder.addParameter("depth", "1");
-
- System.out.println("Resulting: " + uriBuilder.toString());
-
- }
-
- @Test
- public void secondTest() {
-
-
- String url = "http://localhost:8080/";
-
-
-// List builds = client.get(path + "job/" + EncodingUtils.encode(this.getName())
-// + "?tree=allBuilds[number[*],url[*],queueId[*]]", AllBuilds.class).getAllBuilds();
-
- // url + "/testReport/?depth=1"
-
-// this.getUrl() + "/testReport/?depth=1", TestReport.class
-
-// uri.getRawPath();
-//
-// public URI(String scheme,
-// String userInfo, String host, int port,
-// String path, String query, String fragment)
-
- }
-}
diff --git a/pom.xml b/pom.xml
index 4a04fdf7..8015cefa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -406,43 +406,18 @@
org.apache.maven.plugins
maven-project-info-reports-plugin
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
-
- javadoc-no-fork
- aggregate-no-fork
-
-
-
-
@@ -490,7 +465,8 @@
attach-javadocs
- jar
+ javadoc-no-fork
+ test-javadoc-no-fork
From 0f1a8bc26f7aad97e83eb5217d239e0d4b8d855f Mon Sep 17 00:00:00 2001
From: mivola
Date: Mon, 15 Apr 2019 20:19:42 +0200
Subject: [PATCH 178/197] fixes #360 by changing the return value from void to
the appropriate object (#403)
---
.../com/offbytwo/jenkins/JenkinsServer.java | 139 ++++++++++--------
.../com/offbytwo/jenkins/model/Artifact.java | 9 +-
.../com/offbytwo/jenkins/model/BaseModel.java | 3 +-
.../com/offbytwo/jenkins/model/Build.java | 9 +-
.../offbytwo/jenkins/model/BuildCause.java | 18 ++-
.../jenkins/model/BuildChangeSet.java | 6 +-
.../jenkins/model/BuildChangeSetAuthor.java | 6 +-
.../jenkins/model/BuildChangeSetItem.java | 27 ++--
.../jenkins/model/BuildChangeSetPath.java | 6 +-
.../jenkins/model/BuildWithDetails.java | 33 +++--
.../offbytwo/jenkins/model/CauseAction.java | 9 +-
.../com/offbytwo/jenkins/model/Computer.java | 26 ++--
.../offbytwo/jenkins/model/ComputerSet.java | 12 +-
.../jenkins/model/ComputerWithDetails.java | 22 +--
.../offbytwo/jenkins/model/ConsoleLog.java | 9 +-
.../offbytwo/jenkins/model/Executable.java | 6 +-
.../com/offbytwo/jenkins/model/Executor.java | 18 ++-
.../offbytwo/jenkins/model/ExtractHeader.java | 3 +-
.../com/offbytwo/jenkins/model/FolderJob.java | 8 +-
.../offbytwo/jenkins/model/HourMinSec10.java | 9 +-
.../jenkins/model/JacocoCoverageReport.java | 24 ++-
.../jenkins/model/JacocoCoverageResult.java | 26 +++-
.../jenkins/model/JobConfiguration.java | 3 +-
.../jenkins/model/JobWithDetails.java | 15 +-
.../jenkins/model/LoadStatistics.java | 9 +-
.../com/offbytwo/jenkins/model/MainView.java | 6 +-
.../offbytwo/jenkins/model/MavenArtifact.java | 24 ++-
.../jenkins/model/MavenModuleRecord.java | 15 +-
.../offbytwo/jenkins/model/OfflineCause.java | 18 ++-
.../jenkins/model/ParameterDefinitions.java | 6 +-
.../model/ParametersDefinitionProperty.java | 3 +-
.../com/offbytwo/jenkins/model/Plugin.java | 41 ++++--
.../jenkins/model/PluginDependency.java | 57 ++++---
.../offbytwo/jenkins/model/PluginManager.java | 3 +-
.../com/offbytwo/jenkins/model/Queue.java | 9 +-
.../com/offbytwo/jenkins/model/QueueItem.java | 36 +++--
.../jenkins/model/QueueItemActions.java | 3 +-
.../com/offbytwo/jenkins/model/Statis.java | 6 +-
.../model/StringParameterDefinition.java | 9 +-
.../com/offbytwo/jenkins/model/TestCase.java | 27 ++--
.../com/offbytwo/jenkins/model/TestChild.java | 6 +-
.../jenkins/model/TestChildReport.java | 20 +--
.../offbytwo/jenkins/model/TestReport.java | 15 +-
.../offbytwo/jenkins/model/TestResult.java | 32 ++--
.../offbytwo/jenkins/model/TestSuites.java | 15 +-
.../java/com/offbytwo/jenkins/model/View.java | 9 +-
46 files changed, 506 insertions(+), 309 deletions(-)
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 ee1672a4..e9973d59 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -341,8 +341,8 @@ public Optional getFolderJob(Job job) throws IOException {
* the job.
* @throws IOException in case of an error.
*/
- public void createJob(String jobName, String jobXml) throws IOException {
- createJob(null, jobName, jobXml, false);
+ public JenkinsServer createJob(String jobName, String jobXml) throws IOException {
+ return createJob(null, jobName, jobXml, false);
}
/**
@@ -355,8 +355,8 @@ public void createJob(String jobName, String jobXml) throws IOException {
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createJob(String jobName, String jobXml, Boolean crumbFlag) throws IOException {
- createJob(null, jobName, jobXml, crumbFlag);
+ public JenkinsServer createJob(String jobName, String jobXml, Boolean crumbFlag) throws IOException {
+ return createJob(null, jobName, jobXml, crumbFlag);
}
/**
@@ -369,8 +369,8 @@ public void createJob(String jobName, String jobXml, Boolean crumbFlag) throws I
* the job.
* @throws IOException in case of an error.
*/
- public void createJob(FolderJob folder, String jobName, String jobXml) throws IOException {
- createJob(folder, jobName, jobXml, false);
+ public JenkinsServer createJob(FolderJob folder, String jobName, String jobXml) throws IOException {
+ return createJob(folder, jobName, jobXml, false);
}
/**
@@ -385,8 +385,10 @@ public void createJob(FolderJob folder, String jobName, String jobXml) throws IO
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createJob(FolderJob folder, String jobName, String jobXml, Boolean crumbFlag) throws IOException {
+ public JenkinsServer createJob(FolderJob folder, String jobName, String jobXml, Boolean crumbFlag)
+ throws IOException {
client.post_xml(UrlUtils.toBaseUrl(folder) + "createItem?name=" + EncodingUtils.formParameter(jobName), jobXml, crumbFlag);
+ return this;
}
/**
@@ -396,8 +398,8 @@ public void createJob(FolderJob folder, String jobName, String jobXml, Boolean c
* @param viewXml The configuration for the view.
* @throws IOException in case of an error.
*/
- public void createView(String viewName, String viewXml) throws IOException {
- createView(null, viewName, viewXml, false);
+ public JenkinsServer createView(String viewName, String viewXml) throws IOException {
+ return createView(null, viewName, viewXml, false);
}
/**
@@ -409,8 +411,8 @@ public void createView(String viewName, String viewXml) throws IOException {
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createView(String viewName, String viewXml, Boolean crumbFlag) throws IOException {
- createView(null, viewName, viewXml, crumbFlag);
+ public JenkinsServer createView(String viewName, String viewXml, Boolean crumbFlag) throws IOException {
+ return createView(null, viewName, viewXml, crumbFlag);
}
/**
@@ -422,8 +424,8 @@ public void createView(String viewName, String viewXml, Boolean crumbFlag) throw
* @param viewXml The configuration for the view.
* @throws IOException in case of an error.
*/
- public void createView(FolderJob folder, String viewName, String viewXml) throws IOException {
- createView(folder, viewName, viewXml, false);
+ public JenkinsServer createView(FolderJob folder, String viewName, String viewXml) throws IOException {
+ return createView(folder, viewName, viewXml, false);
}
/**
@@ -437,9 +439,11 @@ public void createView(FolderJob folder, String viewName, String viewXml) throws
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag) throws IOException {
+ public JenkinsServer createView(FolderJob folder, String viewName, String viewXml, Boolean crumbFlag)
+ throws IOException {
client.post_xml(UrlUtils.toBaseUrl(folder) + "createView?name=" + EncodingUtils.formParameter(viewName), viewXml,
crumbFlag);
+ return this;
}
/**
@@ -448,8 +452,8 @@ public void createView(FolderJob folder, String viewName, String viewXml, Boolea
* @param folderName name of the folder.
* @throws IOException in case of an error.
*/
- public void createFolder(String folderName) throws IOException {
- createFolder(null, folderName, false);
+ public JenkinsServer createFolder(String folderName) throws IOException {
+ return createFolder(null, folderName, false);
}
/**
@@ -460,8 +464,8 @@ public void createFolder(String folderName) throws IOException {
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createFolder(String folderName, Boolean crumbFlag) throws IOException {
- createFolder(null, folderName, crumbFlag);
+ public JenkinsServer createFolder(String folderName, Boolean crumbFlag) throws IOException {
+ return createFolder(null, folderName, crumbFlag);
}
/**
@@ -471,8 +475,8 @@ public void createFolder(String folderName, Boolean crumbFlag) throws IOExceptio
* @param jobName name of the job.
* @throws IOException in case of an error.
*/
- public void createFolder(FolderJob folder, String jobName) throws IOException {
- createFolder(folder, jobName, false);
+ public JenkinsServer createFolder(FolderJob folder, String jobName) throws IOException {
+ return createFolder(folder, jobName, false);
}
/**
@@ -484,7 +488,7 @@ public void createFolder(FolderJob folder, String jobName) throws IOException {
* false otherwise.
* @throws IOException in case of an error.
*/
- public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) throws IOException {
+ public JenkinsServer createFolder(FolderJob folder, String jobName, Boolean crumbFlag) throws IOException {
// https://gist.github.com/stuart-warren/7786892 was slightly helpful
// here
//TODO: JDK9+: Map.of(...)
@@ -494,6 +498,7 @@ public void createFolder(FolderJob folder, String jobName, Boolean crumbFlag) th
params.put("from", "");
params.put("Submit", "OK");
client.post_form(UrlUtils.toBaseUrl(folder) + "createItem?", params, crumbFlag);
+ return this;
}
/**
@@ -573,20 +578,24 @@ public PluginManager getPluginManager() throws IOException {
* @param viewXml the view configuration.
* @throws IOException in case of an error.
*/
- public void updateView(String viewName, String viewXml) throws IOException {
- this.updateView(viewName, viewXml, true);
+ public JenkinsServer updateView(String viewName, String viewXml) throws IOException {
+ return this.updateView(viewName, viewXml, true);
}
- public void updateView(String viewName, String viewXml, boolean crumbFlag) throws IOException {
+ public JenkinsServer updateView(String viewName, String viewXml, boolean crumbFlag) throws IOException {
client.post_xml("/view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
+ return this;
}
- public void updateView(FolderJob folder, String viewName, String viewXml) throws IOException {
+ public JenkinsServer updateView(FolderJob folder, String viewName, String viewXml) throws IOException {
client.post_xml(UrlUtils.toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, true);
+ return this;
}
- public void updateView(FolderJob folder, String viewName, String viewXml, boolean crumbFlag) throws IOException {
+ public JenkinsServer updateView(FolderJob folder, String viewName, String viewXml, boolean crumbFlag)
+ throws IOException {
client.post_xml(UrlUtils.toBaseUrl(folder) + "view/" + EncodingUtils.encode(viewName) + "/config.xml", viewXml, crumbFlag);
+ return this;
}
/**
@@ -596,8 +605,8 @@ public void updateView(FolderJob folder, String viewName, String viewXml, boolea
* @param jobXml the configuration to be used for updating.
* @throws IOException in case of an error.
*/
- public void updateJob(String jobName, String jobXml) throws IOException {
- this.updateJob(jobName, jobXml, true);
+ public JenkinsServer updateJob(String jobName, String jobXml) throws IOException {
+ return this.updateJob(jobName, jobXml, true);
}
/**
@@ -608,8 +617,8 @@ public void updateJob(String jobName, String jobXml) throws IOException {
* @param crumbFlag true/false.
* @throws IOException in case of an error.
*/
- public void updateJob(String jobName, String jobXml, boolean crumbFlag) throws IOException {
- updateJob(null, jobName, jobXml, crumbFlag);
+ public JenkinsServer updateJob(String jobName, String jobXml, boolean crumbFlag) throws IOException {
+ return updateJob(null, jobName, jobXml, crumbFlag);
}
/**
@@ -621,8 +630,10 @@ public void updateJob(String jobName, String jobXml, boolean crumbFlag) throws I
* @param crumbFlag true/false.
* @throws IOException in case of an error.
*/
- public void updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag) throws IOException {
+ public JenkinsServer updateJob(FolderJob folder, String jobName, String jobXml, boolean crumbFlag)
+ throws IOException {
client.post_xml(UrlUtils.toJobBaseUrl(folder, jobName) + "/config.xml", jobXml, crumbFlag);
+ return this;
}
/**
@@ -634,12 +645,12 @@ public void updateJob(FolderJob folder, String jobName, String jobXml, boolean c
* @throws JAXBException in case of an error.
* @throws DocumentException in case of an error.
*/
- public void addStringParam(String jobName, String name, String description, String defaultValue)
+ public JenkinsServer addStringParam(String jobName, String name, String description, String defaultValue)
throws IOException, JAXBException, DocumentException {
String jobXml = this.getJobXml(jobName);
JobConfiguration jobConf = new JobConfiguration(jobXml);
jobXml = jobConf.addStringParam(name, description, defaultValue).asXml();
- this.updateJob(jobName, jobXml);
+ return this.updateJob(jobName, jobXml);
}
/**
@@ -647,13 +658,13 @@ public void addStringParam(String jobName, String name, String description, Stri
*
* @throws IOException in case of an error.
*/
- public void quietDown() throws IOException {
+ public JenkinsServer quietDown() throws IOException {
try {
client.get("/quietDown/");
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("quietDown()", e);
}
-
+ return this;
}
/**
@@ -661,12 +672,13 @@ public void quietDown() throws IOException {
*
* @throws IOException in case of an error.
*/
- public void cancelQuietDown() throws IOException {
+ public JenkinsServer cancelQuietDown() throws IOException {
try {
client.post("/cancelQuietDown/");
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("cancelQuietDown()", e);
}
+ return this;
}
/**
@@ -677,8 +689,8 @@ public void cancelQuietDown() throws IOException {
*
* @throws IOException in case of an error.
*/
- public void deleteJob(FolderJob folder, String jobName) throws IOException {
- deleteJob(folder, jobName, false);
+ public JenkinsServer deleteJob(FolderJob folder, String jobName) throws IOException {
+ return deleteJob(folder, jobName, false);
}
/**
@@ -689,8 +701,9 @@ public void deleteJob(FolderJob folder, String jobName) throws IOException {
* @param crumbFlag The crumbFlag
* @throws IOException in case of problems.
*/
- public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
+ public JenkinsServer deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throws IOException {
client.post(UrlUtils.toJobBaseUrl(folder, jobName) + "/doDelete", crumbFlag);
+ return this;
}
/**
@@ -699,8 +712,8 @@ public void deleteJob(FolderJob folder, String jobName, boolean crumbFlag) throw
* @param jobName The name of the job which should be deleted.
* @throws IOException in case of an error.
*/
- public void deleteJob(String jobName) throws IOException {
- deleteJob(jobName, false);
+ public JenkinsServer deleteJob(String jobName) throws IOException {
+ return deleteJob(jobName, false);
}
/**
@@ -711,8 +724,9 @@ public void deleteJob(String jobName) throws IOException {
* false otherwise.
* @throws IOException In case of an failure.
*/
- public void deleteJob(String jobName, boolean crumbFlag) throws IOException {
+ public JenkinsServer deleteJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/doDelete", crumbFlag);
+ return this;
}
/**
@@ -721,8 +735,8 @@ public void deleteJob(String jobName, boolean crumbFlag) throws IOException {
* @param jobName The name of the job which should be disabled.
* @throws IOException in case of an error.
*/
- public void disableJob(String jobName) throws IOException {
- disableJob(jobName, false);
+ public JenkinsServer disableJob(String jobName) throws IOException {
+ return disableJob(jobName, false);
}
/**
@@ -733,8 +747,9 @@ public void disableJob(String jobName) throws IOException {
* false otherwise.
* @throws IOException In case of an failure.
*/
- public void disableJob(String jobName, boolean crumbFlag) throws IOException {
+ public JenkinsServer disableJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/disable", crumbFlag);
+ return this;
}
/**
@@ -743,8 +758,8 @@ public void disableJob(String jobName, boolean crumbFlag) throws IOException {
* @param jobName name of the job which should be enabled.
* @throws IOException In case of an failure.
*/
- public void enableJob(String jobName) throws IOException {
- enableJob( jobName, false );
+ public JenkinsServer enableJob(String jobName) throws IOException {
+ return enableJob(jobName, false);
}
/**
@@ -755,8 +770,9 @@ public void enableJob(String jobName) throws IOException {
* false otherwise.
* @throws IOException In case of an failure.
*/
- public void enableJob(String jobName, boolean crumbFlag) throws IOException {
+ public JenkinsServer enableJob(String jobName, boolean crumbFlag) throws IOException {
client.post("/job/" + EncodingUtils.encode(jobName) + "/enable", crumbFlag);
+ return this;
}
/**
@@ -842,8 +858,8 @@ public Build getBuild(QueueItem q) throws IOException {
* @param newJobName The new job name.
* @throws IOException In case of a failure.
*/
- public void renameJob(String oldJobName, String newJobName) throws IOException {
- renameJob(null, oldJobName, newJobName, false);
+ public JenkinsServer renameJob(String oldJobName, String newJobName) throws IOException {
+ return renameJob(null, oldJobName, newJobName, false);
}
/**
@@ -855,8 +871,9 @@ public void renameJob(String oldJobName, String newJobName) throws IOException {
* false otherwise.
* @throws IOException In case of a failure.
*/
- public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
+ public JenkinsServer renameJob(String oldJobName, String newJobName, Boolean crumbFlag) throws IOException {
renameJob(null, oldJobName, newJobName, crumbFlag);
+ return this;
}
/**
@@ -867,8 +884,8 @@ public void renameJob(String oldJobName, String newJobName, Boolean crumbFlag) t
* @param newJobName The new job name.
* @throws IOException In case of a failure.
*/
- public void renameJob(FolderJob folder, String oldJobName, String newJobName) throws IOException {
- renameJob(folder, oldJobName, newJobName, false);
+ public JenkinsServer renameJob(FolderJob folder, String oldJobName, String newJobName) throws IOException {
+ return renameJob(folder, oldJobName, newJobName, false);
}
/**
@@ -881,11 +898,12 @@ public void renameJob(FolderJob folder, String oldJobName, String newJobName) th
* false otherwise.
* @throws IOException In case of a failure.
*/
- public void renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
+ public JenkinsServer renameJob(FolderJob folder, String oldJobName, String newJobName, Boolean crumbFlag)
throws IOException {
client.post(UrlUtils.toJobBaseUrl(folder, oldJobName)
+ "/doRename?newName=" + EncodingUtils.formParameter(newJobName),
crumbFlag);
+ return this;
}
@@ -910,12 +928,13 @@ public void close() {
* @throws IOException
* in case of an error.
*/
- public void restart(Boolean crumbFlag) throws IOException {
+ public JenkinsServer restart(Boolean crumbFlag) throws IOException {
try {
client.post("/restart", crumbFlag);
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("restart()", e);
}
+ return this;
}
/**
@@ -928,12 +947,13 @@ public void restart(Boolean crumbFlag) throws IOException {
* @throws IOException
* in case of an error.
*/
- public void safeRestart(Boolean crumbFlag) throws IOException {
+ public JenkinsServer safeRestart(Boolean crumbFlag) throws IOException {
try {
client.post("/safeRestart", crumbFlag);
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("safeRestart()", e);
}
+ return this;
}
/**
@@ -945,13 +965,13 @@ public void safeRestart(Boolean crumbFlag) throws IOException {
* @throws IOException
* in case of an error.
*/
- //
- public void exit(Boolean crumbFlag) throws IOException {
+ public JenkinsServer exit(Boolean crumbFlag) throws IOException {
try {
client.post("/exit", crumbFlag);
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("exit()", e);
}
+ return this;
}
/**
@@ -964,11 +984,12 @@ public void exit(Boolean crumbFlag) throws IOException {
* @throws IOException
* in case of an error.
*/
- public void safeExit(Boolean crumbFlag) throws IOException {
+ public JenkinsServer safeExit(Boolean crumbFlag) throws IOException {
try {
client.post("/safeExit", crumbFlag);
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("safeExit()", e);
}
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
index 6d0b0e69..a6c7a2f0 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Artifact.java
@@ -16,24 +16,27 @@ public String getDisplayPath() {
return displayPath;
}
- public void setDisplayPath(String displayPath) {
+ public Artifact setDisplayPath(String displayPath) {
this.displayPath = displayPath;
+ return this;
}
public String getFileName() {
return fileName;
}
- public void setFileName(String fileName) {
+ public Artifact setFileName(String fileName) {
this.fileName = fileName;
+ return this;
}
public String getRelativePath() {
return relativePath;
}
- public void setRelativePath(String relativePath) {
+ public Artifact setRelativePath(String relativePath) {
this.relativePath = relativePath;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
index 95f70bab..9c850ba2 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
@@ -43,7 +43,8 @@ public JenkinsHttpConnection getClient() {
* Set the HTTP client.
* @param client {@link JenkinsHttpConnection}.
*/
- public void setClient(final JenkinsHttpConnection client) {
+ public BaseModel setClient(final JenkinsHttpConnection client) {
this.client = client;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
index 2d936d1b..470707d9 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Build.java
@@ -83,16 +83,19 @@ public String getUrl() {
return url;
}
- protected void setNumber(int number) {
+ protected Build setNumber(int number) {
this.number = number;
+ return this;
}
- protected void setQueueId(int queueId) {
+ protected Build setQueueId(int queueId) {
this.queueId = queueId;
+ return this;
}
- protected void setUrl(String url) {
+ protected Build setUrl(String url) {
this.url = url;
+ return this;
}
/**
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
index ab15f94f..821a027f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildCause.java
@@ -29,48 +29,54 @@ public String getShortDescription() {
return shortDescription;
}
- public void setShortDescription(String shortDescription) {
+ public BuildCause setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
+ return this;
}
public int getUpstreamBuild() {
return upstreamBuild;
}
- public void setUpstreamBuild(Integer upstreamBuild) {
+ public BuildCause setUpstreamBuild(Integer upstreamBuild) {
this.upstreamBuild = upstreamBuild;
+ return this;
}
public String getUpstreamProject() {
return upstreamProject;
}
- public void setUpstreamProject(String upstreamProject) {
+ public BuildCause setUpstreamProject(String upstreamProject) {
this.upstreamProject = upstreamProject;
+ return this;
}
public String getUpstreamUrl() {
return upstreamUrl;
}
- public void setUpstreamUrl(String upstreamUrl) {
+ public BuildCause setUpstreamUrl(String upstreamUrl) {
this.upstreamUrl = upstreamUrl;
+ return this;
}
public String getUserId() {
return userId;
}
- public void setUserId(String userId) {
+ public BuildCause setUserId(String userId) {
this.userId = userId;
+ return this;
}
public String getUserName() {
return userName;
}
- public void setUserName(String userName) {
+ public BuildCause setUserName(String userName) {
this.userName = userName;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSet.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSet.java
index 1987cc49..2b7cf520 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSet.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSet.java
@@ -24,8 +24,9 @@ public class BuildChangeSet {
/**
* @param items {@link BuildChangeSet}
*/
- public void setItems(List items) {
+ public BuildChangeSet setItems(List items) {
this.items = items;
+ return this;
}
/**
@@ -45,8 +46,9 @@ public String getKind() {
/**
* @param kind the kind of (usually svn, git).
*/
- public void setKind(String kind) {
+ public BuildChangeSet setKind(String kind) {
this.kind = kind;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetAuthor.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetAuthor.java
index 9abdd1ba..af416581 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetAuthor.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetAuthor.java
@@ -13,16 +13,18 @@ public String getAbsoluteUrl() {
return absoluteUrl;
}
- public void setAbsoluteUrl(String absoluteUrl) {
+ public BuildChangeSetAuthor setAbsoluteUrl(String absoluteUrl) {
this.absoluteUrl = absoluteUrl;
+ return this;
}
public String getFullName() {
return fullName;
}
- public void setFullName(String fullName) {
+ public BuildChangeSetAuthor setFullName(String fullName) {
this.fullName = fullName;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetItem.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetItem.java
index e817d12b..922a19b1 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetItem.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetItem.java
@@ -27,72 +27,81 @@ public List getAffectedPaths() {
return affectedPaths;
}
- public void setAffectedPaths(List affectedPaths) {
+ public BuildChangeSetItem setAffectedPaths(List affectedPaths) {
this.affectedPaths = affectedPaths;
+ return this;
}
public String getCommitId() {
return commitId;
}
- public void setCommitId(String commitId) {
+ public BuildChangeSetItem setCommitId(String commitId) {
this.commitId = commitId;
+ return this;
}
public String getTimestamp() {
return timestamp;
}
- public void setTimestamp(String timeStamp) {
+ public BuildChangeSetItem setTimestamp(String timeStamp) {
this.timestamp = timeStamp;
+ return this;
}
public String getComment() {
return comment;
}
- public void setComment(String comment) {
+ public BuildChangeSetItem setComment(String comment) {
this.comment = comment;
+ return this;
}
public String getDate() {
return date;
}
- public void setDate(String date) {
+ public BuildChangeSetItem setDate(String date) {
this.date = date;
+ return this;
}
public String getId() {
return id;
}
- public void setId(String id) {
+ public BuildChangeSetItem setId(String id) {
this.id = id;
+ return this;
}
public String getMsg() {
return msg;
}
- public void setMsg(String msg) {
+ public BuildChangeSetItem setMsg(String msg) {
this.msg = msg;
+ return this;
}
public List getPaths() {
return paths;
}
- public void setPaths(List paths) {
+ public BuildChangeSetItem setPaths(List paths) {
this.paths = paths;
+ return this;
}
public BuildChangeSetAuthor getAuthor() {
return author;
}
- public void setAuthor(BuildChangeSetAuthor author) {
+ public BuildChangeSetItem setAuthor(BuildChangeSetAuthor author) {
this.author = author;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
index e5078f3a..5758ee78 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildChangeSetPath.java
@@ -27,16 +27,18 @@ public String getEditType() {
* @param editType the SCM operation, add or edit or delete
* @see EditType
*/
- public void setEditType(String editType) {
+ public BuildChangeSetPath setEditType(String editType) {
this.editType = editType;
+ return this;
}
public String getFile() {
return file;
}
- public void setFile(String file) {
+ public BuildChangeSetPath setFile(String file) {
this.file = file;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index b129b732..ab9e201d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -178,7 +178,7 @@ public List getCauses() {
* @param crumbFlag true or false.
* @throws IOException in case of errors.
*/
- public void updateDisplayNameAndDescription(String displayName, String description, boolean crumbFlag)
+ public BuildWithDetails updateDisplayNameAndDescription(String displayName, String description, boolean crumbFlag)
throws IOException {
Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
Objects.requireNonNull(description, "description is not allowed to be null.");
@@ -190,6 +190,7 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
params.put("core:apply", "");
params.put("Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ return this;
}
/**
@@ -200,8 +201,8 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
* @param description The description which should be set.
* @throws IOException in case of errors.
*/
- public void updateDisplayNameAndDescription(String displayName, String description) throws IOException {
- updateDisplayNameAndDescription(displayName, description, false);
+ public BuildWithDetails updateDisplayNameAndDescription(String displayName, String description) throws IOException {
+ return updateDisplayNameAndDescription(displayName, description, false);
}
/**
@@ -211,7 +212,7 @@ public void updateDisplayNameAndDescription(String displayName, String descripti
* @param crumbFlag true or false.
* @throws IOException in case of errors.
*/
- public void updateDisplayName(String displayName, boolean crumbFlag) throws IOException {
+ public BuildWithDetails updateDisplayName(String displayName, boolean crumbFlag) throws IOException {
Objects.requireNonNull(displayName, "displayName is not allowed to be null.");
String description = getDescription() == null ? "" : getDescription();
Map params = new HashMap<>();
@@ -221,6 +222,7 @@ public void updateDisplayName(String displayName, boolean crumbFlag) throws IOEx
params.put("core:apply", "");
params.put("Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ return this;
}
/**
@@ -229,8 +231,8 @@ public void updateDisplayName(String displayName, boolean crumbFlag) throws IOEx
* @param displayName The new displayName which should be set.
* @throws IOException in case of errors.
*/
- public void updateDisplayName(String displayName) throws IOException {
- updateDisplayName(displayName, false);
+ public BuildWithDetails updateDisplayName(String displayName) throws IOException {
+ return updateDisplayName(displayName, false);
}
/**
@@ -240,7 +242,7 @@ public void updateDisplayName(String displayName) throws IOException {
* @param crumbFlag true or false.
* @throws IOException in case of errors.
*/
- public void updateDescription(String description, boolean crumbFlag) throws IOException {
+ public BuildWithDetails updateDescription(String description, boolean crumbFlag) throws IOException {
Objects.requireNonNull(description, "description is not allowed to be null.");
String displayName = getDisplayName() == null ? "" : getDisplayName();
//JDK9+: Map.of(..)
@@ -251,6 +253,7 @@ public void updateDescription(String description, boolean crumbFlag) throws IOEx
params.put("core:apply", "");
params.put("Submit", "Save");
client.post_form(this.getUrl() + "/configSubmit?", params, crumbFlag);
+ return this;
}
/**
@@ -259,8 +262,8 @@ public void updateDescription(String description, boolean crumbFlag) throws IOEx
* @param description The description which should be set.
* @throws IOException in case of errors.
*/
- public void updateDescription(String description) throws IOException {
- updateDescription(description, false);
+ public BuildWithDetails updateDescription(String description) throws IOException {
+ return updateDescription(description, false);
}
private boolean isNullOrEmpty(String value) {
@@ -479,8 +482,9 @@ public BuildChangeSet getChangeSet() {
return result;
}
- public void setChangeSet(BuildChangeSet changeSet) {
+ public BuildWithDetails setChangeSet(BuildChangeSet changeSet) {
this.changeSet = changeSet;
+ return this;
}
/**
@@ -501,20 +505,23 @@ public List getChangeSets() {
return result;
}
- public void setChangeSets(List changeSets) {
+ public BuildWithDetails setChangeSets(List changeSets) {
this.changeSets = changeSets;
+ return this;
}
public List getCulprits() {
return culprits;
}
- public void setCulprits(List culprits) {
+ public BuildWithDetails setCulprits(List culprits) {
this.culprits = culprits;
+ return this;
}
- public void setResult(BuildResult result) {
+ public BuildWithDetails setResult(BuildResult result) {
this.result = result;
+ return this;
}
public InputStream downloadArtifact(Artifact a) throws IOException, URISyntaxException {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
index e481f03a..dd455b50 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/CauseAction.java
@@ -9,24 +9,27 @@ public String getShortDescription() {
return shortDescription;
}
- public void setShortDescription(String shortDescription) {
+ public CauseAction setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
+ return this;
}
public String getUserId() {
return userId;
}
- public void setUserId(String userId) {
+ public CauseAction setUserId(String userId) {
this.userId = userId;
+ return this;
}
public String getUserName() {
return userName;
}
- public void setUserName(String userName) {
+ public CauseAction setUserName(String userName) {
this.userName = userName;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
index 75f63af9..2414f061 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Computer.java
@@ -10,6 +10,7 @@
import java.util.List;
import com.offbytwo.jenkins.client.util.EncodingUtils;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author Kelly Plummer
@@ -19,17 +20,20 @@ public class Computer extends BaseModel {
private String displayName;
- public List getComputers() {
- return computer;
- }
+ private List computers;
- public void setComputer(List computer) {
- this.computer = computer;
+ public Computer() {
}
- List computer;
+ @JsonProperty("computer")
+ public List getComputers() {
+ return computers;
+ }
- public Computer() {
+ @JsonProperty("computer")
+ public Computer setComputers(List computers) {
+ this.computers = computers;
+ return this;
}
public Computer(String displayName) {
@@ -65,10 +69,10 @@ public boolean equals(Object obj) {
if (getClass() != obj.getClass())
return false;
Computer other = (Computer) obj;
- if (computer == null) {
- if (other.computer != null)
+ if (computers == null) {
+ if (other.computers != null)
return false;
- } else if (!computer.equals(other.computer))
+ } else if (!computers.equals(other.computers))
return false;
if (displayName == null) {
if (other.displayName != null)
@@ -82,7 +86,7 @@ public boolean equals(Object obj) {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((computer == null) ? 0 : computer.hashCode());
+ result = prime * result + ((computers == null) ? 0 : computers.hashCode());
result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
return result;
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
index ef2e2047..0c12ba5a 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerSet.java
@@ -24,24 +24,27 @@ public int getBusyExecutors() {
return busyExecutors;
}
- public void setBusyExecutors(int busyExecutors) {
+ public ComputerSet setBusyExecutors(int busyExecutors) {
this.busyExecutors = busyExecutors;
+ return this;
}
public String getDisplayName() {
return displayName;
}
- public void setDisplayName(String displayName) {
+ public ComputerSet setDisplayName(String displayName) {
this.displayName = displayName;
+ return this;
}
public int getTotalExecutors() {
return totalExecutors;
}
- public void setTotalExecutors(int totalExecutors) {
+ public ComputerSet setTotalExecutors(int totalExecutors) {
this.totalExecutors = totalExecutors;
+ return this;
}
public List getComputers() {
@@ -51,8 +54,9 @@ public List getComputers() {
}).collect(Collectors.toList());
}
- public void setComputer(List computers) {
+ public ComputerSet setComputer(List computers) {
this.computer = computers;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
index 46958e6f..2ee6a55b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
@@ -33,6 +33,7 @@ public class ComputerWithDetails extends Computer {
public ComputerWithDetails()
{
}
+ @Override
public String getDisplayName() {
return displayName;
}
@@ -78,7 +79,7 @@ public LoadStatistics getLoadStatistics() throws IOException {
return client.get("/computer/" + name + "/" + "loadStatistics/?depth=2", LoadStatistics.class);
}
- public void toggleOffline(boolean crumbFlag) throws IOException {
+ public ComputerWithDetails toggleOffline(boolean crumbFlag) throws IOException {
// curl --data "json=init" -X POST "http://192.168.99.100:8080/computer/(master)/toggleOffline"
String name;
if ("master".equals(displayName)) {
@@ -88,27 +89,28 @@ public void toggleOffline(boolean crumbFlag) throws IOException {
}
client.post( "/computer/" + name + "/toggleOffline", crumbFlag);
+ return this;
}
- public void toggleOffline() throws IOException {
- toggleOffline( false );
+ public ComputerWithDetails toggleOffline() throws IOException {
+ return toggleOffline(false);
}
- public void changeOfflineCause(String cause, boolean crumbFlag) throws IOException {
+ public ComputerWithDetails changeOfflineCause(String cause, boolean crumbFlag) throws IOException {
String name;
if ("master".equals(displayName)) {
name = "(master)";
} else {
name = EncodingUtils.encode(displayName);
}
-
- Map data = new HashMap();
- data.put( "offlineMessage", cause );
- client.post_form("/computer/" + name + "/changeOfflineCause?", data, crumbFlag);
+ Map data = new HashMap();
+ data.put("offlineMessage", cause);
+ client.post_form("/computer/" + name + "/changeOfflineCause?", data, crumbFlag);
+ return this;
}
- public void changeOfflineCause(String cause) throws IOException {
- changeOfflineCause(cause, false);
+ public ComputerWithDetails changeOfflineCause(String cause) throws IOException {
+ return changeOfflineCause(cause, false);
}
public Boolean getManualLaunchAllowed() {
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
index 59ef5c6d..503e1ce0 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ConsoleLog.java
@@ -19,23 +19,26 @@ public String getConsoleLog() {
return consoleLog;
}
- public void setConsoleLog(String consoleLog) {
+ public ConsoleLog setConsoleLog(String consoleLog) {
this.consoleLog = consoleLog;
+ return this;
}
public Boolean getHasMoreData() {
return hasMoreData;
}
- public void setHasMoreData(Boolean hasMoreData) {
+ public ConsoleLog setHasMoreData(Boolean hasMoreData) {
this.hasMoreData = hasMoreData;
+ return this;
}
public Integer getCurrentBufferSize() {
return currentBufferSize;
}
- public void setCurrentBufferSize(Integer currentBufferSize) {
+ public ConsoleLog setCurrentBufferSize(Integer currentBufferSize) {
this.currentBufferSize = currentBufferSize;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
index ff1b6e27..5f044e13 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executable.java
@@ -9,16 +9,18 @@ public Long getNumber() {
return number;
}
- public void setNumber(Long number) {
+ public Executable setNumber(Long number) {
this.number = number;
+ return this;
}
public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ public Executable setUrl(String url) {
this.url = url;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
index 15fcebde..c6914d97 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Executor.java
@@ -23,48 +23,54 @@ public Job getCurrentExecutable() {
return currentExecutable;
}
- public void setCurrentExecutable(Job currentExecutable) {
+ public Executor setCurrentExecutable(Job currentExecutable) {
this.currentExecutable = currentExecutable;
+ return this;
}
public Job getCurrentWorkUnit() {
return currentWorkUnit;
}
- public void setCurrentWorkUnit(Job currentWorkUnit) {
+ public Executor setCurrentWorkUnit(Job currentWorkUnit) {
this.currentWorkUnit = currentWorkUnit;
+ return this;
}
public Boolean getIdle() {
return idle;
}
- public void setIdle(Boolean idle) {
+ public Executor setIdle(Boolean idle) {
this.idle = idle;
+ return this;
}
public Boolean getLikelyStuck() {
return likelyStuck;
}
- public void setLikelyStuck(Boolean likelyStuck) {
+ public Executor setLikelyStuck(Boolean likelyStuck) {
this.likelyStuck = likelyStuck;
+ return this;
}
public int getNumber() {
return number;
}
- public void setNumber(int number) {
+ public Executor setNumber(int number) {
this.number = number;
+ return this;
}
public int getProgress() {
return progress;
}
- public void setProgress(int progress) {
+ public Executor setProgress(int progress) {
this.progress = progress;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ExtractHeader.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ExtractHeader.java
index cb3c683a..6dd43221 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ExtractHeader.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ExtractHeader.java
@@ -4,8 +4,9 @@ public class ExtractHeader extends BaseModel {
private String location;
- public void setLocation(String value) {
+ public ExtractHeader setLocation(String value) {
location = value;
+ return this;
}
public String getLocation() {
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 a2ce89dc..f2677081 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
@@ -79,8 +79,8 @@ public Job getJob(String name) {
* @param folderName name of the folder to be created.
* @throws IOException in case of an error.
*/
- public void createFolder(String folderName) throws IOException {
- createFolder(folderName, false);
+ public FolderJob createFolder(String folderName) throws IOException {
+ return createFolder(folderName, false);
}
/**
@@ -88,9 +88,10 @@ public void createFolder(String folderName) throws IOException {
*
* @param folderName name of the folder to be created.
* @param crumbFlag true/false.
+ * @return
* @throws IOException in case of an error.
*/
- public void createFolder(String folderName, Boolean crumbFlag) throws IOException {
+ public FolderJob createFolder(String folderName, Boolean crumbFlag) throws IOException {
// https://gist.github.com/stuart-warren/7786892 was slightly helpful
// here
//TODO: JDK9+: Map.of(...)
@@ -100,6 +101,7 @@ public void createFolder(String folderName, Boolean crumbFlag) throws IOExceptio
params.put("from", "");
params.put("Submit", "OK");
client.post_form(this.getUrl() + "/createItem?", params, crumbFlag);
+ return this;
}
/*
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/HourMinSec10.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/HourMinSec10.java
index 0dba01dc..66823616 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/HourMinSec10.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/HourMinSec10.java
@@ -15,24 +15,27 @@ public Statis getHour() {
return hour;
}
- public void setHour(Statis hour) {
+ public HourMinSec10 setHour(Statis hour) {
this.hour = hour;
+ return this;
}
public Statis getMin() {
return min;
}
- public void setMin(Statis min) {
+ public HourMinSec10 setMin(Statis min) {
this.min = min;
+ return this;
}
public Statis getSec10() {
return sec10;
}
- public void setSec10(Statis sec10) {
+ public HourMinSec10 setSec10(Statis sec10) {
this.sec10 = sec10;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
index ed623aa1..cc1345d5 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageReport.java
@@ -11,32 +11,46 @@ public class JacocoCoverageReport extends BaseModel {
public JacocoCoverageResult getLineCoverage() {
return lineCoverage;
}
- public void setLineCoverage(JacocoCoverageResult lineCoverage) {
+
+ public JacocoCoverageReport setLineCoverage(JacocoCoverageResult lineCoverage) {
this.lineCoverage = lineCoverage;
+ return this;
}
+
public JacocoCoverageResult getClassCoverage() {
return classCoverage;
}
- public void setClassCoverage(JacocoCoverageResult classCoverage) {
+
+ public JacocoCoverageReport setClassCoverage(JacocoCoverageResult classCoverage) {
this.classCoverage = classCoverage;
+ return this;
}
+
public JacocoCoverageResult getComplexityScore() {
return complexityScore;
}
- public void setComplexityScore(JacocoCoverageResult complexityScore) {
+
+ public JacocoCoverageReport setComplexityScore(JacocoCoverageResult complexityScore) {
this.complexityScore = complexityScore;
+ return this;
}
+
public JacocoCoverageResult getInstructionCoverage() {
return instructionCoverage;
}
- public void setInstructionCoverage(JacocoCoverageResult instructionCoverage) {
+
+ public JacocoCoverageReport setInstructionCoverage(JacocoCoverageResult instructionCoverage) {
this.instructionCoverage = instructionCoverage;
+ return this;
}
+
public JacocoCoverageResult getBranchCoverage() {
return branchCoverage;
}
- public void setBranchCoverage(JacocoCoverageResult branchCoverage) {
+
+ public JacocoCoverageReport setBranchCoverage(JacocoCoverageResult branchCoverage) {
this.branchCoverage = branchCoverage;
+ return this;
}
}
\ No newline at end of file
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
index 760bb610..41f3f43d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JacocoCoverageResult.java
@@ -11,34 +11,46 @@ public class JacocoCoverageResult {
public int getCovered() {
return covered;
}
- public void setCovered(int covered) {
+
+ public JacocoCoverageResult setCovered(int covered) {
this.covered = covered;
+ return this;
}
+
public int getMissed() {
return missed;
}
- public void setMissed(int missed) {
+
+ public JacocoCoverageResult setMissed(int missed) {
this.missed = missed;
+ return this;
}
+
public int getPercentage() {
return percentage;
}
- public void setPercentage(int percentage) {
+
+ public JacocoCoverageResult setPercentage(int percentage) {
this.percentage = percentage;
+ return this;
}
+
public int getPercentageFloat() {
return percentageFloat;
}
- public void setPercentageFloat(int percentageFloat) {
+
+ public JacocoCoverageResult setPercentageFloat(int percentageFloat) {
this.percentageFloat = percentageFloat;
+ return this;
}
+
public int getTotal() {
return total;
}
- public void setTotal(int total) {
+
+ public JacocoCoverageResult setTotal(int total) {
this.total = total;
+ return this;
}
-
-
}
\ No newline at end of file
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobConfiguration.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobConfiguration.java
index 571430ab..d6a95050 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobConfiguration.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/JobConfiguration.java
@@ -77,7 +77,8 @@ public String getConfigXml() {
return configXml;
}
- public void setConfigXml(String configXml) {
+ public JobConfiguration setConfigXml(String configXml) {
this.configXml = configXml;
+ return this;
}
}
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 71bc664a..b5894015 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
@@ -471,8 +471,8 @@ public Optional getBuildByNumber(final int buildNumber) {
* {@link #EMPTY_DESCRIPTION}.
* @throws IOException in case of errors.
*/
- public void updateDescription(String description) throws IOException {
- updateDescription(description, false);
+ public JobWithDetails updateDescription(String description) throws IOException {
+ return updateDescription(description, false);
}
/**
@@ -484,13 +484,14 @@ public void updateDescription(String description) throws IOException {
* @param crumbFlag true or false.
* @throws IOException in case of errors.
*/
- public void updateDescription(String description, boolean crumbFlag) throws IOException {
+ public JobWithDetails updateDescription(String description, boolean crumbFlag) throws IOException {
Objects.requireNonNull(description, "description is not allowed to be null.");
//JDK9+
// Map.of(...);
Map params = new HashMap<>();
params.put("description", description);
client.post_form(this.getUrl() + "/submitDescription?", params, crumbFlag);
+ return this;
}
/**
@@ -498,8 +499,8 @@ public void updateDescription(String description, boolean crumbFlag) throws IOEx
*
* @throws IOException in case of errors.
*/
- public void clearDescription() throws IOException {
- updateDescription(EMPTY_DESCRIPTION);
+ public JobWithDetails clearDescription() throws IOException {
+ return updateDescription(EMPTY_DESCRIPTION);
}
/**
@@ -508,8 +509,8 @@ public void clearDescription() throws IOException {
* @param crumbFlag true or false.
* @throws IOException in case of errors.
*/
- public void clearDescription(boolean crumbFlag) throws IOException {
- updateDescription(EMPTY_DESCRIPTION, crumbFlag);
+ public JobWithDetails clearDescription(boolean crumbFlag) throws IOException {
+ return updateDescription(EMPTY_DESCRIPTION, crumbFlag);
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/LoadStatistics.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/LoadStatistics.java
index df2a5608..fc335e5e 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/LoadStatistics.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/LoadStatistics.java
@@ -18,24 +18,27 @@ public HourMinSec10 getBusyExecutors() {
return busyExecutors;
}
- public void setBusyExecutors(HourMinSec10 busyExecutors) {
+ public LoadStatistics setBusyExecutors(HourMinSec10 busyExecutors) {
this.busyExecutors = busyExecutors;
+ return this;
}
public HourMinSec10 getQueueLength() {
return queueLength;
}
- public void setQueueLength(HourMinSec10 queueLength) {
+ public LoadStatistics setQueueLength(HourMinSec10 queueLength) {
this.queueLength = queueLength;
+ return this;
}
public HourMinSec10 getTotalExecutors() {
return totalExecutors;
}
- public void setTotalExecutors(HourMinSec10 totalExecutors) {
+ public LoadStatistics setTotalExecutors(HourMinSec10 totalExecutors) {
this.totalExecutors = totalExecutors;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MainView.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MainView.java
index bef07f0b..167f6f40 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MainView.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MainView.java
@@ -33,15 +33,17 @@ public List getJobs() {
return jobs;
}
- public void setJobs(List jobs) {
+ public MainView setJobs(List jobs) {
this.jobs = jobs;
+ return this;
}
public List getViews() {
return views;
}
- public void setViews(List views) {
+ public MainView setViews(List views) {
this.views = views;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
index 184ccc37..c51ea4ea 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenArtifact.java
@@ -18,63 +18,71 @@ public String getArtifactId() {
return artifactId;
}
- public void setArtifactId(String artifactId) {
+ public MavenArtifact setArtifactId(String artifactId) {
this.artifactId = artifactId;
+ return this;
}
public String getCanonicalName() {
return canonicalName;
}
- public void setCanonicalName(String canonicalName) {
+ public MavenArtifact setCanonicalName(String canonicalName) {
this.canonicalName = canonicalName;
+ return this;
}
public String getClassifier() {
return classifier;
}
- public void setClassifier(String classifier) {
+ public MavenArtifact setClassifier(String classifier) {
this.classifier = classifier;
+ return this;
}
public String getFileName() {
return fileName;
}
- public void setFileName(String fileName) {
+ public MavenArtifact setFileName(String fileName) {
this.fileName = fileName;
+ return this;
}
public String getGroupId() {
return groupId;
}
- public void setGroupId(String groupId) {
+ public MavenArtifact setGroupId(String groupId) {
this.groupId = groupId;
+ return this;
}
public String getMd5sum() {
return md5sum;
}
- public void setMd5sum(String md5sum) {
+ public MavenArtifact setMd5sum(String md5sum) {
this.md5sum = md5sum;
+ return this;
}
public String getType() {
return type;
}
- public void setType(String type) {
+ public MavenArtifact setType(String type) {
this.type = type;
+ return this;
}
public String getVersion() {
return version;
}
- public void setVersion(String version) {
+ public MavenArtifact setVersion(String version) {
this.version = version;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
index 3684c21d..34fbd424 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleRecord.java
@@ -17,39 +17,44 @@ public List getAttachedArtifacts() {
return attachedArtifacts;
}
- public void setAttachedArtifacts(List attachedArtifacts) {
+ public MavenModuleRecord setAttachedArtifacts(List attachedArtifacts) {
this.attachedArtifacts = attachedArtifacts;
+ return this;
}
public Build getParent() {
return parent;
}
- public void setParent(Build parent) {
+ public MavenModuleRecord setParent(Build parent) {
this.parent = parent;
+ return this;
}
public MavenArtifact getMainArtifact() {
return mainArtifact;
}
- public void setMainArtifact(MavenArtifact mainArtifact) {
+ public MavenModuleRecord setMainArtifact(MavenArtifact mainArtifact) {
this.mainArtifact = mainArtifact;
+ return this;
}
public MavenArtifact getPomArtifact() {
return pomArtifact;
}
- public void setPomArtifact(MavenArtifact pomArtifact) {
+ public MavenModuleRecord setPomArtifact(MavenArtifact pomArtifact) {
this.pomArtifact = pomArtifact;
+ return this;
}
public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ public MavenModuleRecord setUrl(String url) {
this.url = url;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/OfflineCause.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/OfflineCause.java
index 66c70cd1..30969dc9 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/OfflineCause.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/OfflineCause.java
@@ -17,6 +17,16 @@ public String getDescription() {
return description;
}
+ public OfflineCause setTimestamp(Long timestamp) {
+ this.timestamp = timestamp;
+ return this;
+ }
+
+ public OfflineCause setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
@@ -48,12 +58,4 @@ public boolean equals(Object obj) {
return true;
}
- public void setTimestamp(Long timestamp) {
- this.timestamp = timestamp;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParameterDefinitions.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParameterDefinitions.java
index b46c69e4..47247c74 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParameterDefinitions.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParameterDefinitions.java
@@ -30,11 +30,13 @@ public List getStringParams() {
return stringParams;
}
- public void setStringParams(List stringParams) {
+ public ParameterDefinitions setStringParams(List stringParams) {
this.stringParams = stringParams;
+ return this;
}
- public void addParam(StringParameterDefinition spd) {
+ public ParameterDefinitions addParam(StringParameterDefinition spd) {
stringParams.add(spd);
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParametersDefinitionProperty.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParametersDefinitionProperty.java
index efb033f5..bb88a128 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParametersDefinitionProperty.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ParametersDefinitionProperty.java
@@ -26,7 +26,8 @@ public ParameterDefinitions getPd() {
return pd;
}
- public void setPd(ParameterDefinitions pd) {
+ public ParametersDefinitionProperty setPd(ParameterDefinitions pd) {
this.pd = pd;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Plugin.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Plugin.java
index fe380202..6c9e09a1 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Plugin.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Plugin.java
@@ -27,9 +27,10 @@ public boolean isActive()
return active;
}
- public void setActive( boolean active )
+ public Plugin setActive(boolean active)
{
this.active = active;
+ return this;
}
public String getBackupVersion()
@@ -37,9 +38,10 @@ public String getBackupVersion()
return backupVersion;
}
- public void setBackupVersion( String backupVersion )
+ public Plugin setBackupVersion(String backupVersion)
{
this.backupVersion = backupVersion;
+ return this;
}
public boolean isBundled()
@@ -47,9 +49,10 @@ public boolean isBundled()
return bundled;
}
- public void setBundled( boolean bundled )
+ public Plugin setBundled(boolean bundled)
{
this.bundled = bundled;
+ return this;
}
public boolean isDowngradable()
@@ -57,9 +60,10 @@ public boolean isDowngradable()
return downgradable;
}
- public void setDowngradable( boolean downgradable )
+ public Plugin setDowngradable(boolean downgradable)
{
this.downgradable = downgradable;
+ return this;
}
public boolean isEnabled()
@@ -67,9 +71,10 @@ public boolean isEnabled()
return enabled;
}
- public void setEnabled( boolean enabled )
+ public Plugin setEnabled(boolean enabled)
{
this.enabled = enabled;
+ return this;
}
public boolean isHasUpdate()
@@ -77,9 +82,10 @@ public boolean isHasUpdate()
return hasUpdate;
}
- public void setHasUpdate( boolean hasUpdate )
+ public Plugin setHasUpdate(boolean hasUpdate)
{
this.hasUpdate = hasUpdate;
+ return this;
}
public String getLongName()
@@ -87,9 +93,10 @@ public String getLongName()
return longName;
}
- public void setLongName( String longName )
+ public Plugin setLongName(String longName)
{
this.longName = longName;
+ return this;
}
public boolean isPinned()
@@ -97,9 +104,10 @@ public boolean isPinned()
return pinned;
}
- public void setPinned( boolean pinned )
+ public Plugin setPinned(boolean pinned)
{
this.pinned = pinned;
+ return this;
}
public String getShortName()
@@ -107,9 +115,10 @@ public String getShortName()
return shortName;
}
- public void setShortName( String shortName )
+ public Plugin setShortName(String shortName)
{
this.shortName = shortName;
+ return this;
}
public String getSupportsDynamicLoad()
@@ -117,9 +126,10 @@ public String getSupportsDynamicLoad()
return supportsDynamicLoad;
}
- public void setSupportsDynamicLoad( String supportsDynamicLoad )
+ public Plugin setSupportsDynamicLoad(String supportsDynamicLoad)
{
this.supportsDynamicLoad = supportsDynamicLoad;
+ return this;
}
public String getUrl()
@@ -127,9 +137,10 @@ public String getUrl()
return url;
}
- public void setUrl( String url )
+ public Plugin setUrl(String url)
{
this.url = url;
+ return this;
}
public String getVersion()
@@ -137,9 +148,10 @@ public String getVersion()
return version;
}
- public void setVersion( String version )
+ public Plugin setVersion(String version)
{
this.version = version;
+ return this;
}
public List getDependencies()
@@ -147,9 +159,10 @@ public List getDependencies()
return dependencies;
}
- public void setDependencies( List dependencies )
+ public Plugin setDependencies(List dependencies)
{
this.dependencies = dependencies;
+ return this;
}
@Override
@@ -247,6 +260,4 @@ else if ( !version.equals( other.version ) )
return true;
}
-
-
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginDependency.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginDependency.java
index adb1331d..acac798d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginDependency.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginDependency.java
@@ -11,6 +11,33 @@ public class PluginDependency extends BaseModel
private String version;
+ public boolean isOptional() {
+ return optional;
+ }
+
+ public PluginDependency setOptional(boolean optional) {
+ this.optional = optional;
+ return this;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public PluginDependency setShortName(String shortName) {
+ this.shortName = shortName;
+ return this;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public PluginDependency setVersion(String version) {
+ this.version = version;
+ return this;
+ }
+
@Override
public int hashCode()
{
@@ -51,34 +78,4 @@ else if ( !version.equals( other.version ) )
return true;
}
- public boolean isOptional()
- {
- return optional;
- }
-
- public void setOptional( boolean optional )
- {
- this.optional = optional;
- }
-
- public String getShortName()
- {
- return shortName;
- }
-
- public void setShortName( String shortName )
- {
- this.shortName = shortName;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion( String version )
- {
- this.version = version;
- }
-
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
index f23ccaba..c08fc713 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java
@@ -14,8 +14,9 @@ public List getPlugins()
return plugins;
}
- public void setPlugins(List plugins) {
+ public PluginManager setPlugins(List plugins) {
this.plugins = plugins;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
index 3320ecb5..355dc910 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Queue.java
@@ -8,8 +8,7 @@
import java.util.List;
-public class Queue
- extends BaseModel
+public class Queue extends BaseModel
{
private List discoverableItems;
@@ -24,9 +23,10 @@ public List getDiscoverableItems()
return discoverableItems;
}
- public void setDiscoverableItems( List discoverableItems )
+ public Queue setDiscoverableItems(List discoverableItems)
{
this.discoverableItems = discoverableItems;
+ return this;
}
@Override
@@ -44,9 +44,10 @@ public List getItems()
return items;
}
- public void setItems( List items )
+ public Queue setItems(List items)
{
this.items = items;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
index 662b3e2b..ae2d8d3d 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItem.java
@@ -38,48 +38,54 @@ public List getActions() {
return actions;
}
- public void setActions(List actions) {
+ public QueueItem setActions(List actions) {
this.actions = actions;
+ return this;
}
public boolean isBlocked() {
return blocked;
}
- public void setBlocked(boolean blocked) {
+ public QueueItem setBlocked(boolean blocked) {
this.blocked = blocked;
+ return this;
}
public boolean isBuildable() {
return buildable;
}
- public void setBuildable(boolean buildable) {
+ public QueueItem setBuildable(boolean buildable) {
this.buildable = buildable;
+ return this;
}
public Long getId() {
return id;
}
- public void setId(Long id) {
+ public QueueItem setId(Long id) {
this.id = id;
+ return this;
}
public Long getInQueueSince() {
return inQueueSince;
}
- public void setInQueueSince(Long inQueueSince) {
+ public QueueItem setInQueueSince(Long inQueueSince) {
this.inQueueSince = inQueueSince;
+ return this;
}
public String getParams() {
return params;
}
- public void setParams(String params) {
+ public QueueItem setParams(String params) {
this.params = params;
+ return this;
}
public boolean isStuck() {
@@ -90,44 +96,50 @@ public QueueTask getTask() {
return task;
}
- public void setTask(QueueTask task) {
+ public QueueItem setTask(QueueTask task) {
this.task = task;
+ return this;
}
- public void setStuck(boolean stuck) {
+ public QueueItem setStuck(boolean stuck) {
this.stuck = stuck;
+ return this;
}
public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ public QueueItem setUrl(String url) {
this.url = url;
+ return this;
}
public String getWhy() {
return why;
}
- public void setWhy(String why) {
+ public QueueItem setWhy(String why) {
this.why = why;
+ return this;
}
public boolean isCancelled() {
return cancelled;
}
- public void setCancelled(boolean cancelled) {
+ public QueueItem setCancelled(boolean cancelled) {
this.cancelled = cancelled;
+ return this;
}
public Executable getExecutable() {
return executable;
}
- public void setExecutable(Executable executable) {
+ public QueueItem setExecutable(Executable executable) {
this.executable = executable;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
index 4c49ba5f..cbd6e390 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/QueueItemActions.java
@@ -15,8 +15,9 @@ public List getCauses() {
return causes;
}
- public void setCauses(List causes) {
+ public QueueItemActions setCauses(List causes) {
this.causes = causes;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Statis.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Statis.java
index b2c601c3..bb920ea4 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Statis.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/Statis.java
@@ -22,16 +22,18 @@ public List getHistory() {
return history;
}
- public void setHistory(List history) {
+ public Statis setHistory(List history) {
this.history = history;
+ return this;
}
public Double getLatest() {
return latest;
}
- public void setLatest(Double latest) {
+ public Statis setLatest(Double latest) {
this.latest = latest;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/StringParameterDefinition.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/StringParameterDefinition.java
index 740e3d77..2a89618f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/StringParameterDefinition.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/StringParameterDefinition.java
@@ -34,23 +34,26 @@ public String getName() {
return name;
}
- public void setName(String name) {
+ public StringParameterDefinition setName(String name) {
this.name = name;
+ return this;
}
public String getDescription() {
return description;
}
- public void setDescription(String description) {
+ public StringParameterDefinition setDescription(String description) {
this.description = description;
+ return this;
}
public String getDefaultValue() {
return defaultValue;
}
- public void setDefaultValue(String defaultValue) {
+ public StringParameterDefinition setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
+ return this;
}
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestCase.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestCase.java
index 8f4f3795..f3ac1331 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestCase.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestCase.java
@@ -21,9 +21,10 @@ public int getAge()
return age;
}
- public void setAge( int age )
+ public TestCase setAge(int age)
{
this.age = age;
+ return this;
}
public String getClassName()
@@ -31,9 +32,10 @@ public String getClassName()
return className;
}
- public void setClassName( String className )
+ public TestCase setClassName(String className)
{
this.className = className;
+ return this;
}
public double getDuration()
@@ -41,9 +43,10 @@ public double getDuration()
return duration;
}
- public void setDuration( double duration )
+ public TestCase setDuration(double duration)
{
this.duration = duration;
+ return this;
}
public int getFailedSince()
@@ -51,9 +54,10 @@ public int getFailedSince()
return failedSince;
}
- public void setFailedSince( int failedSince )
+ public TestCase setFailedSince(int failedSince)
{
this.failedSince = failedSince;
+ return this;
}
public String getName()
@@ -61,9 +65,10 @@ public String getName()
return name;
}
- public void setName( String name )
+ public TestCase setName(String name)
{
this.name = name;
+ return this;
}
public boolean isSkipped()
@@ -71,9 +76,10 @@ public boolean isSkipped()
return skipped;
}
- public void setSkipped( boolean skipped )
+ public TestCase setSkipped(boolean skipped)
{
this.skipped = skipped;
+ return this;
}
public String getStatus()
@@ -81,9 +87,10 @@ public String getStatus()
return status;
}
- public void setStatus( String status )
+ public TestCase setStatus(String status)
{
this.status = status;
+ return this;
}
public String getErrorDetails()
@@ -91,9 +98,10 @@ public String getErrorDetails()
return errorDetails;
}
- public void setErrorDetails( String errorDetails )
+ public TestCase setErrorDetails(String errorDetails)
{
this.errorDetails = errorDetails;
+ return this;
}
public String getErrorStackTrace()
@@ -101,9 +109,10 @@ public String getErrorStackTrace()
return errorStackTrace;
}
- public void setErrorStackTrace( String errorStackTrace )
+ public TestCase setErrorStackTrace(String errorStackTrace)
{
this.errorStackTrace = errorStackTrace;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChild.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChild.java
index 516bb446..a8d50ca0 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChild.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChild.java
@@ -12,16 +12,18 @@ public int getNumber() {
return number;
}
- public void setNumber(int number) {
+ public TestChild setNumber(int number) {
this.number = number;
+ return this;
}
public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ public TestChild setUrl(String url) {
this.url = url;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChildReport.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChildReport.java
index da920bec..7d3ea3f5 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChildReport.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestChildReport.java
@@ -13,8 +13,18 @@ public TestChild getChild() {
return child;
}
- public void setChild(TestChild child) {
+ public TestChildReport setChild(TestChild child) {
this.child = child;
+ return this;
+ }
+
+ public TestResult getResult() {
+ return result;
+ }
+
+ public TestChildReport setResult(TestResult result) {
+ this.result = result;
+ return this;
}
@Override
@@ -48,12 +58,4 @@ public boolean equals(Object obj) {
return true;
}
- public TestResult getResult() {
- return result;
- }
-
- public void setResult(TestResult result) {
- this.result = result;
- }
-
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
index b775c3f2..de3f0162 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestReport.java
@@ -47,40 +47,45 @@ public int getFailCount() {
return failCount;
}
- public void setFailCount(int failCount) {
+ public TestReport setFailCount(int failCount) {
this.failCount = failCount;
+ return this;
}
public int getSkipCount() {
return skipCount;
}
- public void setSkipCount(int skipCount) {
+ public TestReport setSkipCount(int skipCount) {
this.skipCount = skipCount;
+ return this;
}
public int getTotalCount() {
return totalCount;
}
- public void setTotalCount(int totalCount) {
+ public TestReport setTotalCount(int totalCount) {
this.totalCount = totalCount;
+ return this;
}
public String getUrlName() {
return urlName;
}
- public void setUrlName(String urlName) {
+ public TestReport setUrlName(String urlName) {
this.urlName = urlName;
+ return this;
}
public List getChildReports() {
return childReports;
}
- public void setChildReports(List childReports) {
+ public TestReport setChildReports(List childReports) {
this.childReports = childReports;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
index 934b32d4..5dda306f 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestResult.java
@@ -20,40 +20,54 @@ public double getDuration() {
return duration;
}
- public void setDuration(double duration) {
+ public TestResult setDuration(double duration) {
this.duration = duration;
+ return this;
}
public boolean isEmpty() {
return empty;
}
- public void setEmpty(boolean empty) {
+ public TestResult setEmpty(boolean empty) {
this.empty = empty;
+ return this;
}
public int getFailCount() {
return failCount;
}
- public void setFailCount(int failCount) {
+ public TestResult setFailCount(int failCount) {
this.failCount = failCount;
+ return this;
}
public int getPassCount() {
return passCount;
}
- public void setPassCount(int passCount) {
+ public TestResult setPassCount(int passCount) {
this.passCount = passCount;
+ return this;
}
public int getSkipCount() {
return skipCount;
}
- public void setSkipCount(int skipCount) {
+ public TestResult setSkipCount(int skipCount) {
this.skipCount = skipCount;
+ return this;
+ }
+
+ public List getSuites() {
+ return suites;
+ }
+
+ public TestResult setSuites(List suites) {
+ this.suites = suites;
+ return this;
}
@Override
@@ -97,12 +111,4 @@ public boolean equals(Object obj) {
return false;
return true;
}
-
- public List getSuites() {
- return suites;
- }
-
- public void setSuites(List suites) {
- this.suites = suites;
- }
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestSuites.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestSuites.java
index 45c96883..030b03b9 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestSuites.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/TestSuites.java
@@ -19,40 +19,45 @@ public double getDuration() {
return duration;
}
- public void setDuration(double duration) {
+ public TestSuites setDuration(double duration) {
this.duration = duration;
+ return this;
}
public String getId() {
return id;
}
- public void setId(String id) {
+ public TestSuites setId(String id) {
this.id = id;
+ return this;
}
public String getName() {
return name;
}
- public void setName(String name) {
+ public TestSuites setName(String name) {
this.name = name;
+ return this;
}
public String getTimestamp() {
return timestamp;
}
- public void setTimestamp(String timestamp) {
+ public TestSuites setTimestamp(String timestamp) {
this.timestamp = timestamp;
+ return this;
}
public List getCases() {
return cases;
}
- public void setCases(List cases) {
+ public TestSuites setCases(List cases) {
this.cases = cases;
+ return this;
}
@Override
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
index 5267e4f1..422cd5a4 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/View.java
@@ -13,8 +13,9 @@ public String getName() {
return name;
}
- public void setName(String name) {
+ public View setName(String name) {
this.name = name;
+ return this;
}
public View() {
@@ -24,16 +25,18 @@ public String getDescription() {
return description;
}
- public void setDescription(String description) {
+ public View setDescription(String description) {
this.description = description;
+ return this;
}
public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ public View setUrl(String url) {
this.url = url;
+ return this;
}
@Override
From 752c3b99a6288001cc199ccbfb39ce5124c1ba82 Mon Sep 17 00:00:00 2001
From: Jesper Terkelsen
Date: Mon, 15 Apr 2019 20:39:19 +0200
Subject: [PATCH 179/197] JENKINS-56186 Support for showing node labels via
java API (#388)
This information is already available in the API call.
---
ReleaseNotes.md | 11 ++++++
.../offbytwo/jenkins/model/ComputerLabel.java | 34 +++++++++++++++++++
.../jenkins/model/ComputerWithDetails.java | 10 ++++++
3 files changed, 55 insertions(+)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerLabel.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 7003cd77..62323e1c 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -54,6 +54,17 @@
Add the crumbFlag as the 2nd parameter of getConsoleOutputText method
+ * [JENKINS-56186][jissue-56186]
+
+ Added labels to computers
+
+ ```java
+ ComputerWithDetails computer = ...
+ for (ComputerLabel assignedLabel : computer.getAssignedLabels()) {
+ assignedLabel.getName()
+ }
+ ```
+
## Release 0.3.8
* [Fixed Issue 289][issue-289]
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerLabel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerLabel.java
new file mode 100644
index 00000000..e61ecd2d
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerLabel.java
@@ -0,0 +1,34 @@
+package com.offbytwo.jenkins.model;
+
+public class ComputerLabel {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ComputerLabel other = (ComputerLabel) obj;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
index 2ee6a55b..c57b40a5 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/ComputerWithDetails.java
@@ -18,6 +18,7 @@ public class ComputerWithDetails extends Computer {
private String displayName;
private List actions; //TODO: What kind of List?
private List executors;
+ private List assignedLabels;
private Boolean idle;
private Boolean jnlp;
private Boolean launchSupported;
@@ -46,6 +47,10 @@ public List getExecutors() {
return executors;
}
+ public List getAssignedLabels() {
+ return assignedLabels;
+ }
+
public Boolean getIdle() {
return idle;
}
@@ -169,6 +174,11 @@ public boolean equals(Object obj) {
return false;
} else if (!executors.equals(other.executors))
return false;
+ if (assignedLabels == null) {
+ if (other.assignedLabels != null)
+ return false;
+ } else if (!assignedLabels.equals(other.assignedLabels))
+ return false;
if (idle == null) {
if (other.idle != null)
return false;
From 28beabd817ec954ae3ecbabe4f3b54ba26ae9eae Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 15 Apr 2019 20:44:05 +0200
Subject: [PATCH 180/197] Fixed links in ReleaseNotes.md file.
---
ReleaseNotes.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 62323e1c..2c5d22ba 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1131,6 +1131,8 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-244]: https://github.com/jenkinsci/java-client-api/issues/244
[issue-268]: https://github.com/jenkinsci/java-client-api/issues/268
[issue-289]: https://github.com/jenkinsci/java-client-api/issues/289
+[issue-282]: https://github.com/jenkinsci/java-client-api/issues/282
+[issue-291]: https://github.com/jenkinsci/java-client-api/issues/291
[issue-298]: https://github.com/jenkinsci/java-client-api/issues/298
[issue-301]: https://github.com/jenkinsci/java-client-api/issues/301
[issue-394]: https://github.com/jenkinsci/java-client-api/issues/394
@@ -1161,3 +1163,4 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[jissue-38823]: https://issues.jenkins-ci.org/browse/JENKINS-38823
[jissue-46445]: https://issues.jenkins-ci.org/browse/JENKINS-46445
[jissue-46472]: https://issues.jenkins-ci.org/browse/JENKINS-46472
+[jissue-56186]: https://issues.jenkins-ci.org/browse/JENKINS-56186
From a70da3ce5b18b1bc765720d116dbe144036621cf Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 27 Apr 2019 21:24:55 +0200
Subject: [PATCH 181/197] Fixed typo.
---
ReleaseNotes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 2c5d22ba..9343daa1 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -9,7 +9,7 @@
cause we do not rely on Guava anymore. So you
can use the original artifact directly.
* This results in a bumping of the version
- number cause it a change which is breaking
+ number cause it is a change which is breaking
with previous version 0.3.8.
* [Fixed Issue 405][issue-405]
From 52d9d99461f188ac7d1adaf8e431b2125b861e30 Mon Sep 17 00:00:00 2001
From: Li Yudong
Date: Sun, 28 Apr 2019 21:32:00 +0800
Subject: [PATCH 182/197] Fix JENKINS-56585 change to post method (#391)
* change get to post
* add link to ReleaseNotes.md
---
ReleaseNotes.md | 6 ++++++
.../src/main/java/com/offbytwo/jenkins/JenkinsServer.java | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 9343daa1..45fc71da 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -64,6 +64,11 @@
assignedLabel.getName()
}
```
+
+ * [JENKINS-56585][jissue-56585]
+
+ Change request method of `QuietDown()` to POST
+
## Release 0.3.8
@@ -1164,3 +1169,4 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[jissue-46445]: https://issues.jenkins-ci.org/browse/JENKINS-46445
[jissue-46472]: https://issues.jenkins-ci.org/browse/JENKINS-46472
[jissue-56186]: https://issues.jenkins-ci.org/browse/JENKINS-56186
+[jissue-56585]: https://issues.jenkins-ci.org/browse/JENKINS-56585
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 e9973d59..01755baa 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/JenkinsServer.java
@@ -660,7 +660,7 @@ public JenkinsServer addStringParam(String jobName, String name, String descript
*/
public JenkinsServer quietDown() throws IOException {
try {
- client.get("/quietDown/");
+ client.post("/quietDown/");
} catch (org.apache.http.client.ClientProtocolException e) {
LOGGER.error("quietDown()", e);
}
From 86c8081b7532199708d9545903181e3f252884d5 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 28 Apr 2019 15:35:25 +0200
Subject: [PATCH 183/197] Reformatted Range.java
---
.../com/offbytwo/jenkins/helper/Range.java | 155 +++++++++---------
1 file changed, 80 insertions(+), 75 deletions(-)
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
index 8b70eb09..cdbdc60a 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/helper/Range.java
@@ -16,122 +16,127 @@
* The same as {0,N}.
* {N}: Just retrieve the N-th element. The same as {N,N+1}.
*
- *
+ *
* You can use the {@link Range} class like this:
- *
+ *
*
* Range fromAndTo = Range.build().from(1).to(5);
* Range fromOnly = Range.build().from(3).build();
* Range toOnly = Range.build().to(5).build();
* Range only = Range.build().only(3);
*
- *
- * @author Karl Heinz Marbaise
*
+ * @author Karl Heinz Marbaise
*/
public final class Range {
- public static final String CURLY_BRACKET_OPEN = "%7B"; // {
- public static final String CURLY_BRACKET_CLOSE = "%7D"; // }
+ /**
+ * This represents {@code {} (left curly bracket).
+ */
+ public static final String CURLY_BRACKET_OPEN = "%7B";
+ /**
+ * This represents {@code }} (right curly bracket).
+ */
+ public static final String CURLY_BRACKET_CLOSE = "%7D";
private Integer from;
private Integer to;
private Range() {
- this.from = null;
- this.to = null;
+ this.from = null;
+ this.to = null;
}
private Range setFrom(int from) {
- if (from < 0) {
- throw new IllegalArgumentException("from value must be greater or equal null.");
- }
- this.from = new Integer(from);
- return this;
+ if (from < 0) {
+ throw new IllegalArgumentException("from value must be greater or equal null.");
+ }
+ this.from = new Integer(from);
+ return this;
}
private Range setTo(int to) {
- if (to < 0) {
- throw new IllegalArgumentException("to must be greater or equal null.");
- }
- this.to = new Integer(to);
- return this;
+ if (to < 0) {
+ throw new IllegalArgumentException("to must be greater or equal null.");
+ }
+ this.to = new Integer(to);
+ return this;
}
public String getRangeString() {
- StringBuilder sb = new StringBuilder();
- sb.append(CURLY_BRACKET_OPEN);
- if (this.from != null) {
- sb.append(String.format("%d", this.from));
- }
+ StringBuilder sb = new StringBuilder();
+ sb.append(CURLY_BRACKET_OPEN);
+ if (this.from != null) {
+ sb.append(String.format("%d", this.from));
+ }
- sb.append(',');
+ sb.append(',');
- if (this.to != null) {
- sb.append(String.format("%d", this.to));
- }
+ if (this.to != null) {
+ sb.append(String.format("%d", this.to));
+ }
- sb.append(CURLY_BRACKET_CLOSE);
- return sb.toString();
+ sb.append(CURLY_BRACKET_CLOSE);
+ return sb.toString();
}
public static final class FromBuilder {
- private Range range;
-
- public FromBuilder(Range range) {
- this.range = range;
- }
-
- public Range to(int t) {
- this.range.setTo(t);
- if (range.to <= range.from) {
- throw new IllegalArgumentException("to must be greater than from");
- }
- return this.range;
- }
-
- public Range build() {
- return this.range;
- }
+ private Range range;
+
+ public FromBuilder(Range range) {
+ this.range = range;
+ }
+
+ public Range to(int t) {
+ this.range.setTo(t);
+ if (range.to <= range.from) {
+ throw new IllegalArgumentException("to must be greater than from");
+ }
+ return this.range;
+ }
+
+ public Range build() {
+ return this.range;
+ }
}
public static final class ToBuilder {
- private Range range;
+ private Range range;
- public ToBuilder(Range range) {
- this.range = range;
- }
+ public ToBuilder(Range range) {
+ this.range = range;
+ }
- public Range build() {
- return this.range;
- }
+ public Range build() {
+ return this.range;
+ }
}
public static final class Builder {
- private Range range;
-
- protected Builder() {
- this.range = new Range();
- }
-
- public FromBuilder from(int f) {
- this.range.setFrom(f);
- return new FromBuilder(this.range);
- }
-
- public ToBuilder to(int t) {
- this.range.setTo(t);
- return new ToBuilder(this.range);
- }
-
- public Range only(int only) {
- this.range.from = new Integer(only);
- this.range.to = new Integer(only + 1);
- return this.range;
- }
+ private Range range;
+
+ protected Builder() {
+ this.range = new Range();
+ }
+
+ public FromBuilder from(int f) {
+ this.range.setFrom(f);
+ return new FromBuilder(this.range);
+ }
+
+ public ToBuilder to(int t) {
+ this.range.setTo(t);
+ return new ToBuilder(this.range);
+ }
+
+ public Range only(int only) {
+ this.range.from = new Integer(only);
+ this.range.to = new Integer(only + 1);
+ return this.range;
+ }
}
public static Builder build() {
- return new Builder();
+ return new Builder();
}
}
\ No newline at end of file
From c4f5953d3d4dda92cd946ad3bf2b811524c32da9 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Tue, 30 Apr 2019 17:04:28 +0200
Subject: [PATCH 184/197] Get rid of JUnit rules.
---
.../offbytwo/jenkins/helper/RangeTest.java | 30 ++++++++-----------
1 file changed, 12 insertions(+), 18 deletions(-)
diff --git a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
index 5dcc9e38..b56aa467 100644
--- a/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
+++ b/jenkins-client/src/test/java/com/offbytwo/jenkins/helper/RangeTest.java
@@ -6,13 +6,10 @@
package com.offbytwo.jenkins.helper;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import com.offbytwo.jenkins.helper.Range;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
/**
*
@@ -23,7 +20,7 @@
* The same as {0,N}.
* - {N}: Just retrieve the N-th element. The same as {N,N+1}.
*
- *
+ *
* @author Karl Heinz Marbaise
*/
public class RangeTest {
@@ -56,27 +53,24 @@ public void onlyGiven() {
assertThat(r.getRangeString()).isEqualTo(getEscaped("3,4"));
}
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
@Test
public void toIsGivenLargerThanFromShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater than from");
- Range.build().from(5).to(1);
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> Range.build().from(5).to(1))
+ .withMessage("to must be greater than from");
}
@Test
public void fromGivenNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("from value must be greater or equal null.");
- Range.build().from(-1);
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> Range.build().from(-1))
+ .withMessage("from value must be greater or equal null.");
}
@Test
public void fromGivenPositiveToNegativeValueShouldResultInIllegalArgumentException() {
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("to must be greater or equal null.");
- Range.build().from(5).to(-1);
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> Range.build().from(5).to(-1))
+ .withMessage("to must be greater or equal null.");
}
}
From 5807954872d077645b87c8c06d5124938d846136 Mon Sep 17 00:00:00 2001
From: Jakub Zacek
Date: Thu, 31 May 2018 08:48:08 +0200
Subject: [PATCH 185/197] Fixed #309 - Added better support for Maven Modules
- slight modifications based on removement of Guava
---
ReleaseNotes.md | 9 +-
.../com/offbytwo/jenkins/model/BaseModel.java | 9 +-
.../jenkins/model/BuildWithDetails.java | 11 ++
.../java/com/offbytwo/jenkins/model/Job.java | 7 +-
.../jenkins/model/JobWithDetails.java | 19 +++-
.../jenkins/model/MavenJobWithDetails.java | 8 +-
.../offbytwo/jenkins/model/MavenModule.java | 51 ++++++++-
.../jenkins/model/MavenModuleWithDetails.java | 105 ++++++++++++++++++
8 files changed, 198 insertions(+), 21 deletions(-)
create mode 100644 jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleWithDetails.java
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 45fc71da..e69a8019 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,12 @@
## Release 0.4.0 (NOT RELEASED YET)
+ * [Fixed Issue 309][issue-309]
+
+ * Added possibility to get mode detailed data from Maven Modules from Jobs/Builds
+
+ Thanks for that to [Jakub Zacek](https://github.com/dawon).
+
* [Fixed Issue 395][issue-395]
* Remove google guava lib
@@ -187,7 +193,7 @@
Added new methods to JenkinsServer for stopping and restarting Jenkins. The methods are restart(Boolean crumbFlag), safeRestart(Boolean crumbFlag), exit(Boolean crumbFlag) and safeExit(Boolean crumbFlag)
Thanks for that to [Chids](https://github.com/Chids-gs).
-
+
## Release 0.3.7
* Changed Eclipse Formatting configuration.
@@ -1140,6 +1146,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-291]: https://github.com/jenkinsci/java-client-api/issues/291
[issue-298]: https://github.com/jenkinsci/java-client-api/issues/298
[issue-301]: https://github.com/jenkinsci/java-client-api/issues/301
+[issue-309]: https://github.com/jenkinsci/java-client-api/issues/309
[issue-394]: https://github.com/jenkinsci/java-client-api/issues/394
[issue-395]: https://github.com/jenkinsci/java-client-api/issues/395
[issue-396]: https://github.com/jenkinsci/java-client-api/issues/396
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
index 9c850ba2..5275d36b 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BaseModel.java
@@ -7,6 +7,7 @@
package com.offbytwo.jenkins.model;
import com.offbytwo.jenkins.client.JenkinsHttpConnection;
+import java.util.function.Predicate;
/**
* The base model.
@@ -17,8 +18,7 @@ public class BaseModel {
* The class.
*/
private String _class;
-
-
+
/**
* Get the class.
* @return class
@@ -47,4 +47,9 @@ public BaseModel setClient(final JenkinsHttpConnection client) {
this.client = client;
return this;
}
+
+ protected static Predicate super Build> isBuildNumberEqualTo(int buildNumber) {
+ return build -> build.getNumber() == buildNumber;
+ }
+
}
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
index ab9e201d..d3ce5842 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java
@@ -533,6 +533,17 @@ public InputStream downloadArtifact(Artifact a) throws IOException, URISyntaxExc
"");
return client.getFile(artifactUri);
}
+
+ /**
+ * Returns {@link MavenModuleWithDetails} based on its name
+ *
+ * @param name module name
+ * @return {@link MavenModuleWithDetails}
+ * @throws IOException in case of error.
+ */
+ public MavenModuleWithDetails getModule(String name) throws IOException {
+ return client.get(getUrl() + name, MavenModuleWithDetails.class);
+ }
@Override
public boolean equals(Object obj) {
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 ba1968a1..7d5313fd 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
@@ -6,16 +6,13 @@
package com.offbytwo.jenkins.model;
-import static org.apache.commons.lang.StringUtils.join;
-
+import com.offbytwo.jenkins.client.util.EncodingUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.Map;
-
-import com.offbytwo.jenkins.client.util.EncodingUtils;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -186,4 +183,6 @@ public String apply(Map.Entry entry) {
return EncodingUtils.formParameter(entry.getKey()) + "=" + EncodingUtils.formParameter(entry.getValue());
}
}
+
+
}
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 b5894015..f13903cf 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
@@ -18,7 +18,6 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.function.Predicate;
import static com.offbytwo.jenkins.helper.FunctionalHelper.SET_CLIENT;
import static java.util.stream.Collectors.toList;
@@ -31,7 +30,7 @@ public class JobWithDetails extends Job {
private boolean buildable;
- private List builds;
+ private List builds = Collections.emptyList();
private Build firstBuild;
@@ -438,10 +437,6 @@ public List getUpstreamProjects() {
}
}
- private static Predicate super Build> isBuildNumberEqualTo(int buildNumber) {
- return build -> build.getNumber() == buildNumber;
- }
-
public QueueItem getQueueItem() {
return this.queueItem;
}
@@ -456,6 +451,18 @@ public QueueItem getQueueItem() {
public Optional getBuildByNumber(final int buildNumber) {
return builds.stream().filter(isBuildNumberEqualTo(buildNumber)).findFirst();
}
+
+ /**
+ * Get a module of a {@link Job}
+ *
+ * @param moduleName name of the {@link MavenModule}
+ * @return The {@link MavenModuleWithDetails} selected by the given module name
+ * @throws java.io.IOException in case of errors.
+ *
+ */
+ public MavenModuleWithDetails getModule(String moduleName) throws IOException {
+ return client.get(getUrl() + moduleName, MavenModuleWithDetails.class);
+ }
/**
* Empty description to be used for {@link #updateDescription(String)} or
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
index bb3f0c62..3eaf7fc0 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenJobWithDetails.java
@@ -1,7 +1,6 @@
package com.offbytwo.jenkins.model;
import com.offbytwo.jenkins.client.util.EncodingUtils;
-import com.offbytwo.jenkins.helper.FunctionalHelper;
import com.offbytwo.jenkins.helper.Range;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
@@ -10,7 +9,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import java.util.function.Predicate;
import static com.offbytwo.jenkins.helper.FunctionalHelper.SET_CLIENT;
import static java.util.stream.Collectors.toList;
@@ -276,11 +274,7 @@ public List getUpstreamProjects() {
}
}
- private static Predicate isBuildNumberEqualTo(int buildNumber) {
- return build -> build.getNumber() == buildNumber;
- }
-
- /**
+ /**
* @param buildNumber The build you would like to select.
* @return Optional which contains the {@link MavenBuild}.
*/
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
index 07c61bb1..91c7ef1c 100644
--- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModule.java
@@ -1,10 +1,59 @@
+/*
+ * Copyright (c) 2018 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
package com.offbytwo.jenkins.model;
+import java.io.IOException;
import java.util.List;
-
+/**
+ *
+ * @author Karl Heinz Marbaise, Ricardo Zanini, René Scheibe, Jakub Zacek
+ */
public class MavenModule extends BaseModel {
private List moduleRecords;
+ private String name;
+ private String url;
+ private String color;
+ private String displayName;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public MavenModuleWithDetails details() throws IOException {
+ return client.get(url, MavenModuleWithDetails.class);
+ }
public List getModuleRecords() {
return moduleRecords;
diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleWithDetails.java
new file mode 100644
index 00000000..d168a45e
--- /dev/null
+++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/MavenModuleWithDetails.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2018 Cosmin Stejerean, Karl Heinz Marbaise, and contributors.
+ *
+ * Distributed under the MIT license: http://opensource.org/licenses/MIT
+ */
+package com.offbytwo.jenkins.model;
+
+import static com.offbytwo.jenkins.helper.FunctionalHelper.SET_CLIENT;
+import static java.util.stream.Collectors.toList;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Model Class for Maven Modules
+ *
+ * @author Jakub Zacek
+ */
+public class MavenModuleWithDetails extends BaseModel {
+
+ private List builds = Collections.emptyList();
+ private List actions = Collections.emptyList();
+ private String displayName;
+ private BuildResult result;
+ private String url;
+ private long duration;
+ private long timestamp;
+
+ public List getActions() {
+ return actions;
+ }
+
+ public void setActions(List actions) {
+ this.actions = actions;
+ }
+
+ public void setBuilds(List builds) {
+ this.builds = builds;
+ }
+
+ public List getBuilds() {
+ return builds.stream()
+ .map(SET_CLIENT(this.getClient()))
+ .collect(toList());
+ }
+
+ public Build getBuildByNumber(final int buildNumber) {
+ return builds.stream()
+ .filter(isBuildNumberEqualTo(buildNumber))
+ .map(SET_CLIENT(this.getClient()))
+ .findFirst()
+ .orElse(Build.BUILD_HAS_NEVER_RUN);
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public BuildResult getResult() {
+ return result;
+ }
+
+ public void setResult(BuildResult result) {
+ this.result = result;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public long getDuration() {
+ return duration;
+ }
+
+ public void setDuration(long duration) {
+ this.duration = duration;
+ }
+
+ public String getConsoleOutputText() throws IOException {
+ return client.get(getUrl() + "/logText/progressiveText");
+ }
+
+ public TestReport getTestReport() throws IOException {
+ return client.get(this.getUrl() + "/testReport/?depth=1", TestReport.class);
+ }
+
+}
From 99895b2c055bd44a5110ec7662be96c46e3a591b Mon Sep 17 00:00:00 2001
From: based2
Date: Fri, 31 May 2019 13:57:38 +0200
Subject: [PATCH 186/197] update jackson from 2.9.8 to 2.9.9 CVE-2019-12086
(#411)
https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.9.9
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 8015cefa..287a3ec9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
4.5.8
4.4.11
4.5.8
- 2.9.8
+ 2.9.9
From 775ef812f8af35ad73c021287e138c6258518734 Mon Sep 17 00:00:00 2001
From: based2
Date: Fri, 31 May 2019 13:58:07 +0200
Subject: [PATCH 187/197] update commons-lang from 3.8.1 to 3.9 (#412)
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 287a3ec9..06911f60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,7 +57,7 @@
2.4
1.4.7-jenkins-1
1.6.1
- 3.8.1
+ 3.9
2.4
4.5.8
4.4.11
From e1285835fcbdd43766b3e8e1626f6f3626a15035 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 14 Sep 2019 15:02:53 +0200
Subject: [PATCH 188/197] Fixed #424 - Upgrade Maven Plugins
---
pom.xml | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/pom.xml b/pom.xml
index 06911f60..ffa639db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
true
true
- 1.5.3
+ 1.6.0
1.644
@@ -165,7 +165,7 @@
org.testng
testng
- 6.14.2
+ 7.0.0
test
@@ -224,7 +224,7 @@
org.apache.maven.plugins
maven-help-plugin
- 3.1.1
+ 3.2.0
org.apache.maven.plugins
@@ -239,7 +239,7 @@
org.apache.maven.plugins
maven-source-plugin
- 3.0.1
+ 3.1.0
1.644
4.12
- 1.9.5
+ 3.0.0
2.4
1.4.7-jenkins-1
1.6.1
@@ -166,33 +166,35 @@
org.testng
testng
7.0.0
- test
+
+
+ org.junit
+ junit-bom
+ 5.5.2
+ import
+ pom
junit
junit
${junit.version}
- test
org.mockito
mockito-core
${mockito-core.version}
- test
org.jenkins-ci.main
jenkins-test-harness
${jenkins-version}
- test
org.assertj
assertj-core
3.12.2
- test
@@ -202,13 +204,10 @@
org.apache.logging.log4j
- log4j-core
- 2.11.1
-
-
- org.apache.logging.log4j
- log4j-slf4j-impl
- 2.11.1
+ log4j-bom
+ 2.12.1
+ import
+ pom
xml-apis
From fe2601a77733887a0cdfa4d20d46997765e8e8ca Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sat, 14 Sep 2019 15:27:34 +0200
Subject: [PATCH 190/197] Fixed #426 - Upgrade dom4j
---
jenkins-client/pom.xml | 2 +-
pom.xml | 5 ++---
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index ea595a4d..b70b08fc 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -34,7 +34,7 @@
- dom4j
+ org.dom4j
dom4j
diff --git a/pom.xml b/pom.xml
index 68704676..98ee517d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,6 @@
3.0.0
2.4
1.4.7-jenkins-1
- 1.6.1
3.9
2.4
4.5.8
@@ -105,9 +104,9 @@
- dom4j
+ org.dom4j
dom4j
- ${dom4j.version}
+ 2.1.1
From fc3b0e38179ac2ff435bfd529d2fa3841e2f2bef Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 16 Apr 2020 15:14:10 +0200
Subject: [PATCH 191/197] Bump jackson-databind.version from 2.9.9 to 2.10.3
(#450)
Bumps `jackson-databind.version` from 2.9.9 to 2.10.3.
Updates `jackson-annotations` from 2.9.9 to 2.10.3
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)
Updates `jackson-core` from 2.9.9 to 2.10.3
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.9.9...jackson-core-2.10.3)
Updates `jackson-databind` from 2.9.9 to 2.10.3
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 98ee517d..821999a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,7 +61,7 @@
4.5.8
4.4.11
4.5.8
- 2.9.9
+ 2.10.3
From 1a744770112f79708b3e3ea3106c324be4679374 Mon Sep 17 00:00:00 2001
From: Jonathan Leitschuh
Date: Thu, 16 Apr 2020 09:25:27 -0400
Subject: [PATCH 192/197] Use HTTPS instead of HTTP to resolve dependencies
(#448)
This fixes a security vulnerability in this project where the `pom.xml`
files were configuring Maven to resolve dependencies over HTTP instead of
HTTPS.
Signed-off-by: Jonathan Leitschuh
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 821999a0..bfa5d307 100644
--- a/pom.xml
+++ b/pom.xml
@@ -477,7 +477,7 @@
repo.jenkins-ci.org
- http://repo.jenkins-ci.org/public/
+ https://repo.jenkins-ci.org/public/
From 5ac251377875083027d5e54c0e611f6b59deb335 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 3 May 2020 00:29:01 +0200
Subject: [PATCH 193/197] Added Funding.
---
.github/FUNDING.yml | 1 +
1 file changed, 1 insertion(+)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..5b8d5402
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: [khmarbaise]
\ No newline at end of file
From 0376def0c01f2f7c91b8b3a544fab5c623b7be9a Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 27 Jul 2020 19:09:34 +0200
Subject: [PATCH 194/197] Fixed #464 - Migrate from xml-apis to
xerces:xmlParserAPI
---
ReleaseNotes.md | 5 +++++
jenkins-client/pom.xml | 5 ++---
pom.xml | 6 +++---
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index e69a8019..7847f3a9 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,10 @@
## Release 0.4.0 (NOT RELEASED YET)
+ * [Fixed Issue 464][issue-464]
+
+ * Replaced xml-apis with xerces-xmlParserAPI.
+
* [Fixed Issue 309][issue-309]
* Added possibility to get mode detailed data from Maven Modules from Jobs/Builds
@@ -1156,6 +1160,7 @@ TestReport testReport = mavenJob.getLastSuccessfulBuild().getTestReport();
[issue-401]: https://github.com/jenkinsci/java-client-api/issues/401
[issue-402]: https://github.com/jenkinsci/java-client-api/issues/402
[issue-405]: https://github.com/jenkinsci/java-client-api/issues/405
+[issue-464]: https://github.com/jenkinsci/java-client-api/issues/464
[pull-123]: https://github.com/jenkinsci/java-client-api/pull/123
[pull-149]: https://github.com/jenkinsci/java-client-api/pull/149
[pull-158]: https://github.com/jenkinsci/java-client-api/pull/158
diff --git a/jenkins-client/pom.xml b/jenkins-client/pom.xml
index b70b08fc..2cbc3df9 100644
--- a/jenkins-client/pom.xml
+++ b/jenkins-client/pom.xml
@@ -109,10 +109,9 @@
assertj-core
test
-
- xml-apis
- xml-apis
+ xerces
+ xmlParserAPIs
diff --git a/pom.xml b/pom.xml
index bfa5d307..25ea5774 100644
--- a/pom.xml
+++ b/pom.xml
@@ -209,9 +209,9 @@
pom
- xml-apis
- xml-apis
- 1.4.01
+ xerces
+ xmlParserAPIs
+ 2.6.1
From 182fb4144862c956e0b199cc56d3ee83ab610dba Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Mon, 27 Jul 2020 19:29:10 +0200
Subject: [PATCH 195/197] Fixed #465 - Remove asciidoctor site parts
---
ReleaseNotes.md | 5 +++++
jenkins-client/src/site/asciidoc/index.adoc | 7 -------
jenkins-client/src/site/asciidoc/sub/sub.adoc | 1 -
pom.xml | 21 +------------------
4 files changed, 6 insertions(+), 28 deletions(-)
delete mode 100644 jenkins-client/src/site/asciidoc/index.adoc
delete mode 100644 jenkins-client/src/site/asciidoc/sub/sub.adoc
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 7847f3a9..71176ed3 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -2,6 +2,11 @@
## Release 0.4.0 (NOT RELEASED YET)
+ * [Fixed Issue 465][issue-465]
+
+ * Remove asciidoctor site parts
+ * AS preparation for user guide.
+
* [Fixed Issue 464][issue-464]
* Replaced xml-apis with xerces-xmlParserAPI.
diff --git a/jenkins-client/src/site/asciidoc/index.adoc b/jenkins-client/src/site/asciidoc/index.adoc
deleted file mode 100644
index 942df55c..00000000
--- a/jenkins-client/src/site/asciidoc/index.adoc
+++ /dev/null
@@ -1,7 +0,0 @@
-:revnumber: ${project-version}
-
-== Overview ==
-
-Here you can see the first page.
-This is the first.
-
diff --git a/jenkins-client/src/site/asciidoc/sub/sub.adoc b/jenkins-client/src/site/asciidoc/sub/sub.adoc
deleted file mode 100644
index 345e6aef..00000000
--- a/jenkins-client/src/site/asciidoc/sub/sub.adoc
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/pom.xml b/pom.xml
index 25ea5774..d4eb4c74 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
true
true
- 1.6.0
+ 2.0.0
1.644
@@ -362,26 +362,7 @@
doxia-module-markdown
1.9
-
- org.asciidoctor
- asciidoctor-maven-plugin
- ${asciidoctor-maven-plugin.version}
-
-
-
-
-
- font
- coderay
- style
- 2
- ${project.version}
- true
- true
-
-
-
From 78a3e33de7f7c31f8e8f4013fc3b4c9824fc42dc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 6 Jun 2020 05:49:34 +0000
Subject: [PATCH 196/197] Bump dom4j from 2.1.1 to 2.1.3
Bumps [dom4j](https://github.com/dom4j/dom4j) from 2.1.1 to 2.1.3.
- [Release notes](https://github.com/dom4j/dom4j/releases)
- [Commits](https://github.com/dom4j/dom4j/compare/version-2.1.1...version-2.1.3)
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d4eb4c74..f88539d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -106,7 +106,7 @@
org.dom4j
dom4j
- 2.1.1
+ 2.1.3
From ddf6a850beacf79480280c0c3c067bf73d84bca5 Mon Sep 17 00:00:00 2001
From: Karl Heinz Marbaise
Date: Sun, 20 Sep 2020 22:27:39 +0200
Subject: [PATCH 197/197] Add .sdkmanrc file.
---
.sdkmanrc | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 .sdkmanrc
diff --git a/.sdkmanrc b/.sdkmanrc
new file mode 100644
index 00000000..4fc377de
--- /dev/null
+++ b/.sdkmanrc
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Enable auto-env through the sdkman_auto_env config
+# Add key=value pairs of SDKs to use below
+java=8.0.252.hs-adpt