Im Rahmen der Veranstaltung "CS3330 - Projektpraktikum MedizinischeInformatik" an der Universität zu Lübeck entstandenes Krankenhausinformationssystem (KIS).
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

173 行
5.4 KiB

  1. package de.uniluebeck.mi.projmi6;
  2. import ca.uhn.hl7v2.model.v251.message.ADT_A01;
  3. import ca.uhn.hl7v2.model.v251.message.BAR_P05;
  4. import de.uniluebeck.mi.projmi6.controller.MainController;
  5. import de.uniluebeck.mi.projmi6.db.DBHandler;
  6. import de.uniluebeck.mi.projmi6.hapi.HL7Receiver;
  7. import de.uniluebeck.mi.projmi6.hapi.HL7Server;
  8. import javafx.application.Application;
  9. import javafx.beans.property.ReadOnlyStringProperty;
  10. import javafx.collections.FXCollections;
  11. import javafx.concurrent.Task;
  12. import javafx.fxml.FXMLLoader;
  13. import javafx.geometry.Insets;
  14. import javafx.geometry.Pos;
  15. import javafx.scene.Parent;
  16. import javafx.scene.Scene;
  17. import javafx.scene.image.Image;
  18. import javafx.scene.image.ImageView;
  19. import javafx.scene.layout.Background;
  20. import javafx.scene.layout.BackgroundFill;
  21. import javafx.scene.layout.CornerRadii;
  22. import javafx.scene.layout.VBox;
  23. import javafx.scene.paint.Paint;
  24. import javafx.scene.text.Font;
  25. import javafx.scene.text.Text;
  26. import javafx.stage.Stage;
  27. import javafx.stage.StageStyle;
  28. public class Main extends Application {
  29. public static String OPS_IP = "127.0.0.1";
  30. public static int OPS_PORT = 1112;
  31. private HL7Server server;
  32. /**
  33. * Cuz building the GUI from FXML is a bit costly,
  34. * it's done from its own thread.
  35. */
  36. private Task<Parent> loadMainWindowTask = new Task<Parent>() {
  37. @Override
  38. protected Parent call() throws Exception {
  39. MainController mainController = new MainController();
  40. updateMessage("Lade OPS-Codes...");
  41. mainController.getStammdaten().setOpsCodes(FXCollections.observableArrayList(
  42. DBHandler.getAllOpsCodes()
  43. ));
  44. updateMessage("Lade ICD-10-Codes...");
  45. mainController.getStammdaten().setIcd10Codes(FXCollections.observableArrayList(
  46. DBHandler.getAllIcd10Codes()
  47. ));
  48. updateMessage("Lade Krankenkassen...");
  49. mainController.getStammdaten().setKassen(FXCollections.observableArrayList(
  50. DBHandler.getAllKassen()
  51. ));
  52. updateMessage("Lade Mitarbeiter...");
  53. mainController.getStammdaten().setMitarbeiter(FXCollections.observableArrayList(
  54. DBHandler.getAllMitarbeiter()
  55. ));
  56. updateMessage("Lade Stationen...");
  57. mainController.getStammdaten().setStationen(FXCollections.observableArrayList(
  58. DBHandler.getAllStationen())
  59. );
  60. updateMessage("Lade GUI...");
  61. FXMLLoader fxmlLoader = new FXMLLoader();
  62. fxmlLoader.setLocation(getClass().getClassLoader().getResource("main.fxml"));
  63. fxmlLoader.setControllerFactory(mainController.getControllerFactory());
  64. Parent root = fxmlLoader.load();
  65. server = new HL7Server();
  66. server.registerApplication("ADT", "A01", new HL7Receiver<>(ADT_A01.class, mainController)); // ADT_A01 parsen
  67. server.registerApplication("BAR", "P05", new HL7Receiver<>(BAR_P05.class, mainController)); // BAR_P05 parsen
  68. server.start();
  69. return root;
  70. }
  71. };
  72. /**
  73. * The applications logo (an owl).
  74. */
  75. private Image icon = new Image("icon.png", true);
  76. /**
  77. * Applications entry point.
  78. *
  79. * @param args Commandline parameters
  80. */
  81. public static void main(String[] args) {
  82. launch(args);
  83. }
  84. @Override
  85. public void stop() throws Exception {
  86. if (server != null) {
  87. server.stop();
  88. server.shutdown();
  89. }
  90. super.stop();
  91. }
  92. @Override
  93. public void start(Stage primaryStage) {
  94. // TODO: Jojo kann das weg?
  95. // System.out.println(getClass().getClassLoader().getResource("").toExternalForm());
  96. primaryStage.getIcons().add(icon);
  97. Stage loadingMessage = createLoadWindow(loadMainWindowTask.messageProperty());
  98. loadMainWindowTask.setOnFailed(event -> {
  99. loadMainWindowTask.getException().printStackTrace();
  100. loadingMessage.close();
  101. });
  102. loadMainWindowTask.setOnSucceeded(event -> {
  103. Parent root = loadMainWindowTask.getValue();
  104. loadingMessage.close();
  105. primaryStage.setTitle("KIS Gruppe 06");
  106. primaryStage.setScene(new Scene(root, 1200, 800));
  107. primaryStage.show();
  108. });
  109. Thread thread = new Thread(loadMainWindowTask);
  110. thread.setDaemon(true);
  111. thread.start();
  112. }
  113. /**
  114. * Creates a small, undecorated stage for
  115. * showing a splash-screen to the user.
  116. *
  117. * @return the splash screen
  118. */
  119. public Stage createLoadWindow(ReadOnlyStringProperty progressMessage) {
  120. Text kis = new Text("KIS");
  121. kis.setFont(Font.font(50));
  122. Text gruppe6 = new Text("Gruppe 06");
  123. gruppe6.setFont(Font.font(20));
  124. Text progress = new Text();
  125. progress.textProperty().bind(progressMessage);
  126. VBox root = new VBox(gruppe6, new ImageView(icon), kis, progress);
  127. root.setSpacing(20);
  128. root.setAlignment(Pos.CENTER);
  129. Scene scene = new Scene(root, 400, 500);
  130. Stage stage = new Stage(StageStyle.UNDECORATED);
  131. stage.getIcons().add(icon);
  132. root.setBackground(new Background(new BackgroundFill(Paint.valueOf("#0093D1"), CornerRadii.EMPTY, Insets.EMPTY)));
  133. stage.setScene(scene);
  134. stage.show();
  135. return stage;
  136. }
  137. }