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