Merge branch 'hotfix/3.6.1'
This commit is contained in:
commit
8986af4abf
@ -155,7 +155,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
if (ruleChain == null) {
|
if (ruleChain == null) {
|
||||||
return RuleChainUpdateResult.failed();
|
return RuleChainUpdateResult.failed();
|
||||||
}
|
}
|
||||||
RuleChainDataValidator.validateMetaData(ruleChainMetaData);
|
RuleChainDataValidator.validateMetaDataFieldsAndConnections(ruleChainMetaData);
|
||||||
|
|
||||||
List<RuleNode> nodes = ruleChainMetaData.getNodes();
|
List<RuleNode> nodes = ruleChainMetaData.getNodes();
|
||||||
List<RuleNode> toAddOrUpdate = new ArrayList<>();
|
List<RuleNode> toAddOrUpdate = new ArrayList<>();
|
||||||
@ -194,6 +194,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
for (RuleNode node : toAddOrUpdate) {
|
for (RuleNode node : toAddOrUpdate) {
|
||||||
node.setRuleChainId(ruleChainId);
|
node.setRuleChainId(ruleChainId);
|
||||||
node = ruleNodeUpdater.apply(node);
|
node = ruleNodeUpdater.apply(node);
|
||||||
|
RuleChainDataValidator.validateRuleNode(node);
|
||||||
RuleNode savedNode = ruleNodeDao.save(tenantId, node);
|
RuleNode savedNode = ruleNodeDao.save(tenantId, node);
|
||||||
relations.add(new EntityRelation(ruleChainMetaData.getRuleChainId(), savedNode.getId(),
|
relations.add(new EntityRelation(ruleChainMetaData.getRuleChainId(), savedNode.getId(),
|
||||||
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
|
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
|
||||||
|
|||||||
@ -87,15 +87,18 @@ public class RuleChainDataValidator extends DataValidator<RuleChain> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<Throwable> validateMetaData(RuleChainMetaData ruleChainMetaData) {
|
public static List<Throwable> validateMetaData(RuleChainMetaData ruleChainMetaData) {
|
||||||
ConstraintValidator.validateFields(ruleChainMetaData);
|
validateMetaDataFieldsAndConnections(ruleChainMetaData);
|
||||||
List<Throwable> throwables = ruleChainMetaData.getNodes().stream()
|
return ruleChainMetaData.getNodes().stream()
|
||||||
.map(RuleChainDataValidator::validateRuleNode)
|
.map(RuleChainDataValidator::validateRuleNode)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void validateMetaDataFieldsAndConnections(RuleChainMetaData ruleChainMetaData) {
|
||||||
|
ConstraintValidator.validateFields(ruleChainMetaData);
|
||||||
if (CollectionUtils.isNotEmpty(ruleChainMetaData.getConnections())) {
|
if (CollectionUtils.isNotEmpty(ruleChainMetaData.getConnections())) {
|
||||||
validateCircles(ruleChainMetaData.getConnections());
|
validateCircles(ruleChainMetaData.getConnections());
|
||||||
}
|
}
|
||||||
return throwables;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Throwable validateRuleNode(RuleNode ruleNode) {
|
public static Throwable validateRuleNode(RuleNode ruleNode) {
|
||||||
|
|||||||
@ -89,7 +89,9 @@ public class TbCopyKeysNode implements TbNode {
|
|||||||
String keyData = entry.getKey();
|
String keyData = entry.getKey();
|
||||||
if (checkKey(keyData)) {
|
if (checkKey(keyData)) {
|
||||||
msgChanged = true;
|
msgChanged = true;
|
||||||
metaData.putValue(keyData, JacksonUtil.toString(entry.getValue()));
|
String value = entry.getValue().isTextual() ?
|
||||||
|
entry.getValue().asText() : JacksonUtil.toString(entry.getValue());
|
||||||
|
metaData.putValue(keyData, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -96,10 +96,12 @@ public class TbCopyKeysNodeTest {
|
|||||||
@Test
|
@Test
|
||||||
void givenMsgFromMsg_whenOnMsg_thenVerifyOutput() throws Exception {
|
void givenMsgFromMsg_whenOnMsg_thenVerifyOutput() throws Exception {
|
||||||
config.setFromMetadata(false);
|
config.setFromMetadata(false);
|
||||||
|
config.setKeys(Set.of(".*Key$"));
|
||||||
nodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config));
|
nodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config));
|
||||||
node.init(ctx, nodeConfiguration);
|
node.init(ctx, nodeConfiguration);
|
||||||
|
|
||||||
String data = "{\"DigitData\":22.5,\"TempDataValue\":10.5}";
|
String data = "{\"nullKey\":null,\"stringKey\":\"value1\",\"booleanKey\":true,\"doubleKey\":42.0,\"longKey\":73," +
|
||||||
|
"\"jsonKey\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}";
|
||||||
node.onMsg(ctx, getTbMsg(deviceId, data));
|
node.onMsg(ctx, getTbMsg(deviceId, data));
|
||||||
|
|
||||||
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
|
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
|
||||||
@ -110,8 +112,13 @@ public class TbCopyKeysNodeTest {
|
|||||||
assertThat(newMsg).isNotNull();
|
assertThat(newMsg).isNotNull();
|
||||||
|
|
||||||
Map<String, String> metaDataMap = newMsg.getMetaData().getData();
|
Map<String, String> metaDataMap = newMsg.getMetaData().getData();
|
||||||
assertThat(metaDataMap.containsKey("DigitData")).isEqualTo(true);
|
assertThat(metaDataMap.get("nullKey")).isEqualTo("null");
|
||||||
assertThat(metaDataMap.containsKey("TempDataValue")).isEqualTo(true);
|
assertThat(metaDataMap.get("stringKey")).isEqualTo("value1");
|
||||||
|
assertThat(metaDataMap.get("booleanKey")).isEqualTo("true");
|
||||||
|
assertThat(metaDataMap.get("doubleKey")).isEqualTo("42.0");
|
||||||
|
assertThat(metaDataMap.get("longKey")).isEqualTo("73");
|
||||||
|
assertThat(metaDataMap.get("jsonKey"))
|
||||||
|
.isEqualTo("{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user