summaryrefslogtreecommitdiffstats
path: root/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java
diff options
context:
space:
mode:
Diffstat (limited to 'cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java')
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java23
1 files changed, 17 insertions, 6 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java b/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java
index 4fcf6e444..e85414cdc 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java
@@ -31,32 +31,43 @@ import org.onap.cps.spi.exceptions.CpsPathException;
@Setter(AccessLevel.PRIVATE)
public class CpsPathQuery {
+ private CpsPathQueryType cpsPathQueryType;
private String xpathPrefix;
private String leafName;
private Object leafValue;
+ private String endsWith;
public static final Pattern QUERY_CPS_PATH_WITH_SINGLE_LEAF_PATTERN =
- Pattern.compile("(.*)\\[\\s*@(.*?)\\s*=\\s*(.*?)\\s*]");
+ Pattern.compile("((?:\\/[^\\/]+)+?)\\[\\s*@(\\S+?)\\s*=\\s*(.*?)\\s*\\]");
- public static final Pattern LEAF_STRING_VALUE_PATTERN = Pattern.compile("['\"](.*)['\"]");
+ public static final Pattern QUERY_CPS_PATH_ENDS_WITH_PATTERN = Pattern.compile("\\/\\/(.+)");
public static final Pattern LEAF_INTEGER_VALUE_PATTERN = Pattern.compile("[-+]?\\d+");
+ public static final Pattern LEAF_STRING_VALUE_PATTERN = Pattern.compile("['\"](.*)['\"]");
+
/**
- * Returns a xpath prefix, leaf name and leaf value for the given cps path.
+ * Returns a cps path query.
*
* @param cpsPath cps path
- * @return a CpsPath object containing the xpath prefix, leaf name and leaf value.
+ * @return a CpsPath object.
*/
public static CpsPathQuery createFrom(final String cpsPath) {
- final Matcher matcher = QUERY_CPS_PATH_WITH_SINGLE_LEAF_PATTERN.matcher(cpsPath);
+ Matcher matcher = QUERY_CPS_PATH_WITH_SINGLE_LEAF_PATTERN.matcher(cpsPath);
+ final CpsPathQuery cpsPathQuery = new CpsPathQuery();
if (matcher.matches()) {
- final CpsPathQuery cpsPathQuery = new CpsPathQuery();
+ cpsPathQuery.setCpsPathQueryType(CpsPathQueryType.XPATH_LEAF_VALUE);
cpsPathQuery.setXpathPrefix(matcher.group(1));
cpsPathQuery.setLeafName(matcher.group(2));
cpsPathQuery.setLeafValue(convertLeafValueToCorrectType(matcher.group(3)));
return cpsPathQuery;
}
+ matcher = QUERY_CPS_PATH_ENDS_WITH_PATTERN.matcher(cpsPath);
+ if (matcher.matches()) {
+ cpsPathQuery.setCpsPathQueryType(CpsPathQueryType.XPATH_ENDS_WITH);
+ cpsPathQuery.setEndsWith(matcher.group(1));
+ return cpsPathQuery;
+ }
throw new CpsPathException("Invalid cps path.",
String.format("Cannot interpret or parse cps path %s.", cpsPath));
}