From 99bc7b95780ee8394da295e66ece26464ed57c8c Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Fri, 18 May 2018 20:58:07 +0200
Subject: Modify CreateNewEmployeeController to be able to edit employee
 [#25950]

---
 .../controller/CreateNewEmployeeController.java    | 58 +++++++++++++++++++---
 1 file changed, 52 insertions(+), 6 deletions(-)

(limited to 'src/main/java/at/ac/tuwien/sepm/assignment')

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
index d81f6d7..86a1014 100644
--- 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
@@ -5,19 +5,23 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.Ed
 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.Hyperlink;
+import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
 import javafx.stage.Stage;
 import org.slf4j.Logger;
@@ -30,12 +34,16 @@ 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 Hyperlink btnCancel;
-    @FXML private Button btnCreate;
     @FXML private TextField inputName;
     @FXML private ChoiceBox<String> inputQualification;
+    @FXML private Button btnCreate;
+
+    private Node rootElement;
+    private Employee employee;
+    private boolean isEdit;
 
     public CreateNewEmployeeController(EmployeeService employeeService) {
         this.employeeService = employeeService;
@@ -66,8 +74,8 @@ public class CreateNewEmployeeController {
     @FXML
     public void onCreateClicked() {
 
-        Employee employee =
-                Employee.builder()
+        employee =
+                employee.toBuilder()
                         .name(inputName.getText())
                         .educationLevel(parseEducationLevel())
                         .birthday(LocalDate.MIN) // TODO: change UI to include birthday field
@@ -76,7 +84,11 @@ public class CreateNewEmployeeController {
                         .build();
 
         try {
-            employeeService.add(employee);
+            if (isEdit) {
+                employeeService.update(employee);
+            } else {
+                employeeService.add(employee);
+            }
         } catch (InvalidEmployeeException e) {
             LOG.error("Invalid Employee: {}", e);
 
@@ -114,4 +126,38 @@ public class CreateNewEmployeeController {
         }
         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;
+    }
 }
-- 
cgit v1.2.3-70-g09d2