diff options
| author | Dominic Rogetzer <e1627756@student.tuwien.ac.at> | 2018-05-18 18:46:24 +0200 | 
|---|---|---|
| committer | Tharre <tharre3@gmail.com> | 2018-05-22 17:05:32 +0200 | 
| commit | acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d (patch) | |
| tree | 67ad97f5794e15018abf7237806d8c32edec46cd | |
| parent | be165e0d0c4eb4a9828918138f28d2af190aa4bd (diff) | |
| download | sepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.tar.gz sepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.tar.xz sepm-groupproject-acebd1a7c42b55c7a2f2474b3c7f6e154d3e676d.zip  | |
Implement ListEmployeesController [#25949]
| -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); +        } +    } +}  | 
