diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java index b10761b..1f9332a 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java @@ -5,6 +5,7 @@ import de.uniluebeck.mi.projmi6.model.*; import javafx.beans.binding.Bindings; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; @@ -16,6 +17,7 @@ import javax.swing.*; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.ThreadFactory; public class MainController { @@ -144,106 +146,165 @@ public class MainController { private Task> loadFallTask = null; + + private ChangeListener 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>() { + @Override + protected List 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 private void initialize(){ + //Init user data. cmbUserChoose.itemsProperty().bind(this.getStammdaten().mitarbeiterProperty()); cmbUserChoose.getSelectionModel().select(0); // TODO: Bessere Loesung finden. + + //Disable the right side if no case is selected. 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>() { - @Override - protected List 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 loadCaseData = null; + private ChangeListener 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 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() { + List untersuchungList; + List diagnoseList; + List stationsHistorieList; + @Override + protected Void call() throws Exception { + untersuchungList = DBHandler.getUntersuchungByFall(newValue); + diagnoseList = DBHandler.getDiagnosenByFall(newValue); + //stationsHistorieList = + return null; } - try { - List untersuchungList = DBHandler.getUntersuchungByFall(newValue); - System.out.println("untersuchungenList"+untersuchungList); - untersuchungenController.untersuchungenProperty().set(FXCollections.observableArrayList(untersuchungList)); - - List 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