Search in sources :

Example 1 with FlowCallOptions

use of com.walmartlabs.concord.runtime.v2.model.FlowCallOptions in project concord by walmartlabs.

the class FlowCallStepSerializer method serializeOptions.

private static void serializeOptions(FlowCallOptions options, JsonGenerator gen) throws IOException {
    if (options == null) {
        return;
    }
    writeNotEmptyObjectField("in", options.input(), gen);
    writeNotEmptyObjectField("in", options.inputExpression(), gen);
    writeNotEmptyObjectField("out", options.out(), gen);
    writeNotEmptyObjectField("out", options.outExpr(), gen);
    if (options.withItems() != null) {
        WithItems items = Objects.requireNonNull(options.withItems());
        SerializerUtils.writeWithItems(items, gen);
    }
    writeLoop(options.loop(), gen);
    if (options.retry() != null) {
        gen.writeObjectField("retry", options.retry());
    }
    writeNotEmptyObjectField("error", options.errorSteps(), gen);
    writeNotEmptyObjectField("meta", options.meta(), gen);
}
Also used : WithItems(com.walmartlabs.concord.runtime.v2.model.WithItems)

Example 2 with FlowCallOptions

use of com.walmartlabs.concord.runtime.v2.model.FlowCallOptions in project concord by walmartlabs.

the class FlowCallCommand method execute.

@Override
protected void execute(Runtime runtime, State state, ThreadId threadId) {
    state.peekFrame(threadId).pop();
    Context ctx = runtime.getService(Context.class);
    ExpressionEvaluator ee = runtime.getService(ExpressionEvaluator.class);
    EvalContext evalCtx = EvalContextFactory.global(ctx);
    FlowCall call = getStep();
    // the called flow's name
    String flowName = ee.eval(evalCtx, call.getFlowName(), String.class);
    // the called flow's steps
    Compiler compiler = runtime.getService(Compiler.class);
    ProcessDefinition pd = runtime.getService(ProcessDefinition.class);
    ProcessConfiguration pc = runtime.getService(ProcessConfiguration.class);
    Command steps = CompilerUtils.compile(compiler, pc, pd, flowName);
    FlowCallOptions opts = Objects.requireNonNull(call.getOptions());
    Map<String, Object> input = VMUtils.prepareInput(ee, ctx, opts.input(), opts.inputExpression());
    // the call's frame should be a "root" frame
    // all local variables will have this frame as their base
    Frame innerFrame = Frame.builder().root().commands(steps).locals(input).build();
    // an "out" handler:
    // grab the out variable from the called flow's frame
    // and put it into the callee's frame
    Command processOutVars;
    if (!opts.outExpr().isEmpty()) {
        processOutVars = new EvalVariablesCommand(ctx, opts.outExpr(), innerFrame);
    } else {
        processOutVars = new CopyVariablesCommand(opts.out(), innerFrame, VMUtils::assertNearestRoot);
    }
    // push the out handler first so it executes after the called flow's frame is done
    state.peekFrame(threadId).push(processOutVars);
    state.pushFrame(threadId, innerFrame);
}
Also used : EvalContext(com.walmartlabs.concord.runtime.v2.runner.el.EvalContext) Context(com.walmartlabs.concord.runtime.v2.sdk.Context) Compiler(com.walmartlabs.concord.runtime.v2.sdk.Compiler) FlowCall(com.walmartlabs.concord.runtime.v2.model.FlowCall) EvalContext(com.walmartlabs.concord.runtime.v2.runner.el.EvalContext) ProcessDefinition(com.walmartlabs.concord.runtime.v2.model.ProcessDefinition) ExpressionEvaluator(com.walmartlabs.concord.runtime.v2.runner.el.ExpressionEvaluator) FlowCallOptions(com.walmartlabs.concord.runtime.v2.model.FlowCallOptions) ProcessConfiguration(com.walmartlabs.concord.runtime.v2.sdk.ProcessConfiguration)

Aggregations

FlowCall (com.walmartlabs.concord.runtime.v2.model.FlowCall)1 FlowCallOptions (com.walmartlabs.concord.runtime.v2.model.FlowCallOptions)1 ProcessDefinition (com.walmartlabs.concord.runtime.v2.model.ProcessDefinition)1 WithItems (com.walmartlabs.concord.runtime.v2.model.WithItems)1 EvalContext (com.walmartlabs.concord.runtime.v2.runner.el.EvalContext)1 ExpressionEvaluator (com.walmartlabs.concord.runtime.v2.runner.el.ExpressionEvaluator)1 Compiler (com.walmartlabs.concord.runtime.v2.sdk.Compiler)1 Context (com.walmartlabs.concord.runtime.v2.sdk.Context)1 ProcessConfiguration (com.walmartlabs.concord.runtime.v2.sdk.ProcessConfiguration)1