From ef09cf53a5ca546bdb14c82f83169209e66555aa Mon Sep 17 00:00:00 2001
From: Tharre <tharre3@gmail.com>
Date: Tue, 22 May 2018 16:39:15 +0200
Subject: Fix conflicts and reimplement Operation.list()

---
 .../einsatzverwaltung/dao/DBOperationDAO.java      | 63 ++++++++++------------
 .../userInterface/ArchiveOperationController.java  | 20 +++----
 2 files changed, 37 insertions(+), 46 deletions(-)

(limited to 'src/main/java/at')

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 395f7b4..773ccb6 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
@@ -34,7 +34,7 @@ public class DBOperationDAO implements OperationDAO {
     private JDBCConnectionManager jdbcConnectionManager;
     private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-    public DBOperationDAO(JDBCConnectionManager j) throws PersistenceException {
+    public DBOperationDAO(JDBCConnectionManager j) {
         jdbcConnectionManager = j;
         try {
 
@@ -59,7 +59,9 @@ public class DBOperationDAO implements OperationDAO {
                     "SQLException occurred while preparing Statements. Error message: {} ",
                     e.getMessage());
 
-            throw new PersistenceException(e);
+            // TODO: nothing should be thrown here
+            throw new IllegalStateException("TODO: fix me");
+            // throw new PersistenceException(e);
         }
     }
 
@@ -204,45 +206,38 @@ public class DBOperationDAO implements OperationDAO {
 
     @Override
     public Set<Operation> list(EnumSet<Status> statuses) throws PersistenceException {
-        StringBuilder listString = new StringBuilder("SELECT * FROM Operation WHERE status IN (");
-        boolean first = true;
-        for (Status status : statuses) {
-            if (first) {
-                first = false;
-            } else {
-                listString.append(", ");
-            }
-            listString.append("\'" + status.name() + "\'");
-        }
-        listString.append(") ;");
+        String sql = "SELECT * FROM Operation WHERE status IN (?)";
         Set<Operation> operations = new HashSet<>();
+
         try {
-            try (PreparedStatement listStatement =
-                    jdbcConnectionManager.getConnection().prepareStatement(listString.toString())) {
-                try (ResultSet resultSet = listStatement.executeQuery()) {
-                    while (resultSet.next()) {
-                        long operationId = resultSet.getLong("id");
-                        operations.add(
-                                Operation.builder()
-                                        .id(operationId)
-                                        .opCode(resultSet.getString("opCode"))
-                                        .severity(Severity.valueOf(resultSet.getString("severity")))
-                                        .status(Status.valueOf(resultSet.getString("status")))
-                                        .vehicles(getVehiclesFromOperationId(operationId))
-                                        .created(resultSet.getTimestamp("created").toInstant())
-                                        .destination(resultSet.getString("destination"))
-                                        .additionalInfo(resultSet.getString("additionalInfo"))
-                                        .build());
-                    }
+            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));
+
+                try (ResultSet rs = pstmt.executeQuery()) {
+                    while (rs.next()) operations.add(operationFromRS(rs));
                 }
             }
+
+            return operations;
         } catch (SQLException e) {
-            LOG.error(
-                    "SQLException happened while preparing statement. Error message: {}",
-                    e.getMessage());
             throw new PersistenceException(e);
         }
-        return operations;
+    }
+
+    private Operation operationFromRS(ResultSet rs) throws PersistenceException, SQLException {
+        return Operation.builder()
+                .id(rs.getLong("id"))
+                .opCode(rs.getString("opCode"))
+                .severity(Severity.valueOf(rs.getString("severity")))
+                .status(Status.valueOf(rs.getString("status")))
+                .vehicles(getVehiclesFromOperationId(rs.getLong("id")))
+                .created(rs.getTimestamp("created").toInstant())
+                .destination(rs.getString("destination"))
+                .additionalInfo(rs.getString("additionalInfo"))
+                .build();
     }
 
     private static String GET_VEHICLE_ID =
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchiveOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchiveOperationController.java
index ecbb165..7b69402 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchiveOperationController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchiveOperationController.java
@@ -7,10 +7,11 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.Operati
 import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.util.Collection;
 import java.util.EnumSet;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
@@ -96,19 +97,14 @@ public class ArchiveOperationController {
         }
 
         lblOpCode.setText(detailOperation.opCode());
-        StringBuilder result = new StringBuilder();
-        for (int i = 0; i < detailOperation.vehicles().size(); i++) {
-            if (i == detailOperation.vehicles().size() - 1) {
-                result.append(detailOperation.vehicles().get(i).name());
-            } else {
-                result.append(detailOperation.vehicles().get(i).name()).append(", ");
-            }
-        }
-        lblVehicles.setText(result.toString());
+        Collection<String> elements =
+                detailOperation.vehicles().stream().map(Vehicle::name).collect(Collectors.toList());
+        String result = String.join(", ", elements);
+
+        lblVehicles.setText(result);
         lblAddress.setText(detailOperation.destination());
 
-        List<Vehicle> vehicles = detailOperation.vehicles();
-        for (Vehicle vehicle : vehicles) {
+        for (Vehicle vehicle : detailOperation.vehicles()) {
             Button b = new Button();
             b.setPrefHeight(200);
             b.setPrefWidth(600 / 2);
-- 
cgit v1.2.3-70-g09d2