From 411033e6b8a3ee4a5fc471f7865c100bf397da95 Mon Sep 17 00:00:00 2001
From: naumueller <>
Date: Sun, 2 Nov 2025 13:39:07 +0100
Subject: [PATCH] Mqtt added, changed MVC to MVVM hybrid architecture
---
pom.xml | 5 +
.../projekt/gesundheitsassistent/FxStart.java | 61 ++++-------
.../controller/FxViewController.java | 62 +++++++++--
.../controller/MetadataDialogController.java | 62 ++++-------
.../gesundheitsassistent/model/FxModel.java | 12 +++
.../model/MqttJavaClient.java | 102 ++++++++++++++++++
.../viewmodel/FxViewModel.java | 50 +++++++++
.../viewmodel/MetadataDialogViewModel.java | 33 ++++++
src/main/java/module-info.java | 1 +
.../icons/Anime_character.fbx | Bin 0 -> 333436 bytes
.../icons/icons8-account-male.gif | Bin 0 -> 36728 bytes
.../icons/icons8-health-48.png | Bin 0 -> 1343 bytes
.../icons/icons8-heart.gif | Bin 0 -> 20106 bytes
.../icons/icons8-stress-64.png | Bin 0 -> 2862 bytes
.../icons/icons8-temperature-48.png | Bin 0 -> 467 bytes
.../gesundheitsassistent/icons/textures.png | Bin 0 -> 647869 bytes
.../gesundheitsassistent/view/FxView.fxml | 63 ++++++++++-
17 files changed, 354 insertions(+), 97 deletions(-)
create mode 100644 src/main/java/efi/projekt/gesundheitsassistent/model/MqttJavaClient.java
create mode 100644 src/main/java/efi/projekt/gesundheitsassistent/viewmodel/FxViewModel.java
create mode 100644 src/main/java/efi/projekt/gesundheitsassistent/viewmodel/MetadataDialogViewModel.java
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/Anime_character.fbx
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/icons8-account-male.gif
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/icons8-health-48.png
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/icons8-heart.gif
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/icons8-stress-64.png
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/icons8-temperature-48.png
create mode 100644 src/main/resources/efi/projekt/gesundheitsassistent/icons/textures.png
diff --git a/pom.xml b/pom.xml
index af04bce..049e8a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,11 @@
2.1.0
jar
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.5
+
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java b/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java
index dd9b822..4532ab9 100644
--- a/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java
+++ b/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java
@@ -1,13 +1,13 @@
package efi.projekt.gesundheitsassistent;
-import atlantafx.base.theme.NordDark;
-import efi.projekt.gesundheitsassistent.controller.MetadataDialogController;
-import efi.projekt.gesundheitsassistent.model.Metadata;
+import atlantafx.base.theme.Dracula;
+import efi.projekt.gesundheitsassistent.model.FxModel;
+import efi.projekt.gesundheitsassistent.controller.FxViewController;
+import efi.projekt.gesundheitsassistent.viewmodel.FxViewModel;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
-import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
@@ -18,49 +18,30 @@ import java.io.IOException;
* @author naumueller
*/
public class FxStart extends Application {
-
- private static Scene scene;
- private Metadata metadata; // das zentrale Model
-
+
@Override
public void start(Stage primaryStage) throws IOException {
+ // Lade FXML
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("/efi/projekt/gesundheitsassistent/view/FxView.fxml"));
+ Parent root = loader.load();
+
+ FxViewController controller = loader.getController();
+
+ // Erzeuge Model & ViewModel
+ FxModel model = new FxModel();
+ FxViewModel viewModel = new FxViewModel(model);
+
+ // Verbinde Controller mit ViewModel
+ controller.setViewModel(viewModel);
- // 1️⃣ Metadata Model erzeugen
- metadata = new Metadata();
-
- // 2️⃣ Metadata Dialog laden
- FXMLLoader dialogLoader = new FXMLLoader(getClass()
- .getResource("/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml"));
- Parent dialogRoot = dialogLoader.load();
-
- // Controller bekommen und Model übergeben
- MetadataDialogController dialogController = dialogLoader.getController();
- dialogController.setMetadata(metadata);
-
- // 3️⃣ Dialog Stage erzeugen
- Stage dialogStage = new Stage();
- dialogStage.setTitle("Metadaten eingeben");
- dialogStage.initModality(Modality.APPLICATION_MODAL); // blockiert Hauptfenster
- dialogStage.setScene(new Scene(dialogRoot));
- dialogStage.showAndWait(); // wartet bis Dialog geschlossen wird
-
- // 4️⃣ Hauptfenster laden
- FXMLLoader mainLoader = new FXMLLoader(getClass()
- .getResource("/efi/projekt/gesundheitsassistent/view/FxView.fxml"));
- Parent mainRoot = mainLoader.load();
-
- scene = new Scene(mainRoot, 1280, 720);
- Application.setUserAgentStylesheet(new NordDark().getUserAgentStylesheet());
+ Scene scene = new Scene(root, 1280, 720);
+ Application.setUserAgentStylesheet(new Dracula().getUserAgentStylesheet());
primaryStage.setTitle("Virtueller Gesundheitsassistent");
primaryStage.setScene(scene);
primaryStage.show();
}
- static void setRoot(String fxml) throws IOException {
- scene.setRoot(loadFXML(fxml));
- }
-
private static Parent loadFXML(String fxml) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(
FxStart.class.getResource("/efi/projekt/gesundheitsassistent/view/" + fxml + ".fxml")
@@ -71,8 +52,4 @@ public class FxStart extends Application {
public static void main(String[] args) {
launch();
}
-
- public Metadata getMetadata() {
- return metadata;
- }
}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java b/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java
index cf16246..0aa7c2c 100644
--- a/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java
+++ b/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java
@@ -5,13 +5,23 @@
package efi.projekt.gesundheitsassistent.controller;
import efi.projekt.gesundheitsassistent.model.FxModel;
+import efi.projekt.gesundheitsassistent.model.Metadata;
+import efi.projekt.gesundheitsassistent.viewmodel.FxViewModel;
+import efi.projekt.gesundheitsassistent.viewmodel.MetadataDialogViewModel;
+import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
+import javafx.scene.control.TextField;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
/**
* FXML Controller class
@@ -20,17 +30,27 @@ import javafx.scene.control.ButtonType;
*/
public class FxViewController implements Initializable {
- private FxModel model;
+ private FxViewModel viewModel;
- @FXML
- private Button exitButton;
+ @FXML private Button exitButton;
+ @FXML private TextField messageInputField;
+ @FXML private TextField messageOutputField;
+ @FXML private Button sendButton;
- /**
- * Initializes the controller class.
- */
@Override
public void initialize(URL url, ResourceBundle rb) {
-
+ exitButton.setOnAction(e -> handleExit());
+ }
+
+ public void setViewModel(FxViewModel viewModel) {
+ this.viewModel = viewModel;
+ initBindings();
+ }
+
+ public void initBindings() {
+ //Bindings: View <-> ViewModel
+ messageInputField.textProperty().bindBidirectional(viewModel.outgoingMessageProperty());
+ messageOutputField.textProperty().bindBidirectional(viewModel.incomingMessageProperty());
}
@FXML
@@ -38,11 +58,31 @@ public class FxViewController implements Initializable {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Programm wirklich beenden?");
alert.showAndWait()
.filter(response -> response == ButtonType.OK)
- .ifPresent(response -> System.exit(0));
-
+ .ifPresent(response -> System.exit(0));
}
+
+ @FXML
+ private void handleSendMessage() {
+ viewModel.sendMessage(messageInputField.getText());
+ }
+
+ @FXML
+ private void handleOptions() throws IOException {
+ // Dialog
+ FXMLLoader loader = new FXMLLoader(getClass()
+ .getResource("/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml"));
+ Parent dialogRoot = loader.load();
- public void setModel(FxModel model) {
- this.model = model;
+ // ViewModel erzeugen
+ Metadata metadata = new Metadata();
+ loader.getController().setViewModel(
+ new MetadataDialogViewModel(metadata)
+ );
+
+ // Dialog Stage erzeugen
+ Stage dialogStage = new Stage();
+ dialogStage.initModality(Modality.APPLICATION_MODAL);
+ dialogStage.setScene(new Scene(dialogRoot));
+ dialogStage.showAndWait();
}
}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java b/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java
index 47d90a7..29a486d 100644
--- a/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java
+++ b/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java
@@ -5,12 +5,14 @@
package efi.projekt.gesundheitsassistent.controller;
import efi.projekt.gesundheitsassistent.model.Metadata;
+import efi.projekt.gesundheitsassistent.viewmodel.MetadataDialogViewModel;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
+import javafx.util.converter.NumberStringConverter;
/**
*
@@ -18,59 +20,39 @@ import javafx.stage.Stage;
*/
public class MetadataDialogController {
- @FXML
- private TextField nameField;
+ @FXML private TextField nameField;
+ @FXML private TextField ageField;
+ @FXML private ChoiceBox genderChoiceBox;
+ @FXML private TextField heightField;
+ @FXML private TextField weightField;
- @FXML
- private TextField ageField;
+ private MetadataDialogViewModel viewModel;
- @FXML
- private ChoiceBox genderChoiceBox;
-
- @FXML
- private TextField heightField;
-
- @FXML
- private TextField weightField;
-
- private Metadata metadata;
-
- public void initialize() {
- // ChoiceBox füllen
+ public void setViewModel(MetadataDialogViewModel viewModel) {
+ this.viewModel = viewModel;
+
genderChoiceBox.getItems().addAll("Männlich", "Weiblich", "Divers");
- genderChoiceBox.setValue("Männlich"); // default
- }
-
- public void setMetadata(Metadata metadata) {
- this.metadata = metadata;
- bindFields();
- }
-
- private void bindFields() {
- // Bidirektionales Binding zwischen Model und UI
- nameField.textProperty().bindBidirectional(metadata.nameProperty());
- ageField.textProperty().bindBidirectional(metadata.ageProperty(), new javafx.util.converter.NumberStringConverter());
- genderChoiceBox.valueProperty().bindBidirectional(metadata.genderProperty());
- heightField.textProperty().bindBidirectional(metadata.heightProperty(), new javafx.util.converter.NumberStringConverter());
- weightField.textProperty().bindBidirectional(metadata.weightProperty(), new javafx.util.converter.NumberStringConverter());
+
+ // Bindings
+ nameField.textProperty().bindBidirectional(viewModel.nameProperty());
+ ageField.textProperty().bindBidirectional(viewModel.ageProperty(), new NumberStringConverter());
+ genderChoiceBox.valueProperty().bindBidirectional(viewModel.genderProperty());
+ heightField.textProperty().bindBidirectional(viewModel.heightProperty(), new NumberStringConverter());
+ weightField.textProperty().bindBidirectional(viewModel.weightProperty(), new NumberStringConverter());
}
@FXML
private void handleOk() {
try {
- metadata.validate();
- // Dialog schließen
- Stage stage = (Stage) nameField.getScene().getWindow();
- stage.close();
+ viewModel.save();
+ ((Stage) nameField.getScene().getWindow()).close();
} catch (IllegalArgumentException e) {
- Alert alert = new Alert(Alert.AlertType.ERROR, e.getMessage(), ButtonType.OK);
- alert.showAndWait();
+ new Alert(Alert.AlertType.ERROR, e.getMessage(), ButtonType.OK).showAndWait();
}
}
@FXML
private void handleCancel() {
- Stage stage = (Stage) nameField.getScene().getWindow();
- stage.close();
+ ((Stage) nameField.getScene().getWindow()).close();
}
}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java b/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java
index 912bbf8..48a9887 100644
--- a/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java
+++ b/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java
@@ -19,6 +19,7 @@ import javafx.beans.property.StringProperty;
public class FxModel implements Serializable {
private final StringProperty id = new SimpleStringProperty(this, "id");
+ private MqttJavaClient mqttClient = new MqttJavaClient();
public FxModel() {}
@@ -33,5 +34,16 @@ public class FxModel implements Serializable {
public void validate() throws IllegalArgumentException {
// Subklassen können überschreiben
}
+
+ public void publishMessage(String topic, String messageContent, int qos) {
+ getMqttClient().publishMessage(topic, messageContent, qos);
+ }
+
+ /**
+ * @return the mqttClient
+ */
+ public MqttJavaClient getMqttClient() {
+ return mqttClient;
+ }
}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/model/MqttJavaClient.java b/src/main/java/efi/projekt/gesundheitsassistent/model/MqttJavaClient.java
new file mode 100644
index 0000000..3a991db
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/model/MqttJavaClient.java
@@ -0,0 +1,102 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.model;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+
+/**
+ *
+ * @author aumni
+ */
+public class MqttJavaClient implements MqttCallback {
+
+ private Map> topicListeners = new HashMap<>();
+
+ private static final String BROKER_URL = "tcp://localhost:1883";
+ private static final String CLIENT_ID = "JavaClientPublisherSubscriber";
+ private static final String PUBLISH_TOPIC = "temperatur";
+ private static final String SUBSCRIBE_TOPIC = "Text";
+
+ private MqttClient client;
+
+ public MqttJavaClient() {
+ try {
+ client = new MqttClient(BROKER_URL, CLIENT_ID, new MemoryPersistence());
+ client.setCallback(this);
+
+ MqttConnectOptions options = new MqttConnectOptions();
+ options.setCleanSession(true);
+ options.setAutomaticReconnect(true);
+
+ System.out.println("Verbinde mit Broker..." + BROKER_URL);
+ client.connect(options);
+ System.out.println("Verbunden");
+
+ System.out.println("Abonniere Topic: " + SUBSCRIBE_TOPIC);
+ client.subscribe(SUBSCRIBE_TOPIC);
+ System.out.println("Topic abonniert!");
+
+ } catch (MqttException ex) {
+ System.err.println("Fehler beim Initialisieren oder Verbinden: " + ex.getMessage());
+ ex.printStackTrace();
+ }
+ }
+
+ public void addTopicListeners(String topic, Consumer listener) {
+ topicListeners.put(topic, listener);
+ try {
+ client.subscribe(topic);
+ System.out.println("Abonniert: " + topic);
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void publishMessage(String topic, String message, int qos) {
+ try {
+ MqttMessage msg = new MqttMessage(message.getBytes());
+ msg.setQos(qos);
+ client.publish(topic, msg);
+ System.out.println("Nachricht veröffentlicht: Topic = " + topic + ", Inhalt = " + message + ", QoS = " + qos);
+ } catch (MqttException ex) {
+ System.err.println("Fehler beim Veröffentlicher der Nachricht: " + ex.getMessage());
+ ex.printStackTrace();
+ }
+ }
+
+ @Override
+ public void connectionLost(Throwable cause) {
+ System.out.println("Verbindung zum Broker verloren! Ursache: " + cause.getMessage());
+ }
+
+ @Override
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
+ String payload = new String(message.getPayload());
+
+ System.out.println("Nachricht emmpfangen:");
+ System.out.println(" Topic: " + topic);
+ System.out.println(" Inhalt: " + new String(message.getPayload()));
+ System.out.println(" QoS: " + message.getQos());
+
+ Consumer listener = topicListeners.get(topic);
+ if (listener != null) {
+ listener.accept(payload);
+ }
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken token) {
+ System.out.println("Nachricht erfolgreich zugestellt (QoS > 0). Token: " + token.getMessageId());
+ }
+}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/FxViewModel.java b/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/FxViewModel.java
new file mode 100644
index 0000000..6589e1e
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/FxViewModel.java
@@ -0,0 +1,50 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.viewmodel;
+
+import efi.projekt.gesundheitsassistent.model.FxModel;
+import java.util.HashMap;
+import java.util.Map;
+import javafx.application.Platform;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+/**
+ *
+ * @author naumueller
+ */
+public class FxViewModel {
+
+ private final FxModel model;
+ private Map topicMessages = new HashMap<>();
+ private final StringProperty incomingMessage = new SimpleStringProperty("");
+ private final StringProperty outgoingMessage = new SimpleStringProperty("");
+
+ private final StringProperty messageToSend = new SimpleStringProperty("");
+
+ public FxViewModel(FxModel model) {
+ this.model = model;
+
+ subscribeTopic("Text");
+ subscribeTopic("Temperatur");
+ }
+
+ public void subscribeTopic(String topic) {
+ model.getMqttClient().addTopicListeners(topic, msg -> {
+ Platform.runLater(() -> getTopicProperty(topic).set(msg));
+ });
+ }
+
+ public void sendMessage(String msg) {
+ if (msg != null && !msg.isBlank()) {
+ model.getMqttClient().publishMessage("Text", msg, 1);
+ outgoingMessage.set("");
+ }
+ }
+
+ public StringProperty incomingMessageProperty() { return incomingMessage; }
+ public StringProperty outgoingMessageProperty() { return outgoingMessage; }
+ public StringProperty getTopicProperty(String topic) { return topicMessages.computeIfAbsent(topic, t -> new SimpleStringProperty()); }
+}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/MetadataDialogViewModel.java b/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/MetadataDialogViewModel.java
new file mode 100644
index 0000000..2634e62
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/viewmodel/MetadataDialogViewModel.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.viewmodel;
+
+import efi.projekt.gesundheitsassistent.model.Metadata;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.StringProperty;
+
+/**
+ *
+ * @author naumueller
+ */
+public class MetadataDialogViewModel {
+
+ private final Metadata metadata;
+
+ public MetadataDialogViewModel(Metadata metadata) {
+ this.metadata = metadata;
+ }
+
+ public StringProperty nameProperty() { return metadata.nameProperty(); }
+ public IntegerProperty ageProperty() { return metadata.ageProperty(); }
+ public StringProperty genderProperty() { return metadata.genderProperty(); }
+ public DoubleProperty heightProperty() { return metadata.heightProperty(); }
+ public DoubleProperty weightProperty() { return metadata.weightProperty(); }
+
+ public void save() {
+ metadata.validate();
+ }
+}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 449cd3d..bc2f785 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -3,6 +3,7 @@ module efi.projekt.gesundheitsassistent {
requires javafx.fxml;
requires java.base;
requires atlantafx.base;
+ requires org.eclipse.paho.client.mqttv3;
opens efi.projekt.gesundheitsassistent to javafx.fxml;
opens efi.projekt.gesundheitsassistent.controller to javafx.fxml;
diff --git a/src/main/resources/efi/projekt/gesundheitsassistent/icons/Anime_character.fbx b/src/main/resources/efi/projekt/gesundheitsassistent/icons/Anime_character.fbx
new file mode 100644
index 0000000000000000000000000000000000000000..102a1c9abf738810c64c2363763f2f2b7b268667
GIT binary patch
literal 333436
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