Browse Source

added hotfix upgrade for transformation rule nodes with TbMsgSource

pull/9844/head
ShvaykaD 3 years ago
parent
commit
b3bfe28cc8
  1. 28
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java
  2. 2
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java
  3. 2
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java
  4. 2
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java
  5. 4
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java
  6. 4
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java
  7. 4
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java

28
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java

@ -22,9 +22,6 @@ import org.thingsboard.rule.engine.api.TbNodeException;
import org.thingsboard.rule.engine.util.TbMsgSource; import org.thingsboard.rule.engine.util.TbMsgSource;
import org.thingsboard.server.common.data.util.TbPair; import org.thingsboard.server.common.data.util.TbPair;
import java.util.List;
import java.util.regex.Pattern;
public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode { public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode {
private static final String FROM_METADATA_PROPERTY = "fromMetadata"; private static final String FROM_METADATA_PROPERTY = "fromMetadata";
@ -33,28 +30,41 @@ public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode {
@Override @Override
public TbPair<Boolean, JsonNode> upgrade(int fromVersion, JsonNode oldConfiguration) throws TbNodeException { public TbPair<Boolean, JsonNode> upgrade(int fromVersion, JsonNode oldConfiguration) throws TbNodeException {
return fromVersion == 0 ? ObjectNode configToUpdate = (ObjectNode) oldConfiguration;
upgradeToUseTbMsgSource((ObjectNode) oldConfiguration, getKeyToUpgradeFromVersionZero()) : switch (fromVersion) {
new TbPair<>(false, oldConfiguration); case 0:
return upgradeToUseTbMsgSource(configToUpdate);
case 1:
return upgradeNodesWithVersionOneToUseTbMsgSource(configToUpdate);
default:
return new TbPair<>(false, oldConfiguration);
}
} }
private TbPair<Boolean, JsonNode> upgradeToUseTbMsgSource(ObjectNode configToUpdate, String newProperty) throws TbNodeException { private TbPair<Boolean, JsonNode> upgradeToUseTbMsgSource(ObjectNode configToUpdate) throws TbNodeException {
if (!configToUpdate.has(FROM_METADATA_PROPERTY)) { if (!configToUpdate.has(FROM_METADATA_PROPERTY)) {
throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' doesn't exists in configuration!"); throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' doesn't exists in configuration!");
} }
var value = configToUpdate.get(FROM_METADATA_PROPERTY).asText(); var value = configToUpdate.get(FROM_METADATA_PROPERTY).asText();
if ("true".equals(value)) { if ("true".equals(value)) {
configToUpdate.remove(FROM_METADATA_PROPERTY); configToUpdate.remove(FROM_METADATA_PROPERTY);
configToUpdate.put(newProperty, TbMsgSource.METADATA.name()); configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.METADATA.name());
return new TbPair<>(true, configToUpdate); return new TbPair<>(true, configToUpdate);
} }
if ("false".equals(value)) { if ("false".equals(value)) {
configToUpdate.remove(FROM_METADATA_PROPERTY); configToUpdate.remove(FROM_METADATA_PROPERTY);
configToUpdate.put(newProperty, TbMsgSource.DATA.name()); configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.DATA.name());
return new TbPair<>(true, configToUpdate); return new TbPair<>(true, configToUpdate);
} }
throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' has unexpected value: " throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' has unexpected value: "
+ value + ". Allowed values: true or false!"); + value + ". Allowed values: true or false!");
} }
private TbPair<Boolean, JsonNode> upgradeNodesWithVersionOneToUseTbMsgSource(ObjectNode configToUpdate) throws TbNodeException {
if (configToUpdate.has(getKeyToUpgradeFromVersionZero())) {
return new TbPair<>(false, configToUpdate);
}
return upgradeToUseTbMsgSource(configToUpdate);
}
} }

2
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java

@ -40,7 +40,7 @@ import java.util.stream.Collectors;
@RuleNode( @RuleNode(
type = ComponentType.TRANSFORMATION, type = ComponentType.TRANSFORMATION,
name = "copy key-value pairs", name = "copy key-value pairs",
version = 1, version = 2,
configClazz = TbCopyKeysNodeConfiguration.class, configClazz = TbCopyKeysNodeConfiguration.class,
nodeDescription = "Copies key-value pairs from message to message metadata or vice-versa.", nodeDescription = "Copies key-value pairs from message to message metadata or vice-versa.",
nodeDetails = "Copies key-value pairs from the message to message metadata, or vice-versa, according to the configured direction and keys. " + nodeDetails = "Copies key-value pairs from the message to message metadata, or vice-versa, according to the configured direction and keys. " +

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

@ -40,7 +40,7 @@ import java.util.stream.Collectors;
@RuleNode( @RuleNode(
type = ComponentType.TRANSFORMATION, type = ComponentType.TRANSFORMATION,
name = "delete key-value pairs", name = "delete key-value pairs",
version = 1, version = 2,
configClazz = TbDeleteKeysNodeConfiguration.class, configClazz = TbDeleteKeysNodeConfiguration.class,
nodeDescription = "Deletes key-value pairs from message or message metadata.", nodeDescription = "Deletes key-value pairs from message or message metadata.",
nodeDetails = "Deletes key-value pairs from the message or message metadata according to the configured " + nodeDetails = "Deletes key-value pairs from the message or message metadata according to the configured " +

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

@ -37,7 +37,7 @@ import java.util.concurrent.ExecutionException;
@RuleNode( @RuleNode(
type = ComponentType.TRANSFORMATION, type = ComponentType.TRANSFORMATION,
name = "rename keys", name = "rename keys",
version = 1, version = 2,
configClazz = TbRenameKeysNodeConfiguration.class, configClazz = TbRenameKeysNodeConfiguration.class,
nodeDescription = "Renames message or message metadata keys.", nodeDescription = "Renames message or message metadata keys.",
nodeDetails = "Renames keys in the message or message metadata according to the provided mapping. " + nodeDetails = "Renames keys in the message or message metadata according to the provided mapping. " +

4
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java

@ -164,7 +164,9 @@ public class TbCopyKeysNodeTest {
private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() { private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() {
return Stream.of( return Stream.of(
Arguments.of(0, "{\"fromMetadata\":false,\"keys\":[\"temperature\"]}", true, "{\"copyFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), 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(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\"]}")
); );
} }

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

@ -141,7 +141,9 @@ public class TbDeleteKeysNodeTest {
private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() { private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() {
return Stream.of( return Stream.of(
Arguments.of(0, "{\"fromMetadata\":false,\"keys\":[\"temperature\"]}", true, "{\"deleteFrom\":\"DATA\",\"keys\":[\"temperature\"]}"), 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(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\"]}")
); );
} }

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

@ -157,7 +157,9 @@ public class TbRenameKeysNodeTest {
private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() { private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyUpgradeResultAndConfig() {
return Stream.of( return Stream.of(
Arguments.of(0, "{\"fromMetadata\":false,\"renameKeysMapping\":{\"temp\":\"temperature\"}}", true, "{\"renameIn\":\"DATA\",\"renameKeysMapping\":{\"temp\":\"temperature\"}}"), 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(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\"}}")
); );
} }

Loading…
Cancel
Save