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.server.common.data.util.TbPair;
import java.util.List;
import java.util.regex.Pattern;
public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode {
private static final String FROM_METADATA_PROPERTY = "fromMetadata";
@ -33,28 +30,41 @@ public abstract class TbAbstractTransformNodeWithTbMsgSource implements TbNode {
@Override
public TbPair<Boolean, JsonNode> upgrade(int fromVersion, JsonNode oldConfiguration) throws TbNodeException {
return fromVersion == 0 ?
upgradeToUseTbMsgSource((ObjectNode) oldConfiguration, getKeyToUpgradeFromVersionZero()) :
new TbPair<>(false, oldConfiguration);
ObjectNode configToUpdate = (ObjectNode) oldConfiguration;
switch (fromVersion) {
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)) {
throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' doesn't exists in configuration!");
}
var value = configToUpdate.get(FROM_METADATA_PROPERTY).asText();
if ("true".equals(value)) {
configToUpdate.remove(FROM_METADATA_PROPERTY);
configToUpdate.put(newProperty, TbMsgSource.METADATA.name());
configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.METADATA.name());
return new TbPair<>(true, configToUpdate);
}
if ("false".equals(value)) {
configToUpdate.remove(FROM_METADATA_PROPERTY);
configToUpdate.put(newProperty, TbMsgSource.DATA.name());
configToUpdate.put(getKeyToUpgradeFromVersionZero(), TbMsgSource.DATA.name());
return new TbPair<>(true, configToUpdate);
}
throw new TbNodeException("property to update: '" + FROM_METADATA_PROPERTY + "' has unexpected value: "
+ 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(
type = ComponentType.TRANSFORMATION,
name = "copy key-value pairs",
version = 1,
version = 2,
configClazz = TbCopyKeysNodeConfiguration.class,
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. " +

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(
type = ComponentType.TRANSFORMATION,
name = "delete key-value pairs",
version = 1,
version = 2,
configClazz = TbDeleteKeysNodeConfiguration.class,
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 " +

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(
type = ComponentType.TRANSFORMATION,
name = "rename keys",
version = 1,
version = 2,
configClazz = TbRenameKeysNodeConfiguration.class,
nodeDescription = "Renames message or message metadata keys.",
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() {
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(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() {
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(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() {
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(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