Skip to content

Commit 457257c

Browse files
committed
Add Fluent DSL Equivalents for Try/Catch/Retry Workflows
Signed-off-by: Matheus André <matheusandr2@gmail.com>
1 parent 3ac23d9 commit 457257c

7 files changed

Lines changed: 403 additions & 0 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ public TryTaskCatchBuilder<T> retry(Consumer<RetryPolicyBuilder> consumer) {
113113
return this;
114114
}
115115

116+
public TryTaskCatchBuilder<T> retry(String reference) {
117+
this.tryTaskCatch.setRetry(new Retry().withRetryPolicyReference(reference));
118+
return this;
119+
}
120+
116121
public TryTaskCatchBuilder<T> errorsWith(Consumer<CatchErrorsBuilder> consumer) {
117122
final CatchErrorsBuilder catchErrorsBuilder = new CatchErrorsBuilder();
118123
consumer.accept(catchErrorsBuilder);

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,18 @@
1919
import io.serverlessworkflow.api.types.ErrorDetails;
2020
import io.serverlessworkflow.api.types.ErrorTitle;
2121
import io.serverlessworkflow.api.types.ErrorType;
22+
import io.serverlessworkflow.api.types.RetryPolicy;
2223
import io.serverlessworkflow.api.types.UriTemplate;
2324
import io.serverlessworkflow.api.types.Use;
2425
import io.serverlessworkflow.api.types.UseAuthentications;
2526
import io.serverlessworkflow.api.types.UseErrors;
27+
import io.serverlessworkflow.api.types.UseRetries;
28+
import io.serverlessworkflow.fluent.spec.BaseTryTaskBuilder.RetryPolicyBuilder;
2629
import java.net.URI;
2730
import java.net.URISyntaxException;
31+
import java.util.LinkedHashMap;
2832
import java.util.List;
33+
import java.util.Map;
2934
import java.util.function.Consumer;
3035

3136
public class UseBuilder {
@@ -66,6 +71,17 @@ public UseBuilder errors(Consumer<UseErrorsBuilder> errorsConsumer) {
6671
return this;
6772
}
6873

74+
public UseBuilder retries(Consumer<UseRetriesBuilder> retriesConsumer) {
75+
final UseRetriesBuilder retriesBuilder = new UseRetriesBuilder();
76+
retriesConsumer.accept(retriesBuilder);
77+
final UseRetries built = retriesBuilder.build();
78+
if (this.use.getRetries() == null) {
79+
this.use.setRetries(new UseRetries());
80+
}
81+
this.use.getRetries().getAdditionalProperties().putAll(built.getAdditionalProperties());
82+
return this;
83+
}
84+
6985
public Use build() {
7086
return use;
7187
}
@@ -132,4 +148,23 @@ public Error build() {
132148
return error;
133149
}
134150
}
151+
152+
public static final class UseRetriesBuilder {
153+
private final Map<String, RetryPolicy> retries = new LinkedHashMap<>();
154+
155+
UseRetriesBuilder() {}
156+
157+
public UseRetriesBuilder retry(String name, Consumer<RetryPolicyBuilder> configurer) {
158+
final RetryPolicyBuilder policyBuilder = new RetryPolicyBuilder();
159+
configurer.accept(policyBuilder);
160+
this.retries.put(name, policyBuilder.build());
161+
return this;
162+
}
163+
164+
public UseRetries build() {
165+
final UseRetries useRetries = new UseRetries();
166+
useRetries.getAdditionalProperties().putAll(this.retries);
167+
return useRetries;
168+
}
169+
}
135170
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ default SELF query(String name, String value) {
122122
return self();
123123
}
124124

125+
default SELF redirect(boolean redirect) {
126+
steps().add(c -> c.redirect(redirect));
127+
return self();
128+
}
129+
125130
default void accept(CallHttpTaskFluent<?> b) {
126131
for (var s : steps()) {
127132
s.accept(b);

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

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

18+
import io.serverlessworkflow.fluent.spec.DurationInlineBuilder;
1819
import io.serverlessworkflow.fluent.spec.TryTaskBuilder;
1920
import io.serverlessworkflow.fluent.spec.configurers.RetryConfigurer;
2021
import java.util.LinkedList;
@@ -51,11 +52,31 @@ public RetrySpec limit(Consumer<TryTaskBuilder.RetryLimitBuilder> retry) {
5152
return this;
5253
}
5354

55+
public RetrySpec delay(String expression) {
56+
steps.add(r -> r.delay(expression));
57+
return this;
58+
}
59+
60+
public RetrySpec delay(Consumer<DurationInlineBuilder> duration) {
61+
steps.add(r -> r.delay(duration));
62+
return this;
63+
}
64+
5465
public RetrySpec backoff(Consumer<TryTaskBuilder.BackoffBuilder> backoff) {
5566
steps.add(r -> r.backoff(backoff));
5667
return this;
5768
}
5869

70+
public RetrySpec backoffExponential() {
71+
steps.add(r -> r.backoff(b -> b.exponential("e", "1.5")));
72+
return this;
73+
}
74+
75+
public RetrySpec backoffConstant() {
76+
steps.add(r -> r.backoff(b -> b.constant("c", "10")));
77+
return this;
78+
}
79+
5980
public RetrySpec jitter(Consumer<TryTaskBuilder.RetryPolicyJitterBuilder> jitter) {
6081
steps.add(r -> r.jitter(jitter));
6182
return this;

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ public TryCatchSpec errors(Consumer<TryTaskBuilder.CatchErrorsBuilder> errors) {
6464
return this;
6565
}
6666

67+
public TryCatchSpec as(String errorVarName) {
68+
steps.add(t -> t.as(errorVarName));
69+
return this;
70+
}
71+
72+
public TryCatchSpec retry(String reference) {
73+
steps.add(t -> t.retry(reference));
74+
return this;
75+
}
76+
6777
public RetrySpec retry() {
6878
return retry;
6979
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public UseSpec errors(Consumer<UseBuilder.UseErrorsBuilder> errorsConsumer) {
4646
return this;
4747
}
4848

49+
public UseSpec retries(Consumer<UseBuilder.UseRetriesBuilder> retriesConsumer) {
50+
steps.add(u -> u.retries(retriesConsumer));
51+
return this;
52+
}
53+
4954
@Override
5055
public void accept(UseBuilder useBuilder) {
5156
steps.forEach(step -> step.accept(useBuilder));

0 commit comments

Comments
 (0)