thingsboard-aplcache

Update TbCheckMessageNode

2/1/2019 7:56:00 AM

Details

diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbCheckMessageNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbCheckMessageNode.java
index 6d93638..f1538e0 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbCheckMessageNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbCheckMessageNode.java
@@ -58,38 +58,66 @@ public class TbCheckMessageNode implements TbNode {
     @Override
     public void onMsg(TbContext ctx, TbMsg msg) {
         try {
-            Map<String, String> dataMap = dataToMap(msg);
-            Map<String, String> metadataMap = metadataToMap(msg);
             if (config.isCheckAllKeys()) {
-                ctx.tellNext(msg, allKeysExist(messageNamesList, dataMap) && allKeysExist(metadataNamesList, metadataMap) ? "True" : "False");
+                ctx.tellNext(msg, allKeysData(msg) && allKeysMetadata(msg) ? "True" : "False");
             } else {
-                ctx.tellNext(msg, atLeastOneKeyExist(messageNamesList, dataMap) || atLeastOneKeyExist(metadataNamesList, metadataMap) ? "True" : "False");
+                ctx.tellNext(msg, atLeastOneData(msg) || atLeastOneMetadata(msg) ? "True" : "False");
             }
         } catch (Exception e) {
             ctx.tellFailure(msg, e);
         }
     }
 
-    private boolean allKeysExist(List<String> data, Map<String, String> map) {
-        if (!data.isEmpty()) {
-            for (String field : data) {
-                if (!map.containsKey(field)) {
-                    return false;
-                }
+    @Override
+    public void destroy() {
+    }
+
+    private boolean allKeysData(TbMsg msg) {
+        if (!messageNamesList.isEmpty()) {
+            Map<String, String> dataMap = dataToMap(msg);
+            return processAllKeys(messageNamesList, dataMap);
+        }
+        return true;
+    }
+
+    private boolean allKeysMetadata(TbMsg msg) {
+        if (!metadataNamesList.isEmpty()) {
+            Map<String, String> metadataMap = metadataToMap(msg);
+            return processAllKeys(metadataNamesList, metadataMap);
+        }
+        return true;
+    }
+
+    private boolean atLeastOneData(TbMsg msg) {
+        if (!messageNamesList.isEmpty()) {
+            Map<String, String> dataMap = dataToMap(msg);
+            return processAtLeastOne(messageNamesList, dataMap);
+        }
+        return false;
+    }
+
+    private boolean atLeastOneMetadata(TbMsg msg) {
+        if (!metadataNamesList.isEmpty()) {
+            Map<String, String> metadataMap = metadataToMap(msg);
+            return processAtLeastOne(metadataNamesList, metadataMap);
+        }
+        return false;
+    }
+
+    private boolean processAllKeys(List<String> data, Map<String, String> map) {
+        for (String field : data) {
+            if (!map.containsKey(field)) {
+                return false;
             }
-            return true;
         }
         return true;
     }
 
-    private boolean atLeastOneKeyExist(List<String> data, Map<String, String> map) {
-        if (!data.isEmpty()) {
-            for (String field : data) {
-                if (map.containsKey(field)) {
-                    return true;
-                }
+    private boolean processAtLeastOne(List<String> data, Map<String, String> map) {
+        for (String field : data) {
+            if (map.containsKey(field)) {
+                return true;
             }
-            return false;
         }
         return false;
     }
@@ -99,13 +127,9 @@ public class TbCheckMessageNode implements TbNode {
     }
 
     @SuppressWarnings("unchecked")
-    private Map<String, String> dataToMap(TbMsg msg) { ;
-        return (Map<String,String>) gson.fromJson(msg.getData(), Map.class);
-    }
-
-    @Override
-    public void destroy() {
-
+    private Map<String, String> dataToMap(TbMsg msg) {
+        ;
+        return (Map<String, String>) gson.fromJson(msg.getData(), Map.class);
     }
 
 }
\ No newline at end of file