diff options
Diffstat (limited to 'src/main/java')
3 files changed, 236 insertions, 3 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 6eab58d..74d6457 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 @@ -195,7 +195,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 SortedSet<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 d473552..44e28d8 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 @@ -53,10 +53,13 @@ public class CreateOperationController {      public TextField txtAddress;      public TextField txtNote;      public Button btnCreateOperation; -    public ListView lvActiveOperations; +    public ListView<Vehicle> lvVehicles; +    public ListView<Operation> lvActiveOperations;      public Label lblChosenVehicles; -    public FlowPane fpVehicles; +    public LinkedList<Vehicle> chosenVehicles = new LinkedList<>();      public AnchorPane apInvisible; +    @FXML private OperationDetailsController operationDetailsController; +    public FlowPane fpVehicles;      private LinkedList<Vehicle> chosenVehicles = new LinkedList<>(); @@ -72,6 +75,7 @@ public class CreateOperationController {      @FXML      public void initialize() {          lblChosenVehicles.setText("keine ausgewählt"); +      }      public void updateList() { @@ -130,8 +134,20 @@ 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 static ContextMenu createContextMenu(Vehicle data, VehicleService vehicleService) {          ContextMenu menu = new ContextMenu(); @@ -292,4 +308,10 @@ public class CreateOperationController {      public void setVisible(boolean b) {          apInvisible.setVisible(!b);      } + +    private void openDetailsWindow(Operation operation) { +        operationDetailsController.setControllers(this, operationService, vehicleService); +        apInvisible.setVisible(true); +        operationDetailsController.initOperation(operation); +    }  } 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); +    } +}  | 
