Skip to content

Commit e701adf

Browse files
committed
Name tasks on DSL class
Signed-off-by: Matheus Cruz <matheuscruz.dev@gmail.com>
1 parent b29c722 commit e701adf

2 files changed

Lines changed: 245 additions & 7 deletions

File tree

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/dsl/DSL.java

Lines changed: 124 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,18 @@ public static TasksConfigurer call(CallHttpConfigurer configurer) {
606606
return list -> list.http(configurer);
607607
}
608608

609+
/**
610+
* Create a {@link TasksConfigurer} that adds an HTTP call task with an explicit name using a
611+
* low-level HTTP configurer.
612+
*
613+
* @param name the task name
614+
* @param configurer low-level HTTP configurer
615+
* @return a {@link TasksConfigurer} that adds a CallHTTP task
616+
*/
617+
public static TasksConfigurer call(String name, CallHttpConfigurer configurer) {
618+
return list -> list.http(name, configurer);
619+
}
620+
609621
/**
610622
* Create a {@link TasksConfigurer} that adds an OpenAPI call task.
611623
*
@@ -624,6 +636,17 @@ public static TasksConfigurer call(CallOpenAPIConfigurer configurer) {
624636
return list -> list.openapi(configurer);
625637
}
626638

639+
/**
640+
* Create a {@link TasksConfigurer} that adds an OpenAPI call task with an explicit name.
641+
*
642+
* @param name the task name
643+
* @param configurer OpenAPI configurer
644+
* @return a {@link TasksConfigurer} that adds a CallOpenAPI task
645+
*/
646+
public static TasksConfigurer call(String name, CallOpenAPIConfigurer configurer) {
647+
return list -> list.openapi(name, configurer);
648+
}
649+
627650
/**
628651
* Create a {@link TasksConfigurer} that adds a {@code set} task using a low-level configurer.
629652
*
@@ -634,6 +657,18 @@ public static TasksConfigurer set(SetConfigurer configurer) {
634657
return list -> list.set(configurer);
635658
}
636659

660+
/**
661+
* Create a {@link TasksConfigurer} that adds a {@code set} task with an explicit name using a
662+
* low-level configurer.
663+
*
664+
* @param name the task name
665+
* @param configurer configurer for the set task
666+
* @return a {@link TasksConfigurer} that adds a SetTask
667+
*/
668+
public static TasksConfigurer set(String name, SetConfigurer configurer) {
669+
return list -> list.set(name, configurer);
670+
}
671+
637672
/**
638673
* Create a {@link TasksConfigurer} that adds a {@code set} task using a raw expression.
639674
*
@@ -644,6 +679,18 @@ public static TasksConfigurer set(String expr) {
644679
return list -> list.set(expr);
645680
}
646681

682+
/**
683+
* Create a {@link TasksConfigurer} that adds a {@code set} task with an explicit name using a raw
684+
* expression.
685+
*
686+
* @param name the task name
687+
* @param expr expression to apply in the set task
688+
* @return a {@link TasksConfigurer} that adds a SetTask
689+
*/
690+
public static TasksConfigurer set(String name, String expr) {
691+
return list -> list.set(name, expr);
692+
}
693+
647694
/**
648695
* Adds an {@code emit} task to the workflow's task sequence using a custom configurer. *
649696
*
@@ -664,13 +711,6 @@ public static TasksConfigurer emit(Consumer<EmitTaskBuilder> configurer) {
664711
return list -> list.emit(configurer);
665712
}
666713

667-
/**
668-
* @see #emit(Consumer)
669-
*/
670-
public static TasksConfigurer emit(String name, Consumer<EmitTaskBuilder> configurer) {
671-
return list -> list.emit(name, configurer);
672-
}
673-
674714
/**
675715
* A convenient shortcut to add an {@code emit} task that only requires a CloudEvent type. *
676716
*
@@ -704,6 +744,17 @@ public static EmitSpec produced(String cloudEventType) {
704744
return new EmitSpec().type(cloudEventType);
705745
}
706746

747+
/**
748+
* Create a {@link TasksConfigurer} that adds an {@code emit} task with an explicit name.
749+
*
750+
* @param name the task name
751+
* @param configurer consumer configuring {@link EmitTaskBuilder}
752+
* @return a {@link TasksConfigurer} that adds an EmitTask
753+
*/
754+
public static TasksConfigurer emit(String name, Consumer<EmitTaskBuilder> configurer) {
755+
return list -> list.emit(name, configurer);
756+
}
757+
707758
/**
708759
* Create a {@link TasksConfigurer} that adds a {@code listen} task.
709760
*
@@ -714,6 +765,17 @@ public static TasksConfigurer listen(ListenConfigurer configurer) {
714765
return list -> list.listen(configurer);
715766
}
716767

768+
/**
769+
* Create a {@link TasksConfigurer} that adds a {@code listen} task with an explicit name.
770+
*
771+
* @param name the task name
772+
* @param configurer listen configurer
773+
* @return a {@link TasksConfigurer} that adds a ListenTask
774+
*/
775+
public static TasksConfigurer listen(String name, ListenConfigurer configurer) {
776+
return list -> list.listen(name, configurer);
777+
}
778+
717779
/**
718780
* Create a {@link TasksConfigurer} that adds a {@code forEach} task.
719781
*
@@ -724,6 +786,17 @@ public static TasksConfigurer forEach(ForEachConfigurer configurer) {
724786
return list -> list.forEach(configurer);
725787
}
726788

789+
/**
790+
* Create a {@link TasksConfigurer} that adds a {@code forEach} task with an explicit name.
791+
*
792+
* @param name the task name
793+
* @param configurer for-each configurer
794+
* @return a {@link TasksConfigurer} that adds a ForEachTask
795+
*/
796+
public static TasksConfigurer forEach(String name, ForEachConfigurer configurer) {
797+
return list -> list.forEach(name, configurer);
798+
}
799+
727800
/**
728801
* Create a {@link TasksConfigurer} that adds a {@code fork} task.
729802
*
@@ -734,6 +807,17 @@ public static TasksConfigurer fork(Consumer<ForkTaskBuilder> configurer) {
734807
return list -> list.fork(configurer);
735808
}
736809

810+
/**
811+
* Create a {@link TasksConfigurer} that adds a {@code fork} task with an explicit name.
812+
*
813+
* @param name the task name
814+
* @param configurer consumer configuring {@link ForkTaskBuilder}
815+
* @return a {@link TasksConfigurer} that adds a ForkTask
816+
*/
817+
public static TasksConfigurer fork(String name, Consumer<ForkTaskBuilder> configurer) {
818+
return list -> list.fork(name, configurer);
819+
}
820+
737821
/**
738822
* Create a {@link TasksConfigurer} that adds a {@code switch} task.
739823
*
@@ -744,6 +828,17 @@ public static TasksConfigurer switchCase(SwitchConfigurer configurer) {
744828
return list -> list.switchCase(configurer);
745829
}
746830

831+
/**
832+
* Create a {@link TasksConfigurer} that adds a {@code switch} task with an explicit name.
833+
*
834+
* @param name the task name
835+
* @param configurer switch configurer
836+
* @return a {@link TasksConfigurer} that adds a SwitchTask
837+
*/
838+
public static TasksConfigurer switchCase(String name, SwitchConfigurer configurer) {
839+
return list -> list.switchCase(name, configurer);
840+
}
841+
747842
/**
748843
* Create a {@link TasksConfigurer} that adds a {@code raise} task.
749844
*
@@ -754,6 +849,17 @@ public static TasksConfigurer raise(RaiseConfigurer configurer) {
754849
return list -> list.raise(configurer);
755850
}
756851

852+
/**
853+
* Create a {@link TasksConfigurer} that adds a {@code raise} task with an explicit name.
854+
*
855+
* @param name the task name
856+
* @param configurer raise configurer
857+
* @return a {@link TasksConfigurer} that adds a RaiseTask
858+
*/
859+
public static TasksConfigurer raise(String name, RaiseConfigurer configurer) {
860+
return list -> list.raise(name, configurer);
861+
}
862+
757863
/**
758864
* Create a {@link TasksConfigurer} that adds a {@code try/catch} task.
759865
*
@@ -764,6 +870,17 @@ public static TasksConfigurer tryCatch(TryConfigurer configurer) {
764870
return list -> list.tryCatch(configurer);
765871
}
766872

873+
/**
874+
* Create a {@link TasksConfigurer} that adds a {@code try/catch} task with an explicit name.
875+
*
876+
* @param name the task name
877+
* @param configurer try/catch configurer
878+
* @return a {@link TasksConfigurer} that adds a TryTask
879+
*/
880+
public static TasksConfigurer tryCatch(String name, TryConfigurer configurer) {
881+
return list -> list.tryCatch(name, configurer);
882+
}
883+
767884
// ----- Tasks that requires tasks list --//
768885

769886
/**

fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/WorkflowBuilderTest.java

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,20 @@
1616
package io.serverlessworkflow.fluent.spec;
1717

1818
import static io.serverlessworkflow.fluent.spec.dsl.DSL.basic;
19+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.call;
1920
import static io.serverlessworkflow.fluent.spec.dsl.DSL.cases;
21+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.doTasks;
2022
import static io.serverlessworkflow.fluent.spec.dsl.DSL.emit;
23+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.event;
24+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.forEach;
25+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.fork;
2126
import static io.serverlessworkflow.fluent.spec.dsl.DSL.http;
27+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.listen;
2228
import static io.serverlessworkflow.fluent.spec.dsl.DSL.produced;
29+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.raise;
30+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.set;
31+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.switchCase;
32+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.tryCatch;
2333
import static org.junit.jupiter.api.Assertions.assertEquals;
2434
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
2535
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -125,6 +135,117 @@ void testDoTaskSetAndForEach() {
125135
assertNotNull(forItem.getTask().getForTask(), "ForTask should be present");
126136
}
127137

138+
@Test
139+
void testTaskNamedSet() {
140+
// Test that we can now name a task "set" using the DSL
141+
Workflow wf =
142+
WorkflowBuilder.workflow("flowWithSetTask")
143+
.tasks(
144+
d ->
145+
d.set("set", "$.value = 'test'").set("set", s -> s.expr("$.another = 'value'")))
146+
.build();
147+
148+
List<TaskItem> items = wf.getDo();
149+
assertNotNull(items, "Do list must not be null");
150+
assertEquals(2, items.size(), "There should be two tasks");
151+
152+
// First task named "set" with string expression
153+
TaskItem firstSetItem = items.get(0);
154+
assertEquals("set", firstSetItem.getName(), "First task should be named 'set'");
155+
SetTask firstSetTask = firstSetItem.getTask().getSetTask();
156+
assertNotNull(firstSetTask, "SetTask should be present");
157+
assertEquals("$.value = 'test'", firstSetTask.getSet().getString());
158+
159+
// Second task also named "set" with configurer
160+
TaskItem secondSetItem = items.get(1);
161+
assertEquals("set", secondSetItem.getName(), "Second task should be named 'set'");
162+
SetTask secondSetTask = secondSetItem.getTask().getSetTask();
163+
assertNotNull(secondSetTask, "SetTask should be present");
164+
assertEquals("$.another = 'value'", secondSetTask.getSet().getString());
165+
}
166+
167+
@Test
168+
void testTaskNamedSetUsingDSLStaticImport() {
169+
Workflow wf =
170+
WorkflowBuilder.workflow("flowWithDSLSet")
171+
.tasks(
172+
doTasks(
173+
set("set", "$.initialized = true"), set("set", s -> s.expr("$.ready = true"))))
174+
.build();
175+
176+
List<TaskItem> items = wf.getDo();
177+
assertNotNull(items, "Do list must not be null");
178+
assertEquals(2, items.size(), "There should be two tasks");
179+
180+
TaskItem firstItem = items.get(0);
181+
assertEquals("set", firstItem.getName(), "First task should be named 'set'");
182+
SetTask firstTask = firstItem.getTask().getSetTask();
183+
assertNotNull(firstTask, "SetTask should be present");
184+
assertEquals("$.initialized = true", firstTask.getSet().getString());
185+
186+
TaskItem secondItem = items.get(1);
187+
assertEquals("set", secondItem.getName(), "Second task should be named 'set'");
188+
SetTask secondTask = secondItem.getTask().getSetTask();
189+
assertNotNull(secondTask, "SetTask should be present");
190+
assertEquals("$.ready = true", secondTask.getSet().getString());
191+
}
192+
193+
@Test
194+
void testAllTasksWithExplicitNames() {
195+
Workflow wf =
196+
WorkflowBuilder.workflow("flowWithExplicitNames")
197+
.tasks(
198+
doTasks(
199+
set("set", "$.initialized = true"),
200+
call("call", http().GET().endpoint("http://example.com")),
201+
emit("emit", e -> e.event(event().type("test.event"))),
202+
listen(
203+
"listen",
204+
l ->
205+
l.to(
206+
to ->
207+
to.one(
208+
f ->
209+
f.with(p -> p.type("com.test.event").source("test"))))),
210+
forEach("forEach", f -> f.each("item").in("$.items")),
211+
fork("fork", f -> f.compete(false)),
212+
switchCase("switch", cases().onDefault(FlowDirectiveEnum.CONTINUE)),
213+
raise("raise", r -> r.error(e -> e.type("test.error").status(500))),
214+
tryCatch("try", t -> t.tryHandler(inner -> inner.set("inner", "$.value = 1")))))
215+
.build();
216+
217+
List<TaskItem> items = wf.getDo();
218+
assertNotNull(items, "Do list must not be null");
219+
assertEquals(9, items.size(), "There should be nine tasks");
220+
221+
assertEquals("set", items.get(0).getName());
222+
assertNotNull(items.get(0).getTask().getSetTask());
223+
224+
assertEquals("call", items.get(1).getName());
225+
assertNotNull(items.get(1).getTask().getCallTask());
226+
227+
assertEquals("emit", items.get(2).getName());
228+
assertNotNull(items.get(2).getTask().getEmitTask());
229+
230+
assertEquals("listen", items.get(3).getName());
231+
assertNotNull(items.get(3).getTask().getListenTask());
232+
233+
assertEquals("forEach", items.get(4).getName());
234+
assertNotNull(items.get(4).getTask().getForTask());
235+
236+
assertEquals("fork", items.get(5).getName());
237+
assertNotNull(items.get(5).getTask().getForkTask());
238+
239+
assertEquals("switch", items.get(6).getName());
240+
assertNotNull(items.get(6).getTask().getSwitchTask());
241+
242+
assertEquals("raise", items.get(7).getName());
243+
assertNotNull(items.get(7).getTask().getRaiseTask());
244+
245+
assertEquals("try", items.get(8).getName());
246+
assertNotNull(items.get(8).getTask().getTryTask());
247+
}
248+
128249
@Test
129250
void testDoTaskMultipleTypes() {
130251
Workflow wf =

0 commit comments

Comments
 (0)