diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java index 9096ad4815..c030102f14 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java @@ -31,7 +31,6 @@ import org.thingsboard.server.common.msg.TbMsgMetaData; import java.util.Map; import java.util.concurrent.ExecutionException; -import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @RuleNode( @@ -40,8 +39,7 @@ import java.util.concurrent.atomic.AtomicBoolean; configClazz = TbRenameKeysNodeConfiguration.class, nodeDescription = "Renames msg data or metadata keys to the new key names selected in the key mapping.", nodeDetails = "If the key that is selected in the key mapping is missed in the selected msg source(data or metadata), it will be ignored." + - " If the msg data is not a JSON object returns the incoming message as outbound message with Failure chain," + - " otherwise returns transformed messages via Success chain", + " Returns transformed messages via Success chain", uiResources = {"static/rulenode/rulenode-core-config.js"}, configDirective = "tbTransformationNodeRenameKeysConfig", icon = "find_replace" @@ -63,32 +61,34 @@ public class TbRenameKeysNode implements TbNode { public void onMsg(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException, TbNodeException { TbMsgMetaData metaData = msg.getMetaData(); String data = msg.getData(); - AtomicBoolean msgChanged = new AtomicBoolean(false); + boolean msgChanged = false; if (fromMetadata) { Map metaDataMap = metaData.getData(); - renameKeysMapping.forEach((nameKey, newNameKey) -> { + for (Map.Entry entry : renameKeysMapping.entrySet()) { + String nameKey = entry.getKey(); if (metaDataMap.containsKey(nameKey)) { - msgChanged.set(true); - metaDataMap.put(newNameKey, metaDataMap.get(nameKey)); + msgChanged = true; + metaDataMap.put(entry.getValue(), metaDataMap.get(nameKey)); metaDataMap.remove(nameKey); } - }); + } metaData = new TbMsgMetaData(metaDataMap); } else { JsonNode dataNode = JacksonUtil.toJsonNode(msg.getData()); if (dataNode.isObject()) { ObjectNode msgData = (ObjectNode) dataNode; - renameKeysMapping.forEach((nameKey, newNameKey) -> { + for (Map.Entry entry : renameKeysMapping.entrySet()) { + String nameKey = entry.getKey(); if (msgData.has(nameKey)) { - msgChanged.set(true); - msgData.set(newNameKey, msgData.get(nameKey)); + msgChanged = true; + msgData.set(entry.getValue(), msgData.get(nameKey)); msgData.remove(nameKey); } - }); + } data = JacksonUtil.toString(msgData); } } - if (msgChanged.get()) { + if (msgChanged) { ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), metaData, data)); } else { ctx.tellSuccess(msg); @@ -99,4 +99,3 @@ public class TbRenameKeysNode implements TbNode { public void destroy() { } } -