diff options
author | Tharre <tharre3@gmail.com> | 2018-06-20 22:07:36 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-06-20 22:07:36 +0200 |
commit | 0c995a05985da749d93aa56eba976c7fc621a4fa (patch) | |
tree | 5b80394920705aae5e2b6004c3dfbd839c8b8fa3 /src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateOperationController.java | |
parent | f5bc7925a8fbbe247972a6f0e0571cc7e92fbefa (diff) | |
parent | e21feb3ac772a5394dc5381b58142c3c061de716 (diff) | |
download | sepm-groupproject-master.tar.gz sepm-groupproject-master.tar.xz sepm-groupproject-master.zip |
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.java | 365 |
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(); - } - } -} |