Skip to content

Commit 803b51f

Browse files
fix #1252: Add predictable naming to tasks instead of UUIDs (#1253)
* fix #1252: Add predictable naming to tasks instead of UUIDs Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Add same workflow comparisson Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> * Incorporate co-pilot comment Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com> --------- Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
1 parent b0a8c5e commit 803b51f

20 files changed

Lines changed: 296 additions & 61 deletions

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.ArrayList;
3232
import java.util.Collection;
3333
import java.util.List;
34-
import java.util.UUID;
3534
import java.util.function.Consumer;
3635
import java.util.function.Function;
3736

@@ -71,6 +70,9 @@ public <T> FuncForTaskBuilder collection(Function<T, Collection<?>> collectionF)
7170
}
7271

7372
public <T, V, R> FuncForTaskBuilder tasks(String name, LoopFunction<T, V, R> function) {
73+
if (name == null || name.isBlank()) {
74+
name = "for-task-" + this.items.size();
75+
}
7476
this.items.add(
7577
new TaskItem(
7678
name,
@@ -83,7 +85,7 @@ public <T, V, R> FuncForTaskBuilder tasks(String name, LoopFunction<T, V, R> fun
8385
}
8486

8587
public <T, V, R> FuncForTaskBuilder tasks(LoopFunction<T, V, R> function) {
86-
return this.tasks(UUID.randomUUID().toString(), function);
88+
return this.tasks(null, function);
8789
}
8890

8991
@Override

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import io.serverlessworkflow.fluent.spec.spi.ForkTaskFluent;
2828
import java.util.ArrayList;
2929
import java.util.List;
30-
import java.util.UUID;
3130
import java.util.function.Consumer;
3231
import java.util.function.Function;
3332

@@ -57,6 +56,9 @@ public <T, V> FuncForkTaskBuilder branch(String name, Function<T, V> function) {
5756

5857
public <T, V> FuncForkTaskBuilder branch(
5958
String name, Function<T, V> function, Class<T> argParam) {
59+
if (name == null || name.isBlank()) {
60+
name = "branch-" + this.items.size();
61+
}
6062
this.items.add(
6163
new TaskItem(
6264
name,
@@ -65,7 +67,7 @@ public <T, V> FuncForkTaskBuilder branch(
6567
}
6668

6769
public <T, V> FuncForkTaskBuilder branch(Function<T, V> function) {
68-
return this.branch(UUID.randomUUID().toString(), function);
70+
return this.branch(null, function);
6971
}
7072

7173
@Override

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.util.ArrayList;
2929
import java.util.List;
3030
import java.util.Objects;
31-
import java.util.UUID;
3231
import java.util.function.Consumer;
3332
import java.util.function.Predicate;
3433

@@ -52,7 +51,7 @@ protected FuncSwitchTaskBuilder self() {
5251
}
5352

5453
public FuncSwitchTaskBuilder onPredicate(Consumer<SwitchCasePredicateBuilder> consumer) {
55-
return this.onPredicate(UUID.randomUUID().toString(), consumer);
54+
return this.onPredicate(null, consumer);
5655
}
5756

5857
public FuncSwitchTaskBuilder onPredicate(
@@ -70,19 +69,23 @@ public FuncSwitchTaskBuilder onPredicate(
7069
return this.onDefault(switchCaseValue.getThen().getString());
7170
}
7271
}
73-
74-
this.switchItems.add(new SwitchItem(name, switchCase.build()));
72+
this.switchItems.add(new SwitchItem(defaultItemNameIfBlank(name), switchCase.build()));
7573
return this;
7674
}
7775

7876
@Override
7977
public FuncSwitchTaskBuilder on(String name, Consumer<SwitchCaseBuilder> switchCaseConsumer) {
8078
final SwitchCaseBuilder switchCase = new SwitchCaseBuilder();
8179
switchCaseConsumer.accept(switchCase);
82-
this.switchItems.add(new SwitchItem(name, switchCase.build()));
80+
this.switchItems.add(new SwitchItem(defaultItemNameIfBlank(name), switchCase.build()));
8381
return this;
8482
}
8583

84+
@Override
85+
public int switchItemCount() {
86+
return this.switchItems.size();
87+
}
88+
8689
public SwitchTask build() {
8790
this.switchTask.setSwitch(this.switchItems);
8891
return switchTask;

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@
2323
import io.serverlessworkflow.fluent.func.spi.FuncDoFluent;
2424
import io.serverlessworkflow.fluent.spec.BaseTaskItemListBuilder;
2525
import java.util.List;
26-
import java.util.UUID;
2726
import java.util.function.Consumer;
2827

2928
public class FuncTaskItemListBuilder extends BaseTaskItemListBuilder<FuncTaskItemListBuilder>
3029
implements FuncDoFluent<FuncTaskItemListBuilder> {
3130

31+
protected static final String TYPE_FUNCTION = "function";
32+
3233
public FuncTaskItemListBuilder() {
3334
super();
3435
}
@@ -49,20 +50,20 @@ protected FuncTaskItemListBuilder newItemListBuilder() {
4950

5051
@Override
5152
public FuncTaskItemListBuilder function(String name, Consumer<FuncCallTaskBuilder> consumer) {
52-
name = this.defaultNameAndRequireConfig(name, consumer);
53+
name = this.defaultNameAndRequireConfig(name, consumer, TYPE_FUNCTION);
5354
final FuncCallTaskBuilder callTaskJavaBuilder = new FuncCallTaskBuilder();
5455
consumer.accept(callTaskJavaBuilder);
5556
return addTaskItem(new TaskItem(name, new Task().withCallTask(callTaskJavaBuilder.build())));
5657
}
5758

5859
@Override
5960
public FuncTaskItemListBuilder function(Consumer<FuncCallTaskBuilder> consumer) {
60-
return this.function(UUID.randomUUID().toString(), consumer);
61+
return this.function(null, consumer);
6162
}
6263

6364
@Override
6465
public FuncTaskItemListBuilder set(String name, Consumer<FuncSetTaskBuilder> itemsConfigurer) {
65-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
66+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_SET);
6667
final FuncSetTaskBuilder funcSetTaskBuilder = new FuncSetTaskBuilder();
6768
itemsConfigurer.accept(funcSetTaskBuilder);
6869
return this.addTaskItem(new TaskItem(name, new Task().withSetTask(funcSetTaskBuilder.build())));
@@ -75,7 +76,7 @@ public FuncTaskItemListBuilder set(String name, String expr) {
7576

7677
@Override
7778
public FuncTaskItemListBuilder emit(String name, Consumer<FuncEmitTaskBuilder> itemsConfigurer) {
78-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
79+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_EMIT);
7980
final FuncEmitTaskBuilder emitTaskJavaBuilder = new FuncEmitTaskBuilder();
8081
itemsConfigurer.accept(emitTaskJavaBuilder);
8182
return this.addTaskItem(
@@ -85,7 +86,7 @@ public FuncTaskItemListBuilder emit(String name, Consumer<FuncEmitTaskBuilder> i
8586
@Override
8687
public FuncTaskItemListBuilder listen(
8788
String name, Consumer<FuncListenTaskBuilder> itemsConfigurer) {
88-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
89+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_LISTEN);
8990
final FuncListenTaskBuilder listenTaskJavaBuilder = new FuncListenTaskBuilder();
9091
itemsConfigurer.accept(listenTaskJavaBuilder);
9192
return this.addTaskItem(
@@ -95,7 +96,7 @@ public FuncTaskItemListBuilder listen(
9596
@Override
9697
public FuncTaskItemListBuilder forEach(
9798
String name, Consumer<FuncForTaskBuilder> itemsConfigurer) {
98-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
99+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_FOR);
99100
final FuncForTaskBuilder forTaskJavaBuilder = new FuncForTaskBuilder();
100101
itemsConfigurer.accept(forTaskJavaBuilder);
101102
return this.addTaskItem(new TaskItem(name, new Task().withForTask(forTaskJavaBuilder.build())));
@@ -104,7 +105,7 @@ public FuncTaskItemListBuilder forEach(
104105
@Override
105106
public FuncTaskItemListBuilder switchCase(
106107
String name, Consumer<FuncSwitchTaskBuilder> itemsConfigurer) {
107-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
108+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_SWITCH);
108109
final FuncSwitchTaskBuilder funcSwitchTaskBuilder = new FuncSwitchTaskBuilder();
109110
itemsConfigurer.accept(funcSwitchTaskBuilder);
110111
return this.addTaskItem(
@@ -113,7 +114,7 @@ public FuncTaskItemListBuilder switchCase(
113114

114115
@Override
115116
public FuncTaskItemListBuilder fork(String name, Consumer<FuncForkTaskBuilder> itemsConfigurer) {
116-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
117+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_FORK);
117118
final FuncForkTaskBuilder forkTaskJavaBuilder = new FuncForkTaskBuilder();
118119
itemsConfigurer.accept(forkTaskJavaBuilder);
119120
return this.addTaskItem(
@@ -123,7 +124,7 @@ public FuncTaskItemListBuilder fork(String name, Consumer<FuncForkTaskBuilder> i
123124
@Override
124125
public FuncTaskItemListBuilder http(
125126
String name, Consumer<FuncCallHttpTaskBuilder> itemsConfigurer) {
126-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
127+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_HTTP);
127128

128129
final FuncCallHttpTaskBuilder httpTaskJavaBuilder = new FuncCallHttpTaskBuilder();
129130
itemsConfigurer.accept(httpTaskJavaBuilder);
@@ -140,7 +141,7 @@ public FuncTaskItemListBuilder http(
140141
@Override
141142
public FuncTaskItemListBuilder openapi(
142143
String name, Consumer<FuncCallOpenAPITaskBuilder> itemsConfigurer) {
143-
name = this.defaultNameAndRequireConfig(name, itemsConfigurer);
144+
name = this.defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_OPENAPI);
144145

145146
final FuncCallOpenAPITaskBuilder openAPITaskBuilder = new FuncCallOpenAPITaskBuilder();
146147
itemsConfigurer.accept(openAPITaskBuilder);

experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/spi/CallFnFluent.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
package io.serverlessworkflow.fluent.func.spi;
1717

1818
import io.serverlessworkflow.fluent.spec.TaskBaseBuilder;
19-
import java.util.UUID;
2019
import java.util.function.Consumer;
2120

2221
public interface CallFnFluent<SELF extends TaskBaseBuilder<?>, LIST> {
2322

2423
LIST function(String name, Consumer<SELF> cfg);
2524

2625
default LIST function(Consumer<SELF> cfg) {
27-
return this.function(UUID.randomUUID().toString(), cfg);
26+
return this.function(null, cfg);
2827
}
2928
}

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseTaskItemListBuilder.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323
import java.util.Objects;
24-
import java.util.UUID;
2524
import java.util.function.Consumer;
2625

2726
/**
@@ -35,6 +34,17 @@
3534
*/
3635
public abstract class BaseTaskItemListBuilder<SELF extends BaseTaskItemListBuilder<SELF>> {
3736

37+
protected final String TYPE_SET = "set";
38+
protected final String TYPE_FOR = "for";
39+
protected final String TYPE_SWITCH = "switch";
40+
protected final String TYPE_RAISE = "raise";
41+
protected final String TYPE_FORK = "fork";
42+
protected final String TYPE_LISTEN = "listen";
43+
protected final String TYPE_EMIT = "emit";
44+
protected final String TYPE_TRY = "try";
45+
protected final String TYPE_HTTP = "http";
46+
protected final String TYPE_OPENAPI = "openapi";
47+
3848
private final List<TaskItem> list;
3949

4050
public BaseTaskItemListBuilder() {
@@ -59,11 +69,14 @@ protected final SELF addTaskItem(TaskItem taskItem) {
5969
return self();
6070
}
6171

62-
protected final String defaultNameAndRequireConfig(String name, Consumer<?> cfg) {
72+
protected final String defaultNameAndRequireConfig(
73+
String name, Consumer<?> cfg, String taskType) {
74+
Objects.requireNonNull(cfg, "Configurer must not be null");
75+
6376
if (name == null || name.isBlank()) {
64-
name = UUID.randomUUID().toString();
77+
return taskType + "-" + this.list.size();
6578
}
66-
Objects.requireNonNull(cfg, "Configurer must not be null");
79+
6780
return name;
6881
}
6982

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/SwitchTaskBuilder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,19 @@ protected SwitchTaskBuilder self() {
4242

4343
@Override
4444
public SwitchTaskBuilder on(
45-
final String name, Consumer<SwitchTaskFluent.SwitchCaseBuilder> switchCaseConsumer) {
45+
String name, Consumer<SwitchTaskFluent.SwitchCaseBuilder> switchCaseConsumer) {
4646
final SwitchTaskFluent.SwitchCaseBuilder switchCaseBuilder =
4747
new SwitchTaskFluent.SwitchCaseBuilder();
4848
switchCaseConsumer.accept(switchCaseBuilder);
49-
this.switchItems.add(new SwitchItem(name, switchCaseBuilder.build()));
49+
this.switchItems.add(new SwitchItem(defaultItemNameIfBlank(name), switchCaseBuilder.build()));
5050
return this;
5151
}
5252

53+
@Override
54+
public int switchItemCount() {
55+
return this.switchItems.size();
56+
}
57+
5358
public SwitchTask build() {
5459
this.switchTask.setSwitch(this.switchItems);
5560
return this.switchTask;

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/TaskItemListBuilder.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected TaskItemListBuilder newItemListBuilder() {
4545

4646
@Override
4747
public TaskItemListBuilder set(String name, Consumer<SetTaskBuilder> itemsConfigurer) {
48-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
48+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_SET);
4949
final SetTaskBuilder setBuilder = new SetTaskBuilder();
5050
itemsConfigurer.accept(setBuilder);
5151
return addTaskItem(new TaskItem(name, new Task().withSetTask(setBuilder.build())));
@@ -59,7 +59,7 @@ public TaskItemListBuilder set(String name, final String expr) {
5959
@Override
6060
public TaskItemListBuilder forEach(
6161
String name, Consumer<ForEachTaskBuilder<TaskItemListBuilder>> itemsConfigurer) {
62-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
62+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_FOR);
6363
final ForEachTaskBuilder<TaskItemListBuilder> forBuilder =
6464
new ForEachTaskBuilder<>(newItemListBuilder());
6565
itemsConfigurer.accept(forBuilder);
@@ -68,39 +68,39 @@ public TaskItemListBuilder forEach(
6868

6969
@Override
7070
public TaskItemListBuilder switchCase(String name, Consumer<SwitchTaskBuilder> itemsConfigurer) {
71-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
71+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_SWITCH);
7272
final SwitchTaskBuilder switchBuilder = new SwitchTaskBuilder();
7373
itemsConfigurer.accept(switchBuilder);
7474
return addTaskItem(new TaskItem(name, new Task().withSwitchTask(switchBuilder.build())));
7575
}
7676

7777
@Override
7878
public TaskItemListBuilder raise(String name, Consumer<RaiseTaskBuilder> itemsConfigurer) {
79-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
79+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_RAISE);
8080
final RaiseTaskBuilder raiseBuilder = new RaiseTaskBuilder();
8181
itemsConfigurer.accept(raiseBuilder);
8282
return addTaskItem(new TaskItem(name, new Task().withRaiseTask(raiseBuilder.build())));
8383
}
8484

8585
@Override
8686
public TaskItemListBuilder fork(String name, Consumer<ForkTaskBuilder> itemsConfigurer) {
87-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
87+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_FORK);
8888
final ForkTaskBuilder forkBuilder = new ForkTaskBuilder();
8989
itemsConfigurer.accept(forkBuilder);
9090
return addTaskItem(new TaskItem(name, new Task().withForkTask(forkBuilder.build())));
9191
}
9292

9393
@Override
9494
public TaskItemListBuilder listen(String name, Consumer<ListenTaskBuilder> itemsConfigurer) {
95-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
95+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_LISTEN);
9696
final ListenTaskBuilder listenBuilder = new ListenTaskBuilder();
9797
itemsConfigurer.accept(listenBuilder);
9898
return addTaskItem(new TaskItem(name, new Task().withListenTask(listenBuilder.build())));
9999
}
100100

101101
@Override
102102
public TaskItemListBuilder emit(String name, Consumer<EmitTaskBuilder> itemsConfigurer) {
103-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
103+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_EMIT);
104104
final EmitTaskBuilder emitBuilder = new EmitTaskBuilder();
105105
itemsConfigurer.accept(emitBuilder);
106106
return addTaskItem(new TaskItem(name, new Task().withEmitTask(emitBuilder.build())));
@@ -109,7 +109,7 @@ public TaskItemListBuilder emit(String name, Consumer<EmitTaskBuilder> itemsConf
109109
@Override
110110
public TaskItemListBuilder tryCatch(
111111
String name, Consumer<TryTaskBuilder<TaskItemListBuilder>> itemsConfigurer) {
112-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
112+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_TRY);
113113
final TryTaskBuilder<TaskItemListBuilder> tryBuilder =
114114
new TryTaskBuilder<>(this.newItemListBuilder());
115115
itemsConfigurer.accept(tryBuilder);
@@ -118,7 +118,7 @@ public TaskItemListBuilder tryCatch(
118118

119119
@Override
120120
public TaskItemListBuilder http(String name, Consumer<CallHttpTaskBuilder> itemsConfigurer) {
121-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
121+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_HTTP);
122122

123123
final CallHttpTaskBuilder callHTTPBuilder = new CallHttpTaskBuilder();
124124
itemsConfigurer.accept(callHTTPBuilder);
@@ -134,7 +134,7 @@ public TaskItemListBuilder http(String name, Consumer<CallHttpTaskBuilder> items
134134
@Override
135135
public TaskItemListBuilder openapi(
136136
String name, Consumer<CallOpenAPITaskBuilder> itemsConfigurer) {
137-
name = defaultNameAndRequireConfig(name, itemsConfigurer);
137+
name = defaultNameAndRequireConfig(name, itemsConfigurer, TYPE_OPENAPI);
138138

139139
final CallOpenAPITaskBuilder callOpenAPIBuilder = new CallOpenAPITaskBuilder();
140140
itemsConfigurer.accept(callOpenAPIBuilder);

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/spi/CallHttpFluent.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
package io.serverlessworkflow.fluent.spec.spi;
1717

1818
import io.serverlessworkflow.fluent.spec.TaskBaseBuilder;
19-
import java.util.UUID;
2019
import java.util.function.Consumer;
2120

2221
public interface CallHttpFluent<SELF extends TaskBaseBuilder<SELF>, LIST> {
2322

2423
LIST http(String name, Consumer<SELF> itemsConfigurer);
2524

2625
default LIST http(Consumer<SELF> itemsConfigurer) {
27-
return this.http(UUID.randomUUID().toString(), itemsConfigurer);
26+
return this.http(null, itemsConfigurer);
2827
}
2928
}

0 commit comments

Comments
 (0)