summaryrefslogtreecommitdiffstats
path: root/cps-service/src/main
diff options
context:
space:
mode:
authordanielhanrahan <daniel.hanrahan@est.tech>2023-07-12 16:11:07 +0100
committerdanielhanrahan <daniel.hanrahan@est.tech>2023-07-13 11:38:53 +0100
commitd45fe759ba6d693fcaa9247f89d28c6a3162b2c0 (patch)
tree89faa0dfaf1719ed754e05a0d0e00273fe3033eb /cps-service/src/main
parent46d25a52084252a7bb34f084e75bcdd100e7c9ab (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')
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java9
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java16
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 b0e109bafd..b4d5a09447 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 58b239c34c..d58ddf4fa9 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);
}