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