package de.hitec.nhplus.controller; import de.hitec.nhplus.datastorage.DaoFactory; import de.hitec.nhplus.datastorage.TreatmentDao; import javafx.beans.value.ChangeListener; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.stage.Stage; import de.hitec.nhplus.model.Patient; import de.hitec.nhplus.model.Treatment; import de.hitec.nhplus.utils.DateConverter; import javafx.util.StringConverter; import java.sql.SQLException; import java.time.LocalDate; import java.time.LocalTime; public class NewTreatmentController { @FXML private Label labelFirstName; @FXML private Label labelSurname; @FXML private TextField textFieldBegin; @FXML private TextField textFieldEnd; @FXML private TextField textFieldDescription; @FXML private TextArea textAreaRemarks; @FXML private DatePicker datePicker; @FXML private Button buttonAdd; private AllTreatmentController controller; private Patient patient; private Stage stage; public void initialize(AllTreatmentController controller, Stage stage, Patient patient) { this.controller= controller; this.patient = patient; this.stage = stage; this.buttonAdd.setDisable(true); ChangeListener inputNewPatientListener = (observableValue, oldText, newText) -> NewTreatmentController.this.buttonAdd.setDisable(NewTreatmentController.this.areInputDataInvalid()); this.textFieldBegin.textProperty().addListener(inputNewPatientListener); this.textFieldEnd.textProperty().addListener(inputNewPatientListener); this.textFieldDescription.textProperty().addListener(inputNewPatientListener); this.textAreaRemarks.textProperty().addListener(inputNewPatientListener); this.datePicker.valueProperty().addListener((observableValue, localDate, t1) -> NewTreatmentController.this.buttonAdd.setDisable(NewTreatmentController.this.areInputDataInvalid())); this.datePicker.setConverter(new StringConverter<>() { @Override public String toString(LocalDate localDate) { return (localDate == null) ? "" : DateConverter.convertLocalDateToString(localDate); } @Override public LocalDate fromString(String localDate) { return DateConverter.convertStringToLocalDate(localDate); } }); this.showPatientData(); } private void showPatientData(){ this.labelFirstName.setText(patient.getFirstName()); this.labelSurname.setText(patient.getSurname()); } @FXML public void handleAdd(){ LocalDate date = this.datePicker.getValue(); LocalTime begin = DateConverter.convertStringToLocalTime(textFieldBegin.getText()); LocalTime end = DateConverter.convertStringToLocalTime(textFieldEnd.getText()); String description = textFieldDescription.getText(); String remarks = textAreaRemarks.getText(); Treatment treatment = new Treatment(patient.getPid(), date, begin, end, description, remarks); createTreatment(treatment); controller.readAllAndShowInTableView(); stage.close(); } private void createTreatment(Treatment treatment) { TreatmentDao dao = DaoFactory.getDaoFactory().createTreatmentDao(); try { dao.create(treatment); } catch (SQLException exception) { exception.printStackTrace(); } } @FXML public void handleCancel(){ stage.close(); } private boolean areInputDataInvalid() { if (this.textFieldBegin.getText() == null || this.textFieldEnd.getText() == null) { return true; } try { LocalTime begin = DateConverter.convertStringToLocalTime(this.textFieldBegin.getText()); LocalTime end = DateConverter.convertStringToLocalTime(this.textFieldEnd.getText()); if (!end.isAfter(begin)) { return true; } } catch (Exception exception) { return true; } return this.textFieldDescription.getText().isBlank() || this.datePicker.getValue() == null; } }