From 35ba1a6f765f72a1d91a5456c7556e6274f8c3a9 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Thu, 3 Jan 2013 15:09:43 +0100 Subject: o Moving Jenkins XML objects and parsing to it's own package. o Removing fields from JenkinsBuild that's read from the XML later on. --- .../esper/testing/jenkins/xml/JenkinsJobXml.java | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java (limited to 'src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java') diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java new file mode 100755 index 0000000..eb4c874 --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java @@ -0,0 +1,88 @@ +package io.trygvis.esper.testing.jenkins.xml; + +import java.net.URI; + +import org.jdom2.Element; + +import fj.F; +import fj.data.Option; +import io.trygvis.esper.testing.Util; + +import static fj.data.Option.some; +import static io.trygvis.esper.testing.Util.child; +import static io.trygvis.esper.testing.Util.childText; + +public class JenkinsJobXml { + public enum JenkinsJobType { + FREE_STYLE, MAVEN_MODULE_SET, MAVEN_MODULE, MATRIX, MATRIX_CONFIGURATION + } + + public final JenkinsJobType type; + public final Option description; + public final Option displayName; + public final Option name; + public final URI url; + public final Option color; + public final boolean buildable; + public final Option lastBuild; + public final Option lastCompletedBuild; + public final Option lastFailedBuild; + public final Option lastSuccessfulBuild; + public final Option lastUnsuccessfulBuild; + + protected JenkinsJobXml(JenkinsJobType type, Option description, Option displayName, + Option name, URI url, Option color, boolean buildable, + Option lastBuild, Option lastCompletedBuild, + Option lastFailedBuild, Option lastSuccessfulBuild, + Option lastUnsuccessfulBuild) { + this.type = type; + this.description = description; + this.displayName = displayName; + this.name = name; + this.url = url; + this.color = color; + this.buildable = buildable; + this.lastBuild = lastBuild; + this.lastCompletedBuild = lastCompletedBuild; + this.lastFailedBuild = lastFailedBuild; + this.lastSuccessfulBuild = lastSuccessfulBuild; + this.lastUnsuccessfulBuild = lastUnsuccessfulBuild; + } + + static class BuildXml { + public final int number; + public final URI url; + public static F> buildXml = new F>() { + public Option f(Element element) { + Option number = childText(element, "number").bind(Util.parseInt); + Option url = childText(element, "url").bind(Util.parseUri); + + if (number.isNone() || url.isNone()) { + return Option.none(); + } + + return some(new BuildXml(number.some(), url.some())); + } + }; + + BuildXml(int number, URI url) { + this.number = number; + this.url = url; + } + } + + public static JenkinsJobXml parse(URI url, JenkinsJobType type, Element root) { + return new JenkinsJobXml(type, + childText(root, "description"), + childText(root, "displayName"), + childText(root, "name"), + childText(root, "url").bind(Util.parseUri).orSome(url), + childText(root, "color"), + childText(root, "buildable").bind(Util.parseBoolean).orSome(false), + child(root, "lastBuild").bind(BuildXml.buildXml), + child(root, "lastCompletedBuild").bind(BuildXml.buildXml), + child(root, "lastFailedBuild").bind(BuildXml.buildXml), + child(root, "lastSuccessfulBuild").bind(BuildXml.buildXml), + child(root, "lastUnsuccessfulBuild").bind(BuildXml.buildXml)); + } +} -- cgit v1.2.3