From 5452b5ea786a3e7def19c1f328c43ec264da38d5 Mon Sep 17 00:00:00 2001 From: emaclee Date: Wed, 21 Dec 2022 09:29:24 +0000 Subject: Add fix for posting nodes with xPath with '/' - YangUtils method changed from using REGEX to cps path parser - unit test added for cps path util Issue-ID: CPS-1433 Signed-off-by: emaclee Change-Id: Ibb9efdd09423f9bade4a4a557d7d9ed49aa44ef4 --- .../main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java | 11 +++++++++-- .../main/java/org/onap/cps/cpspath/parser/CpsPathQuery.java | 2 ++ .../main/java/org/onap/cps/cpspath/parser/CpsPathUtil.java | 6 ++++++ 3 files changed, 17 insertions(+), 2 deletions(-) (limited to 'cps-path-parser/src/main/java/org') diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java index 718312012..3a9d70ebb 100644 --- a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java +++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java @@ -22,7 +22,9 @@ package org.onap.cps.cpspath.parser; import static org.onap.cps.cpspath.parser.CpsPathPrefixType.DESCENDANT; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.onap.cps.cpspath.parser.antlr4.CpsPathBaseListener; import org.onap.cps.cpspath.parser.antlr4.CpsPathParser; @@ -50,6 +52,8 @@ public class CpsPathBuilder extends CpsPathBaseListener { boolean processingAncestorAxis = false; + private List containerNames = new ArrayList<>(); + @Override public void exitInvalidPostFix(final CpsPathParser.InvalidPostFixContext ctx) { throw new PathParsingException(ctx.getText()); @@ -146,6 +150,7 @@ public class CpsPathBuilder extends CpsPathBaseListener { CpsPathQuery build() { cpsPathQuery.setNormalizedXpath(normalizedXpathBuilder.toString()); + cpsPathQuery.setContainerNames(containerNames); return cpsPathQuery; } @@ -155,10 +160,12 @@ public class CpsPathBuilder extends CpsPathBaseListener { @Override public void exitContainerName(final CpsPathParser.ContainerNameContext ctx) { + final String containerName = ctx.getText(); normalizedXpathBuilder.append("/") - .append(ctx.getText()); + .append(containerName); + containerNames.add(containerName); if (processingAncestorAxis) { - normalizedAncestorPathBuilder.append("/").append(ctx.getText()); + normalizedAncestorPathBuilder.append("/").append(containerName); } } diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathQuery.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathQuery.java index a9bd5d81c..c9df8df90 100644 --- a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathQuery.java +++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathQuery.java @@ -22,6 +22,7 @@ package org.onap.cps.cpspath.parser; import static org.onap.cps.cpspath.parser.CpsPathPrefixType.ABSOLUTE; +import java.util.List; import java.util.Map; import lombok.AccessLevel; import lombok.Getter; @@ -34,6 +35,7 @@ public class CpsPathQuery { private String xpathPrefix; private String normalizedParentPath; private String normalizedXpath; + private List containerNames; private CpsPathPrefixType cpsPathPrefixType = ABSOLUTE; private String descendantName; private Map leavesData; diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathUtil.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathUtil.java index 283463b51..60f0e2efc 100644 --- a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathUtil.java +++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathUtil.java @@ -22,6 +22,7 @@ package org.onap.cps.cpspath.parser; import static org.onap.cps.cpspath.parser.CpsPathPrefixType.ABSOLUTE; +import java.util.List; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -60,6 +61,11 @@ public class CpsPathUtil { return getCpsPathBuilder(xpathSource).build().getNormalizedParentPath(); } + public static String[] getXpathNodeIdSequence(final String xpathSource) { + final List containerNames = getCpsPathBuilder(xpathSource).build().getContainerNames(); + return containerNames.toArray(new String[containerNames.size()]); + } + /** * Returns boolean indicating xpath is an absolute path to a list element. -- cgit 1.2.3-korg