package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller; import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showServiceExceptionAlertAndWait; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Employee; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Operation; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Registration; import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle; 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.util.List; import java.util.Objects; import java.util.stream.Collectors; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.layout.VBox; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; @Controller public class DetailArchiveOperationController { private static final Logger LOG = LoggerFactory.getLogger(DetailArchiveOperationController.class); @FXML private VBox vBoxVehicle; @FXML private VBox vBoxPeople; private final SpringFXMLLoader fxmlLoader; public DetailArchiveOperationController(SpringFXMLLoader fxmlLoader) { this.fxmlLoader = fxmlLoader; } static DetailArchiveOperationController create(SpringFXMLLoader fxmlLoader) throws IOException { FXMLWrapper wrapper = fxmlLoader.loadAndWrap( "/fxml/DetailArchiveOperation.fxml", DetailArchiveOperationController.class); Node root = (Node) wrapper.getLoadedObject(); DetailArchiveOperationController result = wrapper.getController(); result.rootElement = root; return result; } public Node getRoot() { return rootElement; } private Node rootElement; public void set(Vehicle vehicle, Operation operation) { VehiclePaneController controller; try { controller = VehiclePaneController.createVehiclePane(); controller.setData(vehicle, false, false); vBoxVehicle.getChildren().add(controller.getRootElement()); } catch (IOException e) { LOG.error("IOException in set(Vehicle). (vBoxVehicle) ", e); showServiceExceptionAlertAndWait( "Ein interner Fehler ist aufgetreten. Bitte wenden Sie sich an den/die SystemadministratorIn."); } try { List registrations = Objects.requireNonNull(vehicle.registrations()) .stream() .filter( registration -> registration .start() .isBefore( Objects.requireNonNull( operation.created())) && registration .end() .isAfter( Objects.requireNonNull( operation.created()))) .collect(Collectors.toList()); for (Registration registration : registrations) { Employee employee = registration.employee(); EmployeeListItemController employeeListItemController = EmployeeListItemController.createEmployeeListItemController( fxmlLoader, employee); vBoxPeople.getChildren().add(employeeListItemController.getRootElement()); } } catch (IOException e) { LOG.error("IOException in set(Vehicle). (vBoxPeople) ", e); showServiceExceptionAlertAndWait( "Ein interner Fehler ist aufgetreten. Bitte wenden Sie sich an den/die SystemadministratorIn."); } } }