Browse Source
Merge pull request #7246 from YuriyLytvynchuk/bug/node_originator_fields_check_null
[3.4.2] Bugfix: originator fields node: check value for "null"
pull/7326/head
Andrew Shvayka
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
12 additions and
1 deletions
-
common/data/src/main/java/org/thingsboard/server/common/data/EntityFieldsData.java
-
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsConfiguration.java
-
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsNode.java
|
|
|
@ -50,6 +50,10 @@ public class EntityFieldsData { |
|
|
|
} |
|
|
|
|
|
|
|
public String getFieldValue(String field) { |
|
|
|
return getFieldValue(field, false); |
|
|
|
} |
|
|
|
|
|
|
|
public String getFieldValue(String field, boolean ignoreNullStrings) { |
|
|
|
String[] fieldsTree = field.split("\\."); |
|
|
|
JsonNode current = fieldsData; |
|
|
|
for (String key : fieldsTree) { |
|
|
|
@ -61,6 +65,9 @@ public class EntityFieldsData { |
|
|
|
} |
|
|
|
} |
|
|
|
if (current != null) { |
|
|
|
if(current.isNull() && ignoreNullStrings){ |
|
|
|
return null; |
|
|
|
} |
|
|
|
if (current.isValueNode()) { |
|
|
|
return current.asText(); |
|
|
|
} else { |
|
|
|
|
|
|
|
@ -25,6 +25,7 @@ import java.util.Map; |
|
|
|
public class TbGetOriginatorFieldsConfiguration implements NodeConfiguration<TbGetOriginatorFieldsConfiguration> { |
|
|
|
|
|
|
|
private Map<String, String> fieldsMapping; |
|
|
|
private boolean ignoreNullStrings; |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbGetOriginatorFieldsConfiguration defaultConfiguration() { |
|
|
|
@ -33,6 +34,7 @@ public class TbGetOriginatorFieldsConfiguration implements NodeConfiguration<TbG |
|
|
|
fieldsMapping.put("name", "originatorName"); |
|
|
|
fieldsMapping.put("type", "originatorType"); |
|
|
|
configuration.setFieldsMapping(fieldsMapping); |
|
|
|
configuration.setIgnoreNullStrings(false); |
|
|
|
return configuration; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -46,10 +46,12 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; |
|
|
|
public class TbGetOriginatorFieldsNode implements TbNode { |
|
|
|
|
|
|
|
private TbGetOriginatorFieldsConfiguration config; |
|
|
|
private boolean ignoreNullStrings; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { |
|
|
|
config = TbNodeUtils.convert(configuration, TbGetOriginatorFieldsConfiguration.class); |
|
|
|
ignoreNullStrings = config.isIgnoreNullStrings(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -69,7 +71,7 @@ public class TbGetOriginatorFieldsNode implements TbNode { |
|
|
|
return Futures.transform(EntitiesFieldsAsyncLoader.findAsync(ctx, entityId), |
|
|
|
data -> { |
|
|
|
config.getFieldsMapping().forEach((field, metaKey) -> { |
|
|
|
String val = data.getFieldValue(field); |
|
|
|
String val = data.getFieldValue(field, ignoreNullStrings); |
|
|
|
if (val != null) { |
|
|
|
msg.getMetaData().putValue(metaKey, val); |
|
|
|
} |
|
|
|
|