Browse Source

code review

pull/7077/head
Yuriy Lytvynchuk 4 years ago
parent
commit
ee1d8e4189
  1. 58
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java
  2. 5
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeConfiguration.java
  3. 12
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java

58
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java

@ -18,7 +18,6 @@ package org.thingsboard.rule.engine.transform;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.rule.engine.api.RuleNode;
import org.thingsboard.rule.engine.api.TbContext;
@ -33,6 +32,7 @@ import org.thingsboard.server.common.msg.TbMsgMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern;
@ -59,45 +59,41 @@ public class TbDeleteKeysNode implements TbNode {
@Override
public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException {
List<String> keys = config.getKeys();
if (CollectionUtils.isEmpty(keys)) {
ctx.tellSuccess(msg);
Set<String> keys = config.getKeys();
TbMsgMetaData metaData = msg.getMetaData();
String msgData = msg.getData();
if (config.isFromMetadata()) {
Map<String, String> metaDataMap = metaData.getData();
List<String> keysToDelete = new ArrayList<>();
keys.forEach(key -> {
Pattern pattern = Pattern.compile(key);
metaDataMap.forEach((keyMetaData, valueMetaData) -> {
if (pattern.matcher(keyMetaData).matches()) {
keysToDelete.add(keyMetaData);
}
});
});
keysToDelete.forEach(key -> metaDataMap.remove(key));
metaData = new TbMsgMetaData(metaDataMap);
} else {
TbMsgMetaData metaData = msg.getMetaData();
String msgData = msg.getData();
if (config.isFromMetadata()) {
Map<String, String> metaDataMap = metaData.getData();
JsonNode dataNode = JacksonUtil.toJsonNode(msgData);
if (dataNode.isObject()) {
List<String> keysToDelete = new ArrayList<>();
ObjectNode msgDataObject = (ObjectNode) dataNode;
keys.forEach(key -> {
Pattern pattern = Pattern.compile(key);
metaDataMap.forEach((keyMetaData, valueMetaData) -> {
if (pattern.matcher(keyMetaData).matches()) {
keysToDelete.add(keyMetaData);
msgDataObject.fields().forEachRemaining(entry -> {
String keyData = entry.getKey();
if (pattern.matcher(keyData).matches()) {
keysToDelete.add(keyData);
}
});
});
keysToDelete.forEach(key -> metaDataMap.remove(key));
metaData = new TbMsgMetaData(metaDataMap);
} else {
JsonNode dataNode = JacksonUtil.toJsonNode(msgData);
if (dataNode.isObject()) {
List<String> keysToDelete = new ArrayList<>();
ObjectNode msgDataObject = (ObjectNode) dataNode;
keys.forEach(key -> {
Pattern pattern = Pattern.compile(key);
msgDataObject.fields().forEachRemaining(entry -> {
String keyData = entry.getKey();
if (pattern.matcher(keyData).matches()) {
keysToDelete.add(keyData);
}
});
});
msgDataObject.remove(keysToDelete);
msgData = JacksonUtil.toString(msgDataObject);
}
msgDataObject.remove(keysToDelete);
msgData = JacksonUtil.toString(msgDataObject);
}
ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), metaData, msgData));
}
ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), metaData, msgData));
}
@Override

5
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeConfiguration.java

@ -20,17 +20,18 @@ import org.thingsboard.rule.engine.api.NodeConfiguration;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@Data
public class TbDeleteKeysNodeConfiguration implements NodeConfiguration<TbDeleteKeysNodeConfiguration> {
private boolean fromMetadata;
private List<String> keys;
private Set<String> keys;
@Override
public TbDeleteKeysNodeConfiguration defaultConfiguration() {
TbDeleteKeysNodeConfiguration configuration = new TbDeleteKeysNodeConfiguration();
configuration.setKeys(Collections.emptyList());
configuration.setKeys(Collections.emptySet());
configuration.setFromMetadata(false);
return configuration;
}

12
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java

@ -32,8 +32,8 @@ import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.common.msg.queue.TbMsgCallback;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@ -60,7 +60,7 @@ public class TbDeleteKeysNodeTest {
callback = mock(TbMsgCallback.class);
ctx = mock(TbContext.class);
config = new TbDeleteKeysNodeConfiguration().defaultConfiguration();
config.setKeys(List.of("TestKey_1", "TestKey_2", "TestKey_3", "(\\w*)Data(\\w*)"));
config.setKeys(Set.of("TestKey_1", "TestKey_2", "TestKey_3", "(\\w*)Data(\\w*)"));
config.setFromMetadata(true);
nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
node = spy(new TbDeleteKeysNode());
@ -80,7 +80,7 @@ public class TbDeleteKeysNodeTest {
@Test
void givenDefaultConfig_whenVerify_thenOK() {
TbDeleteKeysNodeConfiguration defaultConfig = new TbDeleteKeysNodeConfiguration().defaultConfiguration();
assertThat(defaultConfig.getKeys()).isEqualTo(Collections.emptyList());
assertThat(defaultConfig.getKeys()).isEqualTo(Collections.emptySet());
assertThat(defaultConfig.isFromMetadata()).isEqualTo(false);
}
@ -97,8 +97,8 @@ public class TbDeleteKeysNodeTest {
assertThat(newMsg).isNotNull();
Map<String, String> metaDataMap = newMsg.getMetaData().getData();
assertThat(metaDataMap.containsKey("DigitData")).isEqualTo(false);
assertThat(metaDataMap.containsKey("TempDataValue")).isEqualTo(false);
assertThat(metaDataMap.containsKey("TestKey_1")).isEqualTo(false);
assertThat(metaDataMap.containsKey("voltageDataValue")).isEqualTo(false);
}
@Test
@ -128,7 +128,7 @@ public class TbDeleteKeysNodeTest {
nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(defaultConfig));
node.init(ctx, nodeConfiguration);
String data = "{}";
String data = "{\"Voltage\":220,\"Humidity\":56}";
node.onMsg(ctx, getTbMsg(deviceId, data));
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);

Loading…
Cancel
Save