diff options
author | 2023-07-12 16:11:07 +0100 | |
---|---|---|
committer | 2023-07-13 11:38:53 +0100 | |
commit | d45fe759ba6d693fcaa9247f89d28c6a3162b2c0 (patch) | |
tree | 89faa0dfaf1719ed754e05a0d0e00273fe3033eb /cps-service/src/main/java | |
parent | 46d25a52084252a7bb34f084e75bcdd100e7c9ab (diff) |
Fix handling of special characters in prefix names
This fixes issues with special characters like square brackets
- Make PrefixResolver use CpsPathParser instead of regex
- Make DataMapUtils use CpsPathParser instead of String parsing
Issue-ID: CPS-1758
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: I6dd66eee398a46a69c0229059195f5096ab6fdec
Diffstat (limited to 'cps-service/src/main/java')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java | 9 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java | 16 |
2 files changed, 13 insertions, 12 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java index b0e109baf..b4d5a0944 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java +++ b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Pantheon.tech - * Modifications (C) 2021-2022 Nordix Foundation + * Modifications (C) 2021-2023 Nordix Foundation * Modifications Copyright (C) 2022 Bell Canada * Modifications Copyright (C) 2022-2023 TechMahindra Ltd. * ================================================================================ @@ -33,6 +33,8 @@ import java.util.Collections; import java.util.Map; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.onap.cps.cpspath.parser.CpsPathQuery; +import org.onap.cps.cpspath.parser.CpsPathUtil; import org.onap.cps.spi.model.DataNode; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -106,8 +108,9 @@ public class DataMapUtils { } private static String getNodeIdentifier(String xpath) { - if (xpath.endsWith("]")) { - xpath = xpath.substring(0, xpath.lastIndexOf('[')); + final CpsPathQuery cpsPathQuery = CpsPathUtil.getCpsPathQuery(xpath); + if (cpsPathQuery.isPathToListElement()) { + xpath = cpsPathQuery.getXpathPrefix(); } final int fromIndex = xpath.lastIndexOf('/') + 1; return xpath.substring(fromIndex); diff --git a/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java b/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java index 58b239c34..d58ddf4fa 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java +++ b/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022 Nordix Foundation. + * Copyright (C) 2022-2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,12 +25,13 @@ import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import lombok.RequiredArgsConstructor; import org.onap.cps.api.CpsAdminService; import org.onap.cps.api.impl.YangTextSchemaSourceSetCache; import org.onap.cps.cache.AnchorDataCacheEntry; +import org.onap.cps.cpspath.parser.CpsPathPrefixType; +import org.onap.cps.cpspath.parser.CpsPathQuery; +import org.onap.cps.cpspath.parser.CpsPathUtil; import org.onap.cps.spi.model.Anchor; import org.onap.cps.yang.YangTextSchemaSourceSet; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -53,9 +54,6 @@ public class PrefixResolver { private final IMap<String, AnchorDataCacheEntry> anchorDataCache; - private static final Pattern TOP_LEVEL_NODE_NAME_FINDER - = Pattern.compile("\\/([\\w-]*)(\\[@(?!.*\\[).*?])?(\\/.*)?"); //NOSONAR - /** * Get the module prefix for the given xpath for a dataspace and anchor name. * @@ -93,9 +91,9 @@ public class PrefixResolver { private String getPrefixForTopContainer(final Map<String, String> prefixPerContainerName, final String xpath) { - final Matcher matcher = TOP_LEVEL_NODE_NAME_FINDER.matcher(xpath); - if (matcher.matches()) { - final String topLevelContainerName = matcher.group(1); + final CpsPathQuery cpsPathQuery = CpsPathUtil.getCpsPathQuery(xpath); + if (cpsPathQuery.getCpsPathPrefixType() == CpsPathPrefixType.ABSOLUTE) { + final String topLevelContainerName = cpsPathQuery.getContainerNames().get(0); if (prefixPerContainerName.containsKey(topLevelContainerName)) { return prefixPerContainerName.get(topLevelContainerName); } |