package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Employee; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.EmployeeService; import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; import java.io.IOException; import java.util.HashSet; import java.util.stream.Collectors; import javafx.fxml.FXML; import javafx.scene.layout.AnchorPane; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; @Controller public class ManageEmployeesController { private static final Logger LOG = LoggerFactory.getLogger(ManageEmployeesController.class); @FXML private AnchorPane listEmployeesAP; @FXML private AnchorPane containerHeader; @FXML private EmployeeListController employeeListController; private final EmployeeService employeeService; private final SpringFXMLLoader fxmlLoader; private final CreateOperationController createOperationController; public ManageEmployeesController( EmployeeService employeeService, SpringFXMLLoader fxmlLoader, CreateOperationController createOperationController) { this.employeeService = employeeService; this.fxmlLoader = fxmlLoader; this.createOperationController = createOperationController; } @FXML private void initialize() { openFilter(); } private void openFilter() { try { FilterEmployeesController filterEmployeesController = FilterEmployeesController.createFilterEmployeesController(fxmlLoader); containerHeader.getChildren().clear(); containerHeader.getChildren().add(filterEmployeesController.getRootElement()); filterEmployeesController.setOnFilterTextChangedListener(this::updateEmployeeList); filterEmployeesController.setOnAddEmployeeClickedListener(this::openAddEmployee); updateEmployeeList(); } catch (IOException e) { LOG.error("IOException in openFilter().", e); } } private void openAddEmployee() { employeeListController.deselectAllEmployees(); openEmployee(null); } private void openEditEmployee(Employee employee) { employeeListController.deselectAllEmployees(); employeeListController.selectEmployee(employee); openEmployee(employee); } private void openEmployee(Employee employee) { try { CreateNewEmployeeController createNewEmployeeController = employee == null ? CreateNewEmployeeController.createCreateNewEmployeeController( fxmlLoader) : CreateNewEmployeeController.createCreateNewEmployeeController( fxmlLoader, employee); containerHeader.getChildren().clear(); containerHeader.getChildren().add(createNewEmployeeController.getRootElement()); createNewEmployeeController.setConsumerCancelClicked(this::openFilter); createNewEmployeeController.setConsumerCreateClicked(this::openFilter); } catch (IOException e) { LOG.error("IOException in openEmployee(). ", e); } } private void updateEmployeeList() { updateEmployeeList(""); } private void updateEmployeeList(String searchString) { try { employeeListController.setData( employeeService .list() .stream() .filter( employee -> searchString.trim().isEmpty() || employee.name() .toLowerCase() .contains(searchString.toLowerCase())) .collect(Collectors.toCollection(HashSet::new)), this::openEditEmployee); } catch (ServiceException e) { LOG.error("ServiceException in updateEmployeeList(). ", e); } } public void setVisible(boolean b) { listEmployeesAP.setVisible(b); } public void backToMain() { LOG.debug("Hyperlink \"Zurück\" clicked."); this.setVisible(false); createOperationController.setVisible(true); } }