瀏覽代碼

merge hapi and master

Conflicts:
	src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java
testBranch
Natascha 10 年之前
父節點
當前提交
8b7c34ed0f
共有 29 個文件被更改,包括 1334 次插入289 次删除
  1. +33
    -17
      src/main/java/de/uniluebeck/mi/projmi6/Main.java
  2. +37
    -12
      src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java
  3. +65
    -22
      src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java
  4. +183
    -75
      src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java
  5. +56
    -33
      src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java
  6. +101
    -21
      src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java
  7. +61
    -0
      src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java
  8. +80
    -20
      src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java
  9. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/controller/package-info.java
  10. +472
    -36
      src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java
  11. +7
    -7
      src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java
  12. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/db/package-info.java
  13. +13
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java
  14. +6
    -2
      src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java
  15. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java
  16. +1
    -1
      src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java
  17. +8
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java
  18. +76
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/Stammdaten.java
  19. +5
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java
  20. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/model/package-info.java
  21. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/package-info.java
  22. +12
    -3
      src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java
  23. +4
    -0
      src/main/java/de/uniluebeck/mi/projmi6/view/package-info.java
  24. +1
    -1
      src/main/resources/diagnose.fxml
  25. +1
    -1
      src/main/resources/fall.fxml
  26. +3
    -1
      src/main/resources/main.fxml
  27. +46
    -36
      src/main/resources/patient_edit.fxml
  28. +2
    -0
      src/main/resources/patient_tables.fxml
  29. +41
    -1
      src/main/resources/style.css

+ 33
- 17
src/main/java/de/uniluebeck/mi/projmi6/Main.java 查看文件

@@ -6,6 +6,7 @@ import de.uniluebeck.mi.projmi6.model.Kasse;
import de.uniluebeck.mi.projmi6.model.Mitarbeiter;
import de.uniluebeck.mi.projmi6.model.OpsCode;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.collections.FXCollections;
import javafx.concurrent.Task;
import javafx.fxml.FXMLLoader;
@@ -13,6 +14,7 @@ import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Background;
@@ -36,27 +38,37 @@ public class Main extends Application {

@Override
protected Parent call() throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getClassLoader().getResource("main.fxml"));



MainController mainController = new MainController();
fxmlLoader.setControllerFactory(mainController.getControllerFactory());
updateMessage("Lade OPS-Codes...");
mainController.getStammdaten().setOpsCodes(FXCollections.observableArrayList(
DBHandler.getAllOpsCodes()
));

mainController.setOpsCodes(FXCollections.observableArrayList(
new OpsCode("1234", "Hallo OPS", 20),
new OpsCode("876-3", "Darmspiegelung", 20)
updateMessage("Lade ICD-10-Codes...");
mainController.getStammdaten().setIcd10Codes(FXCollections.observableArrayList(
DBHandler.getAllIcd10Codes()
));

mainController.setKassen(FXCollections.observableArrayList(
new Kasse(2, "TK", "Strasse 2", false)
updateMessage("Lade Krankenkassen...");
mainController.getStammdaten().setKassen(FXCollections.observableArrayList(
DBHandler.getAllKassen()
));

mainController.setMitarbeiter(FXCollections.observableArrayList(
//TODO
updateMessage("Lade Mitarbeiter...");
mainController.getStammdaten().setMitarbeiter(FXCollections.observableArrayList(
DBHandler.getAllMitarbeiter()
));
mainController.setStationen(FXCollections.observableArrayList(DBHandler.getAllStationen()));

updateMessage("Lade Stationen...");
mainController.getStammdaten().setStationen(FXCollections.observableArrayList(
DBHandler.getAllStationen())
);

updateMessage("Lade GUI...");
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getClassLoader().getResource("main.fxml"));
fxmlLoader.setControllerFactory(mainController.getControllerFactory());

Parent root = fxmlLoader.load();

@@ -76,7 +88,7 @@ public class Main extends Application {

primaryStage.getIcons().add(icon);

Stage loadingMessage = createLoadWindow();
Stage loadingMessage = createLoadWindow(loadMainWindowTask.messageProperty());

loadMainWindowTask.setOnFailed(event -> {
loadMainWindowTask.getException().printStackTrace();
@@ -91,6 +103,7 @@ public class Main extends Application {
primaryStage.setScene(new Scene(root, 1000, 800));
primaryStage.show();
});

Thread thread = new Thread(loadMainWindowTask);
thread.setDaemon(true);
thread.start();
@@ -104,17 +117,20 @@ public class Main extends Application {
*
* @return the splash screen
*/
public Stage createLoadWindow(){
public Stage createLoadWindow(ReadOnlyStringProperty progressMessage){
Text kis = new Text("KIS");
kis.setFont(Font.font(50));

Text gruppe6 = new Text("Gruppe 06");
gruppe6.setFont(Font.font(20));

VBox root = new VBox(gruppe6, new ImageView(icon), kis);
Text progress = new Text();
progress.textProperty().bind(progressMessage);

VBox root = new VBox(gruppe6, new ImageView(icon), kis, progress);
root.setSpacing(20);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root, 400, 400);
Scene scene = new Scene(root, 400, 500);

Stage stage = new Stage(StageStyle.UNDECORATED);
stage.getIcons().add(icon);


+ 37
- 12
src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java 查看文件

@@ -5,14 +5,13 @@ package de.uniluebeck.mi.projmi6.controller;
*/

import de.uniluebeck.mi.projmi6.model.*;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.*;
import javafx.event.ActionEvent;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;

public class DiagnoseController {

@@ -22,11 +21,38 @@ public class DiagnoseController {
this.mainController = mainController;
}


public ObservableList<Diagnose> getDiagnosen() {
return diagnosen.get();
}

public SimpleObjectProperty<ObservableList<Diagnose>> diagnosenProperty() {
return diagnosen;
}

public void setDiagnosen(ObservableList<Diagnose> diagnosen) {
this.diagnosen.set(diagnosen);
}

private SimpleObjectProperty<ObservableList<Diagnose>> diagnosen = new SimpleObjectProperty<>();



@FXML
private ListView<Diagnose> diagnoseList;

@FXML
public void initialize(){
diagDiagnose.itemsProperty().bind(mainController.icd10CodesProperty());
diagDiagnose.itemsProperty().bind(mainController.getStammdaten().icd10CodesProperty());
diagDiagnoseArt.setItems(FXCollections.observableArrayList(DiagArt.values()));
diagDiagnoseArzt.itemsProperty().bind(mainController.mitarbeiterProperty());
diagDiagnoseArzt.itemsProperty().bind(mainController.getStammdaten().mitarbeiterProperty());
diagnoseList.itemsProperty().bind(diagnosen);

diagnoseList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
diagnoseList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
this.setDiagnose(newValue);
});

}


@@ -90,27 +116,26 @@ public class DiagnoseController {
if(diagnose==null){
clearFields();
}else {
copyDiagnoseDataIntoFields();
copyDiagnoseDataIntoFields(diagnose);
}

}

private void copyDiagnoseDataIntoFields(){
private void copyDiagnoseDataIntoFields(Diagnose diagnose){
diagDiagnoseArzt.setValue(diagnose.getArzt());

//diagFreitext.setText(diagnose.getFreitext());
diagFreitext.setText(diagnose.getFreiText());
diagDiagnoseArt.setValue(diagnose.getDiagArt());
//diagDiagnose.setValue(diagnose.getIcd10Code());
diagDiagnose.setValue(diagnose.getIcd10code());

diagCreator.setText(Integer.toString(diagnose.getErsteller()));
diagCreateTime.setText(diagnose.getErstellDatumZeit().toString());
diagChanger.setText(Integer.toString(diagnose.getBearbeiter()));
diagChangeTime.setText(diagnose.getBearbeitetDatumZeit().toString());

}

private void copyFieldDataIntoDiagnose(Diagnose diagnose){
diagnose.setIcd10code(diagDiagnose.getValue());
diagnose.setArzt(diagDiagnoseArzt.getValue());
diagnose.setFreiText(diagFreitext.getText());
diagnose.setDiagArt(diagDiagnoseArt.getValue());


+ 65
- 22
src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java 查看文件

@@ -3,10 +3,9 @@ package de.uniluebeck.mi.projmi6.controller;
/**
* Created by 631806 on 12.11.15.
*/
import de.uniluebeck.mi.projmi6.model.Diagnose;
import de.uniluebeck.mi.projmi6.model.Fall;
import de.uniluebeck.mi.projmi6.model.FallArt;
import de.uniluebeck.mi.projmi6.model.Kasse;

import de.uniluebeck.mi.projmi6.db.DBHandler;
import de.uniluebeck.mi.projmi6.model.*;
import de.uniluebeck.mi.projmi6.view.DateTimePicker;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
@@ -19,6 +18,8 @@ import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;

import java.sql.SQLException;

public class FallController {

private MainController mainController;
@@ -76,7 +77,7 @@ public class FallController {

private SimpleObjectProperty<Fall> fallProperty = new SimpleObjectProperty<>();

public Fall getFallProperty() {
public Fall getFall() {
return fallProperty.get();
}

@@ -84,8 +85,8 @@ public class FallController {
return fallProperty;
}

public void setFallProperty(Fall fallProperty) {
this.fallProperty.set(fallProperty);
public void setFall(Fall fall) {
this.fallProperty.set(fall);
}

public enum State {
@@ -99,7 +100,7 @@ public class FallController {
public void initialize(){
fallEinweisenderArzt.disableProperty().bind(fallSelbsteinweisung.selectedProperty());
fallFallart.setItems(FXCollections.observableArrayList(FallArt.values()));
fallKasse.setItems(mainController.getKassen());
fallKasse.setItems(mainController.getStammdaten().getKassen());

btnFallEnableEdit.visibleProperty().bind(
state.isEqualTo(State.VIEW).and(fallProperty.isNotNull())
@@ -108,14 +109,13 @@ public class FallController {
state.isNotEqualTo(State.VIEW)
);
btnFallSave.visibleProperty().bind(
state.isEqualTo(State.VIEW)
state.isNotEqualTo(State.VIEW)
);

btnFallCancel.visibleProperty().bind(
state.isEqualTo(State.VIEW).and(fallProperty.isNotNull())
);


fallFields.disableProperty().bind(state.isEqualTo(State.VIEW));

fallProperty.addListener(((observable, oldValue, newValue) -> {
@@ -145,27 +145,68 @@ public class FallController {

@FXML
void clickedFallAbort(ActionEvent event) {

this.state.set(State.VIEW);
copyFallDataIntoField(fallProperty.get());
mainController.fallCreationComplete();
}

@FXML
void clickedFallSave(ActionEvent event) {
if (this.state.get() == State.CREATE) {
Fall fall = new Fall();
copyFieldDataIntoFall(fall);
try {
DBHandler.setFall(fall, mainController.getCurrentMitarbeiter().getMitarbID());
//TODO Reload Faelle for Patient im MainController
} catch (SQLException e) {
e.printStackTrace();
}
} else {
try {
DBHandler.setFall(fallProperty.get(), mainController.getCurrentMitarbeiter().getMitarbID(), true);
} catch (SQLException e) {
e.printStackTrace();
}
}

mainController.fallCreationComplete();
this.state.set(State.VIEW);
//TODO Update/create in db
}

public void createNewFall() {
clearFields();
this.state.set(State.CREATE);

Patient patient = mainController.getPatientTablesController().getSelectedPatient();

// Kasse by Default auf die im Patienten hinterlegten Kasse setzen.
for (Kasse kasse : fallKasse.getItems()) {
if (kasse.getKassenID() == patient.getKassenID()) {
fallKasse.getSelectionModel().select(kasse);
break;
}
}
fallVersichertennummer.setText(patient.getVersichertennummer());

// TODO: Jojo: Kannst Du das wieder heile machen? :D
// fallProperty.unbind();
// fallProperty.set(new Fall());
}




private void clearFields(){
dtTmAufnahme.setToCurrentDateTime();
dtTmEntlassung.setToCurrentDateTime();
if(state.get() == State.CREATE) {
dtTmAufnahme.setToCurrentDateTime();
dtTmEntlassung.setToCurrentDateTime();
}else{
dtTmAufnahme.setDateTime(null);
dtTmEntlassung.setDateTime(null);
}

fallPatID.setText("<todo>"); //TODO
fallPatID.setText(""); //TODO

fallCreateTime.setText("<auto>");
fallCreator.setText("<auto>");
@@ -186,11 +227,7 @@ public class FallController {


private void copyFieldDataIntoFall(Fall fall){
if(fall==null){
clearFields();
return;
}

fall.setPatient(mainController.getPatientTablesController().getSelectedPatient());
fall.setAufnahmeDatum(dtTmAufnahme.getDateTime());
fall.setEntlassungsDatum(dtTmEntlassung.getDateTime());
if(fallSelbsteinweisung.isSelected()) {
@@ -209,14 +246,20 @@ public class FallController {


private void copyFallDataIntoField(Fall fall){
if(fall==null){
System.out.println("copyFallDataIntoFiled - Fall ist null");
clearFields();
return;
}

dtTmAufnahme.setDateTime(fall.getAufnahmeDatum());
dtTmEntlassung.setDateTime(fall.getEntlassungsDatum());

//fallPatID.setText(fall.getPatient().getVorname()+" "+fall.getPatient().getNachname()); //TODO
fallPatID.setText(fallProperty.get().getPatient()+""); //(fall.getPatient().getVorname()+" "+fall.getPatient().getNachname()); //TODO

fallCreateTime.setText(fall.getErstellDatumZeit().toString());
fallCreateTime.setText(fall.getErstellDatumZeit() !=null ? fall.getErstellDatumZeit().toString():"");
fallCreator.setText(Integer.toString(fall.getErsteller()));
fallEditTime.setText(fall.getBearbeitetDatumZeit().toString());
fallEditTime.setText(fall.getBearbeitetDatumZeit()!=null? fall.getBearbeitetDatumZeit().toString():"");
fallEditor.setText(Integer.toString(fall.getBearbeiter()));

// fallEinweisenderArzt.setText(fall.getEinweisenderArzt());


+ 183
- 75
src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java 查看文件

@@ -2,16 +2,22 @@ package de.uniluebeck.mi.projmi6.controller;

import de.uniluebeck.mi.projmi6.db.DBHandler;
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;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.util.Callback;

import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ThreadFactory;

public class MainController {

@@ -22,47 +28,7 @@ public class MainController {
private StationsHistorieController stationsHistorieController;
private UntersuchungenController untersuchungenController;

private SimpleObjectProperty<ObservableList<OpsCode>> opsCodes = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Icd10Code>> icd10Codes = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Mitarbeiter>> mitarbeiter = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Kasse>> kassen = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Station>> stationen = new SimpleObjectProperty<>();

public ObservableList<Station> getStationen() {
return stationen.get();
}

public SimpleObjectProperty<ObservableList<Station>> stationenProperty() {
return stationen;
}

public void setStationen(ObservableList<Station> stationen) {
this.stationen.set(stationen);
}

public ObservableList<Mitarbeiter> getMitarbeiter() {
return mitarbeiter.get();
}

public SimpleObjectProperty<ObservableList<Mitarbeiter>> mitarbeiterProperty() {
return mitarbeiter;
}

public void setMitarbeiter(ObservableList<Mitarbeiter> mitarbeiter) {
this.mitarbeiter.set(mitarbeiter);
}

public ObservableList<Kasse> getKassen() {
return kassen.get();
}

public SimpleObjectProperty<ObservableList<Kasse>> kassenProperty() {
return kassen;
}

public void setKassen(ObservableList<Kasse> kassen) {
this.kassen.set(kassen);
}



@@ -73,6 +39,7 @@ public class MainController {

@FXML
private ProgressIndicator progressIndicator;

@FXML
private Button btnFallCreate;

@@ -80,7 +47,7 @@ public class MainController {
private SplitPane fallOverview;

@FXML
private ListView lvFall;
private ListView<Fall> lvFall;

@FXML
private TabPane tabPaneFall;
@@ -89,6 +56,8 @@ public class MainController {
private Tab tabFallOverview, tabFallUntersuchungen, tabFallDiagnose, tabFallStationsHistorie ;


private Stammdaten stammdaten = new Stammdaten();


private Callback<Class<?>, Object> controllerFactory = clazz -> {
if(clazz.equals(MainController.class)) {
@@ -122,7 +91,9 @@ public class MainController {
}



public Stammdaten getStammdaten(){
return stammdaten;
}

public Callback<Class<?>, Object> getControllerFactory(){
return controllerFactory;
@@ -153,77 +124,214 @@ public class MainController {

public void increaseParallelTaskCount(){
parallelTaskCount++;
if(parallelTaskCount>0){
if(parallelTaskCount>0 && progressIndicator!=null){
progressIndicator.setVisible(true);
}
}

public void decreaseParallelTaskCount(){
parallelTaskCount++;
if(parallelTaskCount<=0){
parallelTaskCount--;
if(parallelTaskCount<=0 && progressIndicator!=null){
parallelTaskCount = 0;
progressIndicator.setVisible(false);
}
}


public ObservableList<OpsCode> getOpsCodes() {
return opsCodes.get();
}
@FXML
private Label lvFallPlaceholder;

public SimpleObjectProperty<ObservableList<OpsCode>> opsCodesProperty() {
return opsCodes;
}

public void setOpsCodes(ObservableList<OpsCode> opsCodes){
this.opsCodesProperty().set(opsCodes);
}

public ObservableList<Icd10Code> getIcd10Codes() {
return icd10Codes.get();
}
private Task<List<Fall>> loadFallTask = null;

public SimpleObjectProperty<ObservableList<Icd10Code>> icd10CodesProperty() {
return icd10Codes;
}

public void setIcd10Codes(ObservableList<Icd10Code> icd10Codes) {
this.icd10Codes.set(icd10Codes);
}

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(){
cmbUserChoose.itemsProperty().bind(this.mitarbeiterProperty());
//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)-> {
System.out.println("Neuer Patient gewaehlt");
try {
List<Fall> faelle = DBHandler.getFaelleByPatID(newValue.getPatID());
System.out.println(faelle);
System.out.println("Liste der Faelle hat "+ faelle.size()+ " Eintrage ");
lvFall.setItems(FXCollections.observableArrayList(faelle));
}catch (Exception e){
e.printStackTrace();
}
});

lvFall.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

fallController.fallPropertyProperty().bind(lvFall.getSelectionModel().selectedItemProperty());




lvFall.getSelectionModel().selectedItemProperty().addListener(onCaseChanged);
}



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;
}




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;
}

@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
private void clickedCreateFall(){
tabFallDiagnose.setDisable(true);
tabFallUntersuchungen.setDisable(true);
tabFallStationsHistorie.setDisable(true);
tabPaneFall.getSelectionModel().select(tabFallOverview);
patientTablesController.getPatientOverviewTabPane().setDisable(true);


fallController.createNewFall();
}

public void fallCreationComplete(){
tabFallDiagnose.setDisable(false);
tabFallUntersuchungen.setDisable(false);
tabFallStationsHistorie.setDisable(false);
patientTablesController.getPatientOverviewTabPane().setDisable(false);
}

public Mitarbeiter getCurrentMitarbeiter(){
return cmbUserChoose.getValue();
}

public ReadOnlyObjectProperty<Mitarbeiter> currentMitarbeiterProperty(){
return cmbUserChoose.valueProperty();
}

}

+ 56
- 33
src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java 查看文件

@@ -3,14 +3,19 @@ package de.uniluebeck.mi.projmi6.controller;
/**
* Created by 631806 on 12.11.15.
*/

import de.uniluebeck.mi.projmi6.db.DBHandler;
import de.uniluebeck.mi.projmi6.model.Kasse;
import de.uniluebeck.mi.projmi6.model.Patient;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.event.ActionEvent;
import javafx.stage.Stage;

import java.sql.SQLException;
import java.time.LocalDate;

public class PatientEditorController {

/**
@@ -40,6 +45,9 @@ public class PatientEditorController {
private TextField patNachname;

@FXML
private TextField patTelefonnummer;

@FXML
private TextField patStrasse;
@FXML
private TextField patHausnummer;
@@ -70,36 +78,33 @@ public class PatientEditorController {
private Button btnPatSave;


public PatientEditorController(MainController mainController) {
this.mainController = mainController;
}

@FXML
public void initialize(){
public void initialize() {
patGeschlecht.setItems(FXCollections.observableArrayList(Patient.Geschlecht.values()));
patFamilienstand.setItems(FXCollections.observableArrayList(Patient.Familienstand.values()));
patVersicherung.setItems(mainController.getKassen());
patVersicherung.setItems(mainController.getStammdaten().getKassen());
}

public PatientEditorController(MainController mainController){
this.mainController = mainController;
}





public void setPatient(Patient patient){
public void setPatient(Patient patient) {
this.patient = patient;
if(patient==null){
if (patient == null) {
clearFields();
}else {
} else {
copyPatientDataIntoFields();
}

}

private void copyPatientDataIntoFields(){
private void copyPatientDataIntoFields() {
patId.setText(Integer.toString(patient.getPatID()));
patGeburtsname.setText(patient.getGeburtsname());
patNachname.setText(patient.getNachname());
patVorname.setText(patient.getVorname());
patTelefonnummer.setText(patient.getTelefon());
patStrasse.setText(patient.getStrasse());
patHausnummer.setText(patient.getHausnummer());
patPlz.setText(patient.getPlz());
@@ -108,7 +113,12 @@ public class PatientEditorController {
patFamilienstand.setValue(patient.getFamilienstand());
patGeschlecht.setValue(patient.getGeschlecht());
patVersicherungsnummer.setText(patient.getVersichertennummer());
// patVersicherung.setValue(patient.getVersicherung()); TODO
for (Kasse kasse : patVersicherung.getItems()) {
if (kasse.getKassenID() == patient.getKassenID()) {
patVersicherung.getSelectionModel().select(kasse);
break;
}
}
patCave.setText(patient.getCave());

patCreator.setText(Integer.toString(patient.getErsteller()));
@@ -117,7 +127,7 @@ public class PatientEditorController {
patChangeTime.setText(patient.getBearbeitetDatumZeit().toString());
}

private void showMessage(String title, String message){
private void showMessage(String title, String message) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Ung\u00fcltige Daten!");
alert.setHeaderText(title);
@@ -126,11 +136,12 @@ public class PatientEditorController {
alert.showAndWait();
}

private void copyFieldDataIntoPatient(Patient patient){
private void copyFieldDataIntoPatient(Patient patient) {

patient.setGeburtsname(patGeburtsname.getText());
patient.setNachname(patNachname.getText());
patient.setVorname(patVorname.getText());
patient.setTelefon(patTelefonnummer.getText());
patient.setStrasse(patStrasse.getText());
patient.setHausnummer(patHausnummer.getText());
patient.setPlz(patPlz.getText());
@@ -139,13 +150,14 @@ public class PatientEditorController {
patient.setFamilienstand(patFamilienstand.getValue());
patient.setGeschlecht(patient.getGeschlecht());
patient.setVersichertennummer(patVersicherungsnummer.getText());
//patient.setVersicherung TODO
if (patVersicherung.getSelectionModel().getSelectedItem() != null)
patient.setKassenID(patVersicherung.getSelectionModel().getSelectedItem().getKassenID());
patient.setCave(patCave.getText());
}


private boolean validateData(){
if(!patPlz.getText().matches("[0-9]{5}")){
private boolean validateData() {
if (!patPlz.getText().matches("[0-9]{5}") && !(patPlz.getText().length() == 0)) {
showMessage("Die eingegebene PLZ ist ung\u00fcltig!",
"Postleitzahlen m\u00fcssen aus exakt 5 Ziffern bestehen!");
return false;
@@ -155,8 +167,8 @@ public class PatientEditorController {
}


private void clearFields(){
// TODO: Remove default values.
private void clearFields() {
patId.setText("<auto>");
patGeburtsname.setText("");
patNachname.setText("");
@@ -165,9 +177,10 @@ public class PatientEditorController {
patHausnummer.setText("");
patPlz.setText("");
patOrt.setText("");
patGeburtsdatum.setValue(null);
patFamilienstand.setValue(null);
patGeschlecht.setValue(null);
patTelefonnummer.setText("");
patGeburtsdatum.setValue(LocalDate.of(1900, 1, 1));
patFamilienstand.setValue(Patient.Familienstand.LEDIG);
patGeschlecht.setValue(Patient.Geschlecht.FEMALE);
patVersicherungsnummer.setText("");
patVersicherung.setValue(null);
patCave.setText("");
@@ -180,24 +193,34 @@ public class PatientEditorController {

@FXML
void clickedSave(ActionEvent event) {
if(!validateData()){
if (!validateData()) {
return;
}

if(patient==null){
if (patient == null) {
patient = new Patient();
copyFieldDataIntoPatient(patient);
//Create new db entry TODO
}else{
try {
DBHandler.setPatient(patient, mainController.getCurrentMitarbeiter().getMitarbID(), false);
mainController.getPatientTablesController().updatePatientsFromDb();
((Stage) patNachname.getScene().getWindow()).close();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
copyFieldDataIntoPatient(patient);
//Update db entry... TODO
try {
DBHandler.setPatient(patient, mainController.getCurrentMitarbeiter().getMitarbID(), true);
((Stage) patNachname.getScene().getWindow()).close();
} catch (SQLException e) {
e.printStackTrace();
}
}
((Stage)patNachname.getScene().getWindow()).close();
}

@FXML
void clickedAbort(ActionEvent event) {
((Stage)patVorname.getScene().getWindow()).close(); //Close Window
((Stage) patVorname.getScene().getWindow()).close(); //Close Window
}

}

+ 101
- 21
src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java 查看文件

@@ -3,6 +3,8 @@ package de.uniluebeck.mi.projmi6.controller;
/**
* Created by Johannes on 12.11.15.
*/
import ca.uhn.hl7v2.model.v251.segment.LOC;
import com.sun.org.apache.bcel.internal.generic.LoadClass;
import de.uniluebeck.mi.projmi6.db.DBHandler;
import de.uniluebeck.mi.projmi6.model.Patient;
import de.uniluebeck.mi.projmi6.model.Station;
@@ -14,6 +16,7 @@ import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
@@ -28,6 +31,8 @@ import java.io.IOException;
import java.rmi.server.ExportException;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
* Controller class.
@@ -91,25 +96,32 @@ public class PatientTablesController{
private TableView<StationsUebersichtsItem> tblStationOverview;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatPatId;
private TableColumn<StationsUebersichtsItem, Integer> colStatPatId;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatFullName;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatGebDatum;
private TableColumn<StationsUebersichtsItem, LocalDate> colStatGebDatum;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatAlter;
private TableColumn<StationsUebersichtsItem, Integer> colStatAlter;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatAufnahmedatum;
private TableColumn<StationsUebersichtsItem, LocalDate> colStatAufnahmedatum;

@FXML
private TableColumn<StationsUebersichtsItem, String> colStatEntlassungsdatum;
private TableColumn<StationsUebersichtsItem, LocalDate> colStatEntlassungsdatum;

@FXML
private Tab stationOverviewTab, patientOverviewTab;
private Tab stationOverviewTab;

public TabPane getPatientOverviewTabPane() {
return patientOverviewTabPane;
}

@FXML
private Tab patientOverviewTab;

@FXML
private TabPane patientOverviewTabPane;
@@ -120,6 +132,9 @@ public class PatientTablesController{
}





@FXML
public void initialize() {
btnPatEdit.disableProperty().bind(tblPatientOverview.getSelectionModel().selectedItemProperty().isNull());
@@ -136,14 +151,7 @@ public class PatientTablesController{
lblTablePatientEmpty.setText("Liste ist leer.");
lblTableStationEmpty.setText("Daten werden geladen...");

cmbStationenFilter.itemsProperty().bind(mainController.stationenProperty());

ObservableList<Patient> patientList = null;
try {
patientList = FXCollections.<Patient>observableArrayList(DBHandler.getAllPatients());
} catch (SQLException e) {
e.printStackTrace();
}
cmbStationenFilter.itemsProperty().bind(mainController.getStammdaten().stationenProperty());


patientObjectBinding = Bindings.<Patient>createObjectBinding(() ->{
@@ -154,10 +162,10 @@ public class PatientTablesController{
tblStationOverview.getSelectionModel().selectedItemProperty(),
patientOverviewTabPane.getSelectionModel().selectedItemProperty());

tblPatientOverview.setItems(patientList);

initColumnsPatient();
initColumnsStation();

updatePatientsFromDb();
}

private void initColumnsPatient(){
@@ -177,12 +185,24 @@ public class PatientTablesController{


private void initColumnsStation(){
colStatPatId.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patIdProperty().asString());
colStatPatId.setCellValueFactory(new PropertyValueFactory<StationsUebersichtsItem, Integer>("patId"));
colStatFullName.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patNameProperty());
colStatGebDatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patBirthdateProperty().asString());
colStatAlter.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patAgeProperty().asString());
colStatAufnahmedatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationAufnahmeProperty().asString());
colStatEntlassungsdatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationEntlassungProperty().asString());
colStatGebDatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patBirthdateProperty());
colStatAlter.setCellValueFactory(new PropertyValueFactory<StationsUebersichtsItem, Integer>("patAge"));
colStatAufnahmedatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationAufnahmeProperty());
colStatEntlassungsdatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationEntlassungProperty());


StationsUebersichtsItem stationsUebersichtsItem = new StationsUebersichtsItem();
stationsUebersichtsItem.setPatId(12212);
stationsUebersichtsItem.setFallId(1223);
stationsUebersichtsItem.setPatAge(80);
stationsUebersichtsItem.setPatBirthdate(LocalDate.of(1935, 9, 22));
stationsUebersichtsItem.setPatName("Wurst, Hans");
stationsUebersichtsItem.setStationAufnahme(LocalDate.of(1980, 8, 17));
stationsUebersichtsItem.setStationEntlassung(LocalDate.of(1981, 2, 1));

tblStationOverview.setItems(FXCollections.observableArrayList(stationsUebersichtsItem));
}

@FXML
@@ -224,6 +244,66 @@ public class PatientTablesController{
}


public void updatePatientsFromDb(){
if(this.loadPatientTask != null && this.loadPatientTask.isRunning()) {
System.out.println("Patienten werden bereits geladen.");
return;
}

btnPatRefresh.setDisable(true);

tblPatientOverview.setItems(null);

mainController.increaseParallelTaskCount();

lblTablePatientEmpty.setText("Liste wird geladen...");

Task<List<Patient>>loadPatientsTask = new Task<List<Patient>>(){

@Override
protected List<Patient> call() throws Exception {
return FXCollections.<Patient>observableArrayList(DBHandler.getAllPatients());
}

@Override
protected void succeeded() {
super.succeeded();
btnPatRefresh.setDisable(false);
lblTablePatientEmpty.setText("Liste ist leer.");
tblPatientOverview.setItems(FXCollections.observableArrayList(this.getValue()));
mainController.decreaseParallelTaskCount();
}

@Override
protected void failed() {
super.failed();
btnPatRefresh.setDisable(false);
lblTablePatientEmpty.setText("Laden fehlgeschlagen!");
mainController.decreaseParallelTaskCount();
tblPatientOverview.setItems(null);
if(getException()!=null){
getException().printStackTrace();
}
}
};
this.loadPatientTask = loadPatientsTask;

Thread thread = new Thread(loadPatientsTask);
thread.setDaemon(true);
thread.start();
}


private Task loadPatientTask = null;

@FXML
private Button btnPatRefresh;

@FXML
private void clickedRefreshPatient(){
updatePatientsFromDb();
}

private ObjectBinding<Patient> patientObjectBinding = null;

public ObjectBinding<Patient> selectedPatientProperty(){


+ 61
- 0
src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java 查看文件

@@ -1,5 +1,8 @@
package de.uniluebeck.mi.projmi6.controller;

import de.uniluebeck.mi.projmi6.model.Fall;
import de.uniluebeck.mi.projmi6.model.StationsHistorie;
import de.uniluebeck.mi.projmi6.model.Untersuchung;
import de.uniluebeck.mi.projmi6.view.DateTimePicker;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
@@ -11,6 +14,12 @@ import javafx.scene.control.TableView;
* Created by 631806 on 12.11.15.
*/
public class StationsHistorieController {

/**
* The station history that is shown in the edit window, or null if a new station history should be created.
*/
private StationsHistorie stationsHistorie = null;

private MainController mainController;

@FXML
@@ -47,5 +56,57 @@ public class StationsHistorieController {

}

public void setStationsHistorie(StationsHistorie stationsHistorie){
this.stationsHistorie = stationsHistorie;
if(stationsHistorie==null){
clearFields();
}else {
copyStationsHistorieDataIntoFields();
}

}

private void copyStationsHistorieDataIntoFields(){
// colStatHistAbteilung.setText(stationsHistorie.get());
// colStatHistStation.setText(stationsHistorie.getStation());
// colStatHistAufnahmeDatum.setDateTime(stationsHistorie.getAufnahmeDatum());
// colStatHistEntlassungsDatum.setDateTime(stationsHistorie.getEntlassungsDatum());
// dtTmAufnahme=setDateTime(stationsHistorie.getAufnahmeDatum());
// dtTmEntlassung=setDateTime(stationsHistorie.getEntlassungsDatum());

statHistCreator.setText(Integer.toString(stationsHistorie.getErsteller()));
statHistCreatTime.setText(stationsHistorie.getErstellDatumZeit().toString());
statHistEditor.setText(Integer.toString(stationsHistorie.getBearbeiter()));
statHistEditTime.setText(stationsHistorie.getBearbeitetDatumZeit().toString());
}

private void copyFieldDataIntoStationsHistorie(StationsHistorie stationsHistorie){
if(stationsHistorie==null){
clearFields();
return;
}

// stationsHistorie.set(colStatHistAbteilung.getText());
// stationsHistorie.setStation(colStatHistStation.getText());
// stationsHistorie.setAufnahmeDatum(colStatHistAufnahmeDatum.getDateTime());
// stationsHistorie.getEntlassungsDatum(colStatHistEntlassungsDatum.getDateTime());
stationsHistorie.setAufnahmeDatum(dtTmAufnahme.getDateTime());
// stationsHistorie.getEntlassungsDatum(dtTmEntlassung.getDateTime());

}

private void clearFields(){

//statHistCreateTime.setText("<auto>");
//statHistCreator.setText("<auto>");
//statHistEditTime.setText("<auto>");
// statHistEditor.setText("<auto>");

colStatHistAbteilung.setText("");
colStatHistStation.setText("");
// colStatHistAufnahmeDatum.setDateTime(null);
// colStatHistEntlassungsDatum.setDateTime(null);
dtTmAufnahme.setDateTime(null);
dtTmEntlassung.setDateTime(null);
}
}

+ 80
- 20
src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java 查看文件

@@ -5,20 +5,23 @@ package de.uniluebeck.mi.projmi6.controller;
*/

import de.uniluebeck.mi.projmi6.Main;
import de.uniluebeck.mi.projmi6.model.Mitarbeiter;
import de.uniluebeck.mi.projmi6.model.OpsCode;
import de.uniluebeck.mi.projmi6.model.Patient;
import de.uniluebeck.mi.projmi6.db.DBHandler;
import de.uniluebeck.mi.projmi6.model.*;
import de.uniluebeck.mi.projmi6.view.DateTimePicker;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;

import java.sql.SQLException;

public class UntersuchungenController {

/**
* The examination that is shown in the edit window, or null if a new examination should be created.
*/
// private Untersuchung untersuchung = null;
private Untersuchung untersuchung = null;


private MainController mainController;
@@ -49,7 +52,7 @@ public class UntersuchungenController {
private Label untsCreateTime;

@FXML
private ListView<?> untsList;
private ListView<Untersuchung> untsList;

@FXML
private ComboBox<OpsCode> untsOpsCode;
@@ -57,18 +60,36 @@ public class UntersuchungenController {
@FXML
private ComboBox<Mitarbeiter> untsArzt;

public ObservableList<Untersuchung> getUntersuchungen() {
return untersuchungen.get();
}

public SimpleObjectProperty<ObservableList<Untersuchung>> untersuchungenProperty() {
return untersuchungen;
}

public void setUntersuchungen(ObservableList<Untersuchung> untersuchungen) {
this.untersuchungen.set(untersuchungen);
}

private SimpleObjectProperty<ObservableList<Untersuchung>> untersuchungen = new SimpleObjectProperty<>();

public UntersuchungenController (MainController mainController){
this.mainController = mainController;
}

@FXML
public void initialize(){
untsOpsCode.itemsProperty().bind(mainController.opsCodesProperty());
untsOpsCode.itemsProperty().bind(mainController.getStammdaten().opsCodesProperty());
untsList.itemsProperty().bind(untersuchungen);
untsArzt.setItems(mainController.getStammdaten().getMitarbeiter());
}

@FXML
void clickedUntsCreate(ActionEvent event) {

clearFields();
untsArzt.getSelectionModel().select(mainController.getCurrentMitarbeiter());
untersuchung = null;
}

@FXML
@@ -78,9 +99,19 @@ public class UntersuchungenController {

@FXML
void clickedUntsSave(ActionEvent event) {

// TODO: Jopo: ???
if (untersuchung == null) {
untersuchung = new Untersuchung();
untersuchung.setFall(mainController.getFallController().getFall());
copyFieldDataIntoUntersuchung(untersuchung);
try {
DBHandler.setUntersuchung(untersuchung, mainController.getCurrentMitarbeiter().getMitarbID(), false);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/*
public void setUntersuchung(Untersuchung untersuchung){
this.untersuchung = untersuchung;
if(untersuchung==null){
@@ -89,18 +120,47 @@ public class UntersuchungenController {
copyUntersuchungDataIntoFields();
}

}*/
/*
}
private void copyUntersuchungDataIntoFields(){
untsList.setText(Integer.toString(patient.getPatID()));
untsOpsCode.setText(patient.getGeburtsname());
untsArzt.setText(patient.getNachname());

untsCreator.setText(Integer.toString(patient.getErsteller()));
untsCreateTime.setText(patient.getErstellDatumZeit().toString());
untsChanger.setText(Integer.toString(patient.getBearbeiter()));
untsChangeTime.setText(patient.getBearbeitetDatumZeit().toString());
}*/
// untsList.setText(Integer.toString(untersuchung.getUntersID()));
untsOpsCode.setValue(untersuchung.getOpscode());
untsArzt.setValue(untersuchung.getDurchfuehrenderArzt());
dtTmUntersuchungszeitpunkt.setDateTime(untersuchung.getUntersuchungsdatum());

untsCreator.setText(Integer.toString(untersuchung.getErsteller()));
untsCreateTime.setText(untersuchung.getErstellDatumZeit().toString());
untsChanger.setText(Integer.toString(untersuchung.getBearbeiter()));
untsChangeTime.setText(untersuchung.getBearbeitetDatumZeit().toString());
}

private void copyFieldDataIntoUntersuchung(Untersuchung untersuchung){

untersuchung.setOpscode(untsOpsCode.getValue());
untersuchung.setDurchfuehrenderArzt(untsArzt.getValue());
// untersuchung.set?(untsList.getValue());
untersuchung.setUntersuchungsdatum(dtTmUntersuchungszeitpunkt.getDateTime());

// untersCreateTime.setText(untersuchung.getErstellDatumZeit().toString());
// untersCreator.setText(Integer.toString(untersuchung.getErsteller()));
// untersEditTime.setText(untersuchung.getBearbeitetDatumZeit().toString());
// untersEditor.setText(Integer.toString(untersuchung.getBearbeiter()));
}

private void clearFields(){

//untersCreateTime.setText("<auto>");
//untersCreator.setText("<auto>");
//untersEditTime.setText("<auto>");
// untersEditor.setText("<auto>");

untsOpsCode.setValue(null);
untsArzt.setValue(null);
dtTmUntersuchungszeitpunkt.setDateTime(null);

}



}


+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/controller/package-info.java 查看文件

@@ -0,0 +1,4 @@
/**
* Controller Klassen
*/
package de.uniluebeck.mi.projmi6.controller;

+ 472
- 36
src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java 查看文件

@@ -2,32 +2,120 @@ package de.uniluebeck.mi.projmi6.db;

import de.uniluebeck.mi.projmi6.model.*;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
* Created by nils on 15.11.2015.
* Handler fuer alle DB Interaktionen.
*/
public class DBHandler {

private static final String SELECT_ALL_PATIENTS = "SELECT * FROM `patient`";
private static final String SELECT_PATIENT_BY_ID = "SELECT * FROM `patient` WHERE `id` = ?";
private static final String UPDATE_PATIENT = "UPDATE `patient` SET `CAVE`=?, `Familienstand`=?, " +
"`Geburtsdatum`=?, `Geburtsname`=?, `Geschlecht`=?, `KassenID`=?, `LetzterBearbeiter`=?, `Nachname`=?, " +
"`Ort`=?, `PLZ`=?, `Strasse`=?, `Telefon`=?, `Versichertennummer`=?, `Vorname`=? WHERE `ID`=?";
private static final String UPDATE_PATIENT = "UPDATE `patient`" +
"SET `CAVE`=?," +
"`Vorname`=?," +
"`Geburtsname`=?," +
"`Nachname`=?," +
"`Geburtsdatum`=?," +
"`Geschlecht`=?," +
"`Familienstand`=?," +
"`Strasse`=?," +
"`Hausnummer`=?," +
"`PLZ`=?," +
"`Ort`=?," +
"`Telefon`=?," +
"`KassenID`=?," +
"`Versichertennummer`=?," +
"`LetzterBearbeiter`=? " +
"WHERE `ID`=?";
private static final String INSERT_PATIENT = "INSERT INTO `patient`" +
"(`CAVE`," +
"`Vorname`," +
"`Geburtsname`," +
"`Nachname`," +
"`Geburtsdatum`," +
"`Geschlecht`," +
"`Familienstand`," +
"`Strasse`," +
"`Hausnummer`," +
"`PLZ`," +
"`Ort`," +
"`Telefon`," +
"`KassenID`," +
"`Versichertennummer`," +
"`LetzterBearbeiter`," +
"`Ersteller`)" +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
private static final String SELECT_ALL_STATIONEN = "SELECT * FROM `stammstation`";
private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?";
private static final String INSERT_FALL = "INSERT INTO `fall`" +
"(`Aufnahmedatum`," +
"`Entlassungsdatum`," +
"`Vorstelldatum`," +
"`EinweisenderArzt`," +
"`Fallart`," +
"`Selbsteinweisung`," +
"`Hauptdiagnose`," +
"`Versichertennummer`," +
"`KassenID`," +
"`storniert`," +
"`LetzterBearbeiter`," +
"`PatientID`," +
"`Ersteller`)" +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
private static final String UPDATE_FALL = "UPDATE `fall`" +
"SET `Aufnahmedatum`=?," +
"`Entlassungsdatum`=?," +
"`Vorstelldatum`=?," +
"`EinweisenderArzt`=?," +
"Fallart=?," +
"`Selbsteinweisung`=?," +
"Hauptdiagnose=?," +
"`Versichertennummer`=?," +
"KassenID=?," +
"`storniert`=?," +
"LetzterBearbeiter=? " +
"WHERE `FallID`=?";
private static final String SELECT_DIAGNOSE_BY_ID = "SELECT * FROM `diagnose` WHERE `diagid` = ?";
private static final String SELECT_ALL_ICD10CODES = "SELECT * FROM `stammicd10`";
private static final String SELECT_ALL_OPSCODES = "SELECT * FROM `stammops`";
private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = '?' AND `version` = ?";
private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = '?' AND `version` = ?";
private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = ? AND `version` = ?";
private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = ? AND `version` = ?";
private static final String SELECT_ALL_MITARBEITER = "SELECT * FROM `mitarbeiter`";

private static final String SELECT_UNTERS_BY_FALLID = "SELECT * FROM `untersuchung` WHERE `fallid` = ?";
private static final String INSERT_UNTERSUCHUNG = "INSERT INTO `untersuchung`" +
"(`DurchfuehrenderArzt`," +
"`FallID`," +
"`OPSCode`," +
"`OPSVersion`," +
"`storniert`," +
"`Untersuchungsdatum`," +
"`LetzterBearbeiter`," +
"`Ersteller`)" +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
private static final String UPDATE_UNTERSUCHUNG = "UPDATE `untersuchung`" +
"SET `DurchfuehrenderArzt`=?," +
"`FallID`=?," +
"`OPSCode`=?," +
"`OPSVersion`=?," +
"`storniert`=?," +
"`Untersuchundatum`=?" +
"`LetzterBearbeiter` " +
"WHERE `UnterID`=?";
private static final String SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?";
private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?";
private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`";
private static final String SELECT_KASSE_BY_KASSENID = "SELECT * FROM `kasse` WHERE `kasse`.`KassenID` = ?";
private static final String SELECT_STATHIST_BY_STATION = "SELECT * FROM `stationshistorie` WHERE `stationshistorie`.`Station` = ?";

/**
* Gibt alle {@link Patient} aus der DB zurueck.
*
* @return Liste aller {@link Patient}.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static List<Patient> getAllPatients() throws SQLException {
Statement statement = MySqlConnFactory.getConnection().createStatement();
ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS);
@@ -40,40 +128,100 @@ public class DBHandler {
return patients;
}

public static Patient getPatient(int id) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID);
ResultSet rs;
statement.setInt(1, id);
rs = statement.executeQuery();

return getPatient(rs);
}

/**
* Extrahiert ein Objekt {@link Patient} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Patient}
* @throws SQLException
*/
private static Patient getPatient(ResultSet rs) throws SQLException {
Patient patient = new Patient();
patient.setPatID(rs.getInt("id"));
patient.setGeburtsname(rs.getString("geburtsname"));
patient.setVorname(rs.getString("vorname"));
patient.setNachname(rs.getString("nachname"));
if (rs.getDate("geburtsdatum") != null)
if (rs.getDate("geburtsdatum") != null) {
patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate());
}

patient.setCave(rs.getString("cave"));

patient.setStrasse(rs.getString("strasse"));
patient.setHausnummer(rs.getString("hausnummer"));
patient.setPlz(rs.getString("plz"));
patient.setOrt(rs.getString("ort"));
patient.setTelefon(rs.getString("telefon"));
// patient.setFamilienstand(rs.getString("familienstand")); TODO
// patient.setGeschlecht(Patient.Geschlecht.valueOf(rs.getString("geschlecht"))); TODO
if (rs.getString("familienstand") != null) {
patient.setFamilienstand(Patient.Familienstand.parseChar(rs.getString("familienstand").charAt(0)));
}
if (rs.getString("geschlecht") != null) {
patient.setGeschlecht(Patient.Geschlecht.parseChar(rs.getString("geschlecht").charAt(0)));
}
patient.setVersichertennummer(rs.getString("versichertennummer"));
patient.setKassenID(rs.getInt("kassenid"));
setVersionInformation(patient, rs);
return patient;
}

public static void updatePatient(Patient patient) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT);
statement.setString(1, patient.getCave());
statement.setString(2, patient.getFamilienstand().toString());
// TODO
// TODO: Never used.
public static Patient getPatient(int id) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID);
ResultSet rs;
statement.setInt(1, id);
rs = statement.executeQuery();

return getPatient(rs);
}

/**
* Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
*
* @param patient zu verarbeitender Datensatz.
* @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
* @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static void setPatient(Patient patient, int mitarbid, boolean isUpdate) throws SQLException {
PreparedStatement statement;
if (isUpdate) {
statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT);
} else {
statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_PATIENT);
}

statement.setString(1, patient.getCave()); // CAVE
statement.setString(2, patient.getVorname()); // Vorname
statement.setString(3, patient.getGeburtsname()); // Geburtsname
statement.setString(4, patient.getNachname()); // Nachname

statement.setDate(5, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum
if (patient.getGeschlecht() != null) {
statement.setString(6, String.valueOf(patient.getGeschlecht().id())); // Geschlecht
} else {
statement.setString(6, String.valueOf(Patient.Geschlecht.OTHER.id()));
}
if (patient.getFamilienstand() != null) {
statement.setString(7, String.valueOf(patient.getFamilienstand().id()));// Familienstand
} else {
statement.setString(7, String.valueOf(Patient.Familienstand.LEDIG.id()));
}
statement.setString(8, patient.getStrasse()); // Strasse
statement.setString(9, patient.getHausnummer()); // Hausnummer
statement.setString(10, patient.getPlz()); // PLZ
statement.setString(11, patient.getOrt()); // Ort
statement.setString(12, patient.getTelefon()); // Telefon
statement.setInt(13, patient.getKassenID()); // KassenID
statement.setString(14, patient.getVersichertennummer()); // Versichertennummer
statement.setInt(15, mitarbid); // LetzterBearbeiter
if (!isUpdate) {
statement.setInt(16, mitarbid); // Ersteller
} else {
statement.setInt(16, patient.getPatID()); // PatID (WHERE)
}


statement.execute();
}

public static List<Station> getAllStationen() throws SQLException {
@@ -88,6 +236,13 @@ public class DBHandler {
return stationen;
}

/**
* Extrahiert ein Objekt {@link Station} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Station}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Station getStation(ResultSet rs) throws SQLException {
Station station = new Station();
station.setStation(rs.getString("station"));
@@ -98,6 +253,37 @@ public class DBHandler {
return station;
}

public static List<StationsHistorie> getStationsHistorieByStation(String station) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_STATHIST_BY_STATION);
statement.setString(1, station);
ResultSet rs = statement.executeQuery();

List<StationsHistorie> historie = new ArrayList<>();
while (rs.next()) {
historie.add(getStationsHistorie(rs));
}

return historie;
}

private static StationsHistorie getStationsHistorie(ResultSet rs) throws SQLException {
StationsHistorie hist = new StationsHistorie();

hist.setStatHistID(rs.getInt("stathistid"));
if (rs.getTimestamp("aufnahmedatum") != null) {
hist.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
}
if (rs.getTimestamp("entlassungsdatum") != null) {
hist.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
}

// TODO: Muss das jeweils das Objekt sein?
// hist.setFall(null);
// hist.setStation(null);

return hist;
}

public static List<Fall> getFaelleByPatID(int id) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID);
statement.setInt(1, id);
@@ -111,22 +297,115 @@ public class DBHandler {
return faelle;
}

/**
* Extrahiert ein Objekt {@link Fall} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Fall}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Fall getFall(ResultSet rs) throws SQLException {
Fall fall = new Fall();

fall.setFallID(rs.getInt("fallid"));
if (rs.getTimestamp("aufnahmedatum") != null)
if (rs.getTimestamp("aufnahmedatum") != null) {
fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
if (rs.getTimestamp("entlassungsdatum") != null)
}
if (rs.getTimestamp("entlassungsdatum") != null) {
fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
if (rs.getInt("hauptdiagnose") != 0)
}
if (rs.getInt("hauptdiagnose") != 0) {
fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall));
}
if (rs.getString("versichertennummer") != null) {
fall.setVersichertenNummer(rs.getString("versichertennummer"));
}
if (rs.getInt("kassenid") != 0) {
fall.setKasse(getKasse(rs.getInt("kassenid")));
}
fall.setFallArt(FallArt.parseString(rs.getString("fallart")));

return fall;
}

private static Diagnose getDiagnose(int hauptdiagnose, Fall fall) throws SQLException {
Diagnose diagnose = getDiagnose(hauptdiagnose);
/**
* Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
*
* @param fall zu verarbeitender Datensatz.
* @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
* @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static void setFall(Fall fall, int mitarbid, boolean isUpdate) throws SQLException {
PreparedStatement statement;
if (isUpdate) {
statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_FALL);
} else {
statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL);
}

if (fall.getAufnahmeDatum() != null) {
statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum
} else {
statement.setTimestamp(1, null);
}
if (fall.getEntlassungsDatum() != null) {
statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum
} else {
statement.setTimestamp(2, null);
}
if (fall.getVorstellDatum() != null) {
statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum
} else {
statement.setTimestamp(3, null);
}
if (fall.getEinweisenderArzt() != null) {
statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt
} else {
statement.setTimestamp(4, null);
}
if (fall.getFallArt() != null) {
statement.setString(5, fall.getFallArt().id()); // Fallart
} else {
statement.setString(5, null);
}
statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung
if (fall.getHauptDiagnose() != null) {
statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose
} else {
statement.setTimestamp(7, null);
}
statement.setString(8, fall.getVersichertenNummer()); // Versichertennummer
if (fall.getKasse() != null) {
statement.setInt(9, fall.getKasse().getKassenID()); // KassenID
} else {
statement.setTimestamp(9, null);
}
statement.setBoolean(10, fall.getStorniert()); // storniert
statement.setInt(11, mitarbid); // Letzter Bearbeiter
if (!isUpdate) {
statement.setInt(12, fall.getPatient().getPatID()); // PatientID
statement.setInt(13, mitarbid); // Ersteller
}
if (isUpdate) {
statement.setInt(12, fall.getFallID());
}

statement.execute();
}

/**
* Fuehrt {@code INSERT} eines neuen Datensatz durch.
* @param fall zu verarbeitender Datensatz.
* @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static void setFall(Fall fall, int mitarbid) throws SQLException {
setFall(fall, mitarbid, false);
}

private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException {
Diagnose diagnose = getDiagnose(diagid);
diagnose.setFall(fall);

return diagnose;
@@ -134,11 +413,20 @@ public class DBHandler {

private static Diagnose getDiagnose(int id) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID);
statement.setInt(1, id);
ResultSet rs = statement.executeQuery();

rs.next(); // TODO
return getDiagnose(rs);
}

/**
* Extrahiert ein Objekt {@link Diagnose} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Diagnose}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Diagnose getDiagnose(ResultSet rs) throws SQLException {
Diagnose diagnose = new Diagnose();

@@ -152,11 +440,13 @@ public class DBHandler {

private static void setVersionInformation(Version version, ResultSet rs) throws SQLException {
version.setErsteller(rs.getInt("ersteller"));
if (rs.getTimestamp("erstelldatum") != null)
if (rs.getTimestamp("erstelldatum") != null) {
version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime());
}
version.setBearbeiter(rs.getInt("letzterbearbeiter"));
if (rs.getTimestamp("letztesbearbeitungsdatum") != null)
if (rs.getTimestamp("letztesbearbeitungsdatum") != null) {
version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime());
}
}

public static List<Icd10Code> getAllIcd10Codes() throws SQLException {
@@ -178,9 +468,17 @@ public class DBHandler {
statement.setInt(2, version);
rs = statement.executeQuery();

rs.next(); // TODO
return getIcd10Code(rs);
}

/**
* Extrahiert ein Objekt {@link Icd10Code} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Icd10Code}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException {
String code = rs.getString("icd10code");
String text = rs.getString("text");
@@ -201,16 +499,24 @@ public class DBHandler {
return opscodes;
}

public static OpsCode getOpsCode(String code, int version) throws SQLException {
private static OpsCode getOpsCode(String code, int version) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID);
ResultSet rs;
statement.setString(1, code);
statement.setInt(2, version);
rs = statement.executeQuery();

rs.next(); // TODO
return getOpsCode(rs);
}

/**
* Extrahiert ein Objekt {@link OpsCode} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link OpsCode}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static OpsCode getOpsCode(ResultSet rs) throws SQLException {
String code = rs.getString("opscode");
String text = rs.getString("text");
@@ -231,6 +537,23 @@ public class DBHandler {
return mitarbeiters;
}

private static Mitarbeiter getMitarbeiter(int id) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID);
ResultSet rs;
statement.setInt(1, id);
rs = statement.executeQuery();

rs.next(); // TODO
return getMitarbeiter(rs);
}

/**
* Extrahiert ein Objekt {@link Mitarbeiter} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Mitarbeiter}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException {
Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid"));
mitarbeiter.setTitel(rs.getString("titel"));
@@ -239,4 +562,117 @@ public class DBHandler {
mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt"));
return mitarbeiter;
}

/**
* Gibt gibt alle {@link Untersuchung} zu einem {@link Fall} aus.
*
* @param fall Parent {@link Fall}
* @return Liste aller {@link Untersuchung} zu einem {@link Fall}.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static List<Untersuchung> getUntersuchungByFall(Fall fall) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID);
statement.setInt(1, fall.getFallID());
ResultSet rs = statement.executeQuery();

List<Untersuchung> untersuchungen = new ArrayList<>();
while (rs.next()) {
untersuchungen.add(getUntersuchung(rs, fall));
}

return untersuchungen;
}

private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException {
Untersuchung untersuchung = new Untersuchung();
untersuchung.setUntersID(rs.getInt("untersid"));
untersuchung.setFall(fall);
untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt")));
untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime());
untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion")));
setVersionInformation(untersuchung, rs);
return untersuchung;
}


/**
* Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
*
* @param untersuchung zu verarbeitender Datensatz.
* @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
* @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
public static void setUntersuchung(Untersuchung untersuchung, int mitarbid, boolean isUpdate) throws SQLException {
PreparedStatement statement;
if (isUpdate) {
statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_UNTERSUCHUNG);
} else {
statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_UNTERSUCHUNG);
}

statement.setInt(1, untersuchung.getDurchfuehrenderArzt().getMitarbID()); // DurchfuehrenderArzt
statement.setInt(2, untersuchung.getFall().getFallID()); // FallID
statement.setString(3, untersuchung.getOpscode().getOpsCode()); // OPSCode
statement.setInt(4, untersuchung.getOpscode().getVersion()); // OPSVersion
statement.setBoolean(5, untersuchung.getStorniert()); // storniert
statement.setTimestamp(6, Timestamp.valueOf(untersuchung.getUntersuchungsdatum())); // Untersuchungsdatum
statement.setInt(7, mitarbid); // Letzter Bearbeiter
if (!isUpdate) {
statement.setInt(8, mitarbid); // Ersteller
}

statement.execute();
}

public static List<Diagnose> getDiagnosenByFall(Fall fall) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID);
statement.setInt(1, fall.getFallID());
ResultSet rs = statement.executeQuery();

List<Diagnose> diagnosen = new ArrayList<>();
while (rs.next()) {
diagnosen.add(getDiagnose(rs.getInt("diagid"), fall));
}

return diagnosen;
}

public static List<Kasse> getAllKassen() throws SQLException {
Statement statement = MySqlConnFactory.getConnection().createStatement();
ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN);

List<Kasse> kassen = new ArrayList<>();
while (rs.next()) {
kassen.add(getKasse(rs));
}

return kassen;
}

private static Kasse getKasse(int kassenid) throws SQLException {
PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_KASSE_BY_KASSENID);
statement.setInt(1, kassenid);
ResultSet rs = statement.executeQuery();

rs.next(); // TODO
return getKasse(rs);
}

/**
* Extrahiert ein Objekt {@link Kasse} aus einem gegebenen {@link ResultSet}.
*
* @param rs ResultSet from Database Query.
* @return {@link Kasse}
* @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
*/
private static Kasse getKasse(ResultSet rs) throws SQLException {
Kasse kasse = new Kasse();
kasse.setKassenID(rs.getInt("kassenid"));
kasse.setName(rs.getString("name"));
kasse.setAdresse(rs.getString("adresse"));
kasse.setPrivat(rs.getBoolean("privat"));
setVersionInformation(kasse, rs);
return kasse;
}
}

+ 7
- 7
src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java 查看文件

@@ -5,14 +5,14 @@ import java.sql.DriverManager;
import java.sql.SQLException;

/**
* Created by nils on 15.11.2015.
* MySQL Connection Factory.
*/
public class MySqlConnFactory {
private static MySqlConnFactory instance = new MySqlConnFactory();
public static final String URL = "jdbc:mysql://127.0.0.1:3306/pmiw15g06_v01";
public static final String URL = "jdbc:mysql://141.83.20.84:3306/pmiw15g06_v01";
public static final String USER = "pmiw15g06";
public static final String PASS = "AX3yQSYJSH43PrSz";
public static final String DRIVER = "com.mysql.jdbc.Driver";
private static MySqlConnFactory instance = new MySqlConnFactory();

private MySqlConnFactory() {
try {
@@ -22,6 +22,10 @@ public class MySqlConnFactory {
}
}

protected static Connection getConnection() {
return instance.createConnection();
}

private Connection createConnection() {
Connection conn = null;
try {
@@ -31,8 +35,4 @@ public class MySqlConnFactory {
}
return conn;
}

public static Connection getConnection() {
return instance.createConnection();
}
}

+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/db/package-info.java 查看文件

@@ -0,0 +1,4 @@
/**
* Klassen fuer DB Zugriff.
*/
package de.uniluebeck.mi.projmi6.db;

+ 13
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java 查看文件

@@ -8,11 +8,19 @@ import javafx.beans.property.SimpleStringProperty;
public class Diagnose extends Version {
private Fall fall;
//ICDCODE
private int diagID;
private Icd10Code icd10code;
private Mitarbeiter arzt;
private SimpleStringProperty freiText = new SimpleStringProperty(this, "freiText");
private DiagArt diagArt;

public int getDiagID() {
return diagID;
}

public void setDiagID(int diagID) {
this.diagID = diagID;
}

public Fall getFall() {
return fall;
@@ -34,6 +42,11 @@ public class Diagnose extends Version {
return freiText.get();
}

@Override
public String toString() {
return icd10code+"";
}

public SimpleStringProperty freiTextProperty() {
return freiText;
}


+ 6
- 2
src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java 查看文件

@@ -94,13 +94,17 @@ public class Fall extends Version {
this.einweisenderArzt = einweisenderArzt;
}

public Enum<FallArt> getFallArt() {
public FallArt getFallArt() {
return fallArt;
}

@Override
public String toString() {
return Integer.toString(getFallID());
if(getAufnahmeDatum()!=null){
return getAufnahmeDatum().toLocalDate().toString();
}else{
return Integer.toString(getFallID());
}
}

public void setFallArt(FallArt fallArt) {


+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java 查看文件

@@ -27,6 +27,10 @@ public enum FallArt {
}
}

public String id() {
return id;
}

@Override
public String toString() {
return fallArt;


+ 1
- 1
src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java 查看文件

@@ -6,7 +6,7 @@ import javafx.beans.property.SimpleStringProperty;
/**
* Created by 627933 on 12.11.15.
*/
public class Kasse {
public class Kasse extends Version {
private SimpleStringProperty adresse = new SimpleStringProperty(this, "adresse");
private SimpleIntegerProperty kassenID = new SimpleIntegerProperty(this, "kassenID");
private SimpleStringProperty name = new SimpleStringProperty(this, "name");


+ 8
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java 查看文件

@@ -238,6 +238,10 @@ public class Patient extends Version {
public String toString() {
return geschlecht;
}

public char id() {
return id;
}
}

public enum Familienstand {
@@ -270,6 +274,10 @@ public class Patient extends Version {
}
}

public char id() {
return id;
}

@Override
public String toString() {
return familienstand;


+ 76
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/Stammdaten.java 查看文件

@@ -0,0 +1,76 @@
package de.uniluebeck.mi.projmi6.model;

import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.ObservableList;

/**
* Created by Johannes on 15/11/2015.
*/
public class Stammdaten {
private SimpleObjectProperty<ObservableList<OpsCode>> opsCodes = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Icd10Code>> icd10Codes = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Mitarbeiter>> mitarbeiter = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Kasse>> kassen = new SimpleObjectProperty<>();
private SimpleObjectProperty<ObservableList<Station>> stationen = new SimpleObjectProperty<>();

public ObservableList<OpsCode> getOpsCodes() {
return opsCodes.get();
}

public SimpleObjectProperty<ObservableList<OpsCode>> opsCodesProperty() {
return opsCodes;
}

public void setOpsCodes(ObservableList<OpsCode> opsCodes){
this.opsCodesProperty().set(opsCodes);
}

public ObservableList<Icd10Code> getIcd10Codes() {
return icd10Codes.get();
}

public SimpleObjectProperty<ObservableList<Icd10Code>> icd10CodesProperty() {
return icd10Codes;
}

public void setIcd10Codes(ObservableList<Icd10Code> icd10Codes) {
this.icd10Codes.set(icd10Codes);
}

public ObservableList<Station> getStationen() {
return stationen.get();
}

public SimpleObjectProperty<ObservableList<Station>> stationenProperty() {
return stationen;
}

public void setStationen(ObservableList<Station> stationen) {
this.stationen.set(stationen);
}

public ObservableList<Mitarbeiter> getMitarbeiter() {
return mitarbeiter.get();
}

public SimpleObjectProperty<ObservableList<Mitarbeiter>> mitarbeiterProperty() {
return mitarbeiter;
}

public void setMitarbeiter(ObservableList<Mitarbeiter> mitarbeiter) {
this.mitarbeiter.set(mitarbeiter);
}

public ObservableList<Kasse> getKassen() {
return kassen.get();
}

public SimpleObjectProperty<ObservableList<Kasse>> kassenProperty() {
return kassen;
}

public void setKassen(ObservableList<Kasse> kassen) {
this.kassen.set(kassen);
}

}

+ 5
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java 查看文件

@@ -62,6 +62,11 @@ public class Untersuchung extends Version {
return untersuchungsdatum;
}

@Override
public String toString() {
return getUntersuchungsdatum()+": "+getOpscode().getText();
}

public void setUntersuchungsdatum(LocalDateTime untersuchungsdatum) {
this.untersuchungsdatum.set(untersuchungsdatum);
}


+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/model/package-info.java 查看文件

@@ -0,0 +1,4 @@
/**
* Model Klassen.
*/
package de.uniluebeck.mi.projmi6.model;

+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/package-info.java 查看文件

@@ -0,0 +1,4 @@
/**
* Projekt MI - Gruppe 6 - KIS
*/
package de.uniluebeck.mi.projmi6;

+ 12
- 3
src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java 查看文件

@@ -94,9 +94,12 @@ public class DateTimePicker extends HBox {
btnNow.setOnAction(event -> setToCurrentDateTime());
//Make it large enough to read the text
btnNow.setMinWidth(50);
btnNow.getStyleClass().add("now-button");

//Add the subcomponents to the view.
this.getChildren().addAll(datePicker,timePicker,btnNow);


this.setSpacing(5);
}

@@ -108,9 +111,15 @@ public class DateTimePicker extends HBox {
* @param localDateTime The date to be set in the view.
*/
public void setDateTime(LocalDateTime localDateTime){
hourText.setText(Integer.toString(localDateTime.getHour()));
minuteText.setText(Integer.toString(localDateTime.getMinute()));
datePicker.setValue(LocalDate.from(localDateTime));
if(localDateTime==null){
hourText.setText("");
minuteText.setText("");
datePicker.setValue(null);
}else{
hourText.setText(Integer.toString(localDateTime.getHour()));
minuteText.setText(Integer.toString(localDateTime.getMinute()));
datePicker.setValue(LocalDate.from(localDateTime));
}
}

/**


+ 4
- 0
src/main/java/de/uniluebeck/mi/projmi6/view/package-info.java 查看文件

@@ -0,0 +1,4 @@
/**
* View Klassen.
*/
package de.uniluebeck.mi.projmi6.view;

+ 1
- 1
src/main/resources/diagnose.fxml 查看文件

@@ -17,7 +17,7 @@
<Button fx:id="btnDiagCreate" mnemonicParsing="false" onAction="#clickedDiagCreate" text="Neue Diagnose erstellen" />
</items>
</ToolBar>
<ListView prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
<ListView prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" fx:id="diagnoseList"/>
</children>
</VBox>
<VBox>


+ 1
- 1
src/main/resources/fall.fxml 查看文件

@@ -10,7 +10,7 @@
<?import de.uniluebeck.mi.projmi6.view.DateTimePicker?>
<VBox fx:controller="de.uniluebeck.mi.projmi6.controller.FallController" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<GridPane vgap="5.0" fx:id="fallFields">
<GridPane vgap="5.0" fx:id="fallFields" id="fallFields">
<children>
<Label text="Patient:"/>
<Label fx:id="fallPatID" text="John Doe (PatID = XXX)" GridPane.columnIndex="1"/>


+ 3
- 1
src/main/resources/main.fxml 查看文件

@@ -27,7 +27,9 @@
<Button fx:id="btnFallCreate" text="Neuen _Fall erstellen" onAction="#clickedCreateFall"/>
</items>
</ToolBar>
<ListView VBox.vgrow="ALWAYS" fx:id="lvFall" />
<ListView VBox.vgrow="ALWAYS" fx:id="lvFall" >
<placeholder><Label fx:id="lvFallPlaceholder" /></placeholder>
</ListView>
</children>
</VBox>
<TabPane fx:id="tabPaneFall" prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE">


+ 46
- 36
src/main/resources/patient_edit.fxml 查看文件

@@ -1,23 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<?import java.net.URL?>
<VBox fx:controller="de.uniluebeck.mi.projmi6.controller.PatientEditorController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="633.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="633.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.uniluebeck.mi.projmi6.controller.PatientEditorController">
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="35.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
@@ -29,49 +28,60 @@
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="1.7976931348623157E308" minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="PatID:" />
<Label fx:id="patId" text="xxxx" GridPane.columnIndex="1" />

<Label text="Vorname:" GridPane.rowIndex="1" />
<TextField fx:id="patVorname" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField fx:id="patVorname" promptText="Vorname" GridPane.columnIndex="1" GridPane.rowIndex="1" />

<Label text="Geburtsname:" GridPane.rowIndex="2" />
<TextField fx:id="patGeburtsname" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<TextField fx:id="patGeburtsname" promptText="Geburtsname" GridPane.columnIndex="1" GridPane.rowIndex="2" />

<Label text="Nachname:" GridPane.rowIndex="3" />
<TextField fx:id="patNachname" GridPane.columnIndex="1" GridPane.rowIndex="3" />
<TextField fx:id="patNachname" promptText="Nachname" GridPane.columnIndex="1" GridPane.rowIndex="3" />

<Label text="Straße:" GridPane.rowIndex="4" />
<TextField fx:id="patStrasse" GridPane.columnIndex="1" GridPane.rowIndex="4" />
<Label text="Straße / Hausnummer:" GridPane.rowIndex="4" />
<HBox alignment="CENTER_RIGHT" spacing="5.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
<children>
<TextField fx:id="patStrasse" promptText="Straße" GridPane.columnIndex="1" GridPane.rowIndex="4" HBox.hgrow="ALWAYS" />
<TextField fx:id="patHausnummer" promptText="Hausnummer" HBox.hgrow="SOMETIMES" />
</children>
</HBox>

<Label text="Hausnummer:" GridPane.rowIndex="5" />
<TextField fx:id="patHausnummer" GridPane.columnIndex="1" GridPane.rowIndex="5" />
<Label text="PLZ / Ort:" GridPane.rowIndex="5" />
<HBox alignment="CENTER_RIGHT" spacing="5.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
<children>
<TextField fx:id="patPlz" promptText="PLZ" GridPane.columnIndex="1" GridPane.rowIndex="6" HBox.hgrow="SOMETIMES" />
<TextField fx:id="patOrt" promptText="Ort" HBox.hgrow="ALWAYS" />
</children>
</HBox>

<Label text="PLZ:" GridPane.rowIndex="6" />
<TextField fx:id="patPlz" GridPane.columnIndex="1" GridPane.rowIndex="6" />
<Label text="Telefonnummer:" GridPane.rowIndex="6" />
<TextField fx:id="patTelefonnummer" promptText="Telefonnummer" GridPane.columnIndex="1" GridPane.rowIndex="6" />

<Label text="Ort:" GridPane.rowIndex="7" />
<TextField fx:id="patOrt" GridPane.columnIndex="1" GridPane.rowIndex="7" />

<Label text="Geburtsdatum:" GridPane.rowIndex="8" />
<DatePicker fx:id="patGeburtsdatum" GridPane.columnIndex="1" GridPane.rowIndex="8" />
<Label text="Geburtsdatum:" GridPane.rowIndex="7" />
<DatePicker fx:id="patGeburtsdatum" promptText="Geburtsdatum" GridPane.columnIndex="1" GridPane.rowIndex="7" />
<Label text="Familienstand:" GridPane.rowIndex="9" />
<ComboBox fx:id="patFamilienstand" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="9" />
<Label text="Familienstand:" GridPane.rowIndex="8" />
<ComboBox fx:id="patFamilienstand" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="8" />

<Label text="Geschlecht:" GridPane.rowIndex="10" />
<ComboBox fx:id="patGeschlecht" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="10" />
<Label text="Geschlecht:" GridPane.rowIndex="9" />
<ComboBox fx:id="patGeschlecht" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="9" />
<Label text="Versicherungsnummer:" GridPane.rowIndex="11" />
<TextField fx:id="patVersicherungsnummer" GridPane.columnIndex="1" GridPane.rowIndex="11" />
<Label text="Versicherungsnummer:" GridPane.rowIndex="10" />
<TextField fx:id="patVersicherungsnummer" promptText="Versicherungsnummer" GridPane.columnIndex="1" GridPane.rowIndex="10" />
<Label text="Versicherung:" GridPane.rowIndex="12" />
<ComboBox fx:id="patVersicherung" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="12" />
<Label text="Versicherung:" GridPane.rowIndex="11" />
<ComboBox fx:id="patVersicherung" prefWidth="225.0" GridPane.columnIndex="1" GridPane.rowIndex="11" />

<Label text="CAVE:" GridPane.rowIndex="13" />
<TextArea fx:id="patCave" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="13" />
<Label text="CAVE:" GridPane.rowIndex="12" />
<TextArea fx:id="patCave" maxHeight="100.0" prefHeight="56.0" prefWidth="383.0" promptText="CAVE" GridPane.columnIndex="1" GridPane.rowIndex="12">
<GridPane.margin>
<Insets top="5.0" />
</GridPane.margin></TextArea>
</children>
<VBox.margin>
@@ -105,8 +115,8 @@
<children>
<Label styleClass="ersteller-label" text="Ersteller: " GridPane.rowIndex="0" />
<Label styleClass="ersteller-label" text="Erstelldatum:" GridPane.rowIndex="1" />
<Label styleClass="ersteller-value" fx:id="patCreator" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label styleClass="ersteller-value" fx:id="patCreateTime" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label fx:id="patCreator" styleClass="ersteller-value" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label fx:id="patCreateTime" styleClass="ersteller-value" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="50.0" />
@@ -123,19 +133,19 @@
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label styleClass="ersteller-label" text="Letzter Bearbeiter:" GridPane.rowIndex="0" />
<Label styleClass="ersteller-label" text="Letzte Änderung:" GridPane.rowIndex="1" />
<Label styleClass="ersteller-value" fx:id="patChanger" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label styleClass="ersteller-value" fx:id="patChangeTime" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label fx:id="patChanger" styleClass="ersteller-value" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label fx:id="patChangeTime" styleClass="ersteller-value" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
</GridPane>
</children>
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</GridPane>
</children>


+ 2
- 0
src/main/resources/patient_tables.fxml 查看文件

@@ -17,6 +17,8 @@
<items>
<Button fx:id="btnPatCreate" text="Neuen _Patient erstellen" onAction="#clickedCreatePatient" />
<Button fx:id="btnPatEdit" text="Patient _bearbeiten" onAction="#clickedEditPatient"/>
<Pane HBox.hgrow="ALWAYS" />
<Button fx:id="btnPatRefresh" text="Liste aktualisieren" onAction="#clickedRefreshPatient"/>
</items>
</ToolBar>
<TableView fx:id="tblPatientOverview" editable="true" tableMenuButtonVisible="true" VBox.vgrow="ALWAYS">


+ 41
- 1
src/main/resources/style.css 查看文件

@@ -4,4 +4,44 @@

.ersteller-value {
/* -fx-text-fill: red; */
}
}

DateTimePicker .text-field{
-fx-background-color:transparent;
}


#fallFields:disabled{
-fx-opacity: 1;
}

#fallFields:disabled HBox {
-fx-opacity: 1;
}

#fallFields:disabled .text-field{
-fx-text-fill: black;
-fx-background-color: transparent;
-fx-opacity: 1;
}
#fallFields:disabled Label{
-fx-opacity: 1;
}
#fallFields:disabled ComboBox{
-fx-opacity: 1;
-fx-background-color: transparent;
}
#fallFields:disabled .arrow-button{
-fx-opacity: 0;
}
#fallFields:disabled .arrow{
-fx-opacity: 0;
}
#fallFields:disabled .date-picker {
-fx-opacity: 1;
-fx-background-color: transparent;
}
#fallFields:disabled .now-button {
visibility: hidden;
}


Loading…
取消
儲存