Skip to content

Commit 72aff8c

Browse files
Fix #1189 - Refactor listen/emit tasks to add proper event filtering (#1202)
* Fix #1189 - Add correlate to the DSL and refactor listen/emit tasks Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Introduce filtering shortcuts Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Rebase with main Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * formatting Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Fix event filter DSL; add filters with correct predicates Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Add event filtering to DSL Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Formatting; co-pilot review Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Formatting Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> --------- Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent cc86c46 commit 72aff8c

34 files changed

Lines changed: 1164 additions & 485 deletions

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncEventPropertiesBuilder.java renamed to experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncEmitEventPropertiesBuilder.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,40 @@
1616
package io.serverlessworkflow.fluent.func;
1717

1818
import io.cloudevents.CloudEventData;
19+
import io.serverlessworkflow.api.types.func.ContextFunction;
1920
import io.serverlessworkflow.api.types.func.EventDataFunction;
21+
import io.serverlessworkflow.api.types.func.FilterFunction;
22+
import io.serverlessworkflow.fluent.func.dsl.SerializableFunction;
2023
import io.serverlessworkflow.fluent.spec.AbstractEventPropertiesBuilder;
2124
import java.util.function.Function;
2225

23-
public class FuncEventPropertiesBuilder
24-
extends AbstractEventPropertiesBuilder<FuncEventPropertiesBuilder> {
26+
public class FuncEmitEventPropertiesBuilder
27+
extends AbstractEventPropertiesBuilder<FuncEmitEventPropertiesBuilder> {
2528

2629
@Override
27-
protected FuncEventPropertiesBuilder self() {
30+
protected FuncEmitEventPropertiesBuilder self() {
2831
return this;
2932
}
3033

31-
public <T> FuncEventPropertiesBuilder data(Function<T, CloudEventData> function) {
34+
public <T> FuncEmitEventPropertiesBuilder data(SerializableFunction<T, CloudEventData> function) {
3235
this.eventProperties.setData(new EventDataFunction().withFunction(function));
3336
return this;
3437
}
3538

36-
public <T> FuncEventPropertiesBuilder data(Function<T, CloudEventData> function, Class<T> clazz) {
39+
public <T> FuncEmitEventPropertiesBuilder data(
40+
Function<T, CloudEventData> function, Class<T> clazz) {
41+
this.eventProperties.setData(new EventDataFunction().withFunction(function, clazz));
42+
return this;
43+
}
44+
45+
public <T> FuncEmitEventPropertiesBuilder data(
46+
ContextFunction<T, CloudEventData> function, Class<T> clazz) {
47+
this.eventProperties.setData(new EventDataFunction().withFunction(function, clazz));
48+
return this;
49+
}
50+
51+
public <T> FuncEmitEventPropertiesBuilder data(
52+
FilterFunction<T, CloudEventData> function, Class<T> clazz) {
3753
this.eventProperties.setData(new EventDataFunction().withFunction(function, clazz));
3854
return this;
3955
}

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncEmitTaskBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import io.serverlessworkflow.fluent.spec.AbstractEmitTaskBuilder;
2121

2222
public class FuncEmitTaskBuilder
23-
extends AbstractEmitTaskBuilder<FuncEmitTaskBuilder, FuncEventPropertiesBuilder>
23+
extends AbstractEmitTaskBuilder<FuncEmitTaskBuilder, FuncEmitEventPropertiesBuilder>
2424
implements ConditionalTaskBuilder<FuncEmitTaskBuilder>,
2525
FuncTaskTransformations<FuncEmitTaskBuilder> {
2626
FuncEmitTaskBuilder() {
@@ -33,7 +33,7 @@ protected FuncEmitTaskBuilder self() {
3333
}
3434

3535
@Override
36-
protected FuncEventPropertiesBuilder newEventPropertiesBuilder() {
37-
return new FuncEventPropertiesBuilder();
36+
protected FuncEmitEventPropertiesBuilder newEventPropertiesBuilder() {
37+
return new FuncEmitEventPropertiesBuilder();
3838
}
3939
}

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncEventFilterBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@
1818
import io.serverlessworkflow.fluent.spec.AbstractEventFilterBuilder;
1919

2020
public class FuncEventFilterBuilder
21-
extends AbstractEventFilterBuilder<
22-
FuncEventFilterBuilder, FuncPredicateEventPropertiesBuilder> {
21+
extends AbstractEventFilterBuilder<FuncEventFilterBuilder, FuncEventFilterPropertiesBuilder> {
2322

2423
@Override
2524
protected FuncEventFilterBuilder self() {
2625
return this;
2726
}
2827

2928
@Override
30-
protected FuncPredicateEventPropertiesBuilder newEventPropertiesBuilder() {
31-
return new FuncPredicateEventPropertiesBuilder();
29+
protected FuncEventFilterPropertiesBuilder newEventPropertiesBuilder() {
30+
return new FuncEventFilterPropertiesBuilder();
3231
}
3332
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright 2020-Present The Serverless Workflow Specification Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.serverlessworkflow.fluent.func;
17+
18+
import io.cloudevents.CloudEvent;
19+
import io.cloudevents.CloudEventData;
20+
import io.serverlessworkflow.api.types.func.ContextPredicate;
21+
import io.serverlessworkflow.api.types.func.EventDataPredicate;
22+
import io.serverlessworkflow.api.types.func.FilterPredicate;
23+
import io.serverlessworkflow.fluent.spec.AbstractEventPropertiesBuilder;
24+
import java.util.function.Predicate;
25+
26+
public class FuncEventFilterPropertiesBuilder
27+
extends AbstractEventPropertiesBuilder<FuncEventFilterPropertiesBuilder> {
28+
29+
@Override
30+
protected FuncEventFilterPropertiesBuilder self() {
31+
return this;
32+
}
33+
34+
public FuncEventFilterPropertiesBuilder data(Predicate<CloudEventData> predicate) {
35+
this.eventProperties.setData(
36+
new EventDataPredicate().withPredicate(predicate, CloudEventData.class));
37+
return this;
38+
}
39+
40+
public FuncEventFilterPropertiesBuilder data(ContextPredicate<CloudEventData> predicate) {
41+
this.eventProperties.setData(
42+
new EventDataPredicate().withPredicate(predicate, CloudEventData.class));
43+
return this;
44+
}
45+
46+
public FuncEventFilterPropertiesBuilder data(FilterPredicate<CloudEventData> predicate) {
47+
this.eventProperties.setData(
48+
new EventDataPredicate().withPredicate(predicate, CloudEventData.class));
49+
return this;
50+
}
51+
52+
public FuncEventFilterPropertiesBuilder envelope(Predicate<CloudEvent> predicate) {
53+
this.eventProperties.setData(
54+
new EventDataPredicate().withPredicate(predicate, CloudEvent.class));
55+
return this;
56+
}
57+
58+
public FuncEventFilterPropertiesBuilder envelope(ContextPredicate<CloudEvent> predicate) {
59+
this.eventProperties.setData(
60+
new EventDataPredicate().withPredicate(predicate, CloudEvent.class));
61+
return this;
62+
}
63+
64+
public FuncEventFilterPropertiesBuilder envelope(FilterPredicate<CloudEvent> predicate) {
65+
this.eventProperties.setData(
66+
new EventDataPredicate().withPredicate(predicate, CloudEvent.class));
67+
return this;
68+
}
69+
}

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/configurers/FuncEventConfigurer.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/configurers/FuncPredicateEventConfigurer.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/dsl/BaseFuncListenSpec.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,17 @@
1717

1818
import io.serverlessworkflow.fluent.func.FuncEventFilterBuilder;
1919
import io.serverlessworkflow.fluent.func.FuncListenToBuilder;
20-
import io.serverlessworkflow.fluent.func.configurers.FuncPredicateEventConfigurer;
2120
import io.serverlessworkflow.fluent.spec.dsl.BaseListenSpec;
2221
import java.util.Objects;
2322
import java.util.function.Consumer;
2423
import java.util.function.Predicate;
2524

2625
public abstract class BaseFuncListenSpec<SELF, LB>
27-
extends BaseListenSpec<
28-
SELF, LB, FuncListenToBuilder, FuncEventFilterBuilder, FuncPredicateEventConfigurer> {
26+
extends BaseListenSpec<SELF, LB, FuncListenToBuilder, FuncEventFilterBuilder> {
2927

3028
protected BaseFuncListenSpec(ToInvoker<LB, FuncListenToBuilder> toInvoker) {
3129
super(
3230
toInvoker,
33-
FuncEventFilterBuilder::with,
3431
// allApplier
3532
(tb, filters) -> tb.all(castFilters(filters)),
3633
// anyApplier

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/dsl/CommonFuncOps.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@
1515
*/
1616
package io.serverlessworkflow.fluent.func.dsl;
1717

18-
import io.cloudevents.CloudEventData;
1918
import io.serverlessworkflow.api.types.FlowDirectiveEnum;
2019
import io.serverlessworkflow.fluent.func.FuncCallTaskBuilder;
21-
import io.serverlessworkflow.fluent.func.FuncEmitTaskBuilder;
2220
import io.serverlessworkflow.fluent.func.FuncSwitchTaskBuilder;
23-
import io.serverlessworkflow.fluent.func.configurers.FuncPredicateEventConfigurer;
2421
import io.serverlessworkflow.fluent.func.configurers.SwitchCaseConfigurer;
2522
import java.util.function.Consumer;
2623
import java.util.function.Function;
@@ -60,18 +57,4 @@ default SwitchCaseConfigurer caseDefault(String task) {
6057
default SwitchCaseConfigurer caseDefault(FlowDirectiveEnum directive) {
6158
return s -> s.then(directive);
6259
}
63-
64-
default <T> Consumer<FuncEmitTaskBuilder> event(
65-
String type, Function<T, CloudEventData> function) {
66-
return event -> event.event(e -> e.type(type).data(function));
67-
}
68-
69-
default <T> Consumer<FuncEmitTaskBuilder> event(
70-
String type, Function<T, CloudEventData> function, Class<T> clazz) {
71-
return event -> event.event(e -> e.type(type).data(function, clazz));
72-
}
73-
74-
default FuncPredicateEventConfigurer event(String type) {
75-
return e -> e.type(type);
76-
}
7760
}

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/dsl/ConsumeStep.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ public final class ConsumeStep<T> extends Step<ConsumeStep<T>, FuncCallTaskBuild
3535
}
3636

3737
@Override
38-
protected void configure(
39-
FuncTaskItemListBuilder list, java.util.function.Consumer<FuncCallTaskBuilder> post) {
38+
protected void configure(FuncTaskItemListBuilder list, Consumer<FuncCallTaskBuilder> post) {
4039
if (name == null) {
4140
list.function(
4241
cb -> {

0 commit comments

Comments
 (0)