diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ListEmployeesController.java | 88 |
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); + } + } +} |