From 8e808f9d55d11bdbbf4df096ba28affd7e5dac42 Mon Sep 17 00:00:00 2001
From: Frank Rohde <frank.rohde@tu-dresden.de>
Date: Thu, 25 Aug 2022 14:43:26 +0200
Subject: [PATCH] Bugfix: STOMP message is sent if BT rawdata only contains
 rss-values and no distances BT rawdata messages are ignored if neither
 distances nor rss-values are contained UWB rawdata messages are ignored if no
 distances contained testdata extended

---
 .../ipos/project/iposextension/tooz/Tooz.java |  2 +-
 .../project/iposextension/tooz/ToozExt.java   | 28 ++++++++++++++-----
 .../iposextension/tooz/ToozLocalAgent.java    |  6 ++--
 testdata_raw_tooz.txt                         |  4 +++
 4 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/main/java/ipos/project/iposextension/tooz/Tooz.java b/src/main/java/ipos/project/iposextension/tooz/Tooz.java
index 49025e7..a4a1adf 100644
--- a/src/main/java/ipos/project/iposextension/tooz/Tooz.java
+++ b/src/main/java/ipos/project/iposextension/tooz/Tooz.java
@@ -122,7 +122,7 @@ public class Tooz {
         }
         List<Map.Entry<String, Double>> sortedDistances = extractSortedDistances(monitoredTarget);
         if (sortedDistances.size() == 0){
-            LOG.info("Could not update Tooz-backend for monitoring Target " + monitoredTarget.getTargetSensorId() + "as no distant entities are known yet.");
+            LOG.info("Could not update Tooz-backend for monitoring Target " + monitoredTarget.getTargetSensorId() + " as no distant entities are known yet.");
             return;
         }
         Map.Entry<String, Double> nearestDistantEntity = sortedDistances.get(0);
diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozExt.java b/src/main/java/ipos/project/iposextension/tooz/ToozExt.java
index 453858b..6046133 100644
--- a/src/main/java/ipos/project/iposextension/tooz/ToozExt.java
+++ b/src/main/java/ipos/project/iposextension/tooz/ToozExt.java
@@ -41,17 +41,31 @@ public class ToozExt extends IPosExtension {
     @Override
     public void handleRawdataEvent(IPosRawdataEvent iPosRawdataEvent) {
         if (iPosRawdataEvent instanceof IPosUWBEvent){
-            IPosUWBEvent iPosUWBEvent = (IPosUWBEvent) iPosRawdataEvent;
-            handleIPosBeaconEvent((IPosBeaconEvent) iPosUWBEvent);
+            handleIPosUWBEvent((IPosUWBEvent) iPosRawdataEvent);
         }
         if (iPosRawdataEvent instanceof IPosBTEvent){
-            IPosBTEvent iPosBTEvent = (IPosBTEvent) iPosRawdataEvent;
-            if (null == iPosBTEvent.getDistances() && null != iPosBTEvent.getRss()) {
-                iPosBTEvent.setDistances(translateRssToDistances(iPosBTEvent));
+            handleIPosBTEvent((IPosBTEvent) iPosRawdataEvent);
+        }
+    }
 
-            }
+    private void handleIPosBTEvent(IPosBTEvent iPosRawdataEvent) {
+        IPosBTEvent iPosBTEvent = iPosRawdataEvent;
+        if ((iPosBTEvent.getDistances().size() == 0) && (iPosBTEvent.getRss().size() == 0)){
+            LOG.info("Ignoring IPosBTEvent, as it neither contains distances nor rss-values");
+            return;
+        }
+        if ((iPosBTEvent.getDistances().size() == 0) && (iPosBTEvent.getRss().size() > 0)) {
+            iPosBTEvent.setDistances(translateRssToDistances(iPosBTEvent));
+        }
+        handleIPosBeaconEvent((IPosBeaconEvent) iPosBTEvent);
+    }
 
-            handleIPosBeaconEvent((IPosBeaconEvent) iPosBTEvent);
+    private void handleIPosUWBEvent(IPosUWBEvent iPosRawdataEvent) {
+        IPosUWBEvent iPosUWBEvent = iPosRawdataEvent;
+        if (iPosUWBEvent.getDistances().size() > 0) {
+            handleIPosBeaconEvent((IPosBeaconEvent) iPosUWBEvent);
+        }else{
+            LOG.info("Ignoring IPosUWBEvent as it does not contain any distances");
         }
     }
 
diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java b/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java
index b17454c..094b636 100644
--- a/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java
+++ b/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java
@@ -65,8 +65,10 @@ public class ToozLocalAgent {
     private String targetSensorId;
 
     public void addOrUpdateDistances(Map<String, Double> map){
-        map.entrySet().forEach(entry -> distances.put(entry.getKey(), entry.getValue())); // put-function creates new entry, or updates existing one
-        this.hasChanged = true;
+        if (map.size() > 0) {
+            map.entrySet().forEach(entry -> distances.put(entry.getKey(), entry.getValue())); // put-function creates new entry, or updates existing one
+            this.hasChanged = true;
+        }
     }
 
     public String getLocalAgentId() {
diff --git a/testdata_raw_tooz.txt b/testdata_raw_tooz.txt
index 2d43355..7a6e3f3 100644
--- a/testdata_raw_tooz.txt
+++ b/testdata_raw_tooz.txt
@@ -1,4 +1,8 @@
+{"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_uwb", "type": "UWB"}]}
+{"bluetoothRawDataEvent" : [{"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_bt",   "type": "BT"}]}
+{"bluetoothRawDataEvent" : [{"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_bt",   "type": "BT", "rss": {"beacon_1" : "12.7", "beacon_2" : "15.3", "beacon_3" : "18.7"}}]}
 {"bluetoothRawDataEvent" : [{"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_bt",  "distances": {"beacon_1" : "2.5", "beacon_2" : "5.5", "beacon_3" : "8.5"}, "type": "BT", "rss": {"beacon_1" : "12.7", "beacon_2" : "15.3", "beacon_3" : "18.7"}}]}
+{"bluetoothRawDataEvent" : [{"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_bt",  "distances": {"beacon_1" : "2.5", "beacon_2" : "5.5", "beacon_3" : "8.5"}, "type": "BT"}]}
 {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_uwb",  "distances": {"beacon_1" : "2.5", "beacon_2" : "5.5", "beacon_3" : "8.5"}, "type": "UWB"}]}
 {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:04:20+00:00", "sensorId" : "tooz_employee_uwb", "distances": {"beacon_1" : "15.0"}, "type": "UWB"}]}
 {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:05:20+00:00", "sensorId" : "tooz_employee_uwb", "distances": {"beacon_5" : "1.8"}, "type": "UWB"}]}
\ No newline at end of file
-- 
GitLab