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.Ansprechpartner; import de.fhswf.in.inf.se.projektthemenvergabe.model.Projekt; import de.fhswf.in.inf.se.projektthemenvergabe.model.Student; import javafx.application.Platform; 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; /** * The controller for the FXML-View Projektthemenverwaltung. * * @author Dina-Marie Hanxleden & Stefan Suhren * @version 1.0 */ 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; /** * After the FXML was loaded the controller call the initialize function. * */ @FXML private void initialize() { projektThemaTableColumn.setCellValueFactory( (data) -> data.getValue().projektthemaProperty()); ansprechpatnerTableColumn.setCellValueFactory( (data) -> data.getValue().ansprechpartnerProperty()); student1TableColumn.setCellValueFactory( (data) -> data.getValue().student1Property()); student2TableColumn.setCellValueFactory( (data) -> data.getValue().student2Property()); student3TableColumn.setCellValueFactory( (data) -> data.getValue().student3Property()); 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()); } if (!data.getRowValue().getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG) && !data.getRowValue().getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)) { editProjektButton.setText("Anzeigen"); } else { editProjektButton.setText("Bearbeiten"); } }); projektTableView.getSelectionModel().selectedItemProperty() .addListener((observable, oldValue, newValue) -> { if (newValue == null || (!newValue.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG) && !newValue.getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG))) { editProjektButton.setText("Anzeigen"); } else { editProjektButton.setText("Bearbeiten"); } }); editProjektButton.disableProperty().bind(projektTableView .getSelectionModel().selectedItemProperty().isNull()); deleteProjektButton.disableProperty().bind(projektTableView .getSelectionModel().selectedItemProperty().isNull()); editProjektMenuItem.disableProperty() .bind(editProjektButton.disabledProperty()); deleteProjektMenuItem.disableProperty() .bind(deleteProjektButton.disabledProperty()); } /** * * Set back reference of the Main. * * @param main */ 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); } /** * * The filter is off. Show all projects. * */ @FXML private void handleShowAll() { filterList.setPredicate(null); } /** * * Filter projects according to status "IN_BEARBEITUNG". * */ @FXML private void handleShowInBearbeitung() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); } /** * * Filter projects according to status "EINGEREICHT". * */ @FXML private void handleShowEingereicht() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.EINGEREICHT)); } /** * * Filter projects according to status "IN_UEBERARBEITUNG". * */ @FXML private void handleShowInUeberabeitung() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)); } /** * * Filter projects according to status "ANGENOMMEN". * */ @FXML private void handleShowAngenommen() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.ANGENOMMEN)); } /** * * Filter projects according to status "ABGELEHNT". * */ @FXML private void handleShowAbgelehnt() { filterList.setPredicate((projekt) -> projekt.getStatus() .equals(Projekt.StatusTypes.ABGELEHNT)); } /** * * Open the ProjekthinzufuegenStage to add a new Projekt. * */ @FXML private void handleAddProjekt() { Projekt projekt = main.showProjekthinzufuegenStage(null); if (projekt != null) { main.getProjekte().add(projekt); } } /** * * Open the ProjekthinzufuegenStage to edit a Projekt. * */ @FXML private void handleEditProjekt() { Projekt selectedItem = projektTableView.getSelectionModel() .getSelectedItem(); if (selectedItem != null) { main.showProjekthinzufuegenStage(selectedItem); } } /** * * Delete the selected Projekt. * */ @FXML private void handleDeleteProjekt() { Projekt selectedItem = projektTableView.getSelectionModel() .getSelectedItem(); if (selectedItem != null) { if (selectedItem.getStudent1() != null) { selectedItem.getStudent1().setProjekt(null); } if (selectedItem.getStudent2() != null) { selectedItem.getStudent2().setProjekt(null); } if (selectedItem.getStudent3() != null) { selectedItem.getStudent3().setProjekt(null); } main.getProjekte().remove(selectedItem); } } /** * * Open Stage of Studentenverwaltung. * */ @FXML private void handleStudentenverwaltung() { main.showStudentenverwaltung(); } /** * * Open Stage of Ansprechpartnerverwaltung. * */ @FXML private void handleAnsprechpartnerverwaltungs() { main.showAnsprechpartnerverwaltungsStage(); } /** * * Cancel the Projekttehmenverwaltung stage. * */ @FXML private void handleClose() { Platform.exit(); } }