From e00a29761e2ade877e2a25747a304069d40b06b5 Mon Sep 17 00:00:00 2001 From: Dmytro Skarzhynets Date: Tue, 18 Apr 2023 15:37:36 +0300 Subject: [PATCH] Refactor: refactor upgrade script --- .../update/DefaultDataUpdateService.java | 147 +++++++----------- 1 file changed, 58 insertions(+), 89 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java index 8908b5f519..c1c334aef3 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java @@ -29,15 +29,6 @@ import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.rule.engine.flow.TbRuleChainInputNode; import org.thingsboard.rule.engine.flow.TbRuleChainInputNodeConfiguration; import org.thingsboard.rule.engine.metadata.FetchTo; -import org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode; -import org.thingsboard.rule.engine.metadata.TbGetAttributesNode; -import org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode; -import org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode; -import org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode; -import org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode; -import org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode; -import org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode; -import org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode; import org.thingsboard.rule.engine.profile.TbDeviceProfileNode; import org.thingsboard.rule.engine.profile.TbDeviceProfileNodeConfiguration; import org.thingsboard.server.common.data.DataConstants; @@ -228,20 +219,18 @@ public class DefaultDataUpdateService implements DataUpdateService { private void updateEnrichmentRuleNodes() { try { - var fetchToDataNodes = List.of(TbGetAttributesNode.class.getName(), TbGetDeviceAttrNode.class.getName()); - var addToMetadataNodes = List.of(TbGetCustomerDetailsNode.class.getName(), TbGetTenantDetailsNode.class.getName()); - var fetchToMetadataNodes = List.of(TbFetchDeviceCredentialsNode.class.getName()); - var hardCodeMetadataNodes = List.of( - TbGetOriginatorFieldsNode.class.getName(), - TbGetRelatedAttributeNode.class.getName(), - TbGetTenantAttributeNode.class.getName(), - TbGetCustomerAttributeNode.class.getName() - ); - var allNodesToUpdate = new ArrayList<>(hardCodeMetadataNodes); - allNodesToUpdate.addAll(fetchToDataNodes); - allNodesToUpdate.addAll(addToMetadataNodes); - allNodesToUpdate.addAll(fetchToMetadataNodes); var ruleChainIdToTenantId = new HashMap(); + var allNodesToUpdate = List.of( + "org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode", + "org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode", + "org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode", + "org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode", + "org.thingsboard.rule.engine.metadata.TbGetAttributesNode", + "org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode", + "org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode", + "org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode", + "org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode" + ); allNodesToUpdate.forEach(ruleNodeType -> { var ruleNodes = new PageDataIterable<>( pageLink -> ruleChainService.findAllRuleNodesByType(ruleNodeType, pageLink), 1024 @@ -259,74 +248,35 @@ public class DefaultDataUpdateService implements DataUpdateService { continue; } var configObjectNode = (ObjectNode) configuration; - var fetchTo = FetchTo.METADATA; - - if (fetchToDataNodes.contains(ruleNodeType)) { - configObjectNode.remove("fetchToMetadata"); - configObjectNode.remove("addToMetadata"); - if (configObjectNode.has("fetchToData")) { - var fetchToData = configObjectNode.get("fetchToData").asText(); - if ("true".equals(fetchToData)) { - fetchTo = FetchTo.DATA; - } else if ("false".equals(fetchToData)) { - fetchTo = FetchTo.METADATA; - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: fetchToData property has unexpected value: {} Allowed values: true or false!", - ruleNodeType, ruleNode.getId(), fetchToData); - continue; - } - configObjectNode.remove("fetchToData"); - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: fetchToData property is not present!", ruleNodeType, ruleNode.getId()); - continue; - } - } else if (fetchToMetadataNodes.contains(ruleNodeType)) { - configObjectNode.remove("fetchToData"); - configObjectNode.remove("addToMetadata"); - if (configObjectNode.has("fetchToMetadata")) { - var fetchToMetadata = configObjectNode.get("fetchToMetadata").asText(); - if ("true".equals(fetchToMetadata)) { - fetchTo = FetchTo.METADATA; - } else if ("false".equals(fetchToMetadata)) { - fetchTo = FetchTo.DATA; - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: fetchToMetadata property has unexpected value: {} Allowed values: true or false!", - ruleNodeType, ruleNode.getId(), fetchToMetadata); - continue; - } - configObjectNode.remove("fetchToMetadata"); - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: fetchToMetadata property is not present!", ruleNodeType, ruleNode.getId()); - continue; - } - } else if (addToMetadataNodes.contains(ruleNodeType)) { - configObjectNode.remove("fetchToData"); - configObjectNode.remove("fetchToMetadata"); - if (configObjectNode.has("addToMetadata")) { - var addToMetadata = configObjectNode.get("addToMetadata").asText(); - if ("true".equals(addToMetadata)) { - fetchTo = FetchTo.METADATA; - } else if ("false".equals(addToMetadata)) { - fetchTo = FetchTo.DATA; - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: addToMetadata property has unexpected value: {} Allowed values: true or false!", - ruleNodeType, ruleNode.getId(), addToMetadata); - continue; - } - configObjectNode.remove("addToMetadata"); - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: addToMetadata property is not present!", ruleNodeType, ruleNode.getId()); + + FetchTo fetchTo; + + switch (ruleNodeType) { + case "org.thingsboard.rule.engine.metadata.TbGetAttributesNode": + case "org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode": + fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "fetchToData", FetchTo.DATA, FetchTo.METADATA); + break; + case "org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode": + case "org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode": + fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "addToMetadata", FetchTo.METADATA, FetchTo.DATA); + break; + case "org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode": + fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "fetchToMetadata", FetchTo.METADATA, FetchTo.DATA); + break; + case "org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode": + case "org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode": + case "org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode": + case "org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode": + fetchTo = FetchTo.METADATA; + break; + default: + log.error("Failed to update rule node: [{}] with id: [{}] " + + "Reason: Unexpected rule node type!", ruleNodeType, ruleNode.getId()); continue; - } - } else { - log.error("Failed to updated rule node: [{}] with id: [{}] " + - "Reason: Unexpected rule node type!", ruleNodeType, ruleNode.getId()); + } + + if (fetchTo == null) { + log.error("Failed to update rule node: [{}] with id: [{}]", ruleNodeType, ruleNode.getId()); continue; } @@ -352,6 +302,25 @@ public class DefaultDataUpdateService implements DataUpdateService { } } + private FetchTo checkEnrichmentNodeFetchProperty(ObjectNode config, String property, FetchTo ifTrue, FetchTo ifFalse) { + if (config.has(property)) { + var value = config.get(property).asText(); + if ("true".equals(value)) { + config.remove(property); + return ifTrue; + } else if ("false".equals(value)) { + config.remove(property); + return ifFalse; + } else { + log.error(property + " property has unexpected value: {} Allowed values: true or false!", value); + return null; + } + } else { + log.error(property + " property is not present!"); + return null; + } + } + private final PaginatedUpdater deviceProfileEntityDynamicConditionsUpdater = new PaginatedUpdater<>() {