This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch handleEventInSourceEventEvaluator
in repository https://gitbox.apache.org/repos/asf/unomi.git

commit c53d8cb3be5ccce2d4b887e67d040aca16c7c64b
Author: Kevan <[email protected]>
AuthorDate: Thu Oct 7 16:34:50 2021 +0200

    UNOMI-515: allow event to be evaluated by the 
sourceEventPropertyConditionEvaluator
---
 .../SourceEventPropertyConditionEvaluator.java           | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionEvaluator.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionEvaluator.java
index 98669dd..19bbca7 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionEvaluator.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/SourceEventPropertyConditionEvaluator.java
@@ -17,6 +17,7 @@
 
 package org.apache.unomi.plugins.baseplugin.conditions;
 
+import org.apache.unomi.api.Event;
 import org.apache.unomi.api.Item;
 import org.apache.unomi.api.conditions.Condition;
 import org.apache.unomi.api.conditions.ConditionType;
@@ -54,6 +55,11 @@ public class SourceEventPropertyConditionEvaluator 
implements ConditionEvaluator
 
     @Override
     public boolean eval(Condition condition, Item item, Map<String, Object> 
context, ConditionEvaluatorDispatcher dispatcher) {
+        // in case the evaluated item is an event, we switch to his source 
internal object for further evaluations
+        if (item instanceof Event) {
+            item = ((Event) item).getSource();
+        }
+
         Condition andCondition = new 
Condition(definitionsService.getConditionType("booleanCondition"));
         andCondition.setParameter("operator", "and");
         ArrayList<Condition> conditions = new ArrayList<Condition>();
@@ -63,9 +69,15 @@ public class SourceEventPropertyConditionEvaluator 
implements ConditionEvaluator
         }
 
         if(conditions.size() > 0){
-            andCondition.setParameter("subConditions", conditions);
-            return dispatcher.eval(andCondition, item);
+            if (item != null) {
+                andCondition.setParameter("subConditions", conditions);
+                return dispatcher.eval(andCondition, item);
+            } else {
+                // item is null but there is conditions: it's not a match
+                return false;
+            }
         } else {
+            // no conditions: it's always a match
             return true;
         }
     }

Reply via email to