From c128a7aecb6e23392fb621ace32480ef71896aa4 Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Thu, 14 Dec 2023 14:39:56 +0200 Subject: [PATCH] added additional fix after check bugs on UI --- ...bAbstractTransformNodeWithTbMsgSource.java | 33 +++++++++++++++---- .../rule/engine/transform/TbCopyKeysNode.java | 7 +++- .../engine/transform/TbDeleteKeysNode.java | 7 +++- .../engine/transform/TbRenameKeysNode.java | 7 +++- .../engine/transform/TbCopyKeysNodeTest.java | 6 ++-- .../transform/TbDeleteKeysNodeTest.java | 6 ++-- .../transform/TbRenameKeysNodeTest.java | 6 ++-- 7 files changed, 57 insertions(+), 15 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java index 2213f6a4ee..02e99d90fe 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java @@ -24,9 +24,11 @@ import org.thingsboard.server.common.data.util.TbPair; public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode { - private static final String FROM_METADATA_PROPERTY = "fromMetadata"; + protected static final String FROM_METADATA_PROPERTY = "fromMetadata"; - protected abstract String getKeyToUpgradeFromVersionZero(); + protected abstract String getNewKeyForUpgradeFromVersionZero(); + + protected abstract String getKeyToUpgradeFromVersionOne(); @Override public TbPair upgrade(int fromVersion, JsonNode oldConfiguration) throws TbNodeException { @@ -48,12 +50,12 @@ public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode { var value = configToUpdate.get(FROM_METADATA_PROPERTY).asText(); if ("true".equals(value)) { configToUpdate.remove(FROM_METADATA_PROPERTY); - configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.METADATA.name()); + configToUpdate.put(getNewKeyForUpgradeFromVersionZero(), TbMsgSource.METADATA.name()); return new TbPair<>(true, configToUpdate); } if ("false".equals(value)) { configToUpdate.remove(FROM_METADATA_PROPERTY); - configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.DATA.name()); + configToUpdate.put(getNewKeyForUpgradeFromVersionZero(), TbMsgSource.DATA.name()); return new TbPair<>(true, configToUpdate); } throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' has unexpected value: " @@ -61,10 +63,29 @@ public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode { } private TbPair upgradeNodesWithVersionOneToUseTbMsgSource(ObjectNode configToUpdate) throws TbNodeException { - if (configToUpdate.has(getKeyToUpgradeFromVersionZero())) { + if (configToUpdate.has(getNewKeyForUpgradeFromVersionZero())) { return new TbPair<>(false, configToUpdate); } - return upgradeToUseTbMsgSource(configToUpdate); + return upgradeTbMsgSourceKey(configToUpdate, getKeyToUpgradeFromVersionOne()); + } + + private TbPair upgradeTbMsgSourceKey(ObjectNode configToUpdate, String oldPropertyKey) throws TbNodeException { + if (!configToUpdate.has(oldPropertyKey)) { + throw new TbNodeException("property to update: '" + oldPropertyKey + "' doesn't exists in configuration!"); + } + var value = configToUpdate.get(oldPropertyKey).asText(); + if (TbMsgSource.METADATA.name().equals(value)) { + configToUpdate.remove(oldPropertyKey); + configToUpdate.put(getNewKeyForUpgradeFromVersionZero(), TbMsgSource.METADATA.name()); + return new TbPair<>(true, configToUpdate); + } + if (TbMsgSource.DATA.name().equals(value)) { + configToUpdate.remove(oldPropertyKey); + configToUpdate.put(getNewKeyForUpgradeFromVersionZero(), TbMsgSource.DATA.name()); + return new TbPair<>(true, configToUpdate); + } + throw new TbNodeException("property to update: '" + oldPropertyKey + "' has unexpected value: " + + value + ". Allowed values: true or false!"); } } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java index 7b26d2bd33..b96486fe4c 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java @@ -109,10 +109,15 @@ public class TbCopyKeysNode extends TbAbstractTransformNodeWithTbMsgSource { } @Override - protected String getKeyToUpgradeFromVersionZero() { + protected String getNewKeyForUpgradeFromVersionZero() { return "copyFrom"; } + @Override + protected String getKeyToUpgradeFromVersionOne() { + return FROM_METADATA_PROPERTY; + } + boolean matches(String key) { return compiledKeyPatterns.stream().anyMatch(pattern -> pattern.matcher(key).matches()); } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java index be66944280..65ecdd42e2 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java @@ -104,10 +104,15 @@ public class TbDeleteKeysNode extends TbAbstractTransformNodeWithTbMsgSource { } @Override - protected String getKeyToUpgradeFromVersionZero() { + protected String getNewKeyForUpgradeFromVersionZero() { return "deleteFrom"; } + @Override + protected String getKeyToUpgradeFromVersionOne() { + return "dataToFetch"; + } + boolean matches(String key) { return compiledKeyPatterns.stream().anyMatch(pattern -> pattern.matcher(key).matches()); } 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 1b09570985..64850ee80a 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 @@ -110,8 +110,13 @@ public class TbRenameKeysNode extends TbAbstractTransformNodeWithTbMsgSource { } @Override - protected String getKeyToUpgradeFromVersionZero() { + protected String getNewKeyForUpgradeFromVersionZero() { return "renameIn"; } + @Override + protected String getKeyToUpgradeFromVersionOne() { + return FROM_METADATA_PROPERTY; + } + } diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java index 1efe85966d..ae58298e0d 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java @@ -165,8 +165,10 @@ public class TbCopyKeysNodeTest { return Stream.of( Arguments.of(0, "{\"fromMetadata\":false,\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), Arguments.of(0, "{\"fromMetadata\":true,\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), - Arguments.of(1, "{\"fromMetadata\":true,\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), - Arguments.of(1, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}", false, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}") + Arguments.of(1, "{\"fromMetadata\":\"METADATA\",\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"fromMetadata\":\"DATA\",\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}", false, "{\"copyFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"copyFrom\":\"DATA\",\"keys\":[\"temperature\"]}", false, "{\"copyFrom\":\"DATA\",\"keys\":[\"temperature\"]}") ); } diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java index 9dce929ab3..5acc9f2073 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java @@ -142,8 +142,10 @@ public class TbDeleteKeysNodeTest { return Stream.of( Arguments.of(0, "{\"fromMetadata\":false,\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), Arguments.of(0, "{\"fromMetadata\":true,\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), - Arguments.of(1, "{\"fromMetadata\":true,\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), - Arguments.of(1, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}", false, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}") + Arguments.of(1, "{\"dataToFetch\":\"METADATA\",\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"dataToFetch\":\"DATA\",\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}", false, "{\"deleteFrom\":\"METADATA\",\"keys\":[\"temperature\"]}"), + Arguments.of(1, "{\"deleteFrom\":\"DATA\",\"keys\":[\"temperature\"]}", false, "{\"deleteFrom\":\"DATA\",\"keys\":[\"temperature\"]}") ); } diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java index daafd4675a..23f6e33f26 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java @@ -158,8 +158,10 @@ public class TbRenameKeysNodeTest { return Stream.of( Arguments.of(0, "{\"fromMetadata\":false,\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), Arguments.of(0, "{\"fromMetadata\":true,\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), - Arguments.of(1, "{\"fromMetadata\":true,\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), - Arguments.of(1, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}", false, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}") + Arguments.of(1, "{\"fromMetadata\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), + Arguments.of(1, "{\"fromMetadata\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), + Arguments.of(1, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}", false, "{\"renameIn\":\"METADATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), + Arguments.of(1, "{\"renameIn\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}", false, "{\"renameIn\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}") ); }