From acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Fri, 18 May 2018 18:46:24 +0200
Subject: Implement ListEmployeesController [#25949]

---
 .../controller/ListEmployeesController.java        | 88 ++++++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java

(limited to 'src/main/java/at')

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
new file mode 100644
index 0000000..1c9ebd6
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java
@@ -0,0 +1,88 @@
+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
+    public void initialize() {
+        try {
+            FilterEmployeesController filterEmployeesController =
+                    FilterEmployeesController.createFilterEmployeesController(fxmlLoader);
+            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() {
+        throw new UnsupportedOperationException();
+    }
+
+    private void updateEmployeeList() {
+        updateEmployeeList("");
+    }
+
+    private void updateEmployeeList(String searchString) {
+        try {
+            flowPaneEmployeeList.getChildren().clear();
+            employeeService
+                    .list()
+                    .stream()
+                    .filter(
+                            employee ->
+                                    searchString.trim().isEmpty()
+                                            || employee.name().contains(searchString))
+                    .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);
+        } catch (IOException e) {
+            LOG.error("Could not create a new EmployeeListItem: {}", e);
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2