package de.fhswf.in.inf.se.projektthemenvergabe.view; 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.collections.transformation.FilteredList; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.stage.Stage; /** * The controller for the FXML-View ProjektHinzufuegen. * * @author Dina-Marie Hanxleden & Stefan Suhren * @version 1.0 */ public class ProjektHinzufuegenController { @FXML private TextField projektthemaTextField; @FXML private TextArea projektskizzeTextField; @FXML private TextArea projekthintergrundTextField; @FXML private TextArea projektinhalteTextField; @FXML private ComboBox ansprechpartnerComboBox; @FXML private Button ansprechpartnerComboBoxReset; @FXML private ComboBox student1ComboBox; @FXML private Button student1ComboBoxReset; @FXML private ComboBox student2ComboBox; @FXML private Button student2ComboBoxReset; @FXML private ComboBox student3ComboBox; @FXML private Button student3ComboBoxReset; @FXML private TextArea dozentenkommentar; @FXML private Button saveButton; private Projekt projekt; private Main main; private Stage projekthinzufuegenStage; private boolean wasAborted = true; /** * * Set back reference of the Main. * * @param main * @param projekt */ public void setMain(Main main, Projekt projekt) { this.projekt = projekt; this.main = main; FilteredList freeStudenten = new FilteredList<>( main.getStudenten(), (data) -> { return data.getProjekt() == null || data.getProjekt().equals(this.projekt); }); projekthinzufuegenStage = main.getProjekthinzufuegenStage(); ansprechpartnerComboBox.setItems(main.getAnsprechpartner()); student1ComboBox.setItems(freeStudenten); student2ComboBox.setItems(freeStudenten); student3ComboBox.setItems(freeStudenten); // It's art (not any longer :-( ) saveButton.disableProperty().bind(projektthemaTextField.textProperty() .isEmpty() .or(ansprechpartnerComboBox.valueProperty().isNull() .or(student1ComboBox.valueProperty().isNull() .and(student2ComboBox.valueProperty().isNull().and( student3ComboBox.valueProperty().isNull()))))); // Bind reset button disabled state to combobox ansprechpartnerComboBoxReset.disableProperty() .bind(ansprechpartnerComboBox.disabledProperty()); student1ComboBoxReset.disableProperty() .bind(student1ComboBox.disabledProperty()); student2ComboBoxReset.disableProperty() .bind(student2ComboBox.disabledProperty()); student3ComboBoxReset.disableProperty() .bind(student3ComboBox.disabledProperty()); if (projekt != null) { if (!projekt.getStatus().equals(Projekt.StatusTypes.IN_BEARBEITUNG) && !projekt.getStatus() .equals(Projekt.StatusTypes.IN_UEBERARBEITUNG)) { main.getProjekthinzufuegenStage().setTitle("Projekt anzeigen"); projekthintergrundTextField.setEditable(false); projektinhalteTextField.setEditable(false); projektskizzeTextField.setEditable(false); projektthemaTextField.setEditable(false); saveButton.disableProperty().unbind(); } else { main.getProjekthinzufuegenStage().setTitle("Projekt bearbeiten"); } ansprechpartnerComboBox.setDisable(!projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); student1ComboBox.setDisable(!projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); student2ComboBox.setDisable(!projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); student3ComboBox.setDisable(!projekt.getStatus() .equals(Projekt.StatusTypes.IN_BEARBEITUNG)); projektthemaTextField.setText(projekt.getProjektthema()); projektskizzeTextField.setText(projekt.getSkizze()); projekthintergrundTextField .setText(projekt.getProjektbeschreibung()); projektinhalteTextField.setText(projekt.getProjekteinhalte()); ansprechpartnerComboBox.setValue(projekt.getAnsprechpartner()); if (projekt.getStudent1() != null) { student1ComboBox.setValue(projekt.getStudent1()); } if (projekt.getStudent2() != null) { student2ComboBox.setValue(projekt.getStudent2()); } if (projekt.getStudent3() != null) { student3ComboBox.setValue(projekt.getStudent3()); } dozentenkommentar.setText(projekt.getDozentenkommentar()); } else { main.getProjekthinzufuegenStage().setTitle("Projekt anlegen"); } } /** * * Getter for the projekt. * * @return Returns the projekt */ public Projekt getProjekt() { if (wasAborted) { return null; } return projekt; } /** * Empty Ansprechpartner comboBox. * */ @FXML private void handleResetAnsprechpartner() { ansprechpartnerComboBox.getSelectionModel().clearSelection(); } /** * Empty 1st Student comboBox. * */ @FXML private void handleResetStudent1() { student1ComboBox.getSelectionModel().clearSelection(); } /** * Empty 2nd Student comboBox. * */ @FXML private void handleResetStudent2() { student2ComboBox.getSelectionModel().clearSelection(); } /** * Empty 3rd Student comboBox. * */ @FXML private void handleResetStudent3() { student3ComboBox.getSelectionModel().clearSelection(); } /** * * Set the Text of the Fields from the stage into the TableView and close * the projekthinzufuegen stage. * */ @FXML private void handleSave() { if (!projektthemaTextField.getText().trim().isEmpty()) { boolean projektthemaAlreadyExists = false; for (Projekt projekt : main.getProjekte()) { if (projekt.getProjektthema() .equals(projektthemaTextField.getText().trim())) { projektthemaAlreadyExists = true; break; } } if ((projekt != null && projektthemaTextField.getText().trim() .equals(projekt.getProjektthema())) || !projektthemaAlreadyExists) { if (projekt == null) { projekt = new Projekt(projektthemaTextField.getText().trim(), student1ComboBox.getValue(), student2ComboBox.getValue(), student3ComboBox.getValue(), ansprechpartnerComboBox.getValue()); } else { projekt .setProjektthema(projektthemaTextField.getText().trim()); projekt.setAnsprechpartner(ansprechpartnerComboBox.getValue()); if (projekt.getStudent1() != null) { projekt.getStudent1().setProjekt(null); } if (projekt.getStudent2() != null) { projekt.getStudent2().setProjekt(null); } if (projekt.getStudent3() != null) { projekt.getStudent3().setProjekt(null); } if (student1ComboBox.getValue() != null) { projekt.addStudent(student1ComboBox.getValue()); } if (student2ComboBox.getValue() != null) { projekt.addStudent(student2ComboBox.getValue()); } if (student3ComboBox.getValue() != null) { projekt.addStudent(student3ComboBox.getValue()); } } projekt.setSkizze(projektskizzeTextField.getText().trim()); projekt.setProjektbeschreibung( projekthintergrundTextField.getText().trim()); projekt.setProjekteinhalte( projektinhalteTextField.getText().trim()); wasAborted = false; projekthinzufuegenStage.close(); } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Projektthema ist bereits vorhanden"); alert.setHeaderText("Projekt wurde bereits angelegt."); alert.setContentText( "Bitte geben Sie ein neues Projektthema ein."); alert.initOwner(main.getProjekthinzufuegenStage()); alert.showAndWait(); projektthemaTextField.requestFocus(); } } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Projektthema ist leer"); alert.setHeaderText("Projektthema kann nicht leer sein."); alert.setContentText("Bitte überprüfen Sie das Projektthema."); alert.initOwner(main.getProjekthinzufuegenStage()); alert.showAndWait(); } } /** * * Cancel the projekthinzufuegen stage. * */ @FXML private void handleCancel() { projekthinzufuegenStage.close(); } }