diff options
author | 2024-12-04 23:17:36 +0000 | |
---|---|---|
committer | 2025-02-04 11:09:01 +0000 | |
commit | 59fa1bffe797d2e03212f6037aee732b51e1cb92 (patch) | |
tree | f4b084f44dda19c6b38db530e12a88521fc89926 /cps-ri/src/main/java/org/onap | |
parent | 59f1cc4c5994da34f2c48a2347499f9cfb7bd836 (diff) |
Simple implementation of attribute-axis
This minimally implements attribute-axis using existing
queryDataNodes API. Acceptance tests are un-ignored now.
Issue-ID: CPS-2416
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: Ia06be3dd85dfce261d9d78529784d54d84b71bcd
Diffstat (limited to 'cps-ri/src/main/java/org/onap')
-rw-r--r-- | cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java index 52fd7f2be1..ac6fe38ee7 100644 --- a/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021-2024 Nordix Foundation + * Copyright (C) 2021-2025 Nordix Foundation * Modifications Copyright (C) 2021 Pantheon.tech * Modifications Copyright (C) 2020-2022 Bell Canada. * Modifications Copyright (C) 2022-2023 TechMahindra Ltd. @@ -37,6 +37,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; import java.util.stream.Collectors; @@ -230,6 +231,27 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService } @Override + public <T> Set<T> queryDataLeaf(final String dataspaceName, final String anchorName, final String cpsPath, + final Class<T> targetClass) { + final CpsPathQuery cpsPathQuery = getCpsPathQuery(cpsPath); + if (!cpsPathQuery.hasAttributeAxis()) { + throw new IllegalArgumentException( + "Only Cps Path Queries with attribute-axis are supported by queryDataLeaf"); + } + + final String attributeName = cpsPathQuery.getAttributeAxisAttributeName(); + final List<DataNode> dataNodes = queryDataNodes(dataspaceName, anchorName, cpsPath, + FetchDescendantsOption.OMIT_DESCENDANTS); + return dataNodes.stream() + .map(dataNode -> { + final Object attributeValue = dataNode.getLeaves().get(attributeName); + return targetClass.isInstance(attributeValue) ? targetClass.cast(attributeValue) : null; + }) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } + + @Override @Timed(value = "cps.data.persistence.service.datanode.query.anchors", description = "Time taken to query data nodes across all anchors or list of anchors") public List<DataNode> queryDataNodesAcrossAnchors(final String dataspaceName, final String cpsPath, |