summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorViktoria Pundy <viktoria.pundy@aon.at>2018-05-04 12:06:52 +0200
committerViktoria Pundy <viktoria.pundy@aon.at>2018-05-06 18:12:30 +0200
commitfa0991ed6d68e8658f7e413f4a765f12791486bf (patch)
tree8f181c4d9fb82d73a684073a63035086db3109bb /src
parent3cf6a6ad7c46b82a77691f7c42e2e9b53967570c (diff)
downloadsepm-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
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java19
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java49
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java40
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java18
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java117
-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:">