From 79214e7c3f484cc388aedc2723e89d714268a7ca Mon Sep 17 00:00:00 2001 From: Jochen Berger Date: Mon, 13 May 2013 11:20:08 +0200 Subject: [PATCH] collection-based filtering for number-based filters --- .../java/com/jayway/jsonpath/Criteria.java | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 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 15414585..3f88193b 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java +++ b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java @@ -122,7 +122,7 @@ public class Criteria { for (CriteriaType key : this.criteria.keySet()) { Object actualVal = readSafely(this.key, map); - Object expectedVal = this.criteria.get(key); + final Object expectedVal = this.criteria.get(key); if (CriteriaType.GT.equals(key)) { @@ -130,10 +130,14 @@ public class Criteria { return false; } - Number expectedNumber = (Number) expectedVal; - Number actualNumber = (Number) actualVal; + final Number expectedNumber = (Number) expectedVal; + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { - return (actualNumber.doubleValue() > expectedNumber.doubleValue()); + @Override + public boolean accept(Number value) { + return (value.doubleValue() > expectedNumber.doubleValue()); + } + }); } else if (CriteriaType.GTE.equals(key)) { @@ -141,10 +145,14 @@ public class Criteria { return false; } - Number expectedNumber = (Number) expectedVal; - Number actualNumber = (Number) actualVal; + final Number expectedNumber = (Number) expectedVal; + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { - return (actualNumber.doubleValue() >= expectedNumber.doubleValue()); + @Override + public boolean accept(Number value) { + return (value.doubleValue() >= expectedNumber.doubleValue()); + } + }); } else if (CriteriaType.LT.equals(key)) { @@ -152,10 +160,14 @@ public class Criteria { return false; } - Number expectedNumber = (Number) expectedVal; - Number actualNumber = (Number) actualVal; + final Number expectedNumber = (Number) expectedVal; + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { - return (actualNumber.doubleValue() < expectedNumber.doubleValue()); + @Override + public boolean accept(Number value) { + return (value.doubleValue() < expectedNumber.doubleValue()); + } + }); } else if (CriteriaType.LTE.equals(key)) { @@ -163,10 +175,14 @@ public class Criteria { return false; } - Number expectedNumber = (Number) expectedVal; - Number actualNumber = (Number) actualVal; + final Number expectedNumber = (Number) expectedVal; + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { - return (actualNumber.doubleValue() <= expectedNumber.doubleValue()); + @Override + public boolean accept(Number value) { + return (value.doubleValue() <= expectedNumber.doubleValue()); + } + }); } else if (CriteriaType.NE.equals(key)) { if (expectedVal == null && actualVal == null) {