aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java365
1 files changed, 0 insertions, 365 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java
deleted file mode 100644
index 57759e3..0000000
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java
+++ /dev/null
@@ -1,365 +0,0 @@
-package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller;
-
-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.Registration;
-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 at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
-import java.io.IOException;
-import java.lang.invoke.MethodHandles;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import javafx.collections.FXCollections;
-import javafx.event.ActionEvent;
-import javafx.fxml.FXML;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.Button;
-import javafx.scene.control.ContextMenu;
-import javafx.scene.control.Label;
-import javafx.scene.control.ListCell;
-import javafx.scene.control.ListView;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.TextField;
-import javafx.scene.input.KeyCode;
-import javafx.scene.input.KeyEvent;
-import javafx.scene.input.MouseButton;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.FlowPane;
-import javafx.stage.Stage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Controller;
-
-@Controller
-public class CreateOperationController {
-
- private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
- public AnchorPane apCreateOperation;
- @FXML private TextField txtCode;
- @FXML private TextField txtAddress;
- @FXML private TextField txtNote;
- @FXML private Button btnCreateOperation;
- @FXML private ListView<Vehicle> lvVehicles;
- @FXML private ListView<Operation> lvActiveOperations;
- @FXML private Label lblChosenVehicles;
- @FXML private AnchorPane apInvisible;
- @FXML private OperationDetailsController operationDetailsController;
- @FXML private FlowPane fpVehicles;
-
- private LinkedList<Vehicle> chosenVehicles = new LinkedList<>();
-
- private final OperationService operationService;
- private final VehicleService vehicleService;
- private final SpringFXMLLoader fxmlLoader;
-
- public CreateOperationController(
- OperationService operationService,
- VehicleService vehicleService,
- SpringFXMLLoader fxmlLoader) {
- this.operationService = operationService;
- this.vehicleService = vehicleService;
- this.fxmlLoader = fxmlLoader;
- }
-
- @FXML
- private void initialize() {
- lblChosenVehicles.setText("keine ausgewählt");
- 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;
- }
- openDetailsWindow(lvActiveOperations.getSelectionModel().getSelectedItem());
- }
- });
- }
-
- public void updateList() {
- try {
- fpVehicles.getChildren().clear();
-
- // TODO: this should probably be handled differently
- Set<Vehicle> vehicles;
- if (txtCode.getText().isEmpty()) {
- vehicles =
- vehicleService.list(
- EnumSet.complementOf(EnumSet.of(Vehicle.Status.ABGEMELDET)));
- } else {
- vehicles = operationService.rankVehicles(txtCode.getText());
- }
-
- for (Vehicle vehicle : vehicles) {
- VehiclePaneController controller = VehiclePaneController.createVehiclePane();
-
- controller.setData(vehicle, true);
- controller
- .getRootElement()
- .setOnMouseClicked(
- event -> {
- if (event.getButton().equals(MouseButton.SECONDARY)) {
- createContextMenu(vehicle, vehicleService)
- .show(
- controller.getRootElement(),
- event.getScreenX(),
- event.getScreenY());
- } else {
- if (chosenVehicles.contains(vehicle)) {
- chosenVehicles.remove(vehicle);
- controller.setSelected(false);
- } else {
- chosenVehicles.add(vehicle);
- controller.setSelected(true);
- }
-
- StringBuilder result = new StringBuilder();
- for (int i = 0; i < chosenVehicles.size(); i++) {
- if (i == chosenVehicles.size() - 1) {
- result.append(chosenVehicles.get(i).name());
- } else {
- result.append(chosenVehicles.get(i).name())
- .append(", ");
- }
- }
- if (result.toString().equals("")) {
- lblChosenVehicles.setText("keine ausgewählt");
- } else {
- lblChosenVehicles.setText(result.toString());
- }
- }
- });
-
- fpVehicles.getChildren().add(controller.getRootElement());
- }
- } catch (ServiceException | IOException | InvalidOperationException e) {
- LOG.error("Error while updating list.", e);
-
- Alert alert = new Alert(Alert.AlertType.ERROR);
- alert.setTitle("Fehler");
- alert.setHeaderText("Fehler!");
- 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 ContextMenu createContextMenu(Vehicle data, VehicleService vehicleService) {
- ContextMenu menu = new ContextMenu();
-
- for (Vehicle.Status status : Vehicle.Status.values()) {
- if (status == Vehicle.Status.ABGEMELDET) {
- continue;
- }
-
- MenuItem mi = new MenuItem(status.name());
-
- if (status == Vehicle.Status.FREI_FUNK || status == Vehicle.Status.FREI_WACHE) {
- mi.getStyleClass().add("mi-free");
- } else {
- mi.getStyleClass().add("mi-other");
- }
-
- mi.setOnAction(
- event -> {
- try {
- vehicleService.update(data.toBuilder().status(status).build());
- this.updateList();
- } catch (InvalidVehicleException | ServiceException e) {
- LOG.error("Error while setting status.", e);
- Alert a = new Alert(AlertType.ERROR, e.getMessage());
- a.show();
- }
- });
-
- menu.getItems().add(mi);
- }
-
- MenuItem abmelden = new MenuItem("abmelden");
-
- abmelden.setOnAction(
- event -> {
- try {
- List<Registration> registrations = data.registrations();
- assert registrations
- != null; // Otherwise the element shouldn't be in the list.
-
- List<Registration> newRegistrations = new ArrayList<>();
- Instant now = Instant.now();
-
- for (Registration registration : registrations) {
- if (registration.start().isBefore(now)
- && registration.end().isAfter(now)) {
- newRegistrations.add(
- registration
- .toBuilder()
- .end(Instant.now().minus(1, ChronoUnit.SECONDS))
- .build());
- } else newRegistrations.add(registration);
- }
-
- vehicleService.update(
- data.toBuilder()
- .registrations(newRegistrations)
- .status(Vehicle.Status.ABGEMELDET)
- .build());
-
- this.updateList();
- } catch (InvalidVehicleException | ServiceException e) {
- LOG.error("Error while unregistering.", e);
- Alert a = new Alert(AlertType.ERROR, e.getMessage());
- a.show();
- }
- });
-
- menu.getItems().add(abmelden);
- return menu;
- }
-
- @FXML
- protected void createOperationClicked() {
- Vehicle[] vehicles = new Vehicle[chosenVehicles.size()];
- for (int i = 0; i < chosenVehicles.size(); i++) {
- vehicles[i] = chosenVehicles.get(i);
- }
- Operation operation =
- Operation.builder()
- .additionalInfo(txtNote.getText())
- .destination(txtAddress.getText())
- .opCode(txtCode.getText())
- .status(Status.ACTIVE)
- .vehicles(Set.of(vehicles))
- .build();
- try {
- operationService.add(operation);
- } catch (ServiceException | InvalidOperationException e) {
- Alert alert = new Alert(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 gespeichert");
- alert.setContentText("Der Einsatz wurde erfolgreich gespeichert.");
- alert.showAndWait();
- updateList();
- lblChosenVehicles.setText("keine ausgewählt");
- txtAddress.setText("");
- txtCode.setText("");
- txtNote.setText("");
- chosenVehicles = new LinkedList<>();
- }
-
- public void onRegistrationLinkClicked(ActionEvent actionEvent) {
- openNewWindow("RegistrationWindow.fxml");
- }
-
- public void onEmployeeLinkClicked(ActionEvent actionEvent) {
- openNewWindow("listEmployees.fxml");
- }
-
- public void onVehicleLinkClicked(ActionEvent actionEvent) {
- openNewWindow("createCar.fxml");
- }
-
- public void onArchivLinkClicked() {
- openNewArchivWindow();
- }
-
- private void openNewArchivWindow() {
- Stage stage = new Stage();
- try {
- stage.setScene(
- new Scene(
- (Parent)
- fxmlLoader.load(
- getClass()
- .getResourceAsStream(
- "/fxml/ArchiveOperation.fxml"))));
- } catch (IOException e) {
- LOG.error("Could not open new window: {}", e);
- }
- stage.setTitle("Einsatz erstellen");
- stage.centerOnScreen();
- stage.show();
- updateList();
- }
-
- private void openNewWindow(String fxmlFileName) {
-
- Stage stage = new Stage();
- try {
- stage.setScene(
- new Scene(
- (Parent)
- fxmlLoader.load(
- getClass()
- .getResourceAsStream(
- "/fxml/" + fxmlFileName))));
- } catch (IOException e) {
- LOG.error("Could not open new window: {}", e);
- }
-
- stage.setTitle("Ressourcenverwaltung");
- stage.centerOnScreen();
- stage.showAndWait(); // important to call wait so that updateList is executed afterwards
-
- updateList();
- }
-
- void setVisible(boolean b) {
- apInvisible.setVisible(!b);
- }
-
- private void openDetailsWindow(Operation operation) {
- operationDetailsController.initOperation(operation);
- this.setVisible(false);
- }
-
- @FXML
- public void onOperationCodeChanged(KeyEvent keyEvent) {
- if (keyEvent.getCode() == KeyCode.ENTER) {
- updateList();
- }
- }
-}