aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java
new file mode 100644
index 0000000..4da46a2
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateCarController.java
@@ -0,0 +1,231 @@
+package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller;
+
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showServiceExceptionAlertAndWait;
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showSuccessAlertAndWait;
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showValidationErrorAlertAndWait;
+
+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.missioncontrol.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle.Status;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle.VehicleType;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.VehicleService;
+import java.io.IOException;
+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.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.input.MouseButton;
+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 CreateCarController {
+
+ @FXML private AnchorPane createCarAP;
+ @FXML private ChoiceBox<String> cmbCtype;
+ @FXML private ChoiceBox<String> cmbTyp;
+
+ @FXML private Button btnCreate;
+ @FXML private CheckBox cbxNEF;
+ @FXML private FlowPane fpVehicleList;
+ private final CreateOperationController createOperationController;
+
+ private static final Logger LOG = LoggerFactory.getLogger(CreateCarController.class);
+ private final VehicleService vehicleService;
+ private boolean update = false;
+ private long vid = -1;
+
+ private Vehicle chooseVehicle;
+
+ public CreateCarController(
+ CreateOperationController createOperationController, VehicleService vehicleService) {
+ this.createOperationController = createOperationController;
+ this.vehicleService = vehicleService;
+ }
+
+ @FXML
+ private void initialize() {
+ fpVehicleList.setHgap(5);
+ fpVehicleList.setVgap(5);
+
+ cmbCtype.setItems(
+ FXCollections.observableArrayList(
+ Stream.of(
+ ConstructionType.NORMAL,
+ ConstructionType.MITTELHOCHDACH,
+ ConstructionType.HOCHDACH)
+ .map(Enum::toString)
+ .collect(Collectors.toList())));
+ cmbCtype.setValue(ConstructionType.NORMAL.toString());
+ cmbTyp.setItems(
+ FXCollections.observableArrayList(
+ Stream.of(
+ VehicleType.BKTW,
+ VehicleType.KTW_B,
+ VehicleType.KTW,
+ VehicleType.RTW,
+ VehicleType.NEF,
+ VehicleType.NAH)
+ .map(Enum::toString)
+ .collect(Collectors.toList())));
+ cmbTyp.setValue(VehicleType.BKTW.toString());
+
+ updateVehiclePane();
+ }
+
+ @FXML
+ private void createCar(ActionEvent actionEvent) {
+
+ if (!update) {
+ LOG.debug("Button \"Erstellen\" clicked.");
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(parseConstructionType())
+ .type(parseType())
+ .name("")
+ .status(Status.ABGEMELDET)
+ .hasNef(cbxNEF.isSelected())
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ setToStart();
+ } catch (InvalidVehicleException e) {
+ LOG.debug("Validation of Vehicle failed");
+ showValidationErrorAlertAndWait(e.getMessage());
+ setToStart();
+ return;
+ } catch (ServiceException e) {
+ LOG.error("ServiceException in createCar(). ", e);
+ showServiceExceptionAlertAndWait(
+ "Ein Fehler beim Erstellen des Fahrzeuges ist aufgetreten.");
+ setToStart();
+ return;
+ }
+ showSuccessAlertAndWait("Auto wurde erfolgreich angelegt.");
+ } else {
+ LOG.debug("Button \"Speichern\" clicked.");
+ try {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .id(vid)
+ .constructionType(parseConstructionType())
+ .type(parseType())
+ .name("")
+ .status(Status.ABGEMELDET)
+ .hasNef(cbxNEF.isSelected())
+ .build();
+ vehicleService.update(vehicle);
+ setToStart();
+ chooseVehicle = null;
+ } catch (InvalidVehicleException e) {
+ LOG.debug("Validation of Vehicle failed");
+ showValidationErrorAlertAndWait(e.getMessage());
+ setToStart();
+ return;
+ } catch (ServiceException e) {
+ LOG.error("ServiceException in createCar(). ", e);
+ showServiceExceptionAlertAndWait(e.getMessage());
+ setToStart();
+ return;
+ }
+ showSuccessAlertAndWait("Auto wurde erfolgreich bearbeitet.");
+ }
+
+ updateVehiclePane();
+ }
+
+ private ConstructionType parseConstructionType() {
+ if (cmbCtype.getSelectionModel().getSelectedItem() == null) {
+ return ConstructionType.NORMAL;
+ }
+ return ConstructionType.valueOf(cmbCtype.getSelectionModel().getSelectedItem());
+ }
+
+ private VehicleType parseType() {
+ if (cmbTyp.getSelectionModel().getSelectedItem() == null) {
+ return VehicleType.BKTW;
+ }
+ return VehicleType.valueOf(cmbTyp.getSelectionModel().getSelectedItem());
+ }
+
+ private void setToStart() {
+ btnCreate.setText("Erstellen");
+ cbxNEF.setSelected(false);
+ cmbTyp.setValue(VehicleType.BKTW.name());
+ cmbCtype.setValue(ConstructionType.NORMAL.name());
+ update = false;
+ }
+
+ private void updateVehicle(Vehicle vehicle) {
+
+ cmbCtype.setValue(vehicle.constructionType().name());
+ cmbTyp.setValue(vehicle.type().name());
+ cbxNEF.setSelected(vehicle.hasNef());
+ btnCreate.setText("Speichern");
+ vid = vehicle.id();
+ update = true;
+ chooseVehicle = vehicle;
+ }
+
+ public void setVisible(boolean b) {
+ createCarAP.setVisible(b);
+ }
+
+ @FXML
+ private void backToMain() {
+ LOG.debug("Hyperlink \"zurück\" clicked.");
+ this.setVisible(false);
+ createOperationController.setVisible(true);
+ }
+
+ void updateVehiclePane() {
+ try {
+ fpVehicleList.getChildren().clear();
+
+ Set<Vehicle> vehicles;
+
+ vehicles = vehicleService.list(EnumSet.of(Status.ABGEMELDET));
+
+ for (Vehicle vehicle : vehicles) {
+ VehiclePaneController controller = VehiclePaneController.createVehiclePane();
+
+ controller.setData(vehicle, false, false);
+ controller
+ .getRootElement()
+ .setOnMouseClicked(
+ event -> {
+ if (event.getButton().equals(MouseButton.PRIMARY)) {
+ if (chooseVehicle == null || vehicle == chooseVehicle) {
+ if (update == false) {
+ chooseVehicle = vehicle;
+ updateVehicle(vehicle);
+ controller.setSelected(true);
+ } else {
+ setToStart();
+ controller.setSelected(false);
+
+ chooseVehicle = null;
+ }
+ }
+ }
+ });
+
+ fpVehicleList.getChildren().add(controller.getRootElement());
+ }
+ } catch (ServiceException | IOException e) {
+ LOG.error("Exception in updateVehiclePane(). ", e);
+ showServiceExceptionAlertAndWait(e.getMessage());
+ }
+ }
+}