Browse Source

refactor code

pull/7016/head
Yuriy Lytvynchuk 4 years ago
parent
commit
1246a68abf
  1. 20
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java
  2. 3
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeConfiguration.java
  3. 17
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java

20
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java

@ -31,6 +31,7 @@ import org.thingsboard.server.common.msg.TbMsgMetaData;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
@RuleNode(
@ -48,21 +49,26 @@ import java.util.concurrent.ExecutionException;
public class TbRenameKeysNode implements TbNode {
TbRenameKeysNodeConfiguration config;
Map<String, String> renameKeysMapping;
boolean fromMetadata;
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbRenameKeysNodeConfiguration.class);
this.renameKeysMapping = config.getRenameKeysMapping();
this.fromMetadata = config.isFromMetadata();
}
@Override
public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException {
Map<String, String> renameKeysMapping = config.getRenameKeysMapping();
TbMsgMetaData metaData = msg.getMetaData();
String data = msg.getData();
if (config.isFromMetadata()) {
AtomicBoolean msgChanged = new AtomicBoolean(false);
if (fromMetadata) {
Map<String, String> metaDataMap = metaData.getData();
renameKeysMapping.forEach((nameKey, newNameKey) -> {
if (metaDataMap.containsKey(nameKey)) {
msgChanged.set(true);
metaDataMap.put(newNameKey, metaDataMap.get(nameKey));
metaDataMap.remove(nameKey);
}
@ -74,17 +80,19 @@ public class TbRenameKeysNode implements TbNode {
ObjectNode msgData = (ObjectNode) dataNode;
renameKeysMapping.forEach((nameKey, newNameKey) -> {
if (msgData.has(nameKey)) {
msgChanged.set(true);
msgData.set(newNameKey, msgData.get(nameKey));
msgData.remove(nameKey);
}
});
data = JacksonUtil.toString(msgData);
} else {
ctx.tellFailure(msg, new RuntimeException("Msg data is not a JSON Object!"));
return;
}
}
ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), metaData, data));
if (msgChanged.get()) {
ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), metaData, data));
} else {
ctx.tellSuccess(msg);
}
}
@Override

3
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeConfiguration.java

@ -36,6 +36,3 @@ public class TbRenameKeysNodeConfiguration implements NodeConfiguration<TbRename
}
}

17
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java

@ -139,16 +139,19 @@ public class TbRenameKeysNodeTest {
}
@Test
void givenMsgDataNotJSONObject_whenOnMsg_thenTellFailure() throws Exception {
void givenMsgDataNotJSONObject_whenOnMsg_thenVerifyOutput() throws Exception {
String data = "[]";
node.onMsg(ctx, getTbMsg(deviceId, data));
TbMsg msg = getTbMsg(deviceId, data);
node.onMsg(ctx, msg);
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
ArgumentCaptor<Exception> exceptionCaptor = ArgumentCaptor.forClass(Exception.class);
verify(ctx, never()).tellSuccess(any());
verify(ctx, times(1)).tellFailure(newMsgCaptor.capture(), exceptionCaptor.capture());
verify(ctx, times(1)).tellSuccess(newMsgCaptor.capture());
verify(ctx, never()).tellFailure(any(), any());
TbMsg newMsg = newMsgCaptor.getValue();
assertThat(newMsg).isNotNull();
assertThat(exceptionCaptor.getValue()).isInstanceOf(RuntimeException.class);
assertThat(newMsg).isSameAs(msg);
}
private TbMsg getTbMsg(EntityId entityId, String data) {
@ -159,4 +162,4 @@ public class TbRenameKeysNodeTest {
);
return TbMsg.newMsg("POST_ATTRIBUTES_REQUEST", entityId, new TbMsgMetaData(mdMap), data, callback);
}
}
}

Loading…
Cancel
Save