aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/AbstractEntity.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/Config.java10
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/Daos.java6
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/EntityRef.java18
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/Util.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/TablePoller.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java9
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/FileDao.java14
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java49
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java4
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java52
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java16
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java50
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java28
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJob.java2
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java5
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java4
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java1
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsBuildXml.java (renamed from src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java)19
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsEntryXml.java17
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java (renamed from src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java)6
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsXml.java31
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/util/EasyX509TrustManager.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/util/XmlParser.java8
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/util/sql/ResultSetF.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/util/sql/SqlF.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/util/sql/SqlOption.java22
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/util/sql/SqlP0.java7
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/web/resource/CoreResource.java2
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/web/resource/JenkinsResource.java26
-rwxr-xr-x[-rw-r--r--]src/main/resources/ddl-jenkins.sql8
-rwxr-xr-x[-rw-r--r--]src/test/java/io/trygvis/esper/testing/jenkins/CreateMissingMavenModuleJobsApp.java1
-rwxr-xr-x[-rw-r--r--]src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java6
-rwxr-xr-x[-rw-r--r--]src/test/java/io/trygvis/esper/testing/jenkins/SetJobTypeApp.java1
35 files changed, 302 insertions, 120 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/AbstractEntity.java b/src/main/java/io/trygvis/esper/testing/AbstractEntity.java
index 927a223..927a223 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/AbstractEntity.java
+++ b/src/main/java/io/trygvis/esper/testing/AbstractEntity.java
diff --git a/src/main/java/io/trygvis/esper/testing/Config.java b/src/main/java/io/trygvis/esper/testing/Config.java
index d1bc2bd..e184d46 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/Config.java
+++ b/src/main/java/io/trygvis/esper/testing/Config.java
@@ -41,6 +41,7 @@ public class Config {
}
}
+ public final String appName;
public final GitoriousConfig gitorious;
public final long nexusUpdateInterval;
@@ -53,8 +54,10 @@ public class Config {
private BoneCPDataSource dataSource;
- public Config(GitoriousConfig gitorious, long nexusUpdateInterval, long jenkinsUpdateInterval, String databaseUrl,
- String databaseUsername, String databasePassword) {
+ public Config(String appName, GitoriousConfig gitorious,
+ long nexusUpdateInterval, long jenkinsUpdateInterval,
+ String databaseUrl, String databaseUsername, String databasePassword) {
+ this.appName = appName;
this.gitorious = gitorious;
this.nexusUpdateInterval = nexusUpdateInterval;
this.jenkinsUpdateInterval = jenkinsUpdateInterval;
@@ -73,7 +76,8 @@ public class Config {
properties.load(inputStream);
}
- return new Config(GitoriousConfig.fromProperties(properties),
+ return new Config(appName,
+ GitoriousConfig.fromProperties(properties),
getProperty(properties, "nexus.updateInterval").bind(parseInt).valueE("Missing required property: nexus.updateInterval") * 1000,
getProperty(properties, "jenkins.updateInterval").bind(parseInt).valueE("Missing required property: jenkins.updateInterval") * 1000,
trimToNull(properties.getProperty("database.url")),
diff --git a/src/main/java/io/trygvis/esper/testing/Daos.java b/src/main/java/io/trygvis/esper/testing/Daos.java
index 142efd6..1a7cb0b 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/Daos.java
+++ b/src/main/java/io/trygvis/esper/testing/Daos.java
@@ -25,6 +25,7 @@ public class Daos implements Closeable {
}
private final Connection connection;
+ public final FileDao fileDao;
public final GitoriousEventDao gitoriousEventDao;
public final GitoriousProjectDao gitoriousProjectDao;
public final GitoriousRepositoryDao gitoriousRepositoryDao;
@@ -37,6 +38,7 @@ public class Daos implements Closeable {
public Daos(Connection c) throws SQLException {
this.connection = c;
this.seq = counter++;
+ fileDao = new FileDao(c);
gitoriousEventDao = new GitoriousEventDao(c);
gitoriousProjectDao = new GitoriousProjectDao(c);
gitoriousRepositoryDao = new GitoriousRepositoryDao(c);
@@ -58,4 +60,8 @@ public class Daos implements Closeable {
public void commit() throws SQLException {
connection.commit();
}
+
+ public void rollback() throws SQLException {
+ connection.rollback();
+ }
}
diff --git a/src/main/java/io/trygvis/esper/testing/EntityRef.java b/src/main/java/io/trygvis/esper/testing/EntityRef.java
index a4d25cd..cafcdd5 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/EntityRef.java
+++ b/src/main/java/io/trygvis/esper/testing/EntityRef.java
@@ -3,6 +3,8 @@ package io.trygvis.esper.testing;
import java.sql.*;
import java.util.*;
+import static io.trygvis.esper.testing.EntityRef.JenkinsBuildRef.*;
+
public abstract class EntityRef {
public final UUID uuid;
public final String type;
@@ -22,20 +24,22 @@ public abstract class EntityRef {
UUID uuid = UUID.fromString(rs.getString(i));
switch (type) {
- case "jenkins":
- return new JenkinsRef(uuid);
+ case JENKINS_BUILD_REF:
+ return new JenkinsBuildRef(uuid);
default:
throw new SQLException("Unknown reference type: " + type);
}
}
- public static class JenkinsRef extends EntityRef {
- private JenkinsRef(UUID uuid) {
- super(uuid, "jenkins");
+ public static class JenkinsBuildRef extends EntityRef {
+ public static final String JENKINS_BUILD_REF = "jenkins-build";
+
+ private JenkinsBuildRef(UUID uuid) {
+ super(uuid, JENKINS_BUILD_REF);
}
}
- public static JenkinsRef jenkinsRef(UUID uuid) {
- return new JenkinsRef(uuid);
+ public static JenkinsBuildRef jenkinsBuildRef(UUID uuid) {
+ return new JenkinsBuildRef(uuid);
}
}
diff --git a/src/main/java/io/trygvis/esper/testing/Util.java b/src/main/java/io/trygvis/esper/testing/Util.java
index c33e64c..c33e64c 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/Util.java
+++ b/src/main/java/io/trygvis/esper/testing/Util.java
diff --git a/src/main/java/io/trygvis/esper/testing/core/TablePoller.java b/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
index 612a087..612a087 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
diff --git a/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java b/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
index 3183304..3183304 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java b/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
index 416faf6..c7923d0 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
@@ -81,6 +81,15 @@ public class BuildDao {
}
}
+ public SqlOption<UUID> findBuildByReference(EntityRef ref) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT uuid FROM build WHERE reference_type=? AND reference_uuid=?")) {
+ int i = 1;
+ s.setString(i++, ref.type);
+ s.setString(i, ref.uuid.toString());
+ return fromRs(s.executeQuery()).map(getUuid);
+ }
+ }
+
public List<BuildDto> selectBuildsByPerson(UUID person, PageRequest page) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + BUILD + " FROM build b, build_participant bp WHERE bp.person=? AND b.uuid = bp.build ORDER BY created_date LIMIT ? OFFSET ?")) {
int i = 1;
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java b/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
index c418970..affe1c8 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
@@ -1,10 +1,13 @@
package io.trygvis.esper.testing.core.db;
+import io.trygvis.esper.testing.util.sql.*;
+
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;
+import static io.trygvis.esper.testing.util.sql.SqlOption.*;
import static java.lang.System.*;
public class FileDao {
@@ -27,4 +30,15 @@ public class FileDao {
return uuid;
}
}
+
+ public SqlOption<InputStream> load(UUID uuid) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT data FROM file WHERE uuid=?")) {
+ s.setString(1, uuid.toString());
+ ResultSet rs = s.executeQuery();
+ if(!rs.next()) {
+ return none();
+ }
+ return some(rs.getBinaryStream(1));
+ }
+ }
}
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java b/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
index 62c4f2b..96569dd 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
@@ -14,7 +14,7 @@ import static java.lang.System.*;
public class PersonDao {
private final Connection c;
- public static final String PERSON = "uuid, created_date, name";
+ public static final String PERSON = "uuid, created_date, name, mail";
public static final SqlF<ResultSet, PersonDto> person = new SqlF<ResultSet, PersonDto>() {
public PersonDto apply(ResultSet rs) throws SQLException {
@@ -22,6 +22,7 @@ public class PersonDao {
return new PersonDto(
UUID.fromString(rs.getString(i++)),
new DateTime(rs.getTimestamp(i++).getTime()),
+ rs.getString(i++),
rs.getString(i));
}
};
@@ -63,6 +64,19 @@ public class PersonDao {
// Person
// -----------------------------------------------------------------------
+ public UUID insertPerson(String mail, String name) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("INSERT INTO person(" + PERSON + ") VALUES(?, ?, ?, ?)")) {
+ UUID uuid = UUID.randomUUID();
+ int i = 1;
+ s.setString(i++, uuid.toString());
+ s.setTimestamp(i++, new Timestamp(currentTimeMillis()));
+ s.setString(i++, name);
+ s.setString(i, mail);
+ s.executeUpdate();
+ return uuid;
+ }
+ }
+
public SqlOption<PersonDto> selectPerson(UUID uuid) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person WHERE uuid=?")) {
int i = 1;
@@ -71,7 +85,15 @@ public class PersonDao {
}
}
- public List<PersonDto> selectPerson(PageRequest pageRequest) throws SQLException {
+ public SqlOption<PersonDto> selectPersonByMail(String mail) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person WHERE mail=?")) {
+ int i = 1;
+ s.setString(i, mail);
+ return fromRs(s.executeQuery()).map(person);
+ }
+ }
+
+ public List<PersonDto> selectPersons(PageRequest pageRequest) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person ORDER BY created_date, name LIMIT ? OFFSET ?")) {
int i = 1;
s.setInt(i++, pageRequest.count.orSome(10));
@@ -95,6 +117,29 @@ public class PersonDao {
}
// -----------------------------------------------------------------------
+ // Person Jenkins User
+ // -----------------------------------------------------------------------
+
+ public void insertPersonJenkinsUser(UUID person, UUID jenkinsUser) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("INSERT INTO person_jenkins_user(person, jenkins_user) VALUES(?, ?)")) {
+ int i = 1;
+ s.setString(i++, person.toString());
+ s.setString(i, jenkinsUser.toString());
+ s.executeUpdate();
+ }
+ }
+
+ public boolean hasPersonJenkinsUser(UUID person, UUID jenkinsUser) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT 1 FROM person_jenkins_user WHERE person=? AND jenkins_user=?")) {
+ int i = 1;
+ s.setString(i++, person.toString());
+ s.setString(i, jenkinsUser.toString());
+ ResultSet rs = s.executeQuery();
+ return rs.next();
+ }
+ }
+
+ // -----------------------------------------------------------------------
// Badge
// -----------------------------------------------------------------------
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java b/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
index c643fc7..6dbea74 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
@@ -7,9 +7,11 @@ import java.util.*;
public class PersonDto extends AbstractEntity {
public final String name;
+ public final String mail;
- public PersonDto(UUID uuid, DateTime createdDate, String name) {
+ public PersonDto(UUID uuid, DateTime createdDate, String name, String mail) {
super(uuid, createdDate);
this.name = name;
+ this.mail = mail;
}
}
diff --git a/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java b/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
index bfcd013..3270db1 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
@@ -1,22 +1,28 @@
package io.trygvis.esper.testing.core.jenkins;
import com.jolbox.bonecp.*;
+import fj.data.*;
import io.trygvis.esper.testing.*;
import io.trygvis.esper.testing.core.*;
import io.trygvis.esper.testing.core.db.*;
import io.trygvis.esper.testing.jenkins.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
+import io.trygvis.esper.testing.util.*;
import io.trygvis.esper.testing.util.sql.*;
+import org.joda.time.*;
import org.slf4j.*;
+import java.io.*;
import java.sql.*;
import java.util.*;
import static fj.data.Option.*;
import static io.trygvis.esper.testing.Config.*;
-import static io.trygvis.esper.testing.EntityRef.*;
+import static io.trygvis.esper.testing.EntityRef.jenkinsBuildRef;
public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBuildDto> {
- Logger logger = LoggerFactory.getLogger(getClass());
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+ private final XmlParser xmlParser = new XmlParser();
public static void main(String[] args) throws Exception {
String pollerName = "jenkins_build";
@@ -32,17 +38,43 @@ public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBui
new TablePoller<>(pollerName, tableName, columnNames, some("array_length(users, 1) > 0"), f, callback).work(dataSource);
}
- public void process(Connection c, JenkinsBuildDto jenkinsBuild) throws SQLException {
+ public void process(Connection c, final JenkinsBuildDto jenkinsBuild) throws SQLException {
Daos daos = new Daos(c);
- BuildDao buildDao = daos.buildDao;
- PersonDao personDao = daos.personDao;
+ final BuildDao buildDao = daos.buildDao;
- UUID uuid = buildDao.insertBuild(jenkinsBuild.timestamp, "SUCCESS".equals(jenkinsBuild.result), jenkinsRef(jenkinsBuild.uuid));
+ SqlOption<InputStream> file = daos.fileDao.load(jenkinsBuild.file);
+
+ if (file.isNone()) {
+ logger.warn("File unavailable: " + jenkinsBuild.file);
+ return;
+ }
+
+ Option<JenkinsBuildXml> o = file.toFj().
+ bind(xmlParser.parseDocument).
+ bind(JenkinsBuildXml.parse);
+
+ if (o.isNone()) {
+ logger.warn("Unable to parse and process xml: " + jenkinsBuild.file);
+ return;
+ }
+
+ final JenkinsBuildXml jenkinsBuildXml = o.some();
+
+ SqlOption<UUID> uuidBuildO = buildDao.findBuildByReference(jenkinsBuild.toRef());
+
+ UUID uuidBuild = uuidBuildO.getOrElse(new SqlP0<UUID>() {
+ public UUID apply() throws SQLException {
+ return buildDao.insertBuild(
+ new DateTime(jenkinsBuildXml.timestamp),
+ "SUCCESS".equals(jenkinsBuildXml.result.orSome("")),
+ jenkinsBuildRef(jenkinsBuild.uuid));
+ }
+ });
int knownPersons = 0, unknownPersons = 0;
for (UUID user : jenkinsBuild.users) {
- SqlOption<PersonDto> personO = personDao.selectPersonByJenkinsUuid(user);
+ SqlOption<PersonDto> personO = daos.personDao.selectPersonByJenkinsUuid(user);
// This happens if no one has claimed the user id.
if (personO.isNone()) {
@@ -54,10 +86,12 @@ public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBui
UUID person = personO.get().uuid;
logger.info("Created build participant, person={}", person);
- buildDao.insertBuildParticipant(uuid, person);
+ buildDao.insertBuildParticipant(uuidBuild, person);
}
- logger.info("Created build uuid={}, #participants={}, #knownPersons={}, #unknonwnPersons={}", uuid,
+ logger.info("Created build uuid={}, #participants={}, #knownPersons={}, #unknonwnPersons={}", uuidBuild,
jenkinsBuild.users.length, knownPersons, unknownPersons);
+
+ throw new SQLException("wat");
}
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java
index 5c7249f..c067bf5 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java
@@ -6,27 +6,25 @@ import org.joda.time.*;
import java.net.*;
import java.util.*;
+import static io.trygvis.esper.testing.EntityRef.jenkinsBuildRef;
+
public class JenkinsBuildDto extends AbstractEntity {
public final UUID job;
public final UUID file;
public final String entryId;
public final URI url;
- public final String result;
- public final int number;
- public final int duration;
- public final DateTime timestamp;
public final UUID[] users;
- public JenkinsBuildDto(UUID uuid, DateTime createdDate, UUID job, UUID file, String entryId, URI url, String result, int number, int duration, DateTime timestamp, UUID[] users) {
+ public JenkinsBuildDto(UUID uuid, DateTime createdDate, UUID job, UUID file, String entryId, URI url, UUID[] users) {
super(uuid, createdDate);
this.job = job;
this.file = file;
this.entryId = entryId;
this.url = url;
- this.result = result;
- this.number = number;
- this.duration = duration;
- this.timestamp = timestamp;
this.users = users;
}
+
+ public EntityRef toRef() {
+ return jenkinsBuildRef(uuid);
+ }
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
index 40ce661..24ea6d9 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
@@ -2,7 +2,8 @@ package io.trygvis.esper.testing.jenkins;
import fj.*;
import fj.data.*;
-import io.trygvis.esper.testing.jenkins.JenkinsJobXml.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsJobXml.*;
import io.trygvis.esper.testing.util.*;
import org.apache.abdera.*;
import org.apache.abdera.model.*;
@@ -18,10 +19,10 @@ import java.net.*;
import java.util.*;
import java.util.List;
-import static fj.P.p;
+import static fj.P.*;
import static fj.data.Option.*;
-import static io.trygvis.esper.testing.util.HttpClient.inputStreamOnly;
-import static java.lang.System.currentTimeMillis;
+import static io.trygvis.esper.testing.util.HttpClient.*;
+import static java.lang.System.*;
import static org.apache.commons.lang.StringUtils.*;
public class JenkinsClient {
@@ -147,7 +148,7 @@ public class JenkinsClient {
case "mavenModuleSetBuild":
case "mavenBuild":
case "freeStyleBuild":
- return JenkinsBuildXml.parse(root).map(new F<JenkinsBuildXml, P2<JenkinsBuildXml, byte[]>>() {
+ return JenkinsBuildXml.parse(root.getDocument()).map(new F<JenkinsBuildXml, P2<JenkinsBuildXml, byte[]>>() {
public P2<JenkinsBuildXml, byte[]> f(JenkinsBuildXml x) {
return p(x, d.some()._2());
}
@@ -157,43 +158,4 @@ public class JenkinsClient {
return Option.none();
}
}
-
-}
-
-class JenkinsEntryXml {
- public final String id;
- public final DateTime timestamp;
- public final URI url;
-
- JenkinsEntryXml(String id, DateTime timestamp, URI url) {
- this.id = id;
- this.timestamp = timestamp;
- this.url = url;
- }
-}
-
-class JenkinsXml {
- public final Option<String> nodeName;
- public final Option<String> nodeDescription;
- public final Option<String> description;
- public final List<JobXml> jobs;
-
- JenkinsXml(Option<String> nodeName, Option<String> nodeDescription, Option<String> description, List<JobXml> jobs) {
- this.nodeName = nodeName;
- this.nodeDescription = nodeDescription;
- this.description = description;
- this.jobs = jobs;
- }
-
- public static class JobXml {
- public final String name;
- public final String url;
- public final String color;
-
- JobXml(String name, String url, String color) {
- this.name = name;
- this.url = url;
- this.color = color;
- }
- }
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java
index e94c7fd..aec9ab3 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java
@@ -1,19 +1,19 @@
package io.trygvis.esper.testing.jenkins;
import fj.data.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
import io.trygvis.esper.testing.util.sql.*;
import org.joda.time.*;
import java.net.*;
import java.sql.*;
-import java.util.*;
import java.util.List;
+import java.util.*;
-import static fj.data.Option.*;
-import static io.trygvis.esper.testing.Util.toList;
-import static io.trygvis.esper.testing.Util.toUuidArray;
-import static io.trygvis.esper.testing.util.sql.ResultSetF.getInt;
-import static io.trygvis.esper.testing.util.sql.SqlOption.fromRs;
+import static fj.data.Option.fromNull;
+import static io.trygvis.esper.testing.Util.*;
+import static io.trygvis.esper.testing.util.sql.ResultSetF.*;
+import static io.trygvis.esper.testing.util.sql.SqlOption.*;
import static java.lang.System.*;
public class JenkinsDao {
@@ -53,7 +53,7 @@ public class JenkinsDao {
}
};
- public static final String JENKINS_BUILD = "uuid, created_date, job, file, entry_id, url, result, number, duration, timestamp, users";
+ public static final String JENKINS_BUILD = "uuid, created_date, job, file, entry_id, url, users";
public static final SqlF<ResultSet, JenkinsBuildDto> jenkinsBuild = new SqlF<ResultSet, JenkinsBuildDto>() {
public JenkinsBuildDto apply(ResultSet rs) throws SQLException {
@@ -65,10 +65,6 @@ public class JenkinsDao {
UUID.fromString(rs.getString(i++)),
rs.getString(i++),
URI.create(rs.getString(i++)),
- rs.getString(i++),
- rs.getInt(i++),
- rs.getInt(i++),
- new DateTime(rs.getTimestamp(i++).getTime()),
toUuidArray(rs, i));
}
};
@@ -191,8 +187,8 @@ public class JenkinsDao {
}
}
- public UUID insertBuild(UUID job, UUID file, String entryId, URI url, String result, int number, int duration, long timestamp, UUID[] users) throws SQLException {
- try (PreparedStatement s = c.prepareStatement("INSERT INTO jenkins_build(" + JENKINS_BUILD + ") VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
+ public UUID insertBuild(UUID job, UUID file, String entryId, URI url, UUID[] users) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("INSERT INTO jenkins_build(" + JENKINS_BUILD + ") VALUES(?, ?, ?, ?, ?, ?, ?)")) {
UUID uuid = UUID.randomUUID();
int i = 1;
s.setString(i++, uuid.toString());
@@ -200,11 +196,7 @@ public class JenkinsDao {
s.setString(i++, job.toString());
s.setString(i++, file.toString());
s.setString(i++, entryId);
- s.setString(i++, url.toASCIIString());
- s.setString(i++, result);
- s.setInt(i++, number);
- s.setInt(i++, duration);
- s.setTimestamp(i++, new Timestamp(timestamp));
+ s.setString(i, url.toASCIIString());
s.setArray(i, c.createArrayOf("varchar", users));
s.executeUpdate();
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJob.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJob.java
index 5ca449e..e59a953 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJob.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJob.java
@@ -2,6 +2,8 @@ package io.trygvis.esper.testing.jenkins;
import fj.*;
import fj.data.*;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsJobXml;
+
import static fj.data.Option.*;
import static io.trygvis.esper.testing.jenkins.JenkinsClient.apiXml;
import static java.lang.System.currentTimeMillis;
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
index c34f422..00d55c2 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
@@ -3,6 +3,7 @@ package io.trygvis.esper.testing.jenkins;
import fj.*;
import fj.data.*;
import io.trygvis.esper.testing.core.db.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
import io.trygvis.esper.testing.util.object.*;
import io.trygvis.esper.testing.util.sql.*;
import org.slf4j.*;
@@ -153,10 +154,6 @@ public class JenkinsServerActor implements TransactionalActor {
buildXmlFile,
entry.id,
build.url,
- result,
- build.number,
- build.duration,
- build.timestamp,
users.toArray(new UUID[users.size()]));
logger.info("Build inserted: {}, #users={} item #{}/{}", uuid, users.size(), i, list.size());
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java
index 3cf9e7c..c603506 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java
@@ -15,4 +15,8 @@ public class JenkinsServerDto extends AbstractEntity {
this.url = url;
this.enabled = enabled;
}
+
+ public URI userUrl(String id) {
+ return URI.create(url.toASCIIString() + "/users/" + id);
+ }
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
index e21f336..38c088a 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
@@ -5,6 +5,7 @@ import fj.data.*;
import static fj.data.Option.*;
import static io.trygvis.esper.testing.jenkins.JenkinsClient.apiXml;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsXml;
import io.trygvis.esper.testing.util.object.*;
import org.joda.time.*;
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsBuildXml.java
index cb92736..506407e 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsBuildXml.java
@@ -1,9 +1,10 @@
-package io.trygvis.esper.testing.jenkins;
+package io.trygvis.esper.testing.jenkins.xml;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import org.jdom2.Document;
import org.jdom2.Element;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
@@ -20,8 +21,8 @@ import static fj.data.List.iterableList;
import static fj.data.Option.*;
import static io.trygvis.esper.testing.Util.childText;
import static io.trygvis.esper.testing.Util.parseInt;
-import static io.trygvis.esper.testing.jenkins.JenkinsBuildXml.ChangeSetItemXml.parseChangeSetItem;
-import static io.trygvis.esper.testing.jenkins.JenkinsBuildXml.RevisionXml.parseRevision;
+import static io.trygvis.esper.testing.jenkins.xml.JenkinsBuildXml.ChangeSetItemXml.parseChangeSetItem;
+import static io.trygvis.esper.testing.jenkins.xml.JenkinsBuildXml.RevisionXml.parseRevision;
public class JenkinsBuildXml {
private static final Logger logger = LoggerFactory.getLogger(JenkinsBuildXml.class);
@@ -47,7 +48,15 @@ public class JenkinsBuildXml {
this.changeSet = changeSet;
}
- public static Option<JenkinsBuildXml> parse(Element root) {
+ public static F<Document, Option<JenkinsBuildXml>> parse = new F<Document, Option<JenkinsBuildXml>>() {
+ public Option<JenkinsBuildXml> f(Document document) {
+ return parse(document);
+ }
+ };
+
+ public static Option<JenkinsBuildXml> parse(Document doc) {
+ Element root = doc.getRootElement();
+
Option<URI> url = childText(root, "url").bind(Util.parseUri);
Option<Integer> number = childText(root, "number").bind(Util.parseInt);
Option<String> result = childText(root, "result");
@@ -92,7 +101,7 @@ public class JenkinsBuildXml {
public static Option<ChangeSetXml> parse(Element changeSet) {
- List<ChangeSetItemXml> items = new ArrayList<>(somes(iterableList(changeSet.getChildren("item")).map(parseChangeSetItem)).toCollection());
+ List<ChangeSetItemXml> items = new ArrayList<>(Option.somes(iterableList(changeSet.getChildren("item")).map(parseChangeSetItem)).toCollection());
Option<RevisionXml> revision = Option.fromNull(changeSet.getChild("revision")).bind(parseRevision);
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsEntryXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsEntryXml.java
new file mode 100755
index 0000000..c801ccf
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsEntryXml.java
@@ -0,0 +1,17 @@
+package io.trygvis.esper.testing.jenkins.xml;
+
+import java.net.URI;
+
+import org.joda.time.DateTime;
+
+public class JenkinsEntryXml {
+ public final String id;
+ public final DateTime timestamp;
+ public final URI url;
+
+ public JenkinsEntryXml(String id, DateTime timestamp, URI url) {
+ this.id = id;
+ this.timestamp = timestamp;
+ this.url = url;
+ }
+}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java
index ca661b8..eb4c874 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsJobXml.java
@@ -1,4 +1,4 @@
-package io.trygvis.esper.testing.jenkins;
+package io.trygvis.esper.testing.jenkins.xml;
import java.net.URI;
@@ -12,8 +12,8 @@ import static fj.data.Option.some;
import static io.trygvis.esper.testing.Util.child;
import static io.trygvis.esper.testing.Util.childText;
-class JenkinsJobXml {
- enum JenkinsJobType {
+public class JenkinsJobXml {
+ public enum JenkinsJobType {
FREE_STYLE, MAVEN_MODULE_SET, MAVEN_MODULE, MATRIX, MATRIX_CONFIGURATION
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsXml.java
new file mode 100755
index 0000000..d599484
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/xml/JenkinsXml.java
@@ -0,0 +1,31 @@
+package io.trygvis.esper.testing.jenkins.xml;
+
+import java.util.List;
+
+import fj.data.Option;
+
+public class JenkinsXml {
+ public final Option<String> nodeName;
+ public final Option<String> nodeDescription;
+ public final Option<String> description;
+ public final List<JobXml> jobs;
+
+ public JenkinsXml(Option<String> nodeName, Option<String> nodeDescription, Option<String> description, List<JobXml> jobs) {
+ this.nodeName = nodeName;
+ this.nodeDescription = nodeDescription;
+ this.description = description;
+ this.jobs = jobs;
+ }
+
+ public static class JobXml {
+ public final String name;
+ public final String url;
+ public final String color;
+
+ public JobXml(String name, String url, String color) {
+ this.name = name;
+ this.url = url;
+ this.color = color;
+ }
+ }
+}
diff --git a/src/main/java/io/trygvis/esper/testing/util/EasyX509TrustManager.java b/src/main/java/io/trygvis/esper/testing/util/EasyX509TrustManager.java
index 5a4c4d3..5a4c4d3 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/util/EasyX509TrustManager.java
+++ b/src/main/java/io/trygvis/esper/testing/util/EasyX509TrustManager.java
diff --git a/src/main/java/io/trygvis/esper/testing/util/XmlParser.java b/src/main/java/io/trygvis/esper/testing/util/XmlParser.java
index 624785c..a1bda95 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/util/XmlParser.java
+++ b/src/main/java/io/trygvis/esper/testing/util/XmlParser.java
@@ -1,5 +1,6 @@
package io.trygvis.esper.testing.util;
+import fj.F;
import fj.data.*;
import org.h2.util.*;
import org.jdom2.*;
@@ -25,8 +26,13 @@ public class XmlParser {
xmlInputFactory = XMLInputFactory.newFactory();
}
- public Option<Document> parseDocument(InputStream stream) {
+ public F<InputStream, Option<Document>> parseDocument = new F<InputStream, Option<Document>>() {
+ public Option<Document> f(InputStream inputStream) {
+ return parseDocument(inputStream);
+ }
+ };
+ public Option<Document> parseDocument(InputStream stream) {
try {
if (debugXml) {
// TODO: Pretty print
diff --git a/src/main/java/io/trygvis/esper/testing/util/sql/ResultSetF.java b/src/main/java/io/trygvis/esper/testing/util/sql/ResultSetF.java
index 7169372..7169372 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/util/sql/ResultSetF.java
+++ b/src/main/java/io/trygvis/esper/testing/util/sql/ResultSetF.java
diff --git a/src/main/java/io/trygvis/esper/testing/util/sql/SqlF.java b/src/main/java/io/trygvis/esper/testing/util/sql/SqlF.java
index e4e8197..e4e8197 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/util/sql/SqlF.java
+++ b/src/main/java/io/trygvis/esper/testing/util/sql/SqlF.java
diff --git a/src/main/java/io/trygvis/esper/testing/util/sql/SqlOption.java b/src/main/java/io/trygvis/esper/testing/util/sql/SqlOption.java
index 286a872..43fb440 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/util/sql/SqlOption.java
+++ b/src/main/java/io/trygvis/esper/testing/util/sql/SqlOption.java
@@ -1,5 +1,7 @@
package io.trygvis.esper.testing.util.sql;
+import fj.data.*;
+
import java.sql.*;
public abstract class SqlOption<A> {
@@ -45,6 +47,10 @@ public abstract class SqlOption<A> {
public abstract A getOrElse(A a);
+ public abstract A getOrElse(SqlP0<A> p) throws SQLException;
+
+ public abstract Option<A> toFj();
+
public static <A> SqlOption<A> fromNull(A a) {
if (a != null) {
return some(a);
@@ -74,6 +80,14 @@ public abstract class SqlOption<A> {
return a;
}
+ public A getOrElse(SqlP0<A> p) throws SQLException {
+ return p.apply();
+ }
+
+ public Option<A> toFj() {
+ return Option.none();
+ }
+
public String toString() {
return "None";
}
@@ -102,6 +116,14 @@ public abstract class SqlOption<A> {
return this.a;
}
+ public A getOrElse(SqlP0<A> p) throws SQLException {
+ return a;
+ }
+
+ public Option<A> toFj() {
+ return Option.some(a);
+ }
+
public String toString() {
return "Some(" + a + ")";
}
diff --git a/src/main/java/io/trygvis/esper/testing/util/sql/SqlP0.java b/src/main/java/io/trygvis/esper/testing/util/sql/SqlP0.java
new file mode 100755
index 0000000..23c48d1
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/util/sql/SqlP0.java
@@ -0,0 +1,7 @@
+package io.trygvis.esper.testing.util.sql;
+
+import java.sql.*;
+
+public abstract class SqlP0<A> {
+ public abstract A apply() throws SQLException;
+}
diff --git a/src/main/java/io/trygvis/esper/testing/web/resource/CoreResource.java b/src/main/java/io/trygvis/esper/testing/web/resource/CoreResource.java
index 9b22674..7548a32 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/web/resource/CoreResource.java
+++ b/src/main/java/io/trygvis/esper/testing/web/resource/CoreResource.java
@@ -40,7 +40,7 @@ public class CoreResource extends AbstractResource {
return da.inTransaction(new DatabaseAccess.DaosCallback<List<PersonJson>>() {
public List<PersonJson> run(Daos daos) throws SQLException {
List<PersonJson> list = new ArrayList<>();
- for (PersonDto person : daos.personDao.selectPerson(pageRequest)) {
+ for (PersonDto person : daos.personDao.selectPersons(pageRequest)) {
list.add(getPersonJson(daos, person));
}
return list;
diff --git a/src/main/java/io/trygvis/esper/testing/web/resource/JenkinsResource.java b/src/main/java/io/trygvis/esper/testing/web/resource/JenkinsResource.java
index 292be71..aab108b 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/web/resource/JenkinsResource.java
+++ b/src/main/java/io/trygvis/esper/testing/web/resource/JenkinsResource.java
@@ -1,17 +1,21 @@
package io.trygvis.esper.testing.web.resource;
+import fj.*;
+import fj.data.*;
import io.trygvis.esper.testing.*;
import io.trygvis.esper.testing.jenkins.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
+import io.trygvis.esper.testing.util.*;
import io.trygvis.esper.testing.util.sql.*;
import io.trygvis.esper.testing.web.*;
import org.joda.time.*;
-import javax.ws.rs.*;
-import javax.ws.rs.core.*;
import java.net.*;
import java.sql.*;
import java.util.*;
import java.util.List;
+import javax.ws.rs.*;
+import javax.ws.rs.core.*;
@Path("/resource/jenkins")
public class JenkinsResource extends AbstractResource {
@@ -102,6 +106,8 @@ public class JenkinsResource extends AbstractResource {
protected abstract T run() throws SQLException;
+ private final XmlParser xmlParser = new XmlParser();
+
public T run(Daos daos) throws SQLException {
this.daos = daos;
return run();
@@ -120,22 +126,30 @@ public class JenkinsResource extends AbstractResource {
}
};
- protected SqlF<JenkinsJobDto,JenkinsJobJson> getJenkinsJobJson = new SqlF<JenkinsJobDto, JenkinsJobJson>() {
+ protected SqlF<JenkinsJobDto, JenkinsJobJson> getJenkinsJobJson = new SqlF<JenkinsJobDto, JenkinsJobJson>() {
public JenkinsJobJson apply(JenkinsJobDto job) throws SQLException {
return new JenkinsJobJson(job.uuid, job.createdDate, job.server, job.displayName.toNull());
}
};
- protected SqlF<JenkinsJobDto,JenkinsJobJson> getJenkinsJobJsonDetail = new SqlF<JenkinsJobDto, JenkinsJobJson>() {
+ protected SqlF<JenkinsJobDto, JenkinsJobJson> getJenkinsJobJsonDetail = new SqlF<JenkinsJobDto, JenkinsJobJson>() {
public JenkinsJobJson apply(JenkinsJobDto job) throws SQLException {
int buildCount = daos.jenkinsDao.selectBuildCountByJob(job.uuid);
return new JenkinsJobJson(job.uuid, job.createdDate, job.server, job.displayName.toNull(), buildCount);
}
};
- protected SqlF<JenkinsBuildDto,JenkinsBuildJson> getJenkinsBuildJson = new SqlF<JenkinsBuildDto, JenkinsBuildJson>() {
+ protected SqlF<JenkinsBuildDto, JenkinsBuildJson> getJenkinsBuildJson = new SqlF<JenkinsBuildDto, JenkinsBuildJson>() {
public JenkinsBuildJson apply(JenkinsBuildDto dto) throws SQLException {
- return new JenkinsBuildJson(dto.uuid, dto.createdDate, dto.result);
+ Option<String> result = daos.fileDao.load(dto.file).toFj().
+ bind(xmlParser.parseDocument).
+ bind(JenkinsBuildXml.parse).map(new F<JenkinsBuildXml, String>() {
+ public String f(JenkinsBuildXml xml) {
+ return xml.result.orSome("unknown");
+ }
+ });
+
+ return new JenkinsBuildJson(dto.uuid, dto.createdDate, result.orSome("unknown"));
}
};
}
diff --git a/src/main/resources/ddl-jenkins.sql b/src/main/resources/ddl-jenkins.sql
index c75f836..3e420a2 100644..100755
--- a/src/main/resources/ddl-jenkins.sql
+++ b/src/main/resources/ddl-jenkins.sql
@@ -44,10 +44,10 @@ CREATE TABLE jenkins_build (
file CHAR(36) NOT NULL,
entry_id VARCHAR(1000) NOT NULL,
url VARCHAR(1000) NOT NULL,
- result VARCHAR(100) NOT NULL,
- number INT NOT NULL,
- duration INT NOT NULL,
- timestamp TIMESTAMP NOT NULL,
+-- result VARCHAR(100) NOT NULL,
+-- number INT NOT NULL,
+-- duration INT NOT NULL,
+-- timestamp TIMESTAMP NOT NULL,
users CHAR(36) [],
CONSTRAINT pk_jenkins_build PRIMARY KEY (UUID),
diff --git a/src/test/java/io/trygvis/esper/testing/jenkins/CreateMissingMavenModuleJobsApp.java b/src/test/java/io/trygvis/esper/testing/jenkins/CreateMissingMavenModuleJobsApp.java
index bdf4018..2b2cecd 100644..100755
--- a/src/test/java/io/trygvis/esper/testing/jenkins/CreateMissingMavenModuleJobsApp.java
+++ b/src/test/java/io/trygvis/esper/testing/jenkins/CreateMissingMavenModuleJobsApp.java
@@ -5,6 +5,7 @@ import fj.*;
import fj.data.*;
import io.trygvis.esper.testing.*;
import io.trygvis.esper.testing.core.db.*;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsJobXml;
import io.trygvis.esper.testing.util.*;
import org.apache.abdera.*;
import org.codehaus.httpcache4j.cache.*;
diff --git a/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java b/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java
index 4337758..62e27d2 100644..100755
--- a/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java
+++ b/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java
@@ -6,10 +6,10 @@ import java.net.URI;
import org.jdom2.Document;
import org.joda.time.DateTime;
-import org.joda.time.LocalDateTime;
import org.joda.time.chrono.ISOChronology;
import fj.data.Option;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsBuildXml;
import io.trygvis.esper.testing.util.XmlParser;
import junit.framework.TestCase;
@@ -31,7 +31,7 @@ public class JenkinsBuildXmlTest extends TestCase {
public void testGitCommitParsing() throws IOException {
try (InputStream is = getClass().getResourceAsStream("/jenkins/build/build-with-git-commits.xml")) {
- Option<JenkinsBuildXml> option = JenkinsBuildXml.parse(parser.parseDocument(is).some().getRootElement());
+ Option<JenkinsBuildXml> option = parser.parseDocument(is).bind(JenkinsBuildXml.parse);
assertTrue(option.isSome());
JenkinsBuildXml build = option.some();
@@ -61,7 +61,7 @@ public class JenkinsBuildXmlTest extends TestCase {
public void testSvnCommitParsing() throws IOException {
try (InputStream is = getClass().getResourceAsStream("/jenkins/build/build-with-subversion-commits.xml")) {
- Option<JenkinsBuildXml> option = JenkinsBuildXml.parse(parser.parseDocument(is).some().getRootElement());
+ Option<JenkinsBuildXml> option = parser.parseDocument(is).bind(JenkinsBuildXml.parse);
assertTrue(option.isSome());
JenkinsBuildXml build = option.some();
diff --git a/src/test/java/io/trygvis/esper/testing/jenkins/SetJobTypeApp.java b/src/test/java/io/trygvis/esper/testing/jenkins/SetJobTypeApp.java
index 25e629c..2224ba0 100644..100755
--- a/src/test/java/io/trygvis/esper/testing/jenkins/SetJobTypeApp.java
+++ b/src/test/java/io/trygvis/esper/testing/jenkins/SetJobTypeApp.java
@@ -4,6 +4,7 @@ import com.jolbox.bonecp.*;
import fj.*;
import fj.data.*;
import io.trygvis.esper.testing.*;
+import io.trygvis.esper.testing.jenkins.xml.JenkinsJobXml;
import io.trygvis.esper.testing.util.*;
import org.apache.abdera.*;
import org.codehaus.httpcache4j.cache.*;