diff options
author | Rudrangi Anupriya <ra00745022@techmahindra.com> | 2023-04-13 22:49:06 +0530 |
---|---|---|
committer | Rudrangi Anupriya <ra00745022@techmahindra.com> | 2023-04-14 18:11:50 +0530 |
commit | c4621cbcb1f9aad97ba3389468546444d1e9f3dc (patch) | |
tree | 3d65556788ac1be9257ffe6d266f0f258ee9b6d1 /cps-path-parser/src/main | |
parent | 0bc4f677b59b616ebc5eb5e4fd9529ca2a497cf6 (diff) |
Add OR operator to cps-path
Issue-ID: CPS-1215
Change-Id: I91fdf5bddcc4fc12a8cf9dbce75f77c832c55871
Signed-off-by: Rudrangi Anupriya <ra00745022@techmahindra.com>
Diffstat (limited to 'cps-path-parser/src/main')
4 files changed, 85 insertions, 11 deletions
diff --git a/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4 b/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4 index db09b3c532..d4718111f6 100644 --- a/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4 +++ b/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4 @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021-2022 Nordix Foundation + * Modifications Copyright (C) 2023 TechMahindra Ltd * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,14 +41,16 @@ yangElement : containerName listElementRef? ; containerName : QName ; -listElementRef : OB leafCondition ( KW_AND leafCondition)* CB ; +listElementRef : OB leafCondition ( booleanOperators leafCondition)* CB ; -multipleLeafConditions : OB leafCondition ( KW_AND leafCondition)* CB ; +multipleLeafConditions : OB leafCondition ( booleanOperators leafCondition)* CB ; leafCondition : AT leafName EQ ( IntegerLiteral | StringLiteral) ; leafName : QName ; +booleanOperators : ( KW_AND | KW_OR ) ; + invalidPostFix : (AT | CB | COLONCOLON | EQ ).+ ; /* @@ -68,6 +71,7 @@ SLASH : '/' ; KW_ANCESTOR : 'ancestor' ; KW_AND : 'and' ; KW_TEXT_FUNCTION: 'text()' ; +KW_OR : 'or' ; IntegerLiteral : FragDigits ; // Add below type definitions for leafvalue comparision in https://jira.onap.org/browse/CPS-440 diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBooleanOperatorType.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBooleanOperatorType.java new file mode 100644 index 0000000000..b2f1dddb19 --- /dev/null +++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBooleanOperatorType.java @@ -0,0 +1,51 @@ +/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2023 TechMahindra Ltd
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.cpspath.parser;
+
+public enum CpsPathBooleanOperatorType {
+ AND("and"),
+ OR("or");
+
+ private final String operatorValue;
+
+ CpsPathBooleanOperatorType(final String operatorValue) {
+ this.operatorValue = operatorValue;
+ }
+
+ public String getValues() {
+ return this.operatorValue;
+ }
+
+ /**
+ * Finds the value of the given enumeration.
+ *
+ * @param operatorValue value of the enum
+ * @return a booleanOperatorType
+ */
+ public static CpsPathBooleanOperatorType fromString(final String operatorValue) {
+ for (final CpsPathBooleanOperatorType booleanOperatorType : CpsPathBooleanOperatorType.values()) {
+ if (booleanOperatorType.operatorValue.equalsIgnoreCase(operatorValue)) {
+ return booleanOperatorType;
+ }
+ }
+ return null;
+ }
+}
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 3a9d70ebbc..4299d13081 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 @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021-2022 Nordix Foundation + * Modifications Copyright (C) 2023 TechMahindra Ltd * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,8 +25,10 @@ import static org.onap.cps.cpspath.parser.CpsPathPrefixType.DESCENDANT; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Queue; import org.onap.cps.cpspath.parser.antlr4.CpsPathBaseListener; import org.onap.cps.cpspath.parser.antlr4.CpsPathParser; import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.AncestorAxisContext; @@ -54,6 +57,10 @@ public class CpsPathBuilder extends CpsPathBaseListener { private List<String> containerNames = new ArrayList<>(); + final List<String> booleanOperators = new ArrayList<>(); + + final Queue<String> booleanOperatorsQueue = new LinkedList<>(); + @Override public void exitInvalidPostFix(final CpsPathParser.InvalidPostFixContext ctx) { throw new PathParsingException(ctx.getText()); @@ -90,13 +97,23 @@ public class CpsPathBuilder extends CpsPathBaseListener { throw new PathParsingException("Unsupported comparison value encountered in expression" + ctx.getText()); } leavesData.put(ctx.leafName().getText(), comparisonValue); - appendCondition(normalizedXpathBuilder, ctx.leafName().getText(), comparisonValue); + final String booleanOperator = booleanOperatorsQueue.poll(); + appendCondition(normalizedXpathBuilder, ctx.leafName().getText(), booleanOperator, comparisonValue); if (processingAncestorAxis) { - appendCondition(normalizedAncestorPathBuilder, ctx.leafName().getText(), comparisonValue); + appendCondition(normalizedAncestorPathBuilder, ctx.leafName().getText(), booleanOperator, comparisonValue); } } @Override + public void exitBooleanOperators(final CpsPathParser.BooleanOperatorsContext ctx) { + final CpsPathBooleanOperatorType cpsPathBooleanOperatorType = CpsPathBooleanOperatorType.fromString( + ctx.getText()); + booleanOperators.add(cpsPathBooleanOperatorType.getValues()); + booleanOperatorsQueue.add(cpsPathBooleanOperatorType.getValues()); + cpsPathQuery.setBooleanOperatorsType(booleanOperators); + } + + @Override public void exitDescendant(final DescendantContext ctx) { cpsPathQuery.setCpsPathPrefixType(DESCENDANT); cpsPathQuery.setDescendantName(normalizedXpathBuilder.substring(1)); @@ -170,13 +187,13 @@ public class CpsPathBuilder extends CpsPathBaseListener { } private void appendCondition(final StringBuilder currentNormalizedPathBuilder, final String name, - final Object value) { + final String booleanOperator, final Object value) { final char lastCharacter = currentNormalizedPathBuilder.charAt(currentNormalizedPathBuilder.length() - 1); - currentNormalizedPathBuilder.append(lastCharacter == '[' ? "" : " and ") - .append("@") - .append(name) - .append("='") - .append(value) - .append("'"); + currentNormalizedPathBuilder.append(lastCharacter == '[' ? "" : " " + booleanOperator + " ") + .append("@") + .append(name) + .append("='") + .append(value) + .append("'"); } } 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 3985455263..2c96d91051 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 @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021-2023 Nordix Foundation + * Modifications Copyright (C) 2023 TechMahindra Ltd * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +43,7 @@ public class CpsPathQuery { private String ancestorSchemaNodeIdentifier = ""; private String textFunctionConditionLeafName; private String textFunctionConditionValue; + private List<String> booleanOperatorsType; /** * Returns a cps path query. |