summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTharre <tharre3@gmail.com>2018-05-23 13:18:21 +0200
committerTharre <tharre3@gmail.com>2018-05-23 13:18:21 +0200
commita6b6eb25425a103ba49ea4ef16265aaf38181935 (patch)
tree9f1c214734f6eb1a5792200fec38fc80ff116c56
parentd980f26121360ab7dacf7f482c9e85fb5ef43b0b (diff)
downloadsepm-groupproject-a6b6eb25425a103ba49ea4ef16265aaf38181935.tar.gz
sepm-groupproject-a6b6eb25425a103ba49ea4ef16265aaf38181935.tar.xz
sepm-groupproject-a6b6eb25425a103ba49ea4ef16265aaf38181935.zip
Work around H2 bug in operation.list()
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java16
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java9
3 files changed, 23 insertions, 4 deletions
diff --git a/pom.xml b/pom.xml
index 78dbb4c..5f30fff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
<slf4j.version>1.8.0-beta2</slf4j.version>
<auto-value.version>1.6</auto-value.version>
<!-- runtime dependencies -->
- <h2.version>1.4.197</h2.version>
+ <h2.version>1.4.196</h2.version>
<logback.version>1.3.0-alpha4</logback.version>
<!-- test dependencies -->
<junit.version>4.12</junit.version>
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java
index bb6fb27..143fdd6 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java
@@ -24,6 +24,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@@ -221,16 +222,25 @@ public class DBOperationDAO implements OperationDAO {
@Override
public Set<Operation> list(EnumSet<Status> statuses) throws PersistenceException {
- String sql = "SELECT * FROM Operation WHERE status IN (?)";
+ // This hack exists because H2 currently has a bug that prevents IN (?) with an array of
+ // ids, i.e. pstmt.setArray(1, con.createArrayOf("INT", intarray) from working. See
+ // commented code below.
+ String str =
+ statuses.stream()
+ .map(Enum::name)
+ .map(s -> "'" + s + "'")
+ .collect(Collectors.joining(","));
+ String sql = "SELECT * FROM Operation WHERE status IN (" + str + ")";
Set<Operation> operations = new HashSet<>();
try {
Connection con = jdbcConnectionManager.getConnection();
try (PreparedStatement pstmt = con.prepareStatement(sql)) {
- Object[] arr = statuses.stream().map(Enum::ordinal).toArray();
- pstmt.setArray(1, con.createArrayOf("INTEGER", arr));
+ // Object[] arr = statuses.stream().map(Enum::ordinal).toArray();
+ // pstmt.setArray(1, con.createArrayOf("INT", arr));
+ // TODO: this should set the vehicles as well
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) operations.add(operationFromRS(rs));
}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java
index 726735d..e62554c 100644
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java
@@ -8,6 +8,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundExceptio
import at.ac.tuwien.sepm.assignment.groupphase.util.JdbcTestCase;
import java.time.Instant;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.Set;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
@@ -78,4 +79,12 @@ public class OperationDAOTest extends JdbcTestCase {
compareWith("operationDAOUpdateRemoveVehicles.xml", COMPARE_TABLES);
}
+
+ @Test
+ public void testListOperations() throws Exception {
+ Set<Operation> operationSet = operationDAO.list(EnumSet.allOf(Status.class));
+
+ // TODO: operations.list() currently doesn't set the vehicles set
+ // assertEquals(Set.of(o), operationSet);
+ }
}