From bd48f113cc31d8cb56de9d1f41f2d41ca564134f Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 9 Mar 2022 23:09:29 +0100 Subject: [PATCH] Various API enhancements --- src/core/Elsa.Core/Activities/ControlFlow/Fork.cs | 8 ++++---- src/core/Elsa.Core/Activities/ControlFlow/While.cs | 13 +++++++------ src/core/Elsa.Core/Activities/Primitives/Inline.cs | 2 +- src/core/Elsa.Core/Extensions/InputExtensions.cs | 9 +++++++++ src/core/Elsa.Core/Models/Variable.cs | 1 + .../Workflows/ForkedHttpWorkflow.cs | 2 +- .../Workflows/ForkedWorkflow.cs | 2 +- 7 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 src/core/Elsa.Core/Extensions/InputExtensions.cs diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Fork.cs b/src/core/Elsa.Core/Activities/ControlFlow/Fork.cs index 0c589a078..3742700c2 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Fork.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Fork.cs @@ -8,7 +8,7 @@ namespace Elsa.Activities.ControlFlow; public class Fork : Activity { - [Input] public Input JoinMode { get; set; } = new(ControlFlow.JoinMode.WaitAny); + [Input] public JoinMode JoinMode { get; set; } = JoinMode.WaitAny; [Outbound] public ICollection Branches { get; set; } = new List(); protected override void Execute(ActivityExecutionContext context) => context.PostActivities(Branches.Reverse(), CompleteChildAsync); @@ -32,17 +32,17 @@ public class Fork : Activity }); var allChildActivityIds = Branches.Select(x => x.Id).ToImmutableHashSet(); - var joinMode = context.Get(JoinMode); + var joinMode = JoinMode; switch (joinMode) { - case ControlFlow.JoinMode.WaitAny: + case JoinMode.WaitAny: { // Remove any and all bookmarks from other branches. RemoveBookmarks(context); } break; - case ControlFlow.JoinMode.WaitAll: + case JoinMode.WaitAll: { var allSet = allChildActivityIds.All(x => completedActivityIds.Contains(x)); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/While.cs b/src/core/Elsa.Core/Activities/ControlFlow/While.cs index fedec68c1..bf35a4608 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/While.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/While.cs @@ -6,28 +6,29 @@ namespace Elsa.Activities.ControlFlow; public class While : Activity { - public While() + public While(IActivity? body = default) { + Body = body!; } - public While(Input condition) + public While(Input condition, IActivity? body = default) : this(body) { Condition = condition; } - public While(Func> condition) : this(new Input(condition)) + public While(Func> condition, IActivity? body = default) : this(new Input(condition), body) { } - public While(Func condition) : this(new Input(condition)) + public While(Func condition, IActivity? body = default) : this(new Input(condition), body) { } - public While(Func> condition) : this(new Input(condition)) + public While(Func> condition, IActivity? body = default) : this(new Input(condition), body) { } - public While(Func condition) : this(new Input(condition)) + public While(Func condition, IActivity? body = default) : this(new Input(condition), body) { } diff --git a/src/core/Elsa.Core/Activities/Primitives/Inline.cs b/src/core/Elsa.Core/Activities/Primitives/Inline.cs index 5880e0d5f..dcb557fe9 100644 --- a/src/core/Elsa.Core/Activities/Primitives/Inline.cs +++ b/src/core/Elsa.Core/Activities/Primitives/Inline.cs @@ -54,7 +54,7 @@ public class Inline : Activity public Inline(Func> activity, RegisterLocationReference? output = default) { _activity = activity; - if (output != null) Result = new Output(output); + if (output != null) Result = new Output(output); } public Inline(Func> activity, RegisterLocationReference? output = default) : this(_ => activity(), output) diff --git a/src/core/Elsa.Core/Extensions/InputExtensions.cs b/src/core/Elsa.Core/Extensions/InputExtensions.cs new file mode 100644 index 000000000..b5f3b2c59 --- /dev/null +++ b/src/core/Elsa.Core/Extensions/InputExtensions.cs @@ -0,0 +1,9 @@ +using Elsa.Models; + +namespace Elsa.Extensions; + +public static class InputExtensions +{ + public static T? Get(this Input input, ActivityExecutionContext context) => context.Get(input); + public static T? Get(this Input input, ExpressionExecutionContext context) => context.Get(input); +} \ No newline at end of file diff --git a/src/core/Elsa.Core/Models/Variable.cs b/src/core/Elsa.Core/Models/Variable.cs index 8bf768a28..9a8d9f7f7 100644 --- a/src/core/Elsa.Core/Models/Variable.cs +++ b/src/core/Elsa.Core/Models/Variable.cs @@ -36,5 +36,6 @@ public class Variable : Variable { } + public new T? Get(ActivityExecutionContext context) => (T?)base.Get(context); public new T? Get(ExpressionExecutionContext context) => (T?)base.Get(context); } \ No newline at end of file diff --git a/src/samples/aspnet/Elsa.Samples.Web1/Workflows/ForkedHttpWorkflow.cs b/src/samples/aspnet/Elsa.Samples.Web1/Workflows/ForkedHttpWorkflow.cs index e7aef7b29..b592878e0 100644 --- a/src/samples/aspnet/Elsa.Samples.Web1/Workflows/ForkedHttpWorkflow.cs +++ b/src/samples/aspnet/Elsa.Samples.Web1/Workflows/ForkedHttpWorkflow.cs @@ -27,7 +27,7 @@ public class ForkedHttpWorkflow : IWorkflow }, new Fork { - JoinMode = new Input(JoinMode.WaitAll), + JoinMode = JoinMode.WaitAll, Branches = { new Sequence diff --git a/src/samples/console/Elsa.Samples.Console1/Workflows/ForkedWorkflow.cs b/src/samples/console/Elsa.Samples.Console1/Workflows/ForkedWorkflow.cs index dcd6c0d10..ae99ff6dd 100644 --- a/src/samples/console/Elsa.Samples.Console1/Workflows/ForkedWorkflow.cs +++ b/src/samples/console/Elsa.Samples.Console1/Workflows/ForkedWorkflow.cs @@ -15,7 +15,7 @@ public static class ForkedWorkflow new WriteLine("Forking..."), new Fork { - JoinMode = new Input(JoinMode.WaitAll), + JoinMode = JoinMode.WaitAll, Branches = { new Sequence(