Browse Source

Update TbCheckMessageNode

pull/1437/head
ShvaykaD 8 years ago
parent
commit
e2b9420abd
  1. 74
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbCheckMessageNode.java

74
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);
}
}
Loading…
Cancel
Save