From 6aad8bb1dcf43fabff2a48f4d33ff86a23beefef Mon Sep 17 00:00:00 2001
From: Martin Weick <e1627760@student.tuwien.ac.at>
Date: Tue, 15 May 2018 15:39:14 +0200
Subject: Implement show vehicle #25947

---
 .../controller/CreateCarController.java            | 117 +++++++++++++++++----
 1 file changed, 97 insertions(+), 20 deletions(-)

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 b6693d0..628f680 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
@@ -8,17 +8,23 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.Vehicle
 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.List;
 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.control.Label;
+import javafx.scene.layout.FlowPane;
 import javafx.stage.Stage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,10 +36,14 @@ 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;
@@ -62,6 +72,7 @@ public class CreateCarController {
                                 .map(Enum::toString)
                                 .collect(Collectors.toList())));
         cmb_typ.setValue(VehicleType.BKTW.toString());
+        vehicleListFP();
     }
 
     @FXML
@@ -71,27 +82,56 @@ public class CreateCarController {
 
     @FXML
     public void createCar(ActionEvent actionEvent) {
-        Vehicle vehicle =
-                Vehicle.builder()
-                        .constructionType(parseConstructionType())
-                        .type(parseType())
-                        .name("")
-                        .status(Status.ABGEMELDET)
-                        .hasNef(cbx_NEF.isSelected())
-                        .build();
-        try {
-            vehicleService.add(vehicle);
-        } catch (InvalidVehicleException e) {
-            LOG.error("Invalid Vehicle: {}", e);
-            createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage());
-            return;
-        } catch (ServiceException e) {
-            LOG.error("Exception: {}", e);
-            createComplete(AlertType.ERROR, "Fehler", e.getMessage());
-            return;
+
+
+        if (!update) {
+            Vehicle vehicle =
+                    Vehicle.builder()
+                            .constructionType(parseConstructionType())
+                            .type(parseType())
+                            .name("")
+                            .status(Status.ABGEMELDET)
+                            .hasNef(cbx_NEF.isSelected())
+                            .build();
+            try {
+                vehicleService.add(vehicle);
+            } catch (InvalidVehicleException e) {
+                LOG.error("Invalid Vehicle: {}", e);
+                createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage());
+                return;
+            } catch (ServiceException e) {
+                LOG.error("Exception: {}", e);
+                createComplete(AlertType.ERROR, "Fehler", e.getMessage());
+                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());
+                return;
+            } catch (ServiceException e) {
+                LOG.error("Exception: {}", e);
+                createComplete(AlertType.ERROR, "Fehler", e.getMessage());
+                return;
+            }
         }
-        createComplete(
-                AlertType.CONFIRMATION, "Speichern Erfolgreich", "Auto wurde erfolgreich angelegt");
+        vehicleListFP();
     }
 
     private ConstructionType parseConstructionType() {
@@ -113,4 +153,41 @@ public class CreateCarController {
         alert.setHeaderText(headerText);
         alert.showAndWait();
     }
+
+    private void vehicleListFP() {
+        List<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;
+    }
 }
-- 
cgit v1.2.3-70-g09d2