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.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j @Slf4j
@RuleNode( @RuleNode(
@ -48,21 +49,26 @@ import java.util.concurrent.ExecutionException;
public class TbRenameKeysNode implements TbNode { public class TbRenameKeysNode implements TbNode {
TbRenameKeysNodeConfiguration config; TbRenameKeysNodeConfiguration config;
Map<String, String> renameKeysMapping;
boolean fromMetadata;
@Override @Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbRenameKeysNodeConfiguration.class); this.config = TbNodeUtils.convert(configuration, TbRenameKeysNodeConfiguration.class);
this.renameKeysMapping = config.getRenameKeysMapping();
this.fromMetadata = config.isFromMetadata();
} }
@Override @Override
public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException { public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException {
Map<String, String> renameKeysMapping = config.getRenameKeysMapping();
TbMsgMetaData metaData = msg.getMetaData(); TbMsgMetaData metaData = msg.getMetaData();
String data = msg.getData(); String data = msg.getData();
if (config.isFromMetadata()) { AtomicBoolean msgChanged = new AtomicBoolean(false);
if (fromMetadata) {
Map<String, String> metaDataMap = metaData.getData(); Map<String, String> metaDataMap = metaData.getData();
renameKeysMapping.forEach((nameKey, newNameKey) -> { renameKeysMapping.forEach((nameKey, newNameKey) -> {
if (metaDataMap.containsKey(nameKey)) { if (metaDataMap.containsKey(nameKey)) {
msgChanged.set(true);
metaDataMap.put(newNameKey, metaDataMap.get(nameKey)); metaDataMap.put(newNameKey, metaDataMap.get(nameKey));
metaDataMap.remove(nameKey); metaDataMap.remove(nameKey);
} }
@ -74,17 +80,19 @@ public class TbRenameKeysNode implements TbNode {
ObjectNode msgData = (ObjectNode) dataNode; ObjectNode msgData = (ObjectNode) dataNode;
renameKeysMapping.forEach((nameKey, newNameKey) -> { renameKeysMapping.forEach((nameKey, newNameKey) -> {
if (msgData.has(nameKey)) { if (msgData.has(nameKey)) {
msgChanged.set(true);
msgData.set(newNameKey, msgData.get(nameKey)); msgData.set(newNameKey, msgData.get(nameKey));
msgData.remove(nameKey); msgData.remove(nameKey);
} }
}); });
data = JacksonUtil.toString(msgData); 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 @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 @Test
void givenMsgDataNotJSONObject_whenOnMsg_thenTellFailure() throws Exception { void givenMsgDataNotJSONObject_whenOnMsg_thenVerifyOutput() throws Exception {
String data = "[]"; 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<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
ArgumentCaptor<Exception> exceptionCaptor = ArgumentCaptor.forClass(Exception.class); verify(ctx, times(1)).tellSuccess(newMsgCaptor.capture());
verify(ctx, never()).tellSuccess(any()); verify(ctx, never()).tellFailure(any(), any());
verify(ctx, times(1)).tellFailure(newMsgCaptor.capture(), exceptionCaptor.capture());
TbMsg newMsg = newMsgCaptor.getValue();
assertThat(newMsg).isNotNull();
assertThat(exceptionCaptor.getValue()).isInstanceOf(RuntimeException.class); assertThat(newMsg).isSameAs(msg);
} }
private TbMsg getTbMsg(EntityId entityId, String data) { 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); return TbMsg.newMsg("POST_ATTRIBUTES_REQUEST", entityId, new TbMsgMetaData(mdMap), data, callback);
} }
} }

Loading…
Cancel
Save