diff options
author | Viktoria Pundy <viktoria.pundy@aon.at> | 2018-05-04 12:06:52 +0200 |
---|---|---|
committer | Viktoria Pundy <viktoria.pundy@aon.at> | 2018-05-06 18:12:30 +0200 |
commit | fa0991ed6d68e8658f7e413f4a765f12791486bf (patch) | |
tree | 8f181c4d9fb82d73a684073a63035086db3109bb | |
parent | 3cf6a6ad7c46b82a77691f7c42e2e9b53967570c (diff) | |
download | sepm-groupproject-fa0991ed6d68e8658f7e413f4a765f12791486bf.tar.gz sepm-groupproject-fa0991ed6d68e8658f7e413f4a765f12791486bf.tar.xz sepm-groupproject-fa0991ed6d68e8658f7e413f4a765f12791486bf.zip |
Finished implementing needed methods in Persistence layer, added some validation factors for operation validation;
Added methods to ui to add/remove vehicles to operation, created dummy vehicles
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java | 19 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java | 49 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java | 40 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java | 18 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java | 117 | ||||
-rw-r--r-- | src/main/resources/fxml/CreateOperationController.fxml (renamed from src/main/resources/fxmlFiles/CreateOperationController.fxml) | 4 |
6 files changed, 201 insertions, 46 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 7036a1b..707d346 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 @@ -5,6 +5,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.S 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.beans.Statement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -29,7 +30,8 @@ public class DBOperationDAO implements OperationDAO { .getConnection() .prepareStatement( "INSERT INTO operation(opCode, severity, " - + "created, destination, additionalInfo, status) values (?,?,?,?,?,?)"); + + "created, destination, additionalInfo, status) values (?,?,?,?,?,?)", + java.sql.Statement.RETURN_GENERATED_KEYS); if (operation.opCode() == null) { throw new PersistenceException("Code darf nicht null sein!"); @@ -79,18 +81,19 @@ public class DBOperationDAO implements OperationDAO { 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()); + if (operation.status() == null) { + throw new PersistenceException("Status darf nicht null sein!"); } 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.setString(6, operation.status().toString()); } - - pstmt.executeQuery(); + pstmt.executeUpdate(); ResultSet rs = pstmt.getGeneratedKeys(); - if (rs.next()) return rs.getInt(1); + if (rs.next()) { + return rs.getInt(1); + } else throw new PersistenceException("Einsatz konnte nicht gespeichert werden"); } catch (SQLException e) { throw new PersistenceException(e); @@ -132,7 +135,7 @@ public class DBOperationDAO implements OperationDAO { + "values (?,?)"); pstmt.setLong(1, vehicleID); pstmt.setLong(2, operationID); - pstmt.executeQuery(); + pstmt.execute(); ResultSet rs = pstmt.getGeneratedKeys(); if (rs.next()) return rs.getInt(1); else diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java index 57a94de..e1b8c21 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java @@ -3,6 +3,7 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; 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.Status; +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; @@ -11,7 +12,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; -import javax.annotation.Nullable; public class DBVehicleDAO implements VehicleDAO { @@ -27,36 +27,51 @@ public class DBVehicleDAO implements VehicleDAO { } @Override - public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException { - - } + public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException {} @Override public List<Vehicle> list() throws PersistenceException { PreparedStatement pstmt = null; List<Vehicle> result = new LinkedList<>(); try { - pstmt = jdbcConnectionManager.getConnection().prepareStatement("Select * from VehicleVersion, " - + "Vehicle where VehicleVersion.id=Vehicle.version"); - //TODO: CORRECT? + pstmt = + jdbcConnectionManager + .getConnection() + .prepareStatement( + "Select * from VehicleVersion, " + + "Vehicle where VehicleVersion.id=Vehicle.version"); + // TODO: CORRECT? pstmt.executeQuery(); ResultSet rs = pstmt.getResultSet(); - while (rs.next()){ - //TODO: HAS NEF?, Registrations - Vehicle vehicle = Vehicle.builder().name(rs.getString(2)). - constructionType(ConstructionType.valueOf(rs.getString(2))). - status(Status.valueOf(rs.getString(7))).id(rs.getInt(1)).build(); + while (rs.next()) { + // TODO: Registrations + Vehicle vehicle = + Vehicle.builder() + .name(rs.getString(2)) + .constructionType(ConstructionType.valueOf(rs.getString(3))) + .status(Status.valueOf(rs.getString(8))) + .id(rs.getInt(6)) + .hasNef(rs.getBoolean(5)) + .type(VehicleType.valueOf(rs.getString(4))) + .build(); result.add(vehicle); } } catch (SQLException e) { - //TODO + throw new PersistenceException("Die Werte konnten nicht geladen werden.", e); + } finally { + if (pstmt != null) { + try { + pstmt.close(); + } catch (SQLException e) { + throw new PersistenceException( + "Verbindung zur Datenbank konnte nicht geschlossen werden!", e); + } + } } - return null; + return result; } @Override - public void remove(long id) throws ElementNotFoundException, PersistenceException { - - } + public void remove(long id) throws ElementNotFoundException, PersistenceException {} } 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 eee158b..9ba3a63 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 @@ -11,6 +11,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationExcepti import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; import java.util.EnumSet; import java.util.List; import javafx.collections.transformation.SortedList; @@ -18,12 +19,22 @@ import javafx.collections.transformation.SortedList; public class OperationServiceImpl implements OperationService { // TODO: anders? - private OperationDAO operationDAO = new DBOperationDAO(); + private OperationDAO operationDAO = new DBOperationDAO(new JDBCConnectionManager()); @Override public long add(Operation operation) throws InvalidOperationException, ServiceException { List<Vehicle> vehicles = operation.vehicles(); boolean rtw = false; + if (operation.vehicles().size() == 0) { + throw new InvalidOperationException( + "Es muss mindestens ein Fahrzeug ausgewählt werden!"); + } + if (faultyInput(operation.destination())){ + throw new InvalidOperationException("Adresse ist ungültig!"); + } + if (faultyInput(operation.opCode())){ + throw new InvalidOperationException("Code ist ungültig!"); + } for (Vehicle vehicle : vehicles) { if (vehicle.status() == Vehicle.Status.ABGEMELDET) throw new InvalidOperationException( @@ -47,7 +58,7 @@ public class OperationServiceImpl implements OperationService { } } if (!rtw) - //TODO: NUR WARNUNG AUSGEBEN + // TODO: NUR WARNUNG AUSGEBEN throw new InvalidOperationException( "Zu einem Fahrzeug des Typs NAH muss auch ein Fahrzeug des Typs RTW geschickt werden!"); } @@ -55,7 +66,7 @@ public class OperationServiceImpl implements OperationService { 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) { + if (((int) (codeParts[1].charAt(i)) >= 65 && (int) (codeParts[1].charAt(i)) <= 79) || ((int) (codeParts[1].charAt(i)) >= 97 && (int) (codeParts[1].charAt(i))<=111)) { severity = "" + codeParts[1].charAt(i); break; } @@ -66,11 +77,28 @@ public class OperationServiceImpl implements OperationService { throw new InvalidOperationException( "Der Schweregrad des Einsatzes konnte nicht ausgelesen werden!"); } + operation = operation.toBuilder().status(Status.ACTIVE).build(); for (Vehicle vehicle : vehicles) { - operationDAO.connectVehicleToOperation(vehicle.id(), operation.id()); + try { + operationDAO.connectVehicleToOperation(vehicle.id(), operation.id()); + } catch (PersistenceException e) { + throw new ServiceException(e); + } + } + try { + return operationDAO.add(operation); + } catch (PersistenceException e) { + throw new ServiceException(e); + } + } + + private boolean faultyInput(String name) { + if (name == null) return true; + else if (name.isEmpty()) return true; + for (int i = 0; i < name.length(); i++) { + if (name.charAt(i) != ' ') return false; } - return operationDAO.add(operation); - // TODO: CODE VALIDIEREN? + return true; } @Override diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java index 80d7432..f21ae9a 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java @@ -1,14 +1,21 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBVehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; import java.util.EnumSet; import java.util.List; public class VehicleServiceImpl implements VehicleService { + // TODO + private static VehicleDAO vehicleDAO = new DBVehicleDAO(new JDBCConnectionManager()); + @Override public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException { return 0; @@ -21,11 +28,14 @@ public class VehicleServiceImpl implements VehicleService { @Override public List<Vehicle> list(EnumSet<Status> statuses) throws ServiceException { - return null; + // TODO: IMPLEMENT SEARCH WITH STATUS + try { + return vehicleDAO.list(); + } catch (PersistenceException e) { + throw new ServiceException(e); + } } @Override - public void remove(long id) throws InvalidVehicleException, ServiceException { - - } + public void remove(long id) throws InvalidVehicleException, ServiceException {} } diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java index 10f9f03..8df8acc 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java @@ -1,19 +1,27 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.userInterface; 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.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; import java.time.Instant; +import java.util.EnumSet; import java.util.LinkedList; import java.util.List; +import javafx.collections.FXCollections; import javafx.fxml.FXML; +import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.Label; +import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; @@ -28,8 +36,9 @@ public class CreateOperationController { public ListView<Vehicle> lvVehicles; public ListView lvActiveOperations; public Label lblChosenVehicles; - public LinkedList<Vehicle> chosenVehicles; + public LinkedList<Vehicle> chosenVehicles = new LinkedList<>(); + // TODO: Anders? OperationService operationService = new OperationServiceImpl(); VehicleService vehicleService = new VehicleServiceImpl(); @@ -37,14 +46,104 @@ public class CreateOperationController { @FXML public void initialize() { + lblChosenVehicles.setText("keine ausgewählt"); + lvVehicles.setCellFactory( + param -> + new ListCell<Vehicle>() { + @Override + protected void updateItem(Vehicle item, boolean empty) { + super.updateItem(item, empty); + + if (empty || item == null || item.name() == null) { + setText(null); + } else { + setText(item.name()); + } + } + }); + lvVehicles.setOnMouseClicked( event -> { if (event.getClickCount() == 2) { - chosenVehicles.add(lvVehicles.getSelectionModel().getSelectedItem()); + boolean remove = false; + for (int i = 0; i < chosenVehicles.size(); i++) { + if (lvVehicles + .getSelectionModel() + .getSelectedItem() + .equals(chosenVehicles.get(i))) { + remove = true; + break; + } + } + if (!remove) { + chosenVehicles.add(lvVehicles.getSelectionModel().getSelectedItem()); + + } + else { + chosenVehicles.remove(lvVehicles.getSelectionModel().getSelectedItem()); + + } + String result = ""; + for (int i = 0; i < chosenVehicles.size(); i++) { + if (i == chosenVehicles.size() - 1) { + result += chosenVehicles.get(i).name(); + } else { + result += chosenVehicles.get(i).name() + ", "; + } + } + if (result.equals("")){ + lblChosenVehicles.setText("keine ausgewählt"); + } + else { + lblChosenVehicles.setText(result); + } } }); } + public void fillList() { + // TODO: Zu anderem Zeitpunkt aktualisieren. + /*try { + this.lvVehicles.setItems( + //TODO: ALLE FREI STATI Frei FUnk Frei Wache + FXCollections.observableArrayList( + vehicleService.list(EnumSet.of(Vehicle.Status.FREI_FUNK)))); + } catch (ServiceException e) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + }*/ + + this.lvVehicles.setItems(FXCollections.observableArrayList(mylist())); + } + + private LinkedList<Vehicle> mylist() { + Vehicle vehicle = + Vehicle.builder() + .name("Test-KTW") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.KTW) + .status(Vehicle.Status.FREI_WACHE) + .hasNef(true) + .build(); + + Vehicle vehicle1 = + Vehicle.builder() + .name("Test-NEF") + .constructionType(ConstructionType.NORMAL) + .type(VehicleType.NEF) + .status(Vehicle.Status.FREI_FUNK) + .hasNef(true) + .build(); + LinkedList<Vehicle> list = new LinkedList<>(); + list.add(vehicle); + list.add(vehicle1); + // this.lvVehicles.setItems(FXCollections.observableArrayList(list)); + return list; + } + @FXML protected void createOperationClicked() { Vehicle[] vehicles = new Vehicle[chosenVehicles.size()]; @@ -59,16 +158,16 @@ public class CreateOperationController { .opCode(txtCode.getText()) .status(Status.ACTIVE) .vehicles(List.of(vehicles)) + .severity(Severity.A) .build(); - try { operationService.add(operation); - } catch (InvalidOperationException e) { - //TODO - } catch (ServiceException e) { - e.printStackTrace(); + } catch (ServiceException | InvalidOperationException e) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); } } - - } diff --git a/src/main/resources/fxmlFiles/CreateOperationController.fxml b/src/main/resources/fxml/CreateOperationController.fxml index 7b188fd..949d4ec 100644 --- a/src/main/resources/fxmlFiles/CreateOperationController.fxml +++ b/src/main/resources/fxml/CreateOperationController.fxml @@ -27,7 +27,7 @@ <Font size="19.0" /> </font> </Label> - <TextField fx:id="txtCode" layoutX="14.0" layoutY="48.0" prefHeight="39.0" prefWidth="163.0" text="ALP-95E7"> + <TextField fx:id="txtCode" layoutX="14.0" layoutY="48.0" prefHeight="39.0" prefWidth="163.0"> <font> <Font name="System Bold" size="20.0" /> </font> @@ -39,7 +39,7 @@ </TextField> <TextField fx:id="txtNote" layoutX="587.0" layoutY="48.0" prefHeight="39.0" prefWidth="319.0"> <font> - <Font size="20.0" /> + <Font name="System Bold" size="20.0" /> </font> </TextField> <Label layoutX="14.0" layoutY="101.0" prefHeight="30.0" prefWidth="102.0" text="Fahrzeuge:"> |