diff options
Diffstat (limited to 'src/main/java')
3 files changed, 260 insertions, 2 deletions
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 05a548c..ce5613e 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 @@ -5,6 +5,7 @@ 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.exception.ElementNotFoundException; 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; @@ -116,7 +117,24 @@ public class OperationServiceImpl implements OperationService { @Override public void complete(long operationId, Status status) - throws InvalidOperationException, ServiceException {} + throws InvalidOperationException, ServiceException { + Operation operation; + try { + operation = operationDAO.get(operationId); + } catch (ElementNotFoundException e) { + throw new InvalidOperationException(e); + } catch (PersistenceException e) { + throw new ServiceException(e); + } + operation = operation.toBuilder().status(status).build(); + try { + operationDAO.update(operation); + } catch (ElementNotFoundException e) { + throw new InvalidOperationException(e); + } catch (PersistenceException e) { + throw new ServiceException(e); + } + } @Override public SortedList<Vehicle> rankVehicles(long operationId) 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 5b645f3..ea21691 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 @@ -47,9 +47,11 @@ public class CreateOperationController { public TextField txtNote; public Button btnCreateOperation; public ListView<Vehicle> lvVehicles; - public ListView lvActiveOperations; + public ListView<Operation> lvActiveOperations; public Label lblChosenVehicles; public LinkedList<Vehicle> chosenVehicles = new LinkedList<>(); + public AnchorPane apInvisible; + @FXML private OperationDetailsController operationDetailsController; // TODO: Anders? OperationService operationService = @@ -79,6 +81,20 @@ public class CreateOperationController { } } }); + lvActiveOperations.setCellFactory( + param -> + new ListCell<>() { + @Override + protected void updateItem(Operation item, boolean empty) { + super.updateItem(item, empty); + + if (empty || item == null || item.opCode() == null) { + setText(null); + } else { + setText(item.opCode()); + } + } + }); lvVehicles.setOnMouseClicked( event -> { @@ -114,6 +130,15 @@ public class CreateOperationController { } } }); + lvActiveOperations.setOnMouseClicked( + event -> { + if (event.getClickCount() == 2) { + if (lvActiveOperations.getSelectionModel().getSelectedItem() == null) { + return; + } + openDetailsWindow(lvActiveOperations.getSelectionModel().getSelectedItem()); + } + }); } public void updateList() { @@ -130,6 +155,17 @@ public class CreateOperationController { alert.setContentText(e.getMessage()); alert.showAndWait(); } + try { + lvActiveOperations.setItems( + FXCollections.observableArrayList( + operationService.list(EnumSet.of(Status.ACTIVE)))); + } catch (ServiceException e) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Fehler - Einsätze"); + alert.setHeaderText("Beim Holen der aktiven Einsätze ist ein Fehler aufgetreten."); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + } } /*private LinkedList<Vehicle> mylist() { @@ -224,4 +260,14 @@ public class CreateOperationController { updateList(); } + + private void openDetailsWindow(Operation operation) { + operationDetailsController.setControllers(this, operationService, vehicleService); + apInvisible.setVisible(true); + operationDetailsController.initOperation(operation); + } + + void setVisible(boolean b) { + apInvisible.setVisible(!b); + } } diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/OperationDetailsController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/OperationDetailsController.java new file mode 100644 index 0000000..cacaa29 --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/OperationDetailsController.java @@ -0,0 +1,194 @@ +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.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +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.ServiceException; +import java.util.EnumSet; +import javafx.collections.FXCollections; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.layout.AnchorPane; +import org.springframework.stereotype.Controller; + +@Controller +public class OperationDetailsController { + + public Operation operation; + private OperationService operationService; + private VehicleService vehicleService; + private CreateOperationController createOperationController; + public ListView<Vehicle> lvVehicles; + public ListView<Operation> lvActiveOperations; + public Label lblChosenVehicles; + public Button btnCloseOperation; + public Button btnCancelOperation; + public Label lblCode, lblAdditionalInfo, lblAddress; + public AnchorPane operationDetailsAP; + + public OperationDetailsController() {} + + @FXML + public void initialize() { + lvVehicles.setCellFactory( + param -> + new ListCell<>() { + @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()); + } + } + }); + lvActiveOperations.setCellFactory( + param -> + new ListCell<>() { + @Override + protected void updateItem(Operation item, boolean empty) { + super.updateItem(item, empty); + + if (empty || item == null || item.opCode() == null) { + setText(null); + } else { + setText(item.opCode()); + } + } + }); + lvActiveOperations.setOnMouseClicked( + event -> { + if (event.getClickCount() == 2) { + if (lvActiveOperations.getSelectionModel().getSelectedItem() == null) { + return; + } + initOperation(lvActiveOperations.getSelectionModel().getSelectedItem()); + } + }); + } + + void setControllers( + CreateOperationController createOperationController, + OperationService operationService, + VehicleService vehicleService) { + this.operationService = operationService; + this.createOperationController = createOperationController; + this.vehicleService = vehicleService; + } + + void initOperation(Operation operation) { + fillActiveList(); + this.operation = operation; + lblCode.setText(operation.opCode()); + StringBuilder result = new StringBuilder(); + for (int i = 0; i < operation.vehicles().size(); i++) { + if (i != operation.vehicles().size() - 1) { + result.append(operation.vehicles().get(i).name()).append(","); + } else { + result.append(operation.vehicles().get(i).name()); + } + } + lblChosenVehicles.setText(result.toString()); + lblAdditionalInfo.setText(operation.additionalInfo()); + lblAddress.setText(operation.destination()); + lvVehicles.setItems(FXCollections.observableArrayList(operation.vehicles())); + operationDetailsAP.setVisible(true); + } + + private void fillActiveList() { + try { + lvActiveOperations.setItems( + FXCollections.observableArrayList( + operationService.list(EnumSet.of(Status.ACTIVE)))); + } catch (ServiceException e) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + } + } + + @FXML + public void closeOperationClicked() { + try { + operationService.complete(operation.id(), Status.COMPLETED); + } catch (InvalidOperationException | ServiceException e) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + return; + } + for (Vehicle v : operation.vehicles()) { + v = v.toBuilder().status(Vehicle.Status.FREI_FUNK).build(); + try { + vehicleService.update(v); + } catch (InvalidVehicleException | ServiceException e) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + return; + } + } + Alert alert = new Alert(AlertType.CONFIRMATION); + alert.setTitle("Erfolg"); + alert.setHeaderText("Erfolgreich aktualisiert"); + alert.setContentText("Der Einsatz wurde erfolgreich aktualisiert."); + alert.showAndWait(); + closeWindow(); + createOperationController.updateList(); + } + + public void cancelOperationClicked() { + try { + operationService.complete(operation.id(), Status.CANCELLED); + } catch (InvalidOperationException | ServiceException e) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + return; + } + for (Vehicle v : operation.vehicles()) { + v = v.toBuilder().status(Vehicle.Status.FREI_FUNK).build(); + try { + vehicleService.update(v); + } catch (InvalidVehicleException | ServiceException e) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Fehler"); + alert.setHeaderText("Fehler!"); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + return; + } + } + Alert alert = new Alert(AlertType.CONFIRMATION); + alert.setTitle("Erfolg"); + alert.setHeaderText("Erfolgreich aktualisiert"); + alert.setContentText("Der Einsatz wurde erfolgreich aktualisiert."); + alert.showAndWait(); + closeWindow(); + createOperationController.updateList(); + } + + public void closeWindow() { + operationDetailsAP.setVisible(false); + this.createOperationController.setVisible(true); + } +} |