summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorViktoria Pundy <viktoria.pundy@aon.at>2018-05-02 13:09:47 +0200
committerViktoria Pundy <viktoria.pundy@aon.at>2018-05-06 18:12:30 +0200
commit8a351f2056cd26fd220c0193ba1400f2c810f940 (patch)
tree55eb683aa393cafaa8bdcc89e4e23d4317ee0b44 /src
parentc3521f4415d5b2f722a25731d5f77be82767e118 (diff)
downloadsepm-groupproject-8a351f2056cd26fd220c0193ba1400f2c810f940.tar.gz
sepm-groupproject-8a351f2056cd26fd220c0193ba1400f2c810f940.tar.xz
sepm-groupproject-8a351f2056cd26fd220c0193ba1400f2c810f940.zip
Added Operation DAO and -Service for Operation, implemented needed methods.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java145
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java92
2 files changed, 237 insertions, 0 deletions
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
new file mode 100644
index 0000000..c68b795
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java
@@ -0,0 +1,145 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.EnumSet;
+import java.util.List;
+
+public class DBOperationDAO implements OperationDAO {
+
+ @Override
+ public long add(Operation operation) throws PersistenceException {
+ PreparedStatement pstmt = null;
+ try {
+ pstmt =
+ H2Handler.getConnection()
+ .prepareStatement(
+ "INSERT INTO operation(opCode, severity, "
+ + "created, destination, additionalInfo, status) values (?,?,?,?,?,?)");
+
+ if (operation.opCode() == null) {
+ throw new PersistenceException("Code darf nicht null sein!");
+ } else if (operation.opCode().length() > 20)
+ throw new PersistenceException(
+ "Länge des OP-Codes überschreitet erlaubte Länge von 100 Zeichen!");
+ else pstmt.setString(1, operation.opCode());
+ switch (operation.severity()) {
+ case A:
+ pstmt.setInt(2, 0);
+ break;
+ case B:
+ pstmt.setInt(2, 1);
+ break;
+ case C:
+ pstmt.setInt(2, 2);
+ break;
+ case D:
+ pstmt.setInt(2, 3);
+ break;
+ case E:
+ pstmt.setInt(2, 4);
+ break;
+ case O:
+ pstmt.setInt(2, 5);
+ break;
+ default:
+ throw new PersistenceException(
+ "Schwere des Einsatzes konnte nicht validiert werden!");
+ }
+ // TODO: CHECK IF TIME ZONE CORRECT
+ if (operation.created() != null) {
+ pstmt.setTimestamp(3, Timestamp.from(operation.created()));
+ } else {
+ throw new PersistenceException("Zeitpunkt der Erstellung darf nicht null sein!");
+ }
+
+ if (operation.destination() == null) {
+ throw new PersistenceException("Einsatzort darf nicht null sein!");
+ } else if (operation.destination().length() > 100) {
+ throw new PersistenceException(
+ "Länge der Adresse überschreitet erlaubte Länge von 100 Zeichen!");
+ } else {
+ pstmt.setString(4, operation.destination());
+ }
+ if (operation.additionalInfo().length() > 100)
+ throw new PersistenceException(
+ "Länge der zusätzlichen Information überschreitet erlaubte Länge von 100 Zeichen!");
+ else pstmt.setString(5, operation.additionalInfo());
+ if (operation.status() != null) {
+ pstmt.setString(6, operation.status().toString());
+ } else if (operation.status().toString().length() > 100) {
+ throw new PersistenceException(
+ "Länge des Status überschreitet erlaubte Länge von 100 Zeichen!");
+ } else {
+ throw new PersistenceException("Status darf nicht null sein!");
+ }
+
+ pstmt.executeQuery();
+ ResultSet rs = pstmt.getGeneratedKeys();
+ if (rs.next()) return rs.getInt(1);
+ else throw new PersistenceException("Einsatz konnte nicht gespeichert werden");
+ } catch (SQLException | ClassNotFoundException e) {
+ throw new PersistenceException(e);
+ } finally {
+ if (pstmt != null) {
+ try {
+ pstmt.close();
+ } catch (SQLException e) {
+ throw new PersistenceException(
+ "Verbindung zur Datenbank konnte nicht geschlossen werden!", e);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void update(Operation operation) throws ElementNotFoundException, PersistenceException {}
+
+ @Override
+ public Operation get(long operationId) throws ElementNotFoundException, PersistenceException {
+ return null;
+ }
+
+ @Override
+ public List<Operation> list(EnumSet<Status> statuses) throws PersistenceException {
+ return null;
+ }
+
+ @Override
+ public int connectVehicleToOperation(long vehicleID, long operationID)
+ throws PersistenceException {
+ PreparedStatement pstmt = null;
+ try {
+ pstmt =
+ H2Handler.getConnection()
+ .prepareStatement(
+ "insert into VehicleOperation(vehicleId, operationId)"
+ + "values (?,?)");
+ pstmt.setLong(1, vehicleID);
+ pstmt.setLong(2, operationID);
+ pstmt.executeQuery();
+ ResultSet rs = pstmt.getGeneratedKeys();
+ if (rs.next()) return rs.getInt(1);
+ else
+ throw new PersistenceException(
+ "Fahrzeug für die Operation konnte nicht abgespeichert werden!");
+ } catch (SQLException | ClassNotFoundException e) {
+ throw new PersistenceException(e);
+ } finally {
+ if (pstmt != null) {
+ try {
+ pstmt.close();
+ } catch (SQLException e) {
+ throw new PersistenceException(
+ "Verbindung zur Datenbank konnte nicht geschlossen werden!", e);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java
new file mode 100644
index 0000000..f705084
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java
@@ -0,0 +1,92 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import java.util.EnumSet;
+import java.util.List;
+import javafx.collections.transformation.SortedList;
+
+public class OperationServiceImpl implements OperationService {
+
+ // TODO: anders?
+ private OperationDAO operationDAO = new DBOperationDAO();
+
+ @Override
+ public long add(Operation operation) throws InvalidOperationException, PersistenceException {
+ List<Vehicle> vehicles = operation.vehicles();
+ boolean rtw = false;
+ for (Vehicle vehicle : vehicles) {
+ if (vehicle.status() == Vehicle.Status.ABGEMELDET)
+ throw new InvalidOperationException(
+ "Abgemeldete Fahrzeuge dürfen nicht zu einem Einsatz geschickt werden!");
+ if (vehicle.type() == VehicleType.NEF && !rtw) {
+ for (Vehicle vehicleA : vehicles) {
+ if (vehicleA.type() == VehicleType.RTW && vehicleA.hasNef()) {
+ rtw = true;
+ break;
+ }
+ }
+ if (!rtw)
+ throw new InvalidOperationException(
+ "Zu einem Fahrzeug des Typs NEF muss auch ein Fahrzeug des Typs RTW mit NEF-Halterung geschickt werden!");
+ }
+ if (vehicle.type() == VehicleType.NAH && !rtw) {
+ for (Vehicle vehicleA : vehicles) {
+ if (vehicleA.type() == VehicleType.RTW) {
+ rtw = true;
+ break;
+ }
+ }
+ if (!rtw)
+ throw new InvalidOperationException(
+ "Zu einem Fahrzeug des Typs NAH muss auch ein Fahrzeug des Typs RTW geschickt werden!");
+ }
+ }
+ String[] codeParts = operation.opCode().split("\\-");
+ String severity = "";
+ for (int i = 0; i < codeParts[1].length(); i++) {
+ if ((int) (codeParts[1].charAt(i)) > 101 && (int) (codeParts[1].charAt(i)) < 117) {
+ severity = "" + codeParts[1].charAt(i);
+ break;
+ }
+ }
+ try {
+ operation = operation.toBuilder().severity(Severity.valueOf(severity)).build();
+ } catch (IllegalArgumentException e) {
+ throw new InvalidOperationException(
+ "Der Schweregrad des Einsatzes konnte nicht ausgelesen werden!");
+ }
+ for (Vehicle vehicle : vehicles) {
+ operationDAO.connectVehicleToOperation(vehicle.id(), operation.id());
+ }
+ return operationDAO.add(operation);
+ // TODO: CODE VALIDIEREN, Adresse nach vierstelliger Nummer suchen,
+ }
+
+ @Override
+ public void requestVehicles(long operationId, List<Long> vehicleIds)
+ throws InvalidOperationException, InvalidVehicleException, PersistenceException {}
+
+ @Override
+ public void complete(long operationId, Status status)
+ throws InvalidOperationException, PersistenceException {}
+
+ @Override
+ public SortedList<Vehicle> rankVehicles(long operationId)
+ throws InvalidOperationException, PersistenceException {
+ return null;
+ }
+
+ @Override
+ public List<Operation> list(EnumSet<Status> statuses) throws PersistenceException {
+ return null;
+ }
+}