Skip to content

Commit 68ca85d

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

2 files changed

Lines changed: 245 additions & 0 deletions

File tree

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

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

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

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

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

681+
/**
682+
* Create a {@link TasksConfigurer} that adds a {@code set} task with an explicit name using a raw
683+
* expression.
684+
*
685+
* @param name the task name
686+
* @param expr expression to apply in the set task
687+
* @return a {@link TasksConfigurer} that adds a SetTask
688+
*/
689+
public static TasksConfigurer set(String name, String expr) {
690+
return list -> list.set(name, expr);
691+
}
692+
646693
/**
647694
* Create a {@link TasksConfigurer} that adds an {@code emit} task.
648695
*
@@ -653,6 +700,17 @@ public static TasksConfigurer emit(Consumer<EmitTaskBuilder> configurer) {
653700
return list -> list.emit(configurer);
654701
}
655702

703+
/**
704+
* Create a {@link TasksConfigurer} that adds an {@code emit} task with an explicit name.
705+
*
706+
* @param name the task name
707+
* @param configurer consumer configuring {@link EmitTaskBuilder}
708+
* @return a {@link TasksConfigurer} that adds an EmitTask
709+
*/
710+
public static TasksConfigurer emit(String name, Consumer<EmitTaskBuilder> configurer) {
711+
return list -> list.emit(name, configurer);
712+
}
713+
656714
/**
657715
* Create a {@link TasksConfigurer} that adds a {@code listen} task.
658716
*
@@ -663,6 +721,17 @@ public static TasksConfigurer listen(ListenConfigurer configurer) {
663721
return list -> list.listen(configurer);
664722
}
665723

724+
/**
725+
* Create a {@link TasksConfigurer} that adds a {@code listen} task with an explicit name.
726+
*
727+
* @param name the task name
728+
* @param configurer listen configurer
729+
* @return a {@link TasksConfigurer} that adds a ListenTask
730+
*/
731+
public static TasksConfigurer listen(String name, ListenConfigurer configurer) {
732+
return list -> list.listen(name, configurer);
733+
}
734+
666735
/**
667736
* Create a {@link TasksConfigurer} that adds a {@code forEach} task.
668737
*
@@ -673,6 +742,17 @@ public static TasksConfigurer forEach(ForEachConfigurer configurer) {
673742
return list -> list.forEach(configurer);
674743
}
675744

745+
/**
746+
* Create a {@link TasksConfigurer} that adds a {@code forEach} task with an explicit name.
747+
*
748+
* @param name the task name
749+
* @param configurer for-each configurer
750+
* @return a {@link TasksConfigurer} that adds a ForEachTask
751+
*/
752+
public static TasksConfigurer forEach(String name, ForEachConfigurer configurer) {
753+
return list -> list.forEach(name, configurer);
754+
}
755+
676756
/**
677757
* Create a {@link TasksConfigurer} that adds a {@code fork} task.
678758
*
@@ -683,6 +763,17 @@ public static TasksConfigurer fork(Consumer<ForkTaskBuilder> configurer) {
683763
return list -> list.fork(configurer);
684764
}
685765

766+
/**
767+
* Create a {@link TasksConfigurer} that adds a {@code fork} task with an explicit name.
768+
*
769+
* @param name the task name
770+
* @param configurer consumer configuring {@link ForkTaskBuilder}
771+
* @return a {@link TasksConfigurer} that adds a ForkTask
772+
*/
773+
public static TasksConfigurer fork(String name, Consumer<ForkTaskBuilder> configurer) {
774+
return list -> list.fork(name, configurer);
775+
}
776+
686777
/**
687778
* Create a {@link TasksConfigurer} that adds a {@code switch} task.
688779
*
@@ -693,6 +784,17 @@ public static TasksConfigurer switchCase(SwitchConfigurer configurer) {
693784
return list -> list.switchCase(configurer);
694785
}
695786

787+
/**
788+
* Create a {@link TasksConfigurer} that adds a {@code switch} task with an explicit name.
789+
*
790+
* @param name the task name
791+
* @param configurer switch configurer
792+
* @return a {@link TasksConfigurer} that adds a SwitchTask
793+
*/
794+
public static TasksConfigurer switchCase(String name, SwitchConfigurer configurer) {
795+
return list -> list.switchCase(name, configurer);
796+
}
797+
696798
/**
697799
* Create a {@link TasksConfigurer} that adds a {@code raise} task.
698800
*
@@ -703,6 +805,17 @@ public static TasksConfigurer raise(RaiseConfigurer configurer) {
703805
return list -> list.raise(configurer);
704806
}
705807

808+
/**
809+
* Create a {@link TasksConfigurer} that adds a {@code raise} task with an explicit name.
810+
*
811+
* @param name the task name
812+
* @param configurer raise configurer
813+
* @return a {@link TasksConfigurer} that adds a RaiseTask
814+
*/
815+
public static TasksConfigurer raise(String name, RaiseConfigurer configurer) {
816+
return list -> list.raise(name, configurer);
817+
}
818+
706819
/**
707820
* Create a {@link TasksConfigurer} that adds a {@code try/catch} task.
708821
*
@@ -713,6 +826,17 @@ public static TasksConfigurer tryCatch(TryConfigurer configurer) {
713826
return list -> list.tryCatch(configurer);
714827
}
715828

829+
/**
830+
* Create a {@link TasksConfigurer} that adds a {@code try/catch} task with an explicit name.
831+
*
832+
* @param name the task name
833+
* @param configurer try/catch configurer
834+
* @return a {@link TasksConfigurer} that adds a TryTask
835+
*/
836+
public static TasksConfigurer tryCatch(String name, TryConfigurer configurer) {
837+
return list -> list.tryCatch(name, configurer);
838+
}
839+
716840
// ----- Tasks that requires tasks list --//
717841

718842
/**

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,9 +16,19 @@
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;
22+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.emit;
2023
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;
28+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.raise;
29+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.set;
30+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.switchCase;
31+
import static io.serverlessworkflow.fluent.spec.dsl.DSL.tryCatch;
2232
import static org.junit.jupiter.api.Assertions.assertEquals;
2333
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
2434
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -121,6 +131,117 @@ void testDoTaskSetAndForEach() {
121131
assertNotNull(forItem.getTask().getForTask(), "ForTask should be present");
122132
}
123133

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

0 commit comments

Comments
 (0)