Skip to content

Commit 24c94d0

Browse files
committed
Refactor delegates
Signed-off-by: Ricardo Zanini <[email protected]>
1 parent fd4ba7d commit 24c94d0

File tree

14 files changed

+129
-132
lines changed

14 files changed

+129
-132
lines changed

fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentAdapters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static List<AgentExecutor> toExecutors(Object... agents) {
3131
return agentsToExecutors(Stream.of(agents).map(AgentInstance.class::cast).toList());
3232
}
3333

34-
public static Function<Cognisphere, Object> toFn(AgentExecutor exec) {
34+
public static Function<Cognisphere, Object> toFunction(AgentExecutor exec) {
3535
return exec::invoke;
3636
}
3737
}

fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentDoTaskBuilder.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,14 @@
1515
*/
1616
package io.serverlessworkflow.fluent.agentic;
1717

18-
import io.serverlessworkflow.fluent.func.FuncDoTaskBuilder;
19-
import io.serverlessworkflow.fluent.func.FuncTaskItemListBuilder;
18+
import io.serverlessworkflow.fluent.spec.BaseDoTaskBuilder;
2019

21-
public class AgentDoTaskBuilder extends FuncDoTaskBuilder
20+
public class AgentDoTaskBuilder
21+
extends BaseDoTaskBuilder<AgentDoTaskBuilder, AgentTaskItemListBuilder>
2222
implements DelegatingAgentDoTaskFluent<AgentDoTaskBuilder> {
2323

24-
private AgentDoTaskBuilder(AgentTaskItemListBuilder agentTaskItemListBuilder) {
25-
super(agentTaskItemListBuilder);
26-
}
27-
28-
static AgentDoTaskBuilder wrap(FuncDoTaskBuilder base) {
29-
FuncTaskItemListBuilder funcList = base.internalDelegate();
30-
AgentTaskItemListBuilder agentList =
31-
(funcList instanceof AgentTaskItemListBuilder al)
32-
? al
33-
: new AgentTaskItemListBuilder(funcList.getInternalList());
34-
return new AgentDoTaskBuilder(agentList);
35-
}
36-
37-
@Override
38-
public AgentDoTaskFluent<?> agentInternalDelegate() {
39-
return (AgentDoTaskFluent<?>) super.internalDelegate();
24+
AgentDoTaskBuilder() {
25+
super(new AgentTaskItemListBuilder());
4026
}
4127

4228
@Override

fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentTaskItemListBuilder.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,35 @@
1515
*/
1616
package io.serverlessworkflow.fluent.agentic;
1717

18-
import dev.langchain4j.agentic.internal.AgentExecutor;
19-
import io.serverlessworkflow.api.types.TaskItem;
2018
import io.serverlessworkflow.fluent.func.FuncTaskItemListBuilder;
21-
import java.util.List;
19+
import io.serverlessworkflow.fluent.spec.BaseTaskItemListBuilder;
2220

23-
public class AgentTaskItemListBuilder extends FuncTaskItemListBuilder
21+
public class AgentTaskItemListBuilder extends BaseTaskItemListBuilder<AgentTaskItemListBuilder>
2422
implements AgentDoTaskFluent<AgentTaskItemListBuilder> {
2523

26-
AgentTaskItemListBuilder(final List<TaskItem> list) {
27-
super(list);
24+
private final FuncTaskItemListBuilder funcDelegate;
25+
26+
AgentTaskItemListBuilder() {
27+
super();
28+
this.funcDelegate = new FuncTaskItemListBuilder(super.mutableList());
29+
}
30+
31+
@Override
32+
protected AgentTaskItemListBuilder newItemListBuilder() {
33+
return new AgentTaskItemListBuilder();
2834
}
2935

3036
@Override
3137
public AgentTaskItemListBuilder agent(String name, Object agent) {
32-
AgentExecutor exec = AgentAdapters.toExecutors(agent).get(0);
33-
this.callFn(name, fn -> fn.function(AgentAdapters.toFn(exec)));
38+
AgentAdapters.toExecutors(agent)
39+
.forEach(
40+
exec ->
41+
this.funcDelegate.callFn(name, fn -> fn.function(AgentAdapters.toFunction(exec))));
42+
return this;
43+
}
44+
45+
@Override
46+
public AgentTaskItemListBuilder self() {
3447
return this;
3548
}
3649
}

fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgenticWorkflowBuilder.java

Lines changed: 15 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,64 +15,37 @@
1515
*/
1616
package io.serverlessworkflow.fluent.agentic;
1717

18-
import io.serverlessworkflow.api.types.Workflow;
19-
import io.serverlessworkflow.fluent.func.FuncWorkflowBuilder;
20-
import io.serverlessworkflow.fluent.spec.DocumentBuilder;
21-
import io.serverlessworkflow.fluent.spec.InputBuilder;
22-
import io.serverlessworkflow.fluent.spec.OutputBuilder;
23-
import io.serverlessworkflow.fluent.spec.UseBuilder;
24-
import java.util.function.Consumer;
18+
import static java.lang.constant.ConstantDescs.DEFAULT_NAME;
2519

26-
public final class AgenticWorkflowBuilder {
20+
import io.serverlessworkflow.fluent.spec.BaseWorkflowBuilder;
2721

28-
private final FuncWorkflowBuilder delegate;
22+
public final class AgenticWorkflowBuilder
23+
extends BaseWorkflowBuilder<
24+
AgenticWorkflowBuilder, AgentDoTaskBuilder, AgentTaskItemListBuilder> {
2925

30-
AgenticWorkflowBuilder(final FuncWorkflowBuilder delegate) {
31-
this.delegate = delegate;
26+
AgenticWorkflowBuilder(final String name, final String namespace, final String version) {
27+
super(name, namespace, version);
3228
}
3329

3430
public static AgenticWorkflowBuilder workflow() {
35-
return new AgenticWorkflowBuilder(FuncWorkflowBuilder.workflow());
31+
return new AgenticWorkflowBuilder(DEFAULT_NAME, DEFAULT_NAMESPACE, DEFAULT_VERSION);
3632
}
3733

3834
public static AgenticWorkflowBuilder workflow(String name) {
39-
return new AgenticWorkflowBuilder(FuncWorkflowBuilder.workflow(name));
35+
return new AgenticWorkflowBuilder(name, DEFAULT_NAMESPACE, DEFAULT_VERSION);
4036
}
4137

4238
public static AgenticWorkflowBuilder workflow(String name, String ns) {
43-
return new AgenticWorkflowBuilder(FuncWorkflowBuilder.workflow(name, ns));
39+
return new AgenticWorkflowBuilder(name, ns, DEFAULT_VERSION);
4440
}
4541

46-
public AgenticWorkflowBuilder document(Consumer<DocumentBuilder> c) {
47-
delegate.document(c);
48-
return this;
49-
}
50-
51-
public AgenticWorkflowBuilder input(Consumer<InputBuilder> c) {
52-
delegate.input(c);
53-
return this;
54-
}
55-
56-
public AgenticWorkflowBuilder output(Consumer<OutputBuilder> c) {
57-
delegate.output(c);
58-
return this;
59-
}
60-
61-
public AgenticWorkflowBuilder use(Consumer<UseBuilder> c) {
62-
delegate.use(c);
63-
return this;
42+
@Override
43+
protected AgentDoTaskBuilder newDo() {
44+
return new AgentDoTaskBuilder();
6445
}
6546

66-
public AgenticWorkflowBuilder tasks(Consumer<AgentDoTaskBuilder> c) {
67-
delegate.tasks(
68-
funcDo -> {
69-
AgentDoTaskBuilder agentDoTaskBuilder = AgentDoTaskBuilder.wrap(funcDo);
70-
c.accept(agentDoTaskBuilder);
71-
});
47+
@Override
48+
protected AgenticWorkflowBuilder self() {
7249
return this;
7350
}
74-
75-
public Workflow build() {
76-
return delegate.build();
77-
}
7851
}

fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/DelegatingAgentDoTaskFluent.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,20 @@
1515
*/
1616
package io.serverlessworkflow.fluent.agentic;
1717

18-
public interface DelegatingAgentDoTaskFluent<SELF extends DelegatingAgentDoTaskFluent<SELF>>
19-
extends AgentDoTaskFluent<SELF> {
18+
import io.serverlessworkflow.fluent.func.DelegatingFuncDoTaskFluent;
19+
import io.serverlessworkflow.fluent.spec.HasDelegate;
2020

21-
/** Return the underlying functional ops delegate. */
22-
AgentDoTaskFluent<?> agentInternalDelegate();
21+
public interface DelegatingAgentDoTaskFluent<SELF extends DelegatingAgentDoTaskFluent<SELF>>
22+
extends AgentDoTaskFluent<SELF>, DelegatingFuncDoTaskFluent<SELF>, HasDelegate {
2323

2424
@SuppressWarnings("unchecked")
25-
default SELF self() {
26-
return (SELF) this;
25+
private AgentDoTaskFluent<SELF> d() {
26+
return (AgentDoTaskFluent<SELF>) this.delegate();
2727
}
2828

29+
@SuppressWarnings("unchecked")
2930
default SELF agent(String name, Object agent) {
30-
agentInternalDelegate().agent(name, agent);
31+
d().agent(name, agent);
3132
return (SELF) this;
3233
}
3334
}

fluent/agentic/src/test/java/io/serverlessworkflow/fluent/agentic/AgenticWorkflowBuilderTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.serverlessworkflow.fluent.agentic;
1717

1818
import static io.serverlessworkflow.fluent.agentic.Models.BASE_MODEL;
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
1920
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
2021
import static org.junit.jupiter.api.Assertions.assertNotNull;
2122
import static org.mockito.Mockito.spy;
@@ -42,6 +43,7 @@ public void verifyAgentCall() {
4243
.build();
4344

4445
assertNotNull(workflow);
46+
assertEquals(1, workflow.getDo().size());
4547
assertInstanceOf(CallJava.class, workflow.getDo().get(0).getTask().getCallTask().get());
4648
}
4749
}

fluent/func/src/main/java/io/serverlessworkflow/fluent/func/DelegatingFuncDoTaskFluent.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.serverlessworkflow.fluent.func;
1717

18+
import io.serverlessworkflow.fluent.spec.HasDelegate;
1819
import java.util.function.Consumer;
1920

2021
/**
@@ -23,49 +24,51 @@
2324
* @param <SELF> concrete builder type
2425
*/
2526
public interface DelegatingFuncDoTaskFluent<SELF extends DelegatingFuncDoTaskFluent<SELF>>
26-
extends FuncDoTaskFluent<SELF> {
27-
28-
/** Return the underlying functional ops delegate. */
29-
FuncDoTaskFluent<?> funcInternalDelegate();
27+
extends FuncDoTaskFluent<SELF>, HasDelegate {
3028

3129
@SuppressWarnings("unchecked")
3230
default SELF self() {
3331
return (SELF) this;
3432
}
3533

34+
@SuppressWarnings("unchecked")
35+
private FuncDoTaskFluent<SELF> d() {
36+
return (FuncDoTaskFluent<SELF>) this.delegate();
37+
}
38+
3639
@Override
3740
default SELF callFn(String name, Consumer<FuncCallTaskBuilder> cfg) {
38-
funcInternalDelegate().callFn(name, cfg);
41+
d().callFn(name, cfg);
3942
return self();
4043
}
4144

4245
@Override
4346
default SELF callFn(Consumer<FuncCallTaskBuilder> cfg) {
44-
funcInternalDelegate().callFn(cfg);
47+
d().callFn(cfg);
4548
return self();
4649
}
4750

4851
@Override
4952
default SELF forFn(String name, Consumer<FuncForTaskBuilder> cfg) {
50-
funcInternalDelegate().forFn(name, cfg);
53+
d().forFn(name, cfg);
5154
return self();
5255
}
5356

5457
@Override
5558
default SELF forFn(Consumer<FuncForTaskBuilder> cfg) {
56-
funcInternalDelegate().forFn(cfg);
59+
d().forFn(cfg);
5760
return self();
5861
}
5962

6063
@Override
6164
default SELF switchFn(String name, Consumer<FuncSwitchTaskBuilder> cfg) {
62-
funcInternalDelegate().switchFn(name, cfg);
65+
d().switchFn(name, cfg);
6366
return self();
6467
}
6568

6669
@Override
6770
default SELF switchFn(Consumer<FuncSwitchTaskBuilder> cfg) {
68-
funcInternalDelegate().switchFn(cfg);
71+
d().switchFn(cfg);
6972
return self();
7073
}
7174
}

fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncDoTaskBuilder.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,12 @@ public class FuncDoTaskBuilder extends BaseDoTaskBuilder<FuncDoTaskBuilder, Func
2121
implements FuncTransformations<FuncDoTaskBuilder>,
2222
DelegatingFuncDoTaskFluent<FuncDoTaskBuilder> {
2323

24-
protected FuncDoTaskBuilder(FuncTaskItemListBuilder listBuilder) {
25-
super(listBuilder);
26-
}
27-
28-
FuncDoTaskBuilder() {
24+
public FuncDoTaskBuilder() {
2925
super(new FuncTaskItemListBuilder());
3026
}
3127

3228
@Override
3329
public FuncDoTaskBuilder self() {
3430
return this;
3531
}
36-
37-
@Override
38-
public FuncDoTaskFluent<FuncTaskItemListBuilder> funcInternalDelegate() {
39-
return internalDelegate();
40-
}
4132
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
public class FuncTaskItemListBuilder extends BaseTaskItemListBuilder<FuncTaskItemListBuilder>
2626
implements FuncDoTaskFluent<FuncTaskItemListBuilder> {
2727

28-
protected FuncTaskItemListBuilder() {
28+
public FuncTaskItemListBuilder() {
2929
super();
3030
}
3131

32-
protected FuncTaskItemListBuilder(final List<TaskItem> list) {
32+
public FuncTaskItemListBuilder(final List<TaskItem> list) {
3333
super(list);
3434
}
3535

fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncWorkflowBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class FuncWorkflowBuilder
2222
extends BaseWorkflowBuilder<FuncWorkflowBuilder, FuncDoTaskBuilder, FuncTaskItemListBuilder>
2323
implements FuncTransformations<FuncWorkflowBuilder> {
2424

25-
FuncWorkflowBuilder(final String name, final String namespace, final String version) {
25+
protected FuncWorkflowBuilder(final String name, final String namespace, final String version) {
2626
super(name, namespace, version);
2727
}
2828

0 commit comments

Comments
 (0)