From 4b3a0bedd49b580226de447c541f9d1acd9806bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Heredero?= <63239207+Klagarge@users.noreply.github.com> Date: Thu, 25 May 2023 21:17:11 +0200 Subject: [PATCH] Change update DataPoints by a subscription way --- src/main/java/ch/hevs/isi/core/DataPoint.java | 6 +++--- .../java/ch/hevs/isi/core/DataPointListener.java | 14 ++++++++++++++ .../java/ch/hevs/isi/db/DatabaseConnector.java | 3 +++ .../java/ch/hevs/isi/field/FieldConnector.java | 2 ++ src/main/java/ch/hevs/isi/web/WebConnector.java | 2 ++ src/test/java/Database.java | 4 ++++ 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/hevs/isi/core/DataPoint.java b/src/main/java/ch/hevs/isi/core/DataPoint.java index 47f51e8..fc6287e 100644 --- a/src/main/java/ch/hevs/isi/core/DataPoint.java +++ b/src/main/java/ch/hevs/isi/core/DataPoint.java @@ -22,9 +22,9 @@ public abstract class DataPoint{ } else { dataPointMap.replace(this.label, this); } - DatabaseConnector.getMySelf().onNewValue(this); - WebConnector.getMySelf().onNewValue(this); - FieldConnector.getMySelf().onNewValue(this); + + // Update every connector + DataPointListener.listeners.forEach(listener -> listener.onNewValue(this)); } public static DataPoint getDataPointFromLabel(String label){ if( !dataPointMap.containsKey(label) ){ diff --git a/src/main/java/ch/hevs/isi/core/DataPointListener.java b/src/main/java/ch/hevs/isi/core/DataPointListener.java index d2164ee..fdeded5 100644 --- a/src/main/java/ch/hevs/isi/core/DataPointListener.java +++ b/src/main/java/ch/hevs/isi/core/DataPointListener.java @@ -1,6 +1,20 @@ package ch.hevs.isi.core; +import java.util.Vector; + public interface DataPointListener { + // Vector of listeners + Vector listeners = new Vector<>(); + void onNewValue(DataPoint dp); + + /** + * Subscribe to the update of the DataPoint + * @param listener the listener to subscribe + */ + static void subscribeUpdate(DataPointListener listener){ + // Call by final class for subscribe update + listeners.add(listener); + } } diff --git a/src/main/java/ch/hevs/isi/db/DatabaseConnector.java b/src/main/java/ch/hevs/isi/db/DatabaseConnector.java index e91edb6..0f094f6 100644 --- a/src/main/java/ch/hevs/isi/db/DatabaseConnector.java +++ b/src/main/java/ch/hevs/isi/db/DatabaseConnector.java @@ -56,6 +56,9 @@ public class DatabaseConnector implements DataPointListener { if (bucket == null){ bucket = properties.getProperty("BUCKET"); } + + // Subscribe to the update of DataPoints + DataPointListener.subscribeUpdate(this); } /** diff --git a/src/main/java/ch/hevs/isi/field/FieldConnector.java b/src/main/java/ch/hevs/isi/field/FieldConnector.java index 3180d21..a9c85ea 100644 --- a/src/main/java/ch/hevs/isi/field/FieldConnector.java +++ b/src/main/java/ch/hevs/isi/field/FieldConnector.java @@ -10,6 +10,8 @@ public class FieldConnector implements DataPointListener { private FieldConnector(){ + // Subscribe to the update of DataPoints + DataPointListener.subscribeUpdate(this); } public static FieldConnector getMySelf(){ diff --git a/src/main/java/ch/hevs/isi/web/WebConnector.java b/src/main/java/ch/hevs/isi/web/WebConnector.java index fd59f71..449e011 100644 --- a/src/main/java/ch/hevs/isi/web/WebConnector.java +++ b/src/main/java/ch/hevs/isi/web/WebConnector.java @@ -8,6 +8,8 @@ public class WebConnector implements DataPointListener { private WebConnector (){ + // Subscribe to the update of DataPoints + DataPointListener.subscribeUpdate(this); } public static WebConnector getMySelf(){ diff --git a/src/test/java/Database.java b/src/test/java/Database.java index 70815ef..9d9250a 100644 --- a/src/test/java/Database.java +++ b/src/test/java/Database.java @@ -3,6 +3,8 @@ import ch.hevs.isi.core.BooleanDataPoint; import ch.hevs.isi.core.DataPoint; import ch.hevs.isi.core.FloatDataPoint; import ch.hevs.isi.db.DatabaseConnector; +import ch.hevs.isi.field.FieldConnector; +import ch.hevs.isi.web.WebConnector; import java.io.FileInputStream; import java.io.InputStream; @@ -16,6 +18,8 @@ public class Database { BooleanDataPoint solarPanel = new BooleanDataPoint("REMOTE_SOLAR_SW", true); DatabaseConnector.getMySelf().initialize(null); + FieldConnector.getMySelf().initialize(null, 0); + WebConnector.getMySelf().initialize(null, 0); clock.setValue(0f);