From 8775a1f1007c13c0e8a5c28f78fb7c7d4676b40c Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Mon, 16 Nov 2015 19:33:05 +0100 Subject: [PATCH] Added method to honor backwards compatibility. --- .../java/com/jayway/jsonpath/Criteria.java | 29 +++++++++++++++++-- .../java/com/jayway/jsonpath/FilterTest.java | 10 +++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java index fec99bf2..30e1eda1 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java +++ b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java @@ -388,10 +388,35 @@ public class Criteria implements Predicate { */ @Deprecated public static Criteria parse(String criteria) { - //TODO: fix - return null; + if(criteria == null){ + throw new InvalidPathException("Criteria can not be null"); + } + String[] split = criteria.trim().split(" "); + if(split.length == 3){ + return create(split[0], split[1], split[2]); + } else if(split.length == 1){ + return create(split[0], "EXISTS", "true"); + } else { + throw new InvalidPathException("Could not parse criteria"); + } + } + + /** + * Creates a new criteria + * @param left path to evaluate in criteria + * @param operator operator + * @param right expected value + * @return a new Criteria + */ + @Deprecated + public static Criteria create(String left, String operator, String right) { + Criteria criteria = new Criteria(ValueNode.toValueNode(left)); + criteria.criteriaType = RelationalOperator.fromString(operator); + criteria.right = ValueNode.toValueNode(right); + return criteria; } + private static String prefixPath(String key){ if (!key.startsWith("$") && !key.startsWith("@")) { key = "@." + key; diff --git a/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java b/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java index da6b87a2..e4f2fb3d 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java @@ -469,4 +469,14 @@ public class FilterTest extends BaseTest { Object json = Configuration.defaultConfiguration().jsonProvider().parse("{\"firstname\":\"Bob\",\"surname\":\"Smith\",\"age\":30}"); assertThat(Filter.parse("[?((@.firstname == 'Bob' || @.firstname == 'Jane') && @.surname == 'Smith')]").apply(createPredicateContext(json))).isTrue(); } + + @Test + public void criteria_can_be_parsed() { + + Criteria criteria = Criteria.parse("@.foo == 'baar'"); + assertThat(criteria.toString()).isEqualTo("@['foo'] == 'baar'"); + + criteria = Criteria.parse("@.foo"); + assertThat(criteria.toString()).isEqualTo("@['foo']"); + } }