diff options
author | danielhanrahan <daniel.hanrahan@est.tech> | 2023-01-19 18:20:11 +0000 |
---|---|---|
committer | Daniel Hanrahan <daniel.hanrahan@est.tech> | 2023-01-24 10:24:09 +0000 |
commit | 4111a57d03f054b46fddf030730d2e42b2755233 (patch) | |
tree | 2c253dcb337ef052bb3f9b826316a419d84f76e8 /cps-ri/src/main | |
parent | a9a9b6ccaee56d3622318215477798c79acd7586 (diff) |
Handle root xpaths in getDataNodes
Issue-ID: CPS-1458
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: I64abf97317afe4335c8d04169689ee1396e75860
Diffstat (limited to 'cps-ri/src/main')
-rw-r--r-- | cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java index b85b30d9d4..d2b7273fe1 100644 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java @@ -265,17 +265,26 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName); final AnchorEntity anchorEntity = anchorRepository.getByDataspaceAndName(dataspaceEntity, anchorName); - final Set<String> normalizedXpaths = new HashSet<>(xpaths.size()); - for (final String xpath : xpaths) { + final Collection<String> nonRootXpaths = new HashSet<>(xpaths); + final boolean haveRootXpath = nonRootXpaths.removeIf(CpsDataPersistenceServiceImpl::isRootXpath); + + final Collection<String> normalizedXpaths = new HashSet<>(nonRootXpaths.size()); + for (final String xpath : nonRootXpaths) { try { normalizedXpaths.add(CpsPathUtil.getNormalizedXpath(xpath)); } catch (final PathParsingException e) { log.warn("Error parsing xpath \"{}\" in getDataNodes: {}", xpath, e.getMessage()); } } + final Collection<FragmentEntity> fragmentEntities = + new HashSet<>(fragmentRepository.findByAnchorAndMultipleCpsPaths(anchorEntity.getId(), normalizedXpaths)); + + if (haveRootXpath) { + final List<FragmentExtract> fragmentExtracts = fragmentRepository.getTopLevelFragments(dataspaceEntity, + anchorEntity); + fragmentEntities.addAll(FragmentEntityArranger.toFragmentEntityTrees(anchorEntity, fragmentExtracts)); + } - final List<FragmentEntity> fragmentEntities = - fragmentRepository.findByAnchorAndMultipleCpsPaths(anchorEntity.getId(), normalizedXpaths); return toDataNodes(fragmentEntities, fetchDescendantsOption); } |