|
|
|
@ -33,9 +33,9 @@ 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.TbGetRelatedDeviceAttrNode; |
|
|
|
import org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode; |
|
|
|
import org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode; |
|
|
|
import org.thingsboard.rule.engine.metadata.TbGetRelatedDeviceAttrNode; |
|
|
|
import org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode; |
|
|
|
import org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode; |
|
|
|
import org.thingsboard.rule.engine.profile.TbDeviceProfileNode; |
|
|
|
@ -228,19 +228,21 @@ public class DefaultDataUpdateService implements DataUpdateService { |
|
|
|
|
|
|
|
private void updateEnrichmentRuleNodes() { |
|
|
|
try { |
|
|
|
var ruleNodeTypesToUpdate = List.of( |
|
|
|
var fetchToDataNodes = List.of(TbGetAttributesNode.class.getName(), TbGetRelatedDeviceAttrNode.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(), |
|
|
|
TbFetchDeviceCredentialsNode.class.getName(), |
|
|
|
TbGetAttributesNode.class.getName(), |
|
|
|
TbGetRelatedDeviceAttrNode.class.getName(), |
|
|
|
TbGetRelatedAttributeNode.class.getName(), |
|
|
|
TbGetTenantAttributeNode.class.getName(), |
|
|
|
TbGetCustomerAttributeNode.class.getName(), |
|
|
|
TbGetCustomerDetailsNode.class.getName(), |
|
|
|
TbGetTenantDetailsNode.class.getName() |
|
|
|
TbGetCustomerAttributeNode.class.getName() |
|
|
|
); |
|
|
|
var allNodesToUpdate = new ArrayList<>(hardCodeMetadataNodes); |
|
|
|
allNodesToUpdate.addAll(fetchToDataNodes); |
|
|
|
allNodesToUpdate.addAll(addToMetadataNodes); |
|
|
|
allNodesToUpdate.addAll(fetchToMetadataNodes); |
|
|
|
var ruleChainIdToTenantId = new HashMap<RuleChainId, TenantId>(); |
|
|
|
ruleNodeTypesToUpdate.forEach(ruleNodeType -> { |
|
|
|
allNodesToUpdate.forEach(ruleNodeType -> { |
|
|
|
var ruleNodes = new PageDataIterable<>( |
|
|
|
pageLink -> ruleChainService.findAllRuleNodesByType(ruleNodeType, pageLink), 1024 |
|
|
|
); |
|
|
|
@ -258,52 +260,80 @@ public class DefaultDataUpdateService implements DataUpdateService { |
|
|
|
} |
|
|
|
var configObjectNode = (ObjectNode) configuration; |
|
|
|
var fetchTo = FetchTo.METADATA; |
|
|
|
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; |
|
|
|
|
|
|
|
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: fetchToMetadata property has unexpected value: {} Allowed values: true or false!", |
|
|
|
ruleNodeType, ruleNode.getId(), fetchToMetadata); |
|
|
|
"Reason: fetchToData property is not present!", ruleNodeType, ruleNode.getId()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
configObjectNode.remove("fetchToMetadata"); |
|
|
|
} |
|
|
|
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 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: fetchToData property has unexpected value: {} Allowed values: true or false!", |
|
|
|
ruleNodeType, ruleNode.getId(), fetchToData); |
|
|
|
"Reason: fetchToMetadata property is not present!", ruleNodeType, ruleNode.getId()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
} else if (addToMetadataNodes.contains(ruleNodeType)) { |
|
|
|
configObjectNode.remove("fetchToData"); |
|
|
|
} |
|
|
|
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; |
|
|
|
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 has unexpected value: {} Allowed values: true or false!", |
|
|
|
ruleNodeType, ruleNode.getId(), addToMetadata); |
|
|
|
"Reason: addToMetadata property is not present!", ruleNodeType, ruleNode.getId()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
configObjectNode.remove("addToMetadata"); |
|
|
|
} else { |
|
|
|
log.error("Failed to updated rule node: [{}] with id: [{}] " + |
|
|
|
"Reason: Unexpected rule node type!", ruleNodeType, ruleNode.getId()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
configObjectNode.put("fetchTo", fetchTo.name()); |
|
|
|
ruleNode.setConfiguration(configObjectNode); |
|
|
|
RuleChainId ruleChainId = ruleNode.getRuleChainId(); |
|
|
|
TenantId tenantId = ruleChainIdToTenantId.computeIfAbsent(ruleChainId, |
|
|
|
var ruleChainId = ruleNode.getRuleChainId(); |
|
|
|
var tenantId = ruleChainIdToTenantId.computeIfAbsent(ruleChainId, |
|
|
|
id -> { |
|
|
|
RuleChain ruleChain = ruleChainService.findRuleChainById(TenantId.SYS_TENANT_ID, id); |
|
|
|
if (ruleChain == null) { |
|
|
|
|