2323import io .serverlessworkflow .api .types .EventSource ;
2424import io .serverlessworkflow .api .types .EventTime ;
2525import io .serverlessworkflow .api .types .UriTemplate ;
26+ import io .serverlessworkflow .impl .TaskContext ;
2627import io .serverlessworkflow .impl .WorkflowApplication ;
28+ import io .serverlessworkflow .impl .WorkflowContext ;
2729import io .serverlessworkflow .impl .WorkflowModelFactory ;
2830import io .serverlessworkflow .impl .WorkflowPredicate ;
2931import io .serverlessworkflow .impl .expressions .ExpressionDescriptor ;
@@ -45,7 +47,7 @@ public class DefaultCloudEventPredicate implements CloudEventPredicate {
4547 private final CloudEventAttrPredicate <Map <String , Object >> additionalFilter ;
4648
4749 private static final <T > CloudEventAttrPredicate <T > isTrue () {
48- return x -> true ;
50+ return ( x , w , t ) -> true ;
4951 }
5052
5153 public DefaultCloudEventPredicate (EventProperties properties , WorkflowApplication app ) {
@@ -72,12 +74,12 @@ private CloudEventAttrPredicate<Map<String, Object>> additionalFilter(
7274
7375 private CloudEventAttrPredicate <CloudEventData > fromCloudEvent (
7476 WorkflowModelFactory workflowModelFactory , WorkflowPredicate filter ) {
75- return d -> filter .test (null , null , workflowModelFactory .from (d ));
77+ return ( d , w , t ) -> filter .test (w , t , workflowModelFactory .from (d ));
7678 }
7779
7880 private CloudEventAttrPredicate <Map <String , Object >> fromMap (
7981 WorkflowModelFactory workflowModelFactory , WorkflowPredicate filter ) {
80- return d -> filter .test (null , null , workflowModelFactory .from (d ));
82+ return ( d , w , t ) -> filter .test (w , t , workflowModelFactory .from (d ));
8183 }
8284
8385 private CloudEventAttrPredicate <CloudEventData > dataFilter (
@@ -98,9 +100,9 @@ private CloudEventAttrPredicate<OffsetDateTime> offsetTimeFilter(
98100 final WorkflowPredicate expr =
99101 app .expressionFactory ()
100102 .buildPredicate (ExpressionDescriptor .from (time .getRuntimeExpression ()));
101- return s -> evalExpr (app .modelFactory (), expr , s );
103+ return ( s , w , t ) -> evalExpr (app .modelFactory (), expr , s , w , t );
102104 } else if (time .getLiteralTime () != null ) {
103- return s -> Objects .equals (s , CloudEventUtils .toOffset (time .getLiteralTime ()));
105+ return ( s , w , t ) -> Objects .equals (s , CloudEventUtils .toOffset (time .getLiteralTime ()));
104106 }
105107 }
106108 return isTrue ();
@@ -113,7 +115,7 @@ private CloudEventAttrPredicate<URI> dataSchemaFilter(
113115 final WorkflowPredicate expr =
114116 app .expressionFactory ()
115117 .buildPredicate (ExpressionDescriptor .from (dataSchema .getExpressionDataSchema ()));
116- return s -> evalExpr (app .modelFactory (), expr , toString (s ));
118+ return ( s , w , t ) -> evalExpr (app .modelFactory (), expr , toString (s ), w , t );
117119 } else if (dataSchema .getLiteralDataSchema () != null ) {
118120 return templateFilter (dataSchema .getLiteralDataSchema ());
119121 }
@@ -122,7 +124,7 @@ private CloudEventAttrPredicate<URI> dataSchemaFilter(
122124 }
123125
124126 private CloudEventAttrPredicate <String > stringFilter (String str ) {
125- return str == null ? isTrue () : x -> x .equals (str );
127+ return str == null ? isTrue () : ( x , w , t ) -> str .equals (x );
126128 }
127129
128130 private CloudEventAttrPredicate <URI > sourceFilter (EventSource source , WorkflowApplication app ) {
@@ -131,7 +133,7 @@ private CloudEventAttrPredicate<URI> sourceFilter(EventSource source, WorkflowAp
131133 final WorkflowPredicate expr =
132134 app .expressionFactory ()
133135 .buildPredicate (ExpressionDescriptor .from (source .getRuntimeExpression ()));
134- return s -> evalExpr (app .modelFactory (), expr , toString (s ));
136+ return ( s , w , t ) -> evalExpr (app .modelFactory (), expr , toString (s ), w , t );
135137 } else if (source .getUriTemplate () != null ) {
136138 return templateFilter (source .getUriTemplate ());
137139 }
@@ -141,7 +143,7 @@ private CloudEventAttrPredicate<URI> sourceFilter(EventSource source, WorkflowAp
141143
142144 private CloudEventAttrPredicate <URI > templateFilter (UriTemplate template ) {
143145 if (template .getLiteralUri () != null ) {
144- return u -> Objects .equals (u , template .getLiteralUri ());
146+ return ( u , w , t ) -> Objects .equals (u , template .getLiteralUri ());
145147 }
146148 throw new UnsupportedOperationException ("Template not supported here yet" );
147149 }
@@ -151,25 +153,33 @@ private <T> String toString(T uri) {
151153 }
152154
153155 private boolean evalExpr (
154- WorkflowModelFactory modelFactory , WorkflowPredicate expr , String value ) {
155- return expr .test (null , null , modelFactory .from (value ));
156+ WorkflowModelFactory modelFactory ,
157+ WorkflowPredicate expr ,
158+ String value ,
159+ WorkflowContext workflow ,
160+ TaskContext task ) {
161+ return expr .test (workflow , task , modelFactory .from (value ));
156162 }
157163
158164 private boolean evalExpr (
159- WorkflowModelFactory modelFactory , WorkflowPredicate expr , OffsetDateTime value ) {
160- return expr .test (null , null , modelFactory .from (value ));
165+ WorkflowModelFactory modelFactory ,
166+ WorkflowPredicate expr ,
167+ OffsetDateTime value ,
168+ WorkflowContext workflow ,
169+ TaskContext task ) {
170+ return expr .test (workflow , task , modelFactory .from (value ));
161171 }
162172
163173 @ Override
164- public boolean test (CloudEvent event ) {
165- return idFilter .test (event .getId ())
166- && sourceFilter .test (event .getSource ())
167- && subjectFilter .test (event .getSubject ())
168- && contentTypeFilter .test (event .getDataContentType ())
169- && typeFilter .test (event .getType ())
170- && dataSchemaFilter .test (event .getDataSchema ())
171- && timeFilter .test (event .getTime ())
172- && dataFilter .test (event .getData ())
173- && additionalFilter .test (CloudEventUtils .extensions (event ));
174+ public boolean test (CloudEvent event , WorkflowContext workflow , TaskContext task ) {
175+ return idFilter .test (event .getId (), workflow , task )
176+ && sourceFilter .test (event .getSource (), workflow , task )
177+ && subjectFilter .test (event .getSubject (), workflow , task )
178+ && contentTypeFilter .test (event .getDataContentType (), workflow , task )
179+ && typeFilter .test (event .getType (), workflow , task )
180+ && dataSchemaFilter .test (event .getDataSchema (), workflow , task )
181+ && timeFilter .test (event .getTime (), workflow , task )
182+ && dataFilter .test (event .getData (), workflow , task )
183+ && additionalFilter .test (CloudEventUtils .extensions (event ), workflow , task );
174184 }
175185}
0 commit comments