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 | |
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')
10 files changed, 0 insertions, 1635 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ArchiveOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ArchiveOperationController.java deleted file mode 100644 index 80d9fc4..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ArchiveOperationController.java +++ /dev/null @@ -1,127 +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.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.util.Collection; -import java.util.EnumSet; -import java.util.LinkedList; -import java.util.Objects; -import java.util.stream.Collectors; -import javafx.fxml.FXML; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.Hyperlink; -import javafx.scene.control.Label; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.FlowPane; -import org.springframework.stereotype.Controller; - -@Controller -public class ArchiveOperationController { - @FXML private AnchorPane apDetails; - @FXML private Label lblCodeHeader; - @FXML private Hyperlink hypBack; - @FXML private Label lblOpCode; - @FXML private Label lblVehicles; - @FXML private Label lblDate; - @FXML private Label lblAddress; - @FXML private FlowPane fpVehicles; - private final OperationService operationService; - @FXML private FlowPane archiveOperationFlowPane; - private LinkedList<Operation> list = new LinkedList<>(); - - public ArchiveOperationController(OperationService operationService) { - this.operationService = operationService; - } - - @FXML - private void initialize() { - try { - list.addAll(operationService.list(EnumSet.of(Status.CANCELLED, Status.COMPLETED))); - } catch (ServiceException e) { - Alert alert = new Alert(AlertType.ERROR); - alert.setTitle("Fehler"); - alert.setHeaderText("Fehler!"); - alert.setContentText("Die Einsätze konnten nicht geladen werden!"); - alert.showAndWait(); - } - for (Operation operation : list) { - Button b = new Button(); - b.setPrefHeight(200); - b.setPrefWidth(750 / 2); - b.setText(operation.opCode()); - b.setOnAction(event -> buttonClicked(b)); - archiveOperationFlowPane.getChildren().add(b); - } - } - - private Operation detailOperation; - - private void buttonClicked(Button button) { - int size = archiveOperationFlowPane.getChildren().size(); - int index = 0; - for (int i = 0; i < size; i++) { - if (archiveOperationFlowPane.getChildren().get(i) == button) { - index = i; - break; - } - } - detailOperation = list.get(index); - setOperation(); - setDetailsVisible(true); - } - - private void setOperation() { - lblCodeHeader.setText(detailOperation.opCode()); - String date = "am "; - if (detailOperation.created() != null) { - LocalDateTime myDateTime = - LocalDateTime.ofInstant( - Objects.requireNonNull(detailOperation.created()), ZoneOffset.UTC); - date += - myDateTime.getDayOfMonth() - + "." - + myDateTime.getMonth().getValue() - + "." - + myDateTime.getYear(); - lblDate.setText(date); - } else { - lblDate.setText("---"); - } - - lblOpCode.setText(detailOperation.opCode()); - Collection<String> elements = - detailOperation.vehicles().stream().map(Vehicle::name).collect(Collectors.toList()); - String result = String.join(", ", elements); - - lblVehicles.setText(result); - lblAddress.setText(detailOperation.destination()); - - for (Vehicle vehicle : detailOperation.vehicles()) { - Button b = new Button(); - b.setPrefHeight(200); - b.setPrefWidth(600 / 2); - b.setText(vehicle.name()); - fpVehicles.getChildren().add(b); - } - } - - public void setListVisible(boolean b) { - archiveOperationFlowPane.setVisible(b); - } - - private void setDetailsVisible(boolean b) { - apDetails.setVisible(b); - } - - public void backClicked() { - fpVehicles.getChildren().clear(); - setDetailsVisible(false); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateCarController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateCarController.java deleted file mode 100644 index ce795da..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateCarController.java +++ /dev/null @@ -1,206 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -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.einsatzverwaltung.service.VehicleService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.lang.invoke.MethodHandles; -import java.util.EnumSet; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javafx.collections.FXCollections; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.geometry.HPos; -import javafx.geometry.Orientation; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ChoiceBox; -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 CreateCarController { - - @FXML private ChoiceBox<String> cmb_Ctyp; - @FXML private ChoiceBox<String> cmb_typ; - @FXML private Button btn_cancel; - @FXML private Button btn_create; - @FXML private CheckBox cbx_NEF; - @FXML private FlowPane fp_vehicleList; - - private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final VehicleService vehicleService; - private boolean update = false; - private long vid = -1; - - public CreateCarController(VehicleService vehicleService) { - this.vehicleService = vehicleService; - } - - @FXML - private void initialize() { - cmb_Ctyp.setItems( - FXCollections.observableArrayList( - Stream.of( - ConstructionType.NORMAL, - ConstructionType.MITTELHOCHDACH, - ConstructionType.HOCHDACH) - .map(Enum::toString) - .collect(Collectors.toList()))); - cmb_Ctyp.setValue(ConstructionType.NORMAL.toString()); - cmb_typ.setItems( - FXCollections.observableArrayList( - Stream.of( - VehicleType.BKTW, - VehicleType.KTW_B, - VehicleType.KTW, - VehicleType.RTW, - VehicleType.NEF, - VehicleType.NAH) - .map(Enum::toString) - .collect(Collectors.toList()))); - cmb_typ.setValue(VehicleType.BKTW.toString()); - vehicleListFP(); - } - - @FXML - private void onCancelClicked() { - ((Stage) btn_cancel.getScene().getWindow()).close(); - } - - @FXML - private void createCar(ActionEvent actionEvent) { - - if (!update) { - Vehicle vehicle = - Vehicle.builder() - .constructionType(parseConstructionType()) - .type(parseType()) - .name("") - .status(Status.ABGEMELDET) - .hasNef(cbx_NEF.isSelected()) - .build(); - try { - vehicleService.add(vehicle); - setToStart(); - } catch (InvalidVehicleException e) { - LOG.error("Invalid Vehicle: {}", e); - createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); - setToStart(); - return; - } catch (ServiceException e) { - LOG.error("Exception: {}", e); - createComplete(AlertType.ERROR, "Fehler", e.getMessage()); - setToStart(); - return; - } - createComplete( - AlertType.CONFIRMATION, - "Speichern Erfolgreich", - "Auto wurde erfolgreich angelegt"); - } else { - try { - Vehicle vehicle = - Vehicle.builder() - .id(vid) - .constructionType(parseConstructionType()) - .type(parseType()) - .name("") - .status(Status.ABGEMELDET) - .hasNef(cbx_NEF.isSelected()) - .build(); - vehicleService.update(vehicle); - setToStart(); - } catch (InvalidVehicleException e) { - LOG.error("Invalid Vehicle: {}", e); - createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); - setToStart(); - return; - } catch (ServiceException e) { - LOG.error("Exception: {}", e); - createComplete(AlertType.ERROR, "Fehler", e.getMessage()); - setToStart(); - return; - } - createComplete( - AlertType.CONFIRMATION, - "Bearbiten Erfolgreich", - "Auto wurde erfolgreich bearbeitet"); - } - vehicleListFP(); - } - - private ConstructionType parseConstructionType() { - if (cmb_Ctyp.getSelectionModel().getSelectedItem() == null) { - return ConstructionType.NORMAL; - } - return ConstructionType.valueOf(cmb_Ctyp.getSelectionModel().getSelectedItem().toString()); - } - - private VehicleType parseType() { - if (cmb_typ.getSelectionModel().getSelectedItem() == null) { - return VehicleType.BKTW; - } - return VehicleType.valueOf(cmb_typ.getSelectionModel().getSelectedItem().toString()); - } - - private void createComplete(AlertType alertType, String headerText, String contentText) { - Alert alert = new Alert(alertType, contentText, ButtonType.OK); - alert.setHeaderText(headerText); - alert.showAndWait(); - } - - private void vehicleListFP() { - Set<Vehicle> vehicleList = null; - fp_vehicleList.getChildren().clear(); - try { - vehicleList = vehicleService.list(EnumSet.range(Status.ABGEMELDET, Status.FREI_FUNK)); - } catch (ServiceException e) { - e.printStackTrace(); - } - - fp_vehicleList.setOrientation(Orientation.HORIZONTAL); - fp_vehicleList.setColumnHalignment(HPos.LEFT); // align labels on left - fp_vehicleList.setPrefWrapLength(200); // preferred height = 200 - - for (Vehicle v : vehicleList) { - Button b = new Button(v.name()); - b.setOnAction(event -> updateVehicle(v)); - fp_vehicleList.getChildren().add(b); - } - fp_vehicleList.setVisible(true); - } - - private void setToStart() { - btn_create.setText("Erstellen"); - cbx_NEF.setSelected(false); - cmb_typ.setValue(VehicleType.BKTW.name()); - cmb_Ctyp.setValue(ConstructionType.NORMAL.name()); - update = false; - } - - private void updateVehicle(Vehicle vehicle) { - cmb_Ctyp.setValue(vehicle.constructionType().name()); - cmb_typ.setValue(vehicle.type().name()); - cbx_NEF.setSelected(vehicle.hasNef()); - btn_create.setText("Speichern"); - vid = vehicle.id(); - update = true; - } - - @FXML - public void cancelAction(ActionEvent actionEvent) { - setToStart(); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java deleted file mode 100644 index 15282cc..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java +++ /dev/null @@ -1,189 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader.FXMLWrapper; -import java.io.IOException; -import java.lang.invoke.MethodHandles; -import java.time.LocalDate; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javafx.collections.FXCollections; -import javafx.fxml.FXML; -import javafx.scene.Node; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ChoiceBox; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Controller; - -@Controller -@Scope("prototype") -public class CreateNewEmployeeController { - - private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final EmployeeService employeeService; - - @FXML private Label lblHeader; - @FXML private CheckBox inputIsDriver; - @FXML private CheckBox inputIsPilot; - @FXML private TextField inputName; - @FXML private ChoiceBox<String> inputQualification; - @FXML private Button btnCreate; - - private Node rootElement; - private Employee employee; - private boolean isEdit; - - private Runnable consumerCancelClicked; - private Runnable consumerCreateClicked; - - public CreateNewEmployeeController(EmployeeService employeeService) { - this.employeeService = employeeService; - } - - @FXML - private void initialize() { - inputQualification.setItems( - FXCollections.observableArrayList( - Stream.of( - EducationLevel.RS, - EducationLevel.NFS, - EducationLevel.NKV, - EducationLevel.NKA, - EducationLevel.NKI, - EducationLevel.NA) - .map(Enum::toString) - .collect(Collectors.toList()))); - - inputQualification.setValue(EducationLevel.RS.toString()); - employee = - Employee.builder() - .name("") - .educationLevel(EducationLevel.RS) - .isDriver(false) - .isPilot(false) - .birthday(LocalDate.MIN) - .build(); - } - - @FXML - private void onCancelClicked() { - if (consumerCancelClicked != null) { - consumerCancelClicked.run(); - } - } - - @FXML - private void onCreateClicked() { - - employee = - employee.toBuilder() - .name(inputName.getText()) - .educationLevel(parseEducationLevel()) - .birthday(LocalDate.MIN) // TODO: change UI to include birthday field - .isDriver(inputIsDriver.isSelected()) - .isPilot(inputIsPilot.isSelected()) - .build(); - - try { - if (isEdit) { - employeeService.update(employee); - } else { - employeeService.add(employee); - } - } catch (InvalidEmployeeException e) { - LOG.error("Invalid Employee: {}", e); - - showModalDialogWithOkButton( - AlertType.ERROR, - "Ungültige Eingabe", - "Mindestens eines der Eingabefelder haben einen ungültigen Wert!"); - return; - } catch (ServiceException e) { - LOG.error("Employee could not be saved: {}", e); - - showModalDialogWithOkButton( - AlertType.ERROR, - "Speicherfehler", - "Der Eintrag konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."); - return; - } - - showModalDialogWithOkButton( - AlertType.INFORMATION, - "Erfolgreich angelegt", - "Mitarbeiter wurde erfolgreich angelegt und gespeichert!"); - - if (consumerCreateClicked != null) { - consumerCreateClicked.run(); - } - } - - private void showModalDialogWithOkButton( - AlertType alertType, String headerText, String contentText) { - Alert alert = new Alert(alertType, contentText, ButtonType.OK); - alert.setHeaderText(headerText); - alert.showAndWait(); - } - - private EducationLevel parseEducationLevel() { - if (inputQualification.getSelectionModel().getSelectedItem() == null) { - return EducationLevel.RS; - } - return EducationLevel.valueOf(inputQualification.getSelectionModel().getSelectedItem()); - } - - private void setData(Employee employee) { - isEdit = true; - this.employee = employee; - inputName.setText(employee.name()); - inputQualification.setValue(employee.educationLevel().name()); - inputIsDriver.setSelected(employee.isDriver()); - inputIsPilot.setSelected(employee.isPilot()); - - lblHeader.setText("Person bearbeiten"); - btnCreate.setText("Speichern"); - } - - public static CreateNewEmployeeController createCreateNewEmployeeController( - SpringFXMLLoader fxmlLoader, Employee employee) throws IOException { - CreateNewEmployeeController controller = createCreateNewEmployeeController(fxmlLoader); - controller.setData(employee); - return controller; - } - - public static CreateNewEmployeeController createCreateNewEmployeeController( - SpringFXMLLoader fxmlLoader) throws IOException { - FXMLWrapper<Object, CreateNewEmployeeController> wrapper = - fxmlLoader.loadAndWrap( - "/fxml/createNewEmployee.fxml", CreateNewEmployeeController.class); - Node root = (Node) wrapper.getLoadedObject(); - CreateNewEmployeeController controller = wrapper.getController(); - controller.rootElement = root; - return controller; - } - - public Node getRootElement() { - return rootElement; - } - - public void setConsumerCancelClicked(Runnable consumerCancelClicked) { - this.consumerCancelClicked = consumerCancelClicked; - } - - public void setConsumerCreateClicked(Runnable consumerCreateClicked) { - this.consumerCreateClicked = consumerCreateClicked; - } -} 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(); - } - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListItemController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListItemController.java deleted file mode 100644 index 11b5626..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListItemController.java +++ /dev/null @@ -1,83 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader.FXMLWrapper; -import java.io.IOException; -import java.util.function.Consumer; -import javafx.fxml.FXML; -import javafx.scene.Node; -import javafx.scene.control.Label; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Controller; - -@Controller -@Scope("prototype") -public class EmployeeListItemController { - - @FXML private Label lblName; - @FXML private Label lblQualification; - @FXML private Label lblPilot; - @FXML private Label lblDriver; - @FXML private ImageView imgPilot; - @FXML private ImageView imgDriver; - @FXML private ImageView imgQualification; - - private Node rootElement; - private Employee employee; - - private Consumer<Employee> consumerEditEmployeeClicked; - - @FXML - public void onEditEmployeeClicked() { - if (consumerEditEmployeeClicked != null) { - consumerEditEmployeeClicked.accept(employee); - } - } - - private void setData(Employee employee) { - this.employee = employee; - lblName.setText(employee.name()); - lblQualification.setText(employee.educationLevel().name()); - lblPilot.setText(String.format("%s Pilot", employee.isPilot() ? "ist" : "nicht")); - lblDriver.setText(String.format("%s Fahrer", employee.isDriver() ? "ist" : "nicht")); - imgQualification.setImage(new Image("/images/Qualification.png")); - String imgSrcPilot = - String.format("/images/%s", employee.isPilot() ? "Pilot.png" : "NotPilot.png"); - imgPilot.setImage(new Image(imgSrcPilot)); - String imgSrcDriver = - String.format("/images/%s", employee.isDriver() ? "Driver.png" : "NotDriver.png"); - imgDriver.setImage(new Image(imgSrcDriver)); - } - - public static EmployeeListItemController createEmployeeListItemController( - SpringFXMLLoader fxmlLoader, Employee employee) throws IOException { - EmployeeListItemController controller = createEmployeeListItemController(fxmlLoader); - controller.setData(employee); - return controller; - } - - public static EmployeeListItemController createEmployeeListItemController( - SpringFXMLLoader loader) throws IOException { - FXMLWrapper<Object, EmployeeListItemController> wrapper = - loader.loadAndWrap("/fxml/employeeListItem.fxml", EmployeeListItemController.class); - Node root = (Node) wrapper.getLoadedObject(); - EmployeeListItemController controller = wrapper.getController(); - controller.rootElement = root; - return controller; - } - - public Node getRootElement() { - return rootElement; - } - - public Employee getEmployee() { - return employee; - } - - public void setConsumerEditEmployeeClicked(Consumer<Employee> consumerEditEmployeeClicked) { - this.consumerEditEmployeeClicked = consumerEditEmployeeClicked; - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/FilterEmployeesController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/FilterEmployeesController.java deleted file mode 100644 index 6d6214d..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/FilterEmployeesController.java +++ /dev/null @@ -1,60 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; -import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader.FXMLWrapper; -import java.io.IOException; -import java.util.function.Consumer; -import javafx.fxml.FXML; -import javafx.scene.Node; -import javafx.scene.control.TextField; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Controller; - -@Controller -@Scope("prototype") -public class FilterEmployeesController { - - @FXML private TextField inputFilterString; - - private Consumer<String> consumerFilterTextChanged; - private Runnable consumerAddEmployeeClicked; - - private Node rootElement; - - @FXML - private void onAddEmployeeClicked() { - if (consumerAddEmployeeClicked != null) { - consumerAddEmployeeClicked.run(); - } - } - - @FXML - private void onFilterTextChanged() { - if (consumerFilterTextChanged != null) { - consumerFilterTextChanged.accept(inputFilterString.getText()); - } - } - - public void setOnFilterTextChangedListener(Consumer<String> callback) { - this.consumerFilterTextChanged = callback; - } - - public void setOnAddEmployeeClickedListener(Runnable callback) { - this.consumerAddEmployeeClicked = callback; - } - - public static FilterEmployeesController createFilterEmployeesController( - SpringFXMLLoader fxmlLoader) throws IOException { - FXMLWrapper<Object, FilterEmployeesController> wrapper = - fxmlLoader.loadAndWrap( - "/fxml/filterEmployeesControl.fxml", FilterEmployeesController.class); - Node root = (Node) wrapper.getLoadedObject(); - FilterEmployeesController controller = wrapper.getController(); - controller.rootElement = root; - return controller; - } - - public Node getRootElement() { - return rootElement; - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java deleted file mode 100644 index 25f1263..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java +++ /dev/null @@ -1,117 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService; -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 javafx.fxml.FXML; -import javafx.geometry.Insets; -import javafx.scene.Node; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.FlowPane; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; - -@Controller -public class ListEmployeesController { - - private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - @FXML private AnchorPane containerHeader; - @FXML private FlowPane flowPaneEmployeeList; - - private final EmployeeService employeeService; - private final SpringFXMLLoader fxmlLoader; - - public ListEmployeesController(EmployeeService employeeService, SpringFXMLLoader fxmlLoader) { - this.employeeService = employeeService; - this.fxmlLoader = fxmlLoader; - } - - @FXML - private void initialize() { - openFilter(); - } - - private void openFilter() { - try { - FilterEmployeesController filterEmployeesController = - FilterEmployeesController.createFilterEmployeesController(fxmlLoader); - containerHeader.getChildren().clear(); - containerHeader.getChildren().add(filterEmployeesController.getRootElement()); - filterEmployeesController.setOnFilterTextChangedListener(this::updateEmployeeList); - filterEmployeesController.setOnAddEmployeeClickedListener(this::openAddEmployee); - - updateEmployeeList(); - - } catch (IOException e) { - LOG.error("Could not initialize controller: {}", e); - } - } - - private void openAddEmployee() { - openEmployee(null); - } - - private void openEditEmployee(Employee employee) { - openEmployee(employee); - } - - private void openEmployee(Employee employee) { - try { - CreateNewEmployeeController createNewEmployeeController = - employee == null - ? CreateNewEmployeeController.createCreateNewEmployeeController( - fxmlLoader) - : CreateNewEmployeeController.createCreateNewEmployeeController( - fxmlLoader, employee); - containerHeader.getChildren().clear(); - containerHeader.getChildren().add(createNewEmployeeController.getRootElement()); - createNewEmployeeController.setConsumerCancelClicked(this::openFilter); - createNewEmployeeController.setConsumerCreateClicked(this::openFilter); - } catch (IOException e) { - LOG.error("Could not prepare UI for adding employee: {}", e); - } - } - - private void updateEmployeeList() { - updateEmployeeList(""); - } - - private void updateEmployeeList(String searchString) { - try { - flowPaneEmployeeList.getChildren().clear(); - employeeService - .list() - .stream() - .filter( - employee -> - searchString.trim().isEmpty() - || employee.name() - .toLowerCase() - .contains(searchString.toLowerCase())) - .forEach(this::addEmployeeToFlowPane); - } catch (ServiceException e) { - LOG.error("Could not fetch employee list: {}", e); - } - } - - private void addEmployeeToFlowPane(Employee employee) { - Insets listItemMargins = new Insets(0, 5, 10, 5); - - try { - EmployeeListItemController controller = - EmployeeListItemController.createEmployeeListItemController( - fxmlLoader, employee); - Node rootElement = controller.getRootElement(); - flowPaneEmployeeList.getChildren().add(rootElement); - FlowPane.setMargin(rootElement, listItemMargins); - controller.setConsumerEditEmployeeClicked(this::openEditEmployee); - } catch (IOException e) { - LOG.error("Could not create a new EmployeeListItem: {}", e); - } - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/OperationDetailsController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/OperationDetailsController.java deleted file mode 100644 index dc7e969..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/OperationDetailsController.java +++ /dev/null @@ -1,162 +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.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.ServiceException; -import java.util.Collection; -import java.util.EnumSet; -import java.util.stream.Collectors; -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 final OperationService operationService; - private final VehicleService vehicleService; - private final CreateOperationController createOperationController; - @FXML private ListView<Vehicle> lvVehicles; - @FXML private ListView<Operation> lvActiveOperations; - @FXML private Label lblChosenVehicles; - @FXML private Button btnCloseOperation; - @FXML private Button btnCancelOperation; - @FXML private Label lblCode, lblAdditionalInfo, lblAddress; - @FXML private AnchorPane operationDetailsAP; - - public OperationDetailsController( - OperationService operationService, - VehicleService vehicleService, - CreateOperationController createOperationController) { - this.operationService = operationService; - this.vehicleService = vehicleService; - this.createOperationController = createOperationController; - } - - @FXML - private 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 initOperation(Operation operation) { - fillActiveList(); - this.operation = operation; - lblCode.setText(operation.opCode()); - Collection<String> vehicleNames = - operation.vehicles().stream().map(Vehicle::name).collect(Collectors.toList()); - String result = String.join(", ", vehicleNames); - 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; - } - 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; - } - 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); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java deleted file mode 100644 index 4653663..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java +++ /dev/null @@ -1,213 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -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.dto.Vehicle.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.RegistrationService; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.OffsetDateTime; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import javafx.beans.property.SimpleStringProperty; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.fxml.FXML; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.ChoiceBox; -import javafx.scene.control.Label; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.TextField; -import javafx.stage.Stage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; - -@Controller -public class RegistrationWindowController { - - private static final Logger LOG = LoggerFactory.getLogger(RegistrationWindowController.class); - - private final EmployeeService employeeService; - - private final VehicleService vehicleService; - - private final RegistrationService registrationService; - - public RegistrationWindowController( - EmployeeService employeeService, - VehicleService vehicleService, - RegistrationService registrationService) { - this.employeeService = employeeService; - this.vehicleService = vehicleService; - this.registrationService = registrationService; - } - - @FXML private ChoiceBox<Integer> cbStart; - @FXML private ChoiceBox<Integer> cbEnd; - @FXML private Label lVehicles; - @FXML private Label lEmployees; - @FXML private TextField tfVehicleSearch; - @FXML private TextField tfEmployeeSearch; - @FXML private TableView<Vehicle> tvVehicles; - @FXML private TableView<Employee> tvEmployees; - @FXML private TableColumn<Vehicle, String> tcVehicles; - @FXML private TableColumn<Employee, String> tcEmployees; - - private Vehicle chosenVehicle; - private List<Employee> chosenEmployees = new LinkedList<>(); - - @FXML - private void initialize() { - // will have to be replaced for FlowPane - try { - Set<Vehicle> vehicles = vehicleService.list(EnumSet.of(Status.ABGEMELDET)); - tcVehicles.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name())); - tvVehicles.setItems(FXCollections.observableArrayList(vehicles)); - } catch (ServiceException e) { - LOG.warn( - "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}", - e.getMessage()); - Alert alert = new Alert(AlertType.ERROR); - alert.setTitle("Fahrzeuge - Fehler!"); - alert.setHeaderText("Beim Auflisten der Fahrzeug ist ein Fehler aufgetreten."); - alert.setContentText(e.getMessage()); - alert.show(); - } - try { - Set<Employee> employees = employeeService.list(); - tcEmployees.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name())); - tvEmployees.setItems(FXCollections.observableArrayList(employees)); - } catch (ServiceException e) { - LOG.warn( - "Caught ServiceException while getting employees. Showing it to user. Error message: {}", - e.getMessage()); - Alert alert = new Alert(AlertType.ERROR); - alert.setTitle("Personal - Fehler!"); - alert.setHeaderText("Beim Auflisten des Personals ist ein Fehler aufgetreten."); - alert.setContentText(e.getMessage()); - alert.show(); - } - tvVehicles.setOnMousePressed( - mouseEvent -> { - if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) { - chosenVehicle = tvVehicles.getSelectionModel().getSelectedItem(); - if (chosenVehicle == null) { - return; - } - lVehicles.setText(chosenVehicle.name()); - } - }); - tvEmployees.setOnMousePressed( - mouseEvent -> { - if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) { - Employee selection = tvEmployees.getSelectionModel().getSelectedItem(); - if (selection == null) { - return; - } else if (chosenEmployees.contains(selection)) { - chosenEmployees.remove(selection); - } else { - chosenEmployees.add(selection); - } - - StringBuilder text = new StringBuilder(); - for (Employee employee : chosenEmployees) { - text.append(employee.name()).append("\n"); - } - lEmployees.setText(text.toString()); - } - }); - ObservableList<Integer> hours = - FXCollections.observableArrayList( - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23); - cbStart.setItems(hours); - cbStart.setValue(0); - cbEnd.setItems(hours); - cbEnd.setValue(12); - } - - public void cancel() { - LOG.debug("Cancel Button clicked"); - chosenEmployees.clear(); - ((Stage) lVehicles.getScene().getWindow()).close(); - } - - public void create() { - LOG.debug("Create Button clicked"); - - Set<Registration> registrations = new HashSet<>(); - try { - if (chosenVehicle == null) { - throw new InvalidVehicleException("no Vehicle"); - } - for (Employee employee : chosenEmployees) { - registrations.add( - Registration.builder() - .id(chosenVehicle.id()) - .employee(employee) - .start( - LocalDateTime.of( - LocalDate.now(), - LocalTime.of(cbStart.getValue(), 0)) - .toInstant(OffsetDateTime.now().getOffset())) - .end( - LocalDateTime.of( - LocalDate.now(), - LocalTime.of(cbEnd.getValue(), 0)) - .toInstant(OffsetDateTime.now().getOffset())) - .build()); - } - - registrationService.add(chosenVehicle.id(), registrations); - chosenEmployees.clear(); - ((Stage) lVehicles.getScene().getWindow()).close(); - - } catch (InvalidVehicleException e) { - // NOT THROWN ANYWHERE RIGHT NOW - LOG.info( - "Caught InvalidVehicleException. Showing it to user. Error message: {}", - e.getClass().toString(), - e.getMessage()); - Alert alert = new Alert(AlertType.WARNING); - alert.setTitle("Ungültiges Fahrzeug"); - alert.setHeaderText("Das spezifizierte Fahrzeug ist nicht gültig."); - alert.setContentText(e.getMessage()); - alert.show(); - chosenEmployees.clear(); - } catch (ServiceException e) { - LOG.warn( - "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}", - e.getMessage()); - Alert alert = new Alert(AlertType.ERROR); - alert.setTitle("Anmeldung - Fehler!"); - alert.setHeaderText("Beim Erstellen der Anmeldung ist ein Fehler aufgetreten."); - alert.setContentText(e.getMessage()); - alert.show(); - chosenEmployees.clear(); - } catch (InvalidRegistrationException e) { - LOG.info( - "Caught InvalidRegistrationException. Showing it to user. Error message: {}", - e.getMessage()); - Alert alert = new Alert(AlertType.WARNING); - alert.setTitle("Ungültige Eingabe"); - alert.setHeaderText( - "Die gewählte Kombination von Fahrzeug und Personal ist nicht gültig!"); - alert.setContentText(e.getMessage()); - alert.show(); - chosenEmployees.clear(); - } - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/VehiclePaneController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/VehiclePaneController.java deleted file mode 100644 index 6c0932b..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/VehiclePaneController.java +++ /dev/null @@ -1,113 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import java.io.IOException; -import java.time.Instant; -import java.util.List; -import java.util.Optional; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Node; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import javafx.scene.text.Text; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class VehiclePaneController { - - private static Logger LOG = LoggerFactory.getLogger(VehiclePaneController.class); - - public static VehiclePaneController createVehiclePane() throws IOException { - FXMLLoader fxmlLoader = - new FXMLLoader(VehiclePaneController.class.getResource("/fxml/vehiclePane.fxml")); - Node root = fxmlLoader.load(); - VehiclePaneController result = fxmlLoader.getController(); - result.rootElement = root; - - return result; - } - - @FXML private Text txtType; - @FXML private Text txtNumber; - @FXML private ImageView ivNEF; - @FXML private Text txtNEF; - @FXML private ImageView ivQualification; - @FXML private Text txtQualification; - @FXML private Text txtRooftype; - - private Node rootElement; - private Vehicle data; - - public Node getRootElement() { - return rootElement; - } - - public Vehicle getData() { - return data; - } - - /** - * * Set the displayed data of this VehiclePane. - * - * @param vehicle The data to display. - * @param showQualification If true, the most recent registration of vehicle will be searched - * for the highest qualification. - */ - public void setData(Vehicle vehicle, boolean showQualification) { - txtType.setText(vehicle.type().name()); - String constrType = vehicle.constructionType().name(); - txtRooftype.setText( - constrType.substring(0, 1).toUpperCase() + constrType.substring(1).toLowerCase()); - txtNumber.setText("-" + vehicle.id()); - if (vehicle.hasNef()) { - ivNEF.setImage(new Image("images/NEF.png")); - txtNEF.setText("hat NEF-Halterung"); - } else { - ivNEF.setImage(new Image("images/NotNEF.png")); - txtNEF.setText("keine NEF-Halterung"); - } - if (showQualification) { - - Instant now = Instant.now(); - List<Registration> regs = vehicle.registrations(); - - if (regs == null) { - return; - } - - Optional<EducationLevel> edu = - regs.stream() - .filter(reg -> reg.start().isBefore(now) && reg.end().isAfter(now)) - .map(reg -> reg.employee().educationLevel()) - .max(EducationLevel::compareTo); - - if (!edu.isPresent()) { - return; - } - - txtQualification.setText(edu.get().name()); - } else { - txtQualification.setVisible(false); - txtQualification.setManaged(false); - ivQualification.setVisible(false); - ivQualification.setManaged(false); - } - - this.data = vehicle; - } - - public void setSelected(boolean selected) { - rootElement.getStyleClass().clear(); - - if (selected) { - rootElement.getStyleClass().add("bg-yellow"); - rootElement.getStyleClass().add("shadowed"); - } else { - rootElement.getStyleClass().add("bg-white"); - rootElement.getStyleClass().add("shadowed"); - } - } -} |