diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributes.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributes.java index 8e2a91a9c3..3fc3eb5bd3 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributes.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributes.java @@ -16,14 +16,12 @@ package org.thingsboard.rule.engine.telemetry; import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; import org.thingsboard.rule.engine.api.RuleNode; import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbNode; import org.thingsboard.rule.engine.api.TbNodeConfiguration; import org.thingsboard.rule.engine.api.TbNodeException; import org.thingsboard.rule.engine.api.util.TbNodeUtils; -import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.msg.TbMsg; @@ -38,9 +36,7 @@ import java.util.stream.Collectors; name = "delete attributes", configClazz = TbMsgDeleteAttributesConfiguration.class, nodeDescription = "Delete attributes for Message Originator.", - nodeDetails = "Allowed scope parameter values: SERVER/CLIENT/SHARED. If no attributes are selected - " + - "message send via Failure chain. If selected attributes successfully deleted - message send via " + - "Success chain, otherwise Failure chain will be used.", + nodeDetails = "Allowed scope parameter values: SERVER/CLIENT/SHARED. Will try to remove attributes by keys from the list", uiResources = {"static/rulenode/rulenode-core-config.js"}, configDirective = "tbActionNodeDeleteAttributesConfig", icon = "remove_circle" @@ -52,29 +48,19 @@ public class TbMsgDeleteAttributes implements TbNode { @Override public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { this.config = TbNodeUtils.convert(configuration, TbMsgDeleteAttributesConfiguration.class); - if (CollectionUtils.isEmpty(config.getKeys())) { - throw new IllegalArgumentException("Attribute keys list is empty!"); - } } @Override public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException { - List keysPatterns = config.getKeys(); - String scope = TbNodeUtils.processPattern(config.getScope(), msg); - if (DataConstants.SERVER_SCOPE.equals(scope) || - DataConstants.CLIENT_SCOPE.equals(scope) || - DataConstants.SHARED_SCOPE.equals(scope)) { - List keysToDelete = keysPatterns.stream() - .map(keyPattern -> TbNodeUtils.processPattern(keyPattern, msg)) - .distinct() - .filter(StringUtils::isNotBlank) - .collect(Collectors.toList()); - if (keysToDelete.isEmpty()) { - throw new RuntimeException("Selected keys patterns have invalid values!"); - } - ctx.getTelemetryService().deleteAndNotify(ctx.getTenantId(), msg.getOriginator(), scope, keysToDelete, new TelemetryNodeCallback(ctx, msg)); + List keysToDelete = config.getKeys().stream() + .map(keyPattern -> TbNodeUtils.processPattern(keyPattern, msg)) + .distinct() + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()); + if (keysToDelete.isEmpty()) { + ctx.tellFailure(msg, new RuntimeException("Selected keys patterns have invalid values!")); } else { - ctx.tellFailure(msg, new IllegalArgumentException("Unsupported attributes scope '" + scope + "'! Only 'SERVER_SCOPE', 'CLIENT_SCOPE' or 'SHARED_SCOPE' are allowed!")); + ctx.getTelemetryService().deleteAndNotify(ctx.getTenantId(), msg.getOriginator(), config.getScope(), keysToDelete, new TelemetryNodeCallback(ctx, msg)); } } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesConfiguration.java index 785a3d271d..03bef2a4e6 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesConfiguration.java @@ -27,14 +27,12 @@ public class TbMsgDeleteAttributesConfiguration implements NodeConfiguration keys; - private Boolean useScopeAsPattern; @Override public TbMsgDeleteAttributesConfiguration defaultConfiguration() { TbMsgDeleteAttributesConfiguration configuration = new TbMsgDeleteAttributesConfiguration(); configuration.setScope(DataConstants.SERVER_SCOPE); configuration.setKeys(Collections.emptyList()); - configuration.setUseScopeAsPattern(false); return configuration; } } diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesTest.java index 28af7637aa..fbca272e67 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesTest.java @@ -37,7 +37,6 @@ import java.util.Map; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyString; @@ -93,13 +92,6 @@ public class TbMsgDeleteAttributesTest { assertThat(node.config).isEqualTo(config); } - @Test - void givenDefaultConfig_whenInit_thenFail() { - config.setKeys(Collections.emptyList()); - nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config)); - assertThatThrownBy(() -> node.init(ctx, nodeConfiguration)).isInstanceOf(IllegalArgumentException.class); - } - @Test void givenDefaultConfig_whenVerify_thenOK() { TbMsgDeleteAttributesConfiguration defaultConfig = new TbMsgDeleteAttributesConfiguration().defaultConfiguration(); @@ -128,9 +120,9 @@ public class TbMsgDeleteAttributesTest { @Test void giveInvalidScope_whenOnMsg_thenTellFailure() throws Exception { final TbMsgMetaData metaData = new TbMsgMetaData(); - final String data = "{}"; + final String data = "{\"TestAttribute_1\": \"\", \"TestAttribute_2\": \"\"}"; - config.setScope("INVALID_SCOPE"); + config.setKeys(List.of("$[TestAttribute_1]", "$[TestAttribute_2]")); nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config)); node.init(ctx, nodeConfiguration); @@ -143,6 +135,6 @@ public class TbMsgDeleteAttributesTest { verify(ctx, times(1)).tellFailure(newMsgCaptor.capture(), exceptionCaptor.capture()); assertThat(newMsgCaptor.getValue()).isSameAs(msg); - assertThat(exceptionCaptor.getValue()).isInstanceOf(IllegalArgumentException.class); + assertThat(exceptionCaptor.getValue()).isInstanceOf(RuntimeException.class); } } \ No newline at end of file