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.Student; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextInputDialog; import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.converter.IntegerStringConverter; /** * The controller for the FXML-View Studentenverwaltung. * * @author Dina-Marie Hanxleden & Stefan Suhren * @version 1.0 */ public class StudentenverwaltungsController { @FXML private TableView studentTableView; @FXML private TableColumn matrikelnummerTableColumn; @FXML private TableColumn vornameTableColumn; @FXML private TableColumn nachnameTableColumn; @FXML private Button deleteStudentButton; private Main main; /** * After the FXML was loaded the controller call the initialize function. * */ @FXML private void initialize() { matrikelnummerTableColumn.setCellValueFactory( (data) -> data.getValue().matrikelnummerProperty().asObject()); matrikelnummerTableColumn.setCellFactory( TextFieldTableCell.forTableColumn(new IntegerStringConverter())); matrikelnummerTableColumn.setOnEditCommit((data) -> { Student tmpStud = new Student(data.getNewValue()); if (!main.getStudenten().contains(tmpStud)) { data.getRowValue().setMatrikelnummer(tmpStud.getMatrikelnummer()); } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Student ist bereits vorhanden"); alert.setHeaderText("Dieser Student wurde schon angelegt."); alert.setContentText( "Der Student wird jetzt für Sie ausgewählt."); alert.initOwner(main.getStudentenverwaltungsStage()); alert.showAndWait(); studentTableView.getSelectionModel().select(tmpStud); } // Hack, aktualisiert TableView, da Observable beim setzen nicht neu // abgefragt wird matrikelnummerTableColumn.setVisible(false); matrikelnummerTableColumn.setVisible(true); }); vornameTableColumn .setCellValueFactory((data) -> data.getValue().vornameProperty()); vornameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn()); vornameTableColumn.setOnEditCommit((data) -> { data.getRowValue().setVorname(data.getNewValue().trim()); // Hack, aktualisiert TableView, da Observable beim setzen nicht neu // abgefragt wird vornameTableColumn.setVisible(false); vornameTableColumn.setVisible(true); }); nachnameTableColumn.setCellValueFactory( (data) -> data.getValue().nachnameProperty()); nachnameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn()); nachnameTableColumn.setOnEditCommit((data) -> { data.getRowValue().setNachname(data.getNewValue().trim()); // Hack, aktualisiert TableView, da Observable beim setzen nicht neu // abgefragt wird nachnameTableColumn.setVisible(false); nachnameTableColumn.setVisible(true); }); deleteStudentButton.disableProperty().bind(studentTableView .getSelectionModel().selectedItemProperty().isNull()); } /** * * Set back reference of the Main. * * @param main */ public void setMain(Main main) { this.main = main; studentTableView.setItems(main.getStudenten()); } /** * * Open the StudenthinzufuegenStage to add a new Student. * */ @FXML private void handleAddStudent() { try { TextInputDialog dialog = new TextInputDialog(); dialog.setTitle("Füge neuen Studenten hinzu"); dialog.setHeaderText( "Geben Sie die Matrikelnummer des Studenten ein."); dialog.setContentText("Matrikelnummer des Studenten:"); dialog.initOwner(main.getStudentenverwaltungsStage()); Optional result = dialog.showAndWait(); if (result.isPresent()) { if (!result.get().trim().isEmpty()) { Student student = new Student( Integer.parseInt(result.get().trim(), 10)); if (!main.getStudenten().contains(student)) { main.getStudenten().add(student); } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Student ist bereits vorhanden"); alert.setHeaderText("Dieser Student wurde schon angelegt."); alert.setContentText( "Der Student wird jetzt für Sie ausgewählt."); alert.initOwner(main.getStudentenverwaltungsStage()); alert.showAndWait(); studentTableView.getSelectionModel().select(student); } } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Matrikelnummer ist leer"); alert.setHeaderText( "Die von Ihnen eingegebene Matrikelnummer ist leer."); alert.setContentText("Versuchen Sie es bitte erneut."); alert.initOwner(main.getStudentenverwaltungsStage()); alert.showAndWait(); handleAddStudent(); } } } catch (NumberFormatException e) { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Matrikelnummer ungültig"); alert.setHeaderText( "Die von Ihnen eingegebene Matrikelnummer ist nicht gültig, da sie keine ganze Zahl ist."); alert.setContentText("Versuchen Sie es bitte erneut."); alert.initOwner(main.getStudentenverwaltungsStage()); alert.showAndWait(); handleAddStudent(); } } /** * * Delete the selected Student. * */ @FXML private void handleDeleteStudent() { Student selectedItem = studentTableView.getSelectionModel() .getSelectedItem(); if (selectedItem != null) { main.getProjekte().remove(selectedItem.getProjekt()); main.getStudenten().remove(selectedItem); } } }