Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,22 +68,33 @@ public static boolean isValid(String str) {
public static Optional<WorkflowFilter> buildWorkflowFilter(
WorkflowApplication app, InputFrom from) {
return from != null
? Optional.of(buildWorkflowFilter(app, from.getString(), from.getObject()))
? Optional.of(buildFilterFromStrObject(app, from.getString(), from.getObject()))
: Optional.empty();
}

public static Optional<WorkflowFilter> buildWorkflowFilter(WorkflowApplication app, OutputAs as) {
return as != null
? Optional.of(buildWorkflowFilter(app, as.getString(), as.getObject()))
? Optional.of(buildFilterFromStrObject(app, as.getString(), as.getObject()))
: Optional.empty();
}

public static Optional<WorkflowFilter> buildWorkflowFilter(WorkflowApplication app, ExportAs as) {
return as != null
? Optional.of(buildWorkflowFilter(app, as.getString(), as.getObject()))
? Optional.of(buildFilterFromStrObject(app, as.getString(), as.getObject()))
: Optional.empty();
}

public static WorkflowFilter buildWorkflowFilter(WorkflowApplication app, Object obj) {
return obj instanceof String str
? buildWorkflowFilter(app, str)
: app.expressionFactory().buildFilter(ExpressionDescriptor.object(obj), app.modelFactory());
}

public static WorkflowFilter buildWorkflowFilter(
WorkflowApplication app, String str, Map<String, Object> object) {
return buildFilterFromStrObject(app, str, object);
}

public static WorkflowValueResolver<String> buildStringFilter(
WorkflowApplication app, String expression, String literal) {
return expression != null ? toExprString(app, expression) : toString(literal);
Expand All @@ -108,29 +119,26 @@ private static WorkflowValueResolver<String> toString(String literal) {
return (w, t, m) -> literal;
}

public static WorkflowFilter buildWorkflowFilter(
private static WorkflowFilter buildFilterFromStrObject(
WorkflowApplication app, String str, Object object) {
return app.expressionFactory()
.buildFilter(new ExpressionDescriptor(str, object), app.modelFactory());
}

public static WorkflowValueResolver<String> buildStringResolver(
WorkflowApplication app, String str) {
return app.expressionFactory().resolveString(ExpressionDescriptor.from(str));
}

public static WorkflowValueResolver<String> buildStringResolver(
WorkflowApplication app, String str, Object obj) {
return app.expressionFactory().resolveString(new ExpressionDescriptor(str, obj));
public static WorkflowValueResolver<Map<String, Object>> buildMapResolver(
WorkflowApplication app, Map<String, Object> map) {
return app.expressionFactory().resolveMap(ExpressionDescriptor.object(map));
}

public static WorkflowValueResolver<Map<String, Object>> buildMapResolver(
WorkflowApplication app, String str, Object obj) {
return app.expressionFactory().resolveMap(new ExpressionDescriptor(str, obj));
WorkflowApplication app, String expr, Map<String, ?> map) {
return app.expressionFactory().resolveMap(new ExpressionDescriptor(expr, map));
}

public static WorkflowFilter buildWorkflowFilter(WorkflowApplication app, String str) {
return app.expressionFactory().buildFilter(ExpressionDescriptor.from(str), app.modelFactory());
return ExpressionUtils.isExpr(str)
? app.expressionFactory().buildFilter(ExpressionDescriptor.from(str), app.modelFactory())
: (w, t, m) -> app.modelFactory().from(str);
}

public static WorkflowPredicate buildPredicate(WorkflowApplication app, String str) {
Expand All @@ -145,13 +153,6 @@ public static Optional<WorkflowPredicate> optionalPredicate(WorkflowApplication
return str != null ? Optional.of(buildPredicate(app, str)) : Optional.empty();
}

public static Optional<WorkflowFilter> optionalFilter(
WorkflowApplication app, Object obj, String str) {
return str != null || obj != null
? Optional.of(buildWorkflowFilter(app, str, obj))
: Optional.empty();
}

public static String toString(UriTemplate template) {
URI uri = template.getLiteralUri();
return uri != null ? uri.toString() : template.getLiteralUriTemplate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ public void init(RunScript taskConfiguration, WorkflowDefinition definition) {
script.getEnvironment() != null && script.getEnvironment().getAdditionalProperties() != null
? Optional.of(
WorkflowUtils.buildMapResolver(
application, null, script.getEnvironment().getAdditionalProperties()))
application, script.getEnvironment().getAdditionalProperties()))
: Optional.empty();

this.argumentExpr =
script.getArguments() != null && script.getArguments().getAdditionalProperties() != null
? Optional.of(
WorkflowUtils.buildMapResolver(
application, null, script.getArguments().getAdditionalProperties()))
application, script.getArguments().getAdditionalProperties()))
: Optional.empty();

this.codeSupplier =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ public void init(RunShell taskConfiguration, WorkflowDefinition definition) {
StringBuilder commandBuilder =
new StringBuilder(
ExpressionUtils.isExpr(shellCommand)
? WorkflowUtils.buildStringResolver(
application, shellCommand, taskContext.input().asJavaObject())
? WorkflowUtils.buildStringFilter(application, shellCommand)
.apply(workflowContext, taskContext, taskContext.input())
: shellCommand);

Expand All @@ -85,8 +84,7 @@ public void init(RunShell taskConfiguration, WorkflowDefinition definition) {
.append(" ")
.append(
ExpressionUtils.isExpr(entry.getKey())
? WorkflowUtils.buildStringResolver(
application, entry.getKey(), taskContext.input().asJavaObject())
? WorkflowUtils.buildStringFilter(application, entry.getKey())
.apply(workflowContext, taskContext, taskContext.input())
: entry.getKey());
if (entry.getValue() != null) {
Expand All @@ -95,10 +93,8 @@ public void init(RunShell taskConfiguration, WorkflowDefinition definition) {
.append("=")
.append(
ExpressionUtils.isExpr(entry.getValue())
? WorkflowUtils.buildStringResolver(
application,
entry.getValue().toString(),
taskContext.input().asJavaObject())
? WorkflowUtils.buildStringFilter(
application, entry.getValue().toString())
.apply(workflowContext, taskContext, taskContext.input())
: entry.getValue().toString());
}
Expand All @@ -113,10 +109,7 @@ public void init(RunShell taskConfiguration, WorkflowDefinition definition) {
shell.getEnvironment().getAdditionalProperties().entrySet()) {
String value =
ExpressionUtils.isExpr(entry.getValue())
? WorkflowUtils.buildStringResolver(
application,
entry.getValue().toString(),
taskContext.input().asJavaObject())
? WorkflowUtils.buildStringFilter(application, entry.getValue().toString())
.apply(workflowContext, taskContext, taskContext.input())
: entry.getValue().toString();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@
import io.serverlessworkflow.impl.WorkflowDefinition;
import io.serverlessworkflow.impl.WorkflowError;
import io.serverlessworkflow.impl.WorkflowException;
import io.serverlessworkflow.impl.WorkflowFilter;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowUtils;
import io.serverlessworkflow.impl.WorkflowValueResolver;
import io.serverlessworkflow.impl.executors.CallableTask;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
import jakarta.ws.rs.HttpMethod;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.client.Invocation.Builder;
Expand Down Expand Up @@ -95,19 +96,11 @@ public HttpExecutorBuilder withQueryMap(WorkflowValueResolver<Map<String, Object
}

public HttpExecutorBuilder withHeaders(Map<String, Object> headersMap) {
return withHeaders(
definition
.application()
.expressionFactory()
.resolveMap(ExpressionDescriptor.object(headersMap)));
return withHeaders(WorkflowUtils.buildMapResolver(definition.application(), headersMap));
}

public HttpExecutorBuilder withQueryMap(Map<String, Object> headersMap) {
return withQueryMap(
definition
.application()
.expressionFactory()
.resolveMap(ExpressionDescriptor.object(headersMap)));
public HttpExecutorBuilder withQueryMap(Map<String, Object> queryMap) {
return withQueryMap(WorkflowUtils.buildMapResolver(definition.application(), queryMap));
}

public HttpExecutorBuilder withMethod(String method) {
Expand Down Expand Up @@ -193,8 +186,7 @@ private static RequestSupplier buildRequestSupplier(
String method, Object body, WorkflowApplication application, HttpModelConverter converter) {
switch (method.toUpperCase()) {
case HttpMethod.POST:
WorkflowValueResolver<Map<String, Object>> bodyFilter =
buildMapResolver(application, null, body);
WorkflowFilter bodyFilter = WorkflowUtils.buildWorkflowFilter(application, body);
return (request, w, context, node) ->
converter.toModel(
application.modelFactory(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelFactory;
import jakarta.ws.rs.client.Entity;
import java.util.Map;

public interface HttpModelConverter {

default WorkflowModel toModel(WorkflowModelFactory factory, WorkflowModel model, Object entity) {
return factory.fromAny(model, entity);
}

default Entity toEntity(Map<String, Object> model) {
return Entity.json(model);
default Entity toEntity(WorkflowModel model) {
return Entity.json(model.as(model.objectClass()).orElseThrow());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import io.serverlessworkflow.impl.WorkflowApplication;
import io.serverlessworkflow.impl.WorkflowContext;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowUtils;
import io.serverlessworkflow.impl.WorkflowValueResolver;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
import jakarta.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.Map;
Expand All @@ -31,7 +31,7 @@ class OperationPathResolver implements WorkflowValueResolver<URI> {

OperationPathResolver(String path, WorkflowApplication application, Map<String, Object> args) {
this.path = path;
this.asMap = application.expressionFactory().resolveMap(ExpressionDescriptor.object(args));
this.asMap = WorkflowUtils.buildMapResolver(application, args);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ private static Stream<Arguments> provideParameters() {
.get("title")
.equals("Star Trek"),
"StartTrek");
Condition<WorkflowModel> postCondition =
new Condition<WorkflowModel>(
o -> o.asText().orElseThrow().equals("Javierito"), "CallHttpPostCondition");
Map<String, String> postMap = Map.of("name", "Javierito", "surname", "Unknown");
return Stream.of(
Arguments.of("workflows-samples/callGetHttp.yaml", petInput, petCondition),
Arguments.of(
Expand All @@ -106,10 +110,7 @@ private static Stream<Arguments> provideParameters() {
"workflows-samples/call-http-query-parameters-external-schema.yaml",
starTrekInput,
starTrekCondition),
Arguments.of(
"workflows-samples/callPostHttp.yaml",
Map.of("name", "Javierito", "surname", "Unknown"),
new Condition<WorkflowModel>(
o -> o.asText().orElseThrow().equals("Javierito"), "CallHttpPostCondition")));
Arguments.of("workflows-samples/callPostHttp.yaml", postMap, postCondition),
Arguments.of("workflows-samples/callPostHttpAsExpr.yaml", postMap, postCondition));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
document:
dsl: 1.0.0-alpha1
namespace: test
name: http-call-with-response-output-expr
version: 1.0.0
do:
- postPet:
call: http
with:
method: post
endpoint:
uri: https://fakerestapi.azurewebsites.net/api/v1/Authors
body: "${{firstName: .name, lastName:.surname}}"
output:
as: .firstName