From b5641a3c6c2e9c34cc5feebb6e04b83a0b604464 Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Mon, 24 Apr 2023 19:49:17 +0200 Subject: [PATCH] refactored due to comments --- .../RuleNodeActorMessageProcessor.java | 19 +++--- .../service/RuleChainDataValidatorTest.java | 66 ------------------- .../server/dao/rule/BaseRuleChainService.java | 29 ++++++++ .../validator/RuleChainDataValidator.java | 17 ----- 4 files changed, 39 insertions(+), 92 deletions(-) delete mode 100644 application/src/test/java/org/thingsboard/server/service/RuleChainDataValidatorTest.java diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java index 37964a8005..36e9113326 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java @@ -60,7 +60,7 @@ public class RuleNodeActorMessageProcessor extends ComponentMsgProcessor RuleChainDataValidator.validateRuleNode(ruleNode), - String.format("Singleton mode not supported for [%s].", ruleNode.getType())); - } - - @Test - public void testSingletonOnly() { - String node = "org.thingsboard.rule.engine.mqtt.azure.TbAzureIotHubNode"; - RuleNode ruleNode = createRuleNode(node, true); - RuleChainDataValidator.validateRuleNode(ruleNode); - ruleNode.setSingletonMode(false); - Assertions.assertThrows(DataValidationException.class, - () -> RuleChainDataValidator.validateRuleNode(ruleNode), - String.format("Supported only singleton mode for [%s].", ruleNode.getType())); - } - - private RuleNode createRuleNode(String type, boolean singletonMode) { - RuleNode ruleNode = new RuleNode(); - ruleNode.setName("test node"); - ruleNode.setType(type); - ruleNode.setSingletonMode(singletonMode); - ruleNode.setConfiguration(JacksonUtil.newObjectNode()); - return ruleNode; - } -} diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 5a26715154..4b557d987c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.id.RuleNodeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.common.data.plugin.ComponentClusteringMode; import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.rule.NodeConnectionInfo; @@ -50,6 +51,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.rule.RuleChainUpdateResult; import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.common.data.rule.RuleNodeUpdateResult; +import org.thingsboard.server.common.data.util.ReflectionUtils; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; @@ -146,6 +148,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC Map ruleNodeIndexMap = new HashMap<>(); if (nodes != null) { for (RuleNode node : nodes) { + setSingletonMode(node); if (node.getId() != null) { ruleNodeIndexMap.put(node.getId(), nodes.indexOf(node)); } else { @@ -769,4 +772,30 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC } }; + private void setSingletonMode(RuleNode ruleNode) { + boolean singletonMode; + try { + ComponentClusteringMode nodeConfigType = ReflectionUtils.getAnnotationProperty(ruleNode.getType(), + "org.thingsboard.rule.engine.api.RuleNode", "clusteringMode"); + + switch (nodeConfigType) { + case ENABLED: + singletonMode = false; + break; + case SINGLETON: + singletonMode = true; + break; + case USER_PREFERENCE: + default: + singletonMode = ruleNode.isSingletonMode(); + break; + } + } catch (Exception e) { + log.warn("Failed to get clustering mode: {}", ExceptionUtils.getRootCauseMessage(e)); + singletonMode = false; + } + + ruleNode.setSingletonMode(singletonMode); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidator.java b/dao/src/main/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidator.java index 847acf69a2..5450e29706 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidator.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidator.java @@ -25,7 +25,6 @@ import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.plugin.ComponentClusteringMode; import org.thingsboard.server.common.data.rule.NodeConnectionInfo; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChainMetaData; @@ -113,22 +112,6 @@ public class RuleChainDataValidator extends DataValidator { return; } ConstraintValidator.validateFields(nodeConfig, errorPrefix); - - ComponentClusteringMode nodeConfigType = null; - try { - nodeConfigType = ReflectionUtils.getAnnotationProperty(ruleNode.getType(), - "org.thingsboard.rule.engine.api.RuleNode", "clusteringMode"); - } catch (Exception e) { - log.warn("Failed to validate singleton mode: {}", ExceptionUtils.getRootCauseMessage(e)); - return; - } - if (ComponentClusteringMode.ENABLED.equals(nodeConfigType) && ruleNode.isSingletonMode()) { - throw new DataValidationException(String.format("Singleton mode not supported for [%s].", ruleNode.getType())); - } - - if (ComponentClusteringMode.SINGLETON.equals(nodeConfigType) && !ruleNode.isSingletonMode()) { - throw new DataValidationException(String.format("Supported only singleton mode for [%s].", ruleNode.getType())); - } } private static void validateCircles(List connectionInfos) {