You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by dr...@apache.org on 2017/02/13 12:46:44 UTC
incubator-unomi git commit: UNOMI-77 : Add inContains Comparison
Operator
Repository: incubator-unomi
Updated Branches:
refs/heads/master 12113c8b9 -> 121fbc8af
UNOMI-77 : Add inContains Comparison Operator
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/121fbc8a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/121fbc8a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/121fbc8a
Branch: refs/heads/master
Commit: 121fbc8af6b0f562487f3808baf5f53d07a6a354
Parents: 12113c8
Author: Abdelkader Midani <am...@jahia.com>
Authored: Thu Feb 2 17:18:18 2017 +0100
Committer: Abdelkader Midani <am...@jahia.com>
Committed: Thu Feb 2 17:18:18 2017 +0100
----------------------------------------------------------------------
.../PropertyConditionESQueryBuilder.java | 19 +++++---
.../conditions/PropertyConditionEvaluator.java | 48 ++++++++++++--------
2 files changed, 42 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/121fbc8a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
index 484c5ca..e83bad2 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
@@ -40,7 +40,7 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
String comparisonOperator = (String) condition.getParameter("comparisonOperator");
String name = (String) condition.getParameter("propertyName");
- if(comparisonOperator == null || name == null){
+ if (comparisonOperator == null || name == null) {
throw new IllegalArgumentException("Impossible to build ES filter, condition is not valid, comparisonOperator and propertyName properties should be provided");
}
@@ -54,9 +54,9 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
List<?> expectedValuesDate = (List<?>) condition.getParameter("propertyValuesDate");
List<?> expectedValuesDateExpr = (List<?>) condition.getParameter("propertyValuesDateExpr");
- Object value = ObjectUtils.firstNonNull(expectedValue,expectedValueInteger,expectedValueDate,expectedValueDateExpr);
+ Object value = ObjectUtils.firstNonNull(expectedValue, expectedValueInteger, expectedValueDate, expectedValueDateExpr);
@SuppressWarnings("unchecked")
- List<?> values = ObjectUtils.firstNonNull(expectedValues,expectedValuesInteger,expectedValuesDate,expectedValuesDateExpr);
+ List<?> values = ObjectUtils.firstNonNull(expectedValues, expectedValuesInteger, expectedValuesDate, expectedValuesDateExpr);
switch (comparisonOperator) {
case "equals":
@@ -109,6 +109,13 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
boolQueryBuilder.must(QueryBuilders.termQuery(name, curValue));
}
return boolQueryBuilder;
+ case "inContains":
+ checkRequiredValue(values, name, comparisonOperator, true);
+ BoolQueryBuilder boolQueryBuilderInContains = QueryBuilders.boolQuery();
+ for (Object curValue : values) {
+ boolQueryBuilderInContains.must(QueryBuilders.regexpQuery(name, ".*" + curValue + ".*"));
+ }
+ return boolQueryBuilderInContains;
case "hasSomeOf":
checkRequiredValue(values, name, comparisonOperator, true);
boolQueryBuilder = QueryBuilders.boolQuery();
@@ -134,18 +141,18 @@ public class PropertyConditionESQueryBuilder implements ConditionESQueryBuilder
}
private void checkRequiredValuesSize(List<?> values, String name, String operator, int expectedSize) {
- if(values == null || values.size() != expectedSize) {
+ if (values == null || values.size() != expectedSize) {
throw new IllegalArgumentException("Impossible to build ES filter, missing " + expectedSize + " values for a condition using comparisonOperator: " + operator + ", and propertyName: " + name);
}
}
private void checkRequiredValue(Object value, String name, String operator, boolean multiple) {
- if(value == null) {
+ if (value == null) {
throw new IllegalArgumentException("Impossible to build ES filter, missing value" + (multiple ? "s" : "") + " for condition using comparisonOperator: " + operator + ", and propertyName: " + name);
}
}
- private QueryBuilder getIsSameDayRange (Object value, String name) {
+ private QueryBuilder getIsSameDayRange(Object value, String name) {
DateTime date = new DateTime(value);
DateTime dayStart = date.withTimeAtStartOfDay();
DateTime dayAfterStart = date.plusDays(1).withTimeAtStartOfDay();
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/121fbc8a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
----------------------------------------------------------------------
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
index 68e58a6..1de3ae0 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
@@ -51,10 +51,10 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
private static final Logger logger = LoggerFactory.getLogger(PropertyConditionEvaluator.class.getName());
private static final SimpleDateFormat yearMonthDayDateFormat = new SimpleDateFormat("yyyyMMdd");
-
+
private BeanUtilsBean beanUtilsBean = BeanUtilsBean.getInstance();
-
- private Map<String, Map<String, ExpressionAccessor>> expressionCache = new HashMap<>(64);
+
+ private Map<String, Map<String, ExpressionAccessor>> expressionCache = new HashMap<>(64);
private int compare(Object actualValue, String expectedValue, Object expectedValueDate, Object expectedValueInteger, Object expectedValueDateExpr) {
if (expectedValue == null && expectedValueDate == null && expectedValueInteger == null && getDate(expectedValueDateExpr) == null) {
@@ -82,11 +82,11 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
} else if (expected == null) {
return false;
}
-
+
List<Object> actual = ConditionContextHelper.foldToASCII(getValueSet(actualValue));
boolean result = true;
-
+
switch (op) {
case "in":
result = false;
@@ -97,6 +97,16 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
}
}
break;
+ case "inContains":
+ result = false;
+ for (Object a : actual) {
+ for (Object b : expected)
+ if (((String) a).contains((String) b)) {
+ result = true;
+ break;
+ }
+ }
+ break;
case "notIn":
for (Object a : actual) {
if (expected.contains(a)) {
@@ -114,20 +124,20 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
}
break;
case "hasNoneOf":
- if(!Collections.disjoint(actual, expected)){
+ if (!Collections.disjoint(actual, expected)) {
return false;
}
break;
case "hasSomeOf":
- if(Collections.disjoint(actual, expected)){
+ if (Collections.disjoint(actual, expected)) {
return false;
}
break;
-
+
default:
throw new IllegalArgumentException("Unknown comparison operator " + op);
}
-
+
return result;
}
@@ -143,7 +153,7 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
Object actualValue;
if (item instanceof Event && "eventType".equals(name)) {
- actualValue = ((Event)item).getEventType();
+ actualValue = ((Event) item).getEventType();
} else {
try {
long time = System.nanoTime();
@@ -159,7 +169,7 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
} catch (Exception e) {
if (!(e instanceof OgnlException)
|| (!StringUtils.startsWith(e.getMessage(),
- "source is null for getProperty(null"))) {
+ "source is null for getProperty(null"))) {
logger.warn("Error evaluating value for " + item.getClass().getName() + " " + name, e);
}
actualValue = null;
@@ -169,15 +179,15 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
actualValue = ConditionContextHelper.foldToASCII((String) actualValue);
}
- if(op == null) {
+ if (op == null) {
return false;
- } else if(actualValue == null){
+ } else if (actualValue == null) {
return op.equals("missing");
} else if (op.equals("exists")) {
return true;
} else if (op.equals("equals")) {
if (actualValue instanceof Collection) {
- for (Object o : ((Collection<?>)actualValue)) {
+ for (Object o : ((Collection<?>) actualValue)) {
if (o instanceof String) {
o = ConditionContextHelper.foldToASCII((String) o);
}
@@ -219,19 +229,19 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
return actualValue.toString().endsWith(expectedValue);
} else if (op.equals("matchesRegex")) {
return expectedValue != null && Pattern.compile(expectedValue).matcher(actualValue.toString()).matches();
- } else if (op.equals("in") || op.equals("notIn") || op.equals("hasSomeOf") || op.equals("hasNoneOf") || op.equals("all")) {
+ } else if (op.equals("in") || op.equals("inContains") || op.equals("notIn") || op.equals("hasSomeOf") || op.equals("hasNoneOf") || op.equals("all")) {
List<?> expectedValues = ConditionContextHelper.foldToASCII((List<?>) condition.getParameter("propertyValues"));
List<?> expectedValuesInteger = (List<?>) condition.getParameter("propertyValuesInteger");
List<?> expectedValuesDate = (List<?>) condition.getParameter("propertyValuesDate");
List<?> expectedValuesDateExpr = (List<?>) condition.getParameter("propertyValuesDateExpr");
return compareMultivalue(actualValue, expectedValues, expectedValuesDate, expectedValuesInteger, expectedValuesDateExpr, op);
- } else if(op.equals("isDay") && expectedValueDate != null) {
+ } else if (op.equals("isDay") && expectedValueDate != null) {
return yearMonthDayDateFormat.format(getDate(actualValue)).equals(yearMonthDayDateFormat.format(getDate(expectedValueDate)));
- } else if(op.equals("isNotDay") && expectedValueDate != null) {
+ } else if (op.equals("isNotDay") && expectedValueDate != null) {
return !yearMonthDayDateFormat.format(getDate(actualValue)).equals(yearMonthDayDateFormat.format(getDate(expectedValueDate)));
}
-
+
return false;
}
@@ -272,7 +282,7 @@ public class PropertyConditionEvaluator implements ConditionEvaluator {
return accessor;
}
-
+
private Date getDate(Object value) {
if (value == null) {
return null;