| @@ -5,6 +5,7 @@ import de.uniluebeck.mi.projmi6.model.*; | |||||
| import javafx.beans.binding.Bindings; | import javafx.beans.binding.Bindings; | ||||
| import javafx.beans.property.ReadOnlyObjectProperty; | import javafx.beans.property.ReadOnlyObjectProperty; | ||||
| import javafx.beans.property.SimpleObjectProperty; | import javafx.beans.property.SimpleObjectProperty; | ||||
| import javafx.beans.value.ChangeListener; | |||||
| import javafx.collections.FXCollections; | import javafx.collections.FXCollections; | ||||
| import javafx.collections.ObservableList; | import javafx.collections.ObservableList; | ||||
| import javafx.concurrent.Task; | import javafx.concurrent.Task; | ||||
| @@ -16,6 +17,7 @@ import javax.swing.*; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Set; | import java.util.Set; | ||||
| import java.util.concurrent.ThreadFactory; | |||||
| public class MainController { | public class MainController { | ||||
| @@ -144,106 +146,165 @@ public class MainController { | |||||
| private Task<List<Fall>> loadFallTask = null; | private Task<List<Fall>> loadFallTask = null; | ||||
| private ChangeListener<Patient> onPatientChanged = (observableValue,oldValue,newValue)-> { | |||||
| lvFall.setItems(null); //clear list | |||||
| if(newValue==null){ // If no patient is selected | |||||
| lvFallPlaceholder.setText("Kein Patient ausgew\u00e4hlt!"); | |||||
| return; | |||||
| } | |||||
| if(loadFallTask!=null && loadFallTask.isRunning()){ | |||||
| loadFallTask.cancel(); | |||||
| } | |||||
| loadFallTask = new Task<List<Fall>>() { | |||||
| @Override | |||||
| protected List<Fall> call() throws Exception { | |||||
| return DBHandler.getFaelleByPatID(newValue.getPatID()); | |||||
| } | |||||
| @Override | |||||
| protected void succeeded() { | |||||
| super.succeeded(); | |||||
| if(isCancelled()){ | |||||
| System.out.println("Task wurde gecancelt"); | |||||
| return; | |||||
| } | |||||
| lvFallPlaceholder.setText("Keine F\u00e4lle vorhanden!"); | |||||
| lvFall.setItems(FXCollections.observableArrayList(getValue())); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| @Override | |||||
| protected void cancelled() { | |||||
| super.cancelled(); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| @Override | |||||
| protected void failed() { | |||||
| super.failed(); | |||||
| lvFallPlaceholder.setText("Laden fehlgeschlagen!"); | |||||
| lvFall.setItems(null); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| }; | |||||
| lvFallPlaceholder.setText("Liste wird geladen..."); | |||||
| increaseParallelTaskCount(); | |||||
| Thread thread = new Thread(loadFallTask); | |||||
| thread.setDaemon(true); | |||||
| thread.start(); | |||||
| }; | |||||
| @FXML | @FXML | ||||
| private void initialize(){ | private void initialize(){ | ||||
| //Init user data. | |||||
| cmbUserChoose.itemsProperty().bind(this.getStammdaten().mitarbeiterProperty()); | cmbUserChoose.itemsProperty().bind(this.getStammdaten().mitarbeiterProperty()); | ||||
| cmbUserChoose.getSelectionModel().select(0); // TODO: Bessere Loesung finden. | cmbUserChoose.getSelectionModel().select(0); // TODO: Bessere Loesung finden. | ||||
| //Disable the right side if no case is selected. | |||||
| fallOverview.disableProperty().bind(patientTablesController.selectedPatientProperty().isNull()); | fallOverview.disableProperty().bind(patientTablesController.selectedPatientProperty().isNull()); | ||||
| //Load the cases async if patient changes | |||||
| patientTablesController.selectedPatientProperty().addListener(onPatientChanged); | |||||
| patientTablesController.selectedPatientProperty().addListener((observableValue,oldValue,newValue)-> { | |||||
| lvFall.setItems(null); //clear list | |||||
| if(newValue==null){ // If no patient is selected | |||||
| lvFallPlaceholder.setText("Kein Patient ausgew\u00e4hlt!"); | |||||
| return; | |||||
| } | |||||
| lvFall.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); | |||||
| if(loadFallTask!=null && loadFallTask.isRunning()){ | |||||
| loadFallTask.cancel(); | |||||
| } | |||||
| fallController.fallPropertyProperty().bind(lvFall.getSelectionModel().selectedItemProperty()); | |||||
| loadFallTask = new Task<List<Fall>>() { | |||||
| @Override | |||||
| protected List<Fall> call() throws Exception { | |||||
| return DBHandler.getFaelleByPatID(newValue.getPatID()); | |||||
| } | |||||
| @Override | |||||
| protected void succeeded() { | |||||
| super.succeeded(); | |||||
| if(isCancelled()){ | |||||
| System.out.println("Task wurde gecancelt"); | |||||
| return; | |||||
| } | |||||
| lvFallPlaceholder.setText("Keine F\u00e4lle vorhanden!"); | |||||
| lvFall.setItems(FXCollections.observableArrayList(getValue())); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| lvFall.getSelectionModel().selectedItemProperty().addListener(onCaseChanged); | |||||
| } | |||||
| @Override | |||||
| protected void cancelled() { | |||||
| super.cancelled(); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| @Override | |||||
| protected void failed() { | |||||
| super.failed(); | |||||
| lvFallPlaceholder.setText("Laden fehlgeschlagen!"); | |||||
| lvFall.setItems(null); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| }; | |||||
| lvFallPlaceholder.setText("Liste wird geladen..."); | |||||
| increaseParallelTaskCount(); | |||||
| Thread thread = new Thread(loadFallTask); | |||||
| thread.setDaemon(true); | |||||
| thread.start(); | |||||
| }); | |||||
| private Task<Void> loadCaseData = null; | |||||
| private ChangeListener<Fall> onCaseChanged = (observable, oldValue, newValue) -> { | |||||
| if(loadCaseData!=null && loadCaseData.isRunning()){ | |||||
| loadCaseData.cancel(); | |||||
| } | |||||
| tabPaneFall.setDisable(false); | |||||
| tabFallDiagnose.setDisable(true); | |||||
| tabFallStationsHistorie.setDisable(true); | |||||
| tabFallUntersuchungen.setDisable(true); | |||||
| if(newValue==null) { | |||||
| tabPaneFall.setDisable(true); | |||||
| System.out.println("TODO: Clear tables cuz fall = null!"); | |||||
| //fallController.c | |||||
| return; | |||||
| } | |||||
| if(newValue==null){ // If no patient is selected | |||||
| //lvFallPlaceholder.setText("Kein Patient ausgew\u00e4hlt!"); | |||||
| return; | |||||
| } | |||||
| fallController.fallPropertyProperty().bind(lvFall.getSelectionModel().selectedItemProperty()); | |||||
| lvFall.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); | |||||
| /* untersuchungenController.untersuchungenProperty().bind( | |||||
| Bindings.createObjectBinding(() ->{ | |||||
| Fall selectedFall = lvFall.getSelectionModel().getSelectedItem(); | |||||
| System.out.println("Liste der Untersuchungen ...y"); | |||||
| if(selectedFall==null) return null; | |||||
| List<Untersuchung> untersuchungList = DBHandler.getUntersuchungByFall(selectedFall); | |||||
| System.out.println("Es sind "+untersuchungList.size()+" Untersuchungen vorhanden."); | |||||
| return FXCollections.observableArrayList(untersuchungList); | |||||
| }, lvFall.getSelectionModel().selectedIndexProperty()));*/ | |||||
| lvFall.getSelectionModel().selectedItemProperty().addListener(((observable, oldValue, newValue) -> { | |||||
| System.out.println("Changed choosen Fall"); | |||||
| if(newValue==null) { | |||||
| System.out.println("TODO: Clear tables cuz fall = null!"); | |||||
| return; | |||||
| loadCaseData = new Task<Void>() { | |||||
| List<Untersuchung> untersuchungList; | |||||
| List<Diagnose> diagnoseList; | |||||
| List<StationsHistorie> stationsHistorieList; | |||||
| @Override | |||||
| protected Void call() throws Exception { | |||||
| untersuchungList = DBHandler.getUntersuchungByFall(newValue); | |||||
| diagnoseList = DBHandler.getDiagnosenByFall(newValue); | |||||
| //stationsHistorieList = | |||||
| return null; | |||||
| } | } | ||||
| try { | |||||
| List<Untersuchung> untersuchungList = DBHandler.getUntersuchungByFall(newValue); | |||||
| System.out.println("untersuchungenList"+untersuchungList); | |||||
| untersuchungenController.untersuchungenProperty().set(FXCollections.observableArrayList(untersuchungList)); | |||||
| List<Diagnose> diagnoseList = DBHandler.getDiagnosenByFall(newValue); | |||||
| System.out.println("diagnoseList ="+diagnoseList); | |||||
| diagnoseController.diagnosenProperty().set(FXCollections.observableArrayList(diagnoseList)); | |||||
| }catch(Exception e){ | |||||
| e.printStackTrace(); | |||||
| @Override | |||||
| protected void succeeded() { | |||||
| super.succeeded(); | |||||
| if(isCancelled()){ | |||||
| System.out.println("Task wurde gecancelt"); | |||||
| return; | |||||
| } | |||||
| untersuchungenController.setUntersuchungen(FXCollections.observableArrayList(untersuchungList)); | |||||
| diagnoseController.setDiagnosen(FXCollections.observableArrayList(diagnoseList)); | |||||
| tabPaneFall.setDisable(false); | |||||
| tabFallDiagnose.setDisable(false); | |||||
| tabFallStationsHistorie.setDisable(false); | |||||
| tabFallUntersuchungen.setDisable(false); | |||||
| decreaseParallelTaskCount(); | |||||
| } | } | ||||
| })); | |||||
| } | |||||
| @Override | |||||
| protected void cancelled() { | |||||
| super.cancelled(); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| @Override | |||||
| protected void failed() { | |||||
| super.failed(); | |||||
| //lvFallPlaceholder.setText("Laden fehlgeschlagen!"); | |||||
| getException().printStackTrace(); | |||||
| decreaseParallelTaskCount(); | |||||
| } | |||||
| }; | |||||
| Thread thread = new Thread(loadCaseData); | |||||
| thread.setDaemon(true); | |||||
| thread.start(); | |||||
| increaseParallelTaskCount(); | |||||
| }; | |||||
| @FXML | @FXML | ||||