aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java230
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java13
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchivOperationController.java6
3 files changed, 244 insertions, 5 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
index 68185d6..16233e1 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
@@ -1,27 +1,65 @@
package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel;
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.Registration;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;
import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
+import java.lang.invoke.MethodHandles;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@Repository
public class DBOperationDAO implements OperationDAO {
private JDBCConnectionManager jdbcConnectionManager;
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- public DBOperationDAO(JDBCConnectionManager j) {
+ public DBOperationDAO(JDBCConnectionManager j) throws PersistenceException {
jdbcConnectionManager = j;
+ try {
+
+ getVehicleId = jdbcConnectionManager.getConnection().prepareStatement(GET_VEHICLE_ID);
+
+ getVehicle = jdbcConnectionManager.getConnection().prepareStatement(GET_VEHICLE);
+
+ getVehicleVersion =
+ jdbcConnectionManager.getConnection().prepareStatement(GET_VEHICLE_VERSION);
+
+ getRegistrations =
+ jdbcConnectionManager.getConnection().prepareStatement(GET_REGISTRATIONS);
+
+ getEmployee = jdbcConnectionManager.getConnection().prepareStatement(GET_EMPLOYEE);
+
+ getEmployeeVersion =
+ jdbcConnectionManager.getConnection().prepareStatement(GET_EMPLOYEE_VERSION);
+
+ } catch (SQLException e) {
+
+ LOG.error(
+ "SQLException occurred while preparing Statements. Error message: {} ",
+ e.getMessage());
+
+ throw new PersistenceException(e);
+ }
}
@Override
@@ -165,7 +203,195 @@ public class DBOperationDAO implements OperationDAO {
@Override
public Set<Operation> list(EnumSet<Status> statuses) throws PersistenceException {
- return null;
+ 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(") ;");
+ 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());
+ }
+ }
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException happened while preparing statement. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ return operations;
+ }
+
+ private static String GET_VEHICLE_ID =
+ "SELECT vehicleId FROM VehicleOperation WHERE operationId = ? ;";
+
+ private final PreparedStatement getVehicleId;
+
+ private Set<Vehicle> getVehiclesFromOperationId(long operationId) throws PersistenceException {
+ Set<Vehicle> vehicles = new HashSet<>();
+ try {
+ getVehicleId.setLong(1, operationId);
+ try (ResultSet resultSet = getVehicleId.executeQuery()) {
+ while (resultSet.next()) {
+ vehicles.add(getVehicle(resultSet.getLong("vehicleId")));
+ }
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting VehicleId from OperationId. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ return vehicles;
+ }
+
+ private static String GET_VEHICLE = "SELECT * FROM Vehicle WHERE id = ? ;";
+
+ private final PreparedStatement getVehicle;
+
+ private Vehicle getVehicle(long vehicleId) throws PersistenceException {
+ try {
+ getVehicle.setLong(1, vehicleId);
+ try (ResultSet resultSet = getVehicle.executeQuery()) {
+ resultSet.next();
+ return getVehicleVersion(
+ resultSet.getLong("id"),
+ resultSet.getLong("version"),
+ resultSet.getString("status"));
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting Vehicle by id. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ }
+
+ private static String GET_VEHICLE_VERSION = "SELECT * FROM VehicleVersion WHERE id = ? ;";
+
+ private final PreparedStatement getVehicleVersion;
+
+ private Vehicle getVehicleVersion(long vehicleId, long versionId, String status)
+ throws PersistenceException {
+ try {
+ getVehicleVersion.setLong(1, versionId);
+ try (ResultSet resultSet = getVehicleVersion.executeQuery()) {
+ resultSet.next();
+ return Vehicle.builder()
+ .id(vehicleId)
+ .name(resultSet.getString("name"))
+ .constructionType(
+ ConstructionType.valueOf(resultSet.getString("constructionType")))
+ .type(VehicleType.valueOf(resultSet.getString("type")))
+ .status(Vehicle.Status.valueOf(status))
+ .hasNef(resultSet.getBoolean("hasNef"))
+ .registrations(getRegistrations(vehicleId))
+ .build();
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting VehicleVersion. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ }
+
+ private static String GET_REGISTRATIONS = "SELECT * FROM Registration WHERE id = ? ;";
+
+ private final PreparedStatement getRegistrations;
+
+ private List<Registration> getRegistrations(long vehicleId) throws PersistenceException {
+ List<Registration> registrations = new LinkedList<>();
+ try {
+ getRegistrations.setLong(1, vehicleId);
+ try (ResultSet resultSet = getRegistrations.executeQuery()) {
+ while (resultSet.next()) {
+ long registrationId = resultSet.getLong("id");
+ registrations.add(
+ Registration.builder()
+ .id(registrationId)
+ .start(resultSet.getTimestamp("start").toInstant())
+ .end(resultSet.getTimestamp("end").toInstant())
+ .employee(getEmployee(resultSet.getLong("employeeId")))
+ .build());
+ }
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting Registration. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ return registrations;
+ }
+
+ private static String GET_EMPLOYEE = "SELECT version FROM Employee WHERE id = ? ;";
+
+ private final PreparedStatement getEmployee;
+
+ private Employee getEmployee(long employeeId) throws PersistenceException {
+ try {
+ getEmployee.setLong(1, employeeId);
+ try (ResultSet resultSet = getEmployee.executeQuery()) {
+ resultSet.next();
+ return getEmployeeVersion(employeeId, resultSet.getLong("version"));
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting Employee. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
+ }
+
+ private static String GET_EMPLOYEE_VERSION = "SELECT * FROM EmployeeVersion WHERE id = ? ;";
+
+ private final PreparedStatement getEmployeeVersion;
+
+ private Employee getEmployeeVersion(long employeeId, long versionId)
+ throws PersistenceException {
+ try {
+ getEmployeeVersion.setLong(1, versionId);
+ try (ResultSet resultSet = getEmployeeVersion.executeQuery()) {
+ resultSet.next();
+ return Employee.builder()
+ .id(employeeId)
+ .name(resultSet.getString("name"))
+ .birthday(resultSet.getDate("birthday").toLocalDate())
+ .educationLevel(
+ EducationLevel.valueOf(resultSet.getString("educationLevel")))
+ .isDriver(resultSet.getBoolean("isDriver"))
+ .isPilot(resultSet.getBoolean("isPilot"))
+ .build();
+ }
+ } catch (SQLException e) {
+ LOG.error(
+ "SQLException occurred while getting EmployeeVersion. Error message: {}",
+ e.getMessage());
+ throw new PersistenceException(e);
+ }
}
@Override
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
index ba4eb7f..8a9d61c 100644
--- 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
@@ -19,12 +19,16 @@ import java.util.SortedSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.stereotype.Service;
+import java.lang.invoke.MethodHandles;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Service
public class OperationServiceImpl implements OperationService {
// TODO: anders?
private OperationDAO operationDAO;
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final VehicleDAO vehicleDAO;
@@ -201,6 +205,13 @@ public class OperationServiceImpl implements OperationService {
@Override
public Set<Operation> list(EnumSet<Status> statuses) throws ServiceException {
- return null;
+ try {
+ return operationDAO.list(statuses);
+ } catch (PersistenceException e) {
+ LOG.debug(
+ "Caught PersistenceException. Throwing ServiceException. Message: {}",
+ e.getMessage());
+ throw new ServiceException(e);
+ }
}
}
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchivOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchivOperationController.java
index c0de7cc..57a3e3b 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchivOperationController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/ArchivOperationController.java
@@ -5,8 +5,10 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.S
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService;
import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
@@ -51,7 +53,7 @@ public class ArchivOperationController {
}*/
List<Operation> list = new LinkedList<>();
try {
- list = operationService.list(EnumSet.of(Status.CANCELLED, Status.COMPLETED));
+ list.addAll(operationService.list(EnumSet.of(Status.CANCELLED, Status.COMPLETED)));
} catch (ServiceException e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Fehler");
@@ -59,7 +61,7 @@ public class ArchivOperationController {
alert.setContentText("Die Einsätze konnten nicht geladen werden!");
alert.showAndWait();
}
- for (int i =0;i<list.size();i++){
+ for (int i = 0; i < list.size(); i++) {
Button b = new Button();
b.setPrefHeight(200);
b.setPrefWidth(800 / 2);