소스 검색

Asynchrones Laden der Daten zu einem Fall :)

testBranch
Johannes 10 년 전
부모
커밋
1478bb4139
1개의 변경된 파일135개의 추가작업 그리고 74개의 파일을 삭제
  1. +135
    -74
      src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java

+ 135
- 74
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<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
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<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


불러오는 중...
취소
저장