diff options
Diffstat (limited to 'src')
| -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); +        } +    } +}  | 
