From 212651960f181afe277817f6ea9204c7576416d6 Mon Sep 17 00:00:00 2001
From: Martin Weick <e1627760@student.tuwien.ac.at>
Date: Tue, 5 Jun 2018 12:29:25 +0200
Subject: implement vehicle pane for detail view of vehicles #27301

---
 .../controller/CreateCarController.java            | 143 +++++++++++++--------
 1 file changed, 86 insertions(+), 57 deletions(-)

(limited to 'src')

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
index bc6b0bc..141661d 100644
--- 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
@@ -5,15 +5,20 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Con
 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.InvalidOperationException;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.util.EnumSet;
+import java.util.EventListener;
+import java.util.LinkedList;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javafx.collections.FXCollections;
 import javafx.event.ActionEvent;
+import javafx.event.Event;
 import javafx.fxml.FXML;
 import javafx.geometry.HPos;
 import javafx.geometry.Orientation;
@@ -23,6 +28,7 @@ import javafx.scene.control.Button;
 import javafx.scene.control.ButtonType;
 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 javafx.stage.Stage;
@@ -34,12 +40,12 @@ import org.springframework.stereotype.Controller;
 public class CreateCarController {
 
     @FXML private AnchorPane createCarAP;
-    @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;
+    @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(MethodHandles.lookup().lookupClass());
@@ -47,6 +53,8 @@ public class CreateCarController {
     private boolean update = false;
     private long vid = -1;
 
+    private Vehicle chooseVehicle;
+
     public CreateCarController(
             CreateOperationController createOperationController, VehicleService vehicleService) {
         this.createOperationController = createOperationController;
@@ -55,7 +63,7 @@ public class CreateCarController {
 
     @FXML
     private void initialize() {
-        cmb_Ctyp.setItems(
+        cmbCtype.setItems(
                 FXCollections.observableArrayList(
                         Stream.of(
                                         ConstructionType.NORMAL,
@@ -63,8 +71,8 @@ public class CreateCarController {
                                         ConstructionType.HOCHDACH)
                                 .map(Enum::toString)
                                 .collect(Collectors.toList())));
-        cmb_Ctyp.setValue(ConstructionType.NORMAL.toString());
-        cmb_typ.setItems(
+        cmbCtype.setValue(ConstructionType.NORMAL.toString());
+        cmbTyp.setItems(
                 FXCollections.observableArrayList(
                         Stream.of(
                                         VehicleType.BKTW,
@@ -75,13 +83,10 @@ public class CreateCarController {
                                         VehicleType.NAH)
                                 .map(Enum::toString)
                                 .collect(Collectors.toList())));
-        cmb_typ.setValue(VehicleType.BKTW.toString());
-        vehicleListFP();
-    }
+        cmbTyp.setValue(VehicleType.BKTW.toString());
+        // vehicleListFP();
 
-    @FXML
-    private void onCancelClicked() {
-        ((Stage) btn_cancel.getScene().getWindow()).close();
+        updateVehiclePane();
     }
 
     @FXML
@@ -94,7 +99,7 @@ public class CreateCarController {
                             .type(parseType())
                             .name("")
                             .status(Status.ABGEMELDET)
-                            .hasNef(cbx_NEF.isSelected())
+                            .hasNef(cbxNEF.isSelected())
                             .build();
             try {
                 vehicleService.add(vehicle);
@@ -123,10 +128,11 @@ public class CreateCarController {
                                 .type(parseType())
                                 .name("")
                                 .status(Status.ABGEMELDET)
-                                .hasNef(cbx_NEF.isSelected())
+                                .hasNef(cbxNEF.isSelected())
                                 .build();
                 vehicleService.update(vehicle);
                 setToStart();
+                chooseVehicle=null;
             } catch (InvalidVehicleException e) {
                 // TODO: Validation-Errors should be logged with log level debug only (like here)
                 LOG.debug("Invalid Vehicle: {}", e);
@@ -144,21 +150,22 @@ public class CreateCarController {
                     "Bearbiten Erfolgreich",
                     "Auto wurde erfolgreich bearbeitet");
         }
-        vehicleListFP();
+
+        updateVehiclePane();
     }
 
     private ConstructionType parseConstructionType() {
-        if (cmb_Ctyp.getSelectionModel().getSelectedItem() == null) {
+        if (cmbCtype.getSelectionModel().getSelectedItem() == null) {
             return ConstructionType.NORMAL;
         }
-        return ConstructionType.valueOf(cmb_Ctyp.getSelectionModel().getSelectedItem().toString());
+        return ConstructionType.valueOf(cmbCtype.getSelectionModel().getSelectedItem().toString());
     }
 
     private VehicleType parseType() {
-        if (cmb_typ.getSelectionModel().getSelectedItem() == null) {
+        if (cmbTyp.getSelectionModel().getSelectedItem() == null) {
             return VehicleType.BKTW;
         }
-        return VehicleType.valueOf(cmb_typ.getSelectionModel().getSelectedItem().toString());
+        return VehicleType.valueOf(cmbTyp.getSelectionModel().getSelectedItem().toString());
     }
 
     private void createComplete(AlertType alertType, String headerText, String contentText) {
@@ -167,55 +174,77 @@ public class CreateCarController {
         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());
+        btnCreate.setText("Erstellen");
+        cbxNEF.setSelected(false);
+        cmbTyp.setValue(VehicleType.BKTW.name());
+        cmbCtype.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");
+
+        cmbCtype.setValue(vehicle.constructionType().name());
+        cmbTyp.setValue(vehicle.type().name());
+        cbxNEF.setSelected(vehicle.hasNef());
+        btnCreate.setText("Speichern");
         vid = vehicle.id();
         update = true;
-    }
-
-    @FXML
-    public void cancelAction(ActionEvent actionEvent) {
-        setToStart();
+        chooseVehicle = vehicle;
     }
 
     public void setVisible(boolean b) {
         createCarAP.setVisible(b);
     }
-
-    public void backToMain() {
+    @FXML
+    private void backToMain() {
         this.setVisible(false);
         createOperationController.setVisible(true);
     }
+
+    private 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);
+                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("Error while updating list.", e);
+
+            Alert alert = new Alert(AlertType.ERROR);
+            alert.setTitle("Fehler");
+            alert.setHeaderText("Fehler!");
+            alert.setContentText(e.getMessage());
+            alert.showAndWait();
+        }
+    }
 }
-- 
cgit v1.2.3-70-g09d2