From 6fbc8a6a1c307b5e13ce3970c4dc9d8e54fff873 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer Date: Wed, 6 Jun 2018 22:09:27 +0200 Subject: Create dedicated EmployeeListController [#25963] This controller is (only) responsible for displaying a list of employees, and not for adding/editing employees. Done for being able to reuse the list-code later on --- .../controller/EmployeeListController.java | 80 ++++++++++++++++++++++ src/main/resources/fxml/employeeList.fxml | 9 +++ 2 files changed, 89 insertions(+) create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java create mode 100644 src/main/resources/fxml/employeeList.fxml (limited to 'src') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java new file mode 100644 index 0000000..993735e --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java @@ -0,0 +1,80 @@ +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.util.SpringFXMLLoader; +import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader.FXMLWrapper; +import java.io.IOException; +import java.lang.invoke.MethodHandles; +import java.util.List; +import java.util.function.Consumer; +import javafx.fxml.FXML; +import javafx.geometry.Insets; +import javafx.scene.Node; +import javafx.scene.layout.FlowPane; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; + +@Controller +public class EmployeeListController { + + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + @FXML private FlowPane flowPaneEmployeeList; + + private final SpringFXMLLoader fxmlLoader; + private Node rootElement; + + public EmployeeListController(SpringFXMLLoader fxmlLoader) { + this.fxmlLoader = fxmlLoader; + } + + public void setData( + List employeeList, + Consumer onEditEmployeeClicked, + Consumer onEmployeeClicked) { + + flowPaneEmployeeList.getChildren().clear(); + employeeList.forEach( + employee -> + addEmployeeToFlowPane(employee, onEditEmployeeClicked, onEmployeeClicked)); + } + + private void addEmployeeToFlowPane( + Employee employee, + Consumer onEditEmployeeClicked, + Consumer onEmployeeClicked) { + 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); + if (onEditEmployeeClicked != null) { + controller.setConsumerEditEmployeeClicked(onEditEmployeeClicked); + } + if (onEmployeeClicked != null) { + controller.setConsumerEmployeeClicked(onEmployeeClicked); + } + } catch (IOException e) { + LOG.error("Could not create a new EmployeeListItem: {}", e); + } + } + + public static EmployeeListController createEmployeeListController(SpringFXMLLoader loader) + throws IOException { + FXMLWrapper wrapper = + loader.loadAndWrap("/fxml/employeeList.fxml", EmployeeListController.class); + Node root = (Node) wrapper.getLoadedObject(); + EmployeeListController controller = wrapper.getController(); + controller.rootElement = root; + return controller; + } + + public Node getRootElement() { + return rootElement; + } +} diff --git a/src/main/resources/fxml/employeeList.fxml b/src/main/resources/fxml/employeeList.fxml new file mode 100644 index 0000000..52c502a --- /dev/null +++ b/src/main/resources/fxml/employeeList.fxml @@ -0,0 +1,9 @@ + + + + + -- cgit v1.2.3-70-g09d2