Browse Source

Merge pull request #9844 from ShvaykaD/hotfix/transform-nodes-with-tb-msg-source

Added hotfix upgrade for transformation rule nodes with TbMsgSource
pull/9861/head
Andrew Shvayka 3 years ago
committed by GitHub
parent
commit
10dc436417
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 53
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNodeWithTbMsgSource.java
  2. 9
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java
  3. 9
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNode.java
  4. 9
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbRenameKeysNode.java
  5. 6
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java
  6. 6
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbDeleteKeysNodeTest.java
  7. 6
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbRenameKeysNodeTest.java

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

@ -22,39 +22,70 @@ 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";
protected static final String FROM_METADATA_PROPERTY = "fromMetadata";
protected abstract String getNewKeyForUpgradeFromVersionZero();
protected abstract String getKeyToUpgradeFromVersionZero();
protected abstract String getKeyToUpgradeFromVersionOne();
@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(getNewKeyForUpgradeFromVersionZero(), 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(getNewKeyForUpgradeFromVersionZero(), 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(getNewKeyForUpgradeFromVersionZero())) {
return new TbPair<>(false, configToUpdate);
}
return upgradeTbMsgSourceKey(configToUpdate, getKeyToUpgradeFromVersionOne());
}
private TbPair<Boolean, JsonNode> 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!");
}
}

9
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. " +
@ -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());
}

9
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 " +
@ -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());
}

9
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. " +
@ -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;
}
}

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

@ -164,7 +164,11 @@ 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\":\"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\"]}")
);
}

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

@ -141,7 +141,11 @@ 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, "{\"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\"]}")
);
}

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

@ -157,7 +157,11 @@ 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\":\"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\"}}")
);
}

Loading…
Cancel
Save