package de.fhswf.in.inf.se.projektthemenvergabe.view; import java.util.Optional; import de.fhswf.in.inf.se.projektthemenvergabe.Main; import de.fhswf.in.inf.se.projektthemenvergabe.model.Projekt; import javafx.application.Platform; import javafx.beans.property.SimpleIntegerProperty; import javafx.collections.FXCollections; import javafx.collections.transformation.FilteredList; import javafx.collections.transformation.SortedList; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.ComboBoxTableCell; public class ProjektthemenverwaltungsController { @FXML private TableView projektTableView; @FXML private TableColumn projektThemaTableColumn; @FXML private TableColumn ansprechpatnerTableColumn; @FXML private TableColumn student1TableColumn; @FXML private TableColumn student2TableColumn; @FXML private TableColumn student3TableColumn; @FXML private TableColumn statusTableColumn; @FXML private MenuItem editProjektMenuItem; @FXML private MenuItem deleteProjektMenuItem; @FXML private Button editProjektButton; @FXML private Button deleteProjektButton; private Main main; private FilteredList filterList; @FXML private void initialize() { projektThemaTableColumn.setCellValueFactory( (data) -> data.getValue().projektthemaProperty()); ansprechpatnerTableColumn.setCellValueFactory((data) -> data.getValue() .getAnsprechpartner().nachnameProperty()); student1TableColumn.setCellValueFactory((data) -> { if (data.getValue().getStudents().size() > 0) { return data.getValue().getStudents().get(0) .matrikelnummerProperty().asObject(); } return new SimpleIntegerProperty(0).asObject(); }); student2TableColumn.setCellValueFactory((data) -> { if (data.getValue().getStudents().size() > 1) { return data.getValue().getStudents().get(1) .matrikelnummerProperty().asObject(); } return new SimpleIntegerProperty(0).asObject(); }); student3TableColumn.setCellValueFactory((data) -> { if (data.getValue().getStudents().size() > 2) { return data.getValue().getStudents().get(2) .matrikelnummerProperty().asObject(); } return new SimpleIntegerProperty(0).asObject(); }); statusTableColumn .setCellValueFactory((data) -> data.getValue().statusProperty()); statusTableColumn.setCellFactory(ComboBoxTableCell.forTableColumn( FXCollections.observableArrayList(Projekt.StatusTypes.values()))); statusTableColumn.setOnEditCommit((data) -> { if (data.getNewValue().equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)) { KommentarHinzufuegenController dialog = new KommentarHinzufuegenController( data.getRowValue().getDozentenkommentar()); dialog.initOwner(main.getPrimaryStage()); Optional result = dialog.showAndWait(); if (result.isPresent() && !result.get().trim().isEmpty()) { data.getRowValue().setDozentenkommentar(result.get().trim()); data.getRowValue().setStatus(data.getNewValue()); } else { data.getRowValue().setStatus(data.getOldValue()); // HACK data.getTableColumn().setVisible(false); data.getTableColumn().setVisible(true); } } else { data.getRowValue().setStatus(data.getNewValue()); } editProjektButton.setDisable( !data.getNewValue().equals(Projekt.StatusTypes.IN_BEARBEITUNG) && !data.getNewValue() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)); }); projektTableView.getSelectionModel().selectedItemProperty() .addListener((observable, oldValue, newValue) -> { editProjektButton.setDisable(newValue == null || (!newValue .getStatus().equals(Projekt.StatusTypes.IN_BEARBEITUNG) && !newValue.getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG))); }); deleteProjektButton.disableProperty().bind(projektTableView .getSelectionModel().selectedItemProperty().isNull()); editProjektMenuItem.disableProperty() .bind(editProjektButton.disabledProperty()); deleteProjektMenuItem.disableProperty() .bind(deleteProjektButton.disabledProperty()); } public void setMain(Main main) { this.main = main; filterList = new FilteredList<>(main.getProjekte()); SortedList sortedList = new SortedList<>(filterList); sortedList.comparatorProperty() .bind(projektTableView.comparatorProperty()); projektTableView.setItems(sortedList); } @FXML private void handleShowAll() { filterList.setPredicate(null); } @FXML private void handleShowInBearbeitung() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); } @FXML private void handleShowEingereicht() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.EINGEREICHT)); } @FXML private void handleShowInUeberabeitung() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)); } @FXML private void handleShowAngenommen() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.ANGENOMMEN)); } @FXML private void handleShowAbgelehnt() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.ABGELEHNT)); } @FXML private void handleAddProjekt() { Projekt projekt = main.showProjekthinzufuegenStage(null); if (projekt != null) { main.getProjekte().add(projekt); } } @FXML private void handleEditProjekt() { Projekt selectedItem = projektTableView.getSelectionModel() .getSelectedItem(); if (selectedItem != null) { main.showProjekthinzufuegenStage(selectedItem); } } @FXML private void handleDeleteProjekt() { Projekt selectedItem = projektTableView.getSelectionModel() .getSelectedItem(); if (selectedItem != null) { main.getProjekte().remove(selectedItem); } } @FXML private void handleStudentenverwaltung() { main.showStudentenverwaltung(); } @FXML private void handleAnsprechpartnerverwaltungs() { main.showAnsprechpartnerverwaltungsStage(); } @FXML private void handleClose() { Platform.exit(); } }