summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDominic Rogetzer <e1627756@student.tuwien.ac.at>2018-05-18 18:46:24 +0200
committerTharre <tharre3@gmail.com>2018-05-22 17:05:32 +0200
commitacebd1a7c42b55c7a2f2474b3c7f6e154d3e676d (patch)
tree67ad97f5794e15018abf7237806d8c32edec46cd /src
parentbe165e0d0c4eb4a9828918138f28d2af190aa4bd (diff)
downloadsepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.tar.gz
sepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.tar.xz
sepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.zip
Implement ListEmployeesController [#25949]
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java88
1 files changed, 88 insertions, 0 deletions
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);
+ }
+ }
+}