diff --git a/Samples.sln b/Samples.sln index ca32c7e33..06328faec 100644 --- a/Samples.sln +++ b/Samples.sln @@ -50,10 +50,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.JavaScript", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.Liquid", "src\scripting\Elsa.Scripting.Liquid\Elsa.Scripting.Liquid.csproj", "{01DC21DD-C6E2-4B21-864E-97D29448F777}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utils", "utils", "{0D276728-DDA8-46A0-91A9-D44401D66DA9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.AutoMapper.Extensions", "src\utils\Elsa.AutoMapper.Extensions\Elsa.AutoMapper.Extensions.csproj", "{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Reflection", "src\activities\Elsa.Activities.Reflection\Elsa.Activities.Reflection.csproj", "{258F624E-98D7-4498-AE2E-F612D8ECA763}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{468E498C-59DB-4541-8D8A-0D89DE9083AB}" @@ -79,7 +75,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.MongoDb", "src\providers\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj", "{36A6F881-1B40-438D-9B6D-80F01CE76D51}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.YesSql", "src\providers\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{DA825F41-EE97-47B3-801E-C694A6C53AEC}" -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample18", "src\samples\Sample18\Sample18.csproj", "{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers", "src\samples\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{071DD6EC-D00C-4513-82B6-3FE8438061E3}" EndProject @@ -151,14 +146,6 @@ Global {01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.Build.0 = Debug|Any CPU {01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.ActiveCfg = Release|Any CPU {01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.Build.0 = Release|Any CPU - {102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Release|Any CPU.Build.0 = Release|Any CPU - {616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Debug|Any CPU.Build.0 = Debug|Any CPU - {616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Release|Any CPU.ActiveCfg = Release|Any CPU - {616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Release|Any CPU.Build.0 = Release|Any CPU {2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU {2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -253,9 +240,6 @@ Global {6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} {18BE8F72-E528-4617-B1B1-07BD35337DFC} = {9C3C685E-3D7D-4638-A031-24F71CF74B52} {01DC21DD-C6E2-4B21-864E-97D29448F777} = {9C3C685E-3D7D-4638-A031-24F71CF74B52} - {0D276728-DDA8-46A0-91A9-D44401D66DA9} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} - {102626A4-8BA6-45A8-A69C-F5EB1F155BE7} = {0D276728-DDA8-46A0-91A9-D44401D66DA9} - {616AA0BA-FBDD-4ABE-B688-A3F79F38C698} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} {2AEA0028-96D6-4823-A88F-24294E4BA4E8} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} {258F624E-98D7-4498-AE2E-F612D8ECA763} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} {468E498C-59DB-4541-8D8A-0D89DE9083AB} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} diff --git a/Samples.sln.DotSettings b/Samples.sln.DotSettings deleted file mode 100644 index e728c849f..000000000 --- a/Samples.sln.DotSettings +++ /dev/null @@ -1,19 +0,0 @@ - - False - EF - QL - True - True - True - True - True - True - True - True - True - True - True - True - True - True - \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLineBuilderExtensions.cs b/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLineBuilderExtensions.cs index 4253eef69..477dcff81 100644 --- a/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLineBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLineBuilderExtensions.cs @@ -5,6 +5,6 @@ namespace Elsa.Activities.Console { public static class ReadLineBuilderExtensions { - public static ActivityBuilder ReadLine(this IBuilder builder) => builder.Then(); + public static IActivityBuilder ReadLine(this IBuilder builder) => builder.Then(); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Console/Activities/WriteLine/WriteLineBuilderExtensions.cs b/src/activities/Elsa.Activities.Console/Activities/WriteLine/WriteLineBuilderExtensions.cs index fffc64acf..9cceb0369 100644 --- a/src/activities/Elsa.Activities.Console/Activities/WriteLine/WriteLineBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Console/Activities/WriteLine/WriteLineBuilderExtensions.cs @@ -8,11 +8,11 @@ namespace Elsa.Activities.Console { public static class WriteLineBuilderExtensions { - public static OutcomeBuilder WriteLine(this IBuilder builder, Action setup) => WriteLine(builder.Then(setup)); - public static OutcomeBuilder WriteLine(this IBuilder builder, IWorkflowExpression text) => builder.WriteLine(a => a.WithText(text)); - public static OutcomeBuilder WriteLine(this IBuilder builder, Func text) => builder.WriteLine(new CodeExpression(text)); - public static OutcomeBuilder WriteLine(this IBuilder builder, Func text) => builder.WriteLine(new CodeExpression(text)); - public static OutcomeBuilder WriteLine(this IBuilder builder, string text) => builder.WriteLine(new CodeExpression(text)); - private static OutcomeBuilder WriteLine(ActivityBuilder writeLine) => writeLine.When(OutcomeNames.Done); + public static IOutcomeBuilder WriteLine(this IBuilder builder, Action setup) => WriteLine(builder.Then(setup)); + public static IOutcomeBuilder WriteLine(this IBuilder builder, IWorkflowExpression text) => builder.WriteLine(a => a.WithText(text)); + public static IOutcomeBuilder WriteLine(this IBuilder builder, Func text) => builder.WriteLine(new CodeExpression(text)); + public static IOutcomeBuilder WriteLine(this IBuilder builder, Func text) => builder.WriteLine(new CodeExpression(text)); + public static IOutcomeBuilder WriteLine(this IBuilder builder, string text) => builder.WriteLine(new CodeExpression(text)); + private static IOutcomeBuilder WriteLine(IActivityBuilder writeLine) => writeLine.When(OutcomeNames.Done); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs index 3750ba840..bcf776e2f 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs @@ -9,12 +9,12 @@ namespace Elsa.Activities.Http { public static class SendEmailBuilderExtensions { - public static ActivityBuilder SendEmail( + public static IActivityBuilder SendEmail( this IBuilder builder, Action setup ) => builder.Then(setup); - public static ActivityBuilder SendEmail( + public static IActivityBuilder SendEmail( this IBuilder builder, IWorkflowExpression from = default, IWorkflowExpression to = default, @@ -26,7 +26,7 @@ namespace Elsa.Activities.Http .WithSubject(subject) .WithBody(body)); - public static ActivityBuilder SendEmail( + public static IActivityBuilder SendEmail( this IBuilder builder, Func from = default, Func to = default, @@ -38,7 +38,7 @@ namespace Elsa.Activities.Http .WithSubject(subject) .WithBody(body)); - public static ActivityBuilder SendEmail( + public static IActivityBuilder SendEmail( this IBuilder builder, Func from = default, Func to = default, @@ -50,7 +50,7 @@ namespace Elsa.Activities.Http .WithSubject(subject) .WithBody(body)); - public static ActivityBuilder SendEmail( + public static IActivityBuilder SendEmail( this IBuilder builder, string from = default, string to = default, diff --git a/src/activities/Elsa.Activities.Http/Activities/ReceiveHttpRequest/ReceiveHttpRequestBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/ReceiveHttpRequest/ReceiveHttpRequestBuilderExtensions.cs index f84be9e3e..b4e77109c 100644 --- a/src/activities/Elsa.Activities.Http/Activities/ReceiveHttpRequest/ReceiveHttpRequestBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/ReceiveHttpRequest/ReceiveHttpRequestBuilderExtensions.cs @@ -6,7 +6,7 @@ namespace Elsa.Activities.Http { public static class ReceiveHttpRequestBuilderExtensions { - public static ActivityBuilder ReceiveHttpRequest( + public static IActivityBuilder ReceiveHttpRequest( this IBuilder builder, PathString path, string method = default, diff --git a/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs b/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs index f08cfb9f5..d0b03e63b 100644 --- a/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs +++ b/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs @@ -1,3 +1,4 @@ +using System; using System.Threading; using System.Threading.Tasks; using Elsa.Activities.Http.Results; @@ -31,9 +32,9 @@ namespace Elsa.Activities.Http private IStringLocalizer T { get; } [ActivityProperty(Hint = "The URL to redirect to (HTTP 302).")] - public IWorkflowExpression Location + public IWorkflowExpression Location { - get => GetState>(); + get => GetState>(); set => SetState(value); } diff --git a/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectBuilderExtensions.cs index 8f5c7f5df..a77b34a2c 100644 --- a/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectBuilderExtensions.cs @@ -1,3 +1,4 @@ +using System; using Elsa.Builders; using Microsoft.AspNetCore.Http; @@ -6,9 +7,9 @@ namespace Elsa.Activities.Http { public static class RedirectBuilderExtensions { - public static ActivityBuilder Redirect( + public static IActivityBuilder Redirect( this IBuilder builder, - PathString location, + Uri location, bool permanent = default) => builder.Then(x => x .WithLocation(location) .WithPermanent(permanent)); diff --git a/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectExtensions.cs index b025c1414..d3aa31033 100644 --- a/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/Redirect/RedirectExtensions.cs @@ -9,10 +9,10 @@ namespace Elsa.Activities.Http { public static class RedirectExtensions { - public static Redirect WithLocation(this Redirect activity, IWorkflowExpression value) => activity.With(x => x.Location, value); - public static Redirect WithLocation(this Redirect activity, Func value) => activity.With(x => x.Location, new CodeExpression(value)); - public static Redirect WithLocation(this Redirect activity, Func value) => activity.With(x => x.Location, new CodeExpression(value)); - public static Redirect WithLocation(this Redirect activity, PathString value) => activity.With(x => x.Location, new CodeExpression(value)); + public static Redirect WithLocation(this Redirect activity, IWorkflowExpression value) => activity.With(x => x.Location, value); + public static Redirect WithLocation(this Redirect activity, Func value) => activity.With(x => x.Location, new CodeExpression(value)); + public static Redirect WithLocation(this Redirect activity, Func value) => activity.With(x => x.Location, new CodeExpression(value)); + public static Redirect WithLocation(this Redirect activity, Uri value) => activity.With(x => x.Location, new CodeExpression(value)); public static Redirect WithPermanent(this Redirect activity, bool value) => activity.With(x => x.Permanent, value); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs index 3546f0534..fa1265fd0 100644 --- a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Elsa.Activities.Http { public static class SendHttpRequestBuilderExtensions { - public static ActivityBuilder SendHttpRequest( + public static IActivityBuilder SendHttpRequest( this IBuilder builder, PathString url, string? method, @@ -31,7 +31,7 @@ namespace Elsa.Activities.Http .WithRequestHeaders(headers) .WithReadContent(readContent)); - public static ActivityBuilder SendHttpRequest( + public static IActivityBuilder SendHttpRequest( this IBuilder builder, PathString url, string? method, @@ -51,7 +51,7 @@ namespace Elsa.Activities.Http .WithRequestHeaders(headers) .WithReadContent(readContent)); - public static ActivityBuilder SendHttpRequest( + public static IActivityBuilder SendHttpRequest( this IBuilder builder, PathString url, string? method, @@ -71,7 +71,7 @@ namespace Elsa.Activities.Http .WithRequestHeaders(headers) .WithReadContent(readContent)); - public static ActivityBuilder SendHttpRequest( + public static IActivityBuilder SendHttpRequest( this IBuilder builder, PathString url, string? method, diff --git a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs index e794299a8..c599f19b2 100644 --- a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs @@ -10,7 +10,7 @@ namespace Elsa.Activities.Http { public static class WriteHttpResponseBuilderExtensions { - public static ActivityBuilder WriteHttpResponse( + public static IActivityBuilder WriteHttpResponse( this IBuilder builder, HttpStatusCode statusCode, IWorkflowExpression content = default, @@ -22,7 +22,7 @@ namespace Elsa.Activities.Http .WithContentType(contentType) .WithResponseHeaders(headers)); - public static ActivityBuilder WriteHttpResponse( + public static IActivityBuilder WriteHttpResponse( this IBuilder builder, HttpStatusCode statusCode, Func content = default, @@ -34,7 +34,7 @@ namespace Elsa.Activities.Http .WithContentType(contentType) .WithResponseHeaders(headers)); - public static ActivityBuilder WriteHttpResponse( + public static IActivityBuilder WriteHttpResponse( this IBuilder builder, HttpStatusCode statusCode, Func content = default, @@ -46,7 +46,7 @@ namespace Elsa.Activities.Http .WithContentType(contentType) .WithResponseHeaders(headers)); - public static ActivityBuilder WriteHttpResponse( + public static IActivityBuilder WriteHttpResponse( this IBuilder builder, HttpStatusCode statusCode, string content = default, diff --git a/src/activities/Elsa.Activities.Http/Results/RedirectResult.cs b/src/activities/Elsa.Activities.Http/Results/RedirectResult.cs index f78882e85..368d1b52f 100644 --- a/src/activities/Elsa.Activities.Http/Results/RedirectResult.cs +++ b/src/activities/Elsa.Activities.Http/Results/RedirectResult.cs @@ -1,3 +1,4 @@ +using System; using Elsa.Results; using Elsa.Services.Models; using Microsoft.AspNetCore.Http; @@ -8,20 +9,20 @@ namespace Elsa.Activities.Http.Results { private readonly IHttpContextAccessor httpContextAccessor; - public RedirectResult(IHttpContextAccessor httpContextAccessor, PathString location, bool permanent) + public RedirectResult(IHttpContextAccessor httpContextAccessor, Uri location, bool permanent) { Location = location; Permanent = permanent; this.httpContextAccessor = httpContextAccessor; } - public PathString Location { get; } + public Uri Location { get; } public bool Permanent { get; } protected override void Execute(ActivityExecutionContext activityExecutionContext) { var response = httpContextAccessor.HttpContext.Response; - response.Redirect(Location, Permanent); + response.Redirect(Location.ToString(), Permanent); } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/CancelScheduledMassTransitMessage/CancelScheduledMassTransitMessageBuilderExtensions.cs b/src/activities/Elsa.Activities.MassTransit/Activities/CancelScheduledMassTransitMessage/CancelScheduledMassTransitMessageBuilderExtensions.cs index 753b1478a..6fe989d03 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/CancelScheduledMassTransitMessage/CancelScheduledMassTransitMessageBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/CancelScheduledMassTransitMessage/CancelScheduledMassTransitMessageBuilderExtensions.cs @@ -8,10 +8,10 @@ namespace Elsa.Activities.MassTransit { public static class CancelScheduledMassTransitMessageBuilderExtensions { - public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, IWorkflowExpression value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); - public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); - public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); - public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Guid value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); + public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, IWorkflowExpression value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); + public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); + public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); + public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Guid value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value)); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/PublishMassTransitMessage/PublishMassTransitMessageBuilderExtensions.cs b/src/activities/Elsa.Activities.MassTransit/Activities/PublishMassTransitMessage/PublishMassTransitMessageBuilderExtensions.cs index b30a71db8..10602e181 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/PublishMassTransitMessage/PublishMassTransitMessageBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/PublishMassTransitMessage/PublishMassTransitMessageBuilderExtensions.cs @@ -8,10 +8,10 @@ namespace Elsa.Activities.MassTransit { public static class PublishMassTransitMessageBuilderExtensions { - public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, IWorkflowExpression message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); - public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, Func message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); - public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, Func message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); - public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, T message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); + public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, IWorkflowExpression message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); + public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, Func message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); + public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, Func message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); + public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, T message) => builder.PublishMassTransitMessage(x => x.WithMessage(message)); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/ReceiveMassTransitMessage/ReceiveMassTransitMessageBuilderExtensions.cs b/src/activities/Elsa.Activities.MassTransit/Activities/ReceiveMassTransitMessage/ReceiveMassTransitMessageBuilderExtensions.cs index 337a2e537..c79a02f79 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/ReceiveMassTransitMessage/ReceiveMassTransitMessageBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/ReceiveMassTransitMessage/ReceiveMassTransitMessageBuilderExtensions.cs @@ -6,8 +6,8 @@ namespace Elsa.Activities.MassTransit { public static class ReceiveMassTransitMessageBuilderExtensions { - public static ActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType(messageType)); - public static ActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType()); + public static IActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType(messageType)); + public static IActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType()); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/ScheduleSendMassTransitMessage/ScheduleSendMassTransitMessageBuilderExtensions.cs b/src/activities/Elsa.Activities.MassTransit/Activities/ScheduleSendMassTransitMessage/ScheduleSendMassTransitMessageBuilderExtensions.cs index 9d59eb7c4..4a7a21ffe 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/ScheduleSendMassTransitMessage/ScheduleSendMassTransitMessageBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/ScheduleSendMassTransitMessage/ScheduleSendMassTransitMessageBuilderExtensions.cs @@ -9,9 +9,9 @@ namespace Elsa.Activities.MassTransit { public static class ScheduleSendMassTransitMessageBuilderExtensions { - public static ActivityBuilder ScheduleSendMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder ScheduleSendMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder ScheduleSendMassTransitMessage( + public static IActivityBuilder ScheduleSendMassTransitMessage( this IBuilder builder, IWorkflowExpression message, Uri endpointAddress, @@ -21,7 +21,7 @@ namespace Elsa.Activities.MassTransit .WithEndpointAddress(endpointAddress) .WithScheduledTime(scheduledTime)); - public static ActivityBuilder ScheduleSendMassTransitMessage( + public static IActivityBuilder ScheduleSendMassTransitMessage( this IBuilder builder, Func message, Uri endpointAddress, @@ -31,7 +31,7 @@ namespace Elsa.Activities.MassTransit .WithEndpointAddress(endpointAddress) .WithScheduledTime(scheduledTime)); - public static ActivityBuilder ScheduleSendMassTransitMessage( + public static IActivityBuilder ScheduleSendMassTransitMessage( this IBuilder builder, Func message, Uri endpointAddress, @@ -41,7 +41,7 @@ namespace Elsa.Activities.MassTransit .WithEndpointAddress(endpointAddress) .WithScheduledTime(scheduledTime)); - public static ActivityBuilder ScheduleSendMassTransitMessage( + public static IActivityBuilder ScheduleSendMassTransitMessage( this IBuilder builder, object message, Uri endpointAddress, diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/SendMassTransitMessage/SendMassTransitMessageBuilderExtensions.cs b/src/activities/Elsa.Activities.MassTransit/Activities/SendMassTransitMessage/SendMassTransitMessageBuilderExtensions.cs index 1759f96d3..60982a800 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/SendMassTransitMessage/SendMassTransitMessageBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/SendMassTransitMessage/SendMassTransitMessageBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Activities.MassTransit { public static class SendMassTransitMessageBuilderExtensions { - public static ActivityBuilder SendMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder SendMassTransitMessage(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder SendMassTransitMessage( + public static IActivityBuilder SendMassTransitMessage( this IBuilder builder, IWorkflowExpression message, Uri endpointAddress) => @@ -18,7 +18,7 @@ namespace Elsa.Activities.MassTransit .WithMessage(message) .WithEndpointAddress(endpointAddress)); - public static ActivityBuilder SendMassTransitMessage( + public static IActivityBuilder SendMassTransitMessage( this IBuilder builder, Func message, Uri endpointAddress) => @@ -26,7 +26,7 @@ namespace Elsa.Activities.MassTransit .WithMessage(message) .WithEndpointAddress(endpointAddress)); - public static ActivityBuilder SendMassTransitMessage( + public static IActivityBuilder SendMassTransitMessage( this IBuilder builder, Func message, Uri endpointAddress) => @@ -34,7 +34,7 @@ namespace Elsa.Activities.MassTransit .WithMessage(message) .WithEndpointAddress(endpointAddress)); - public static ActivityBuilder SendMassTransitMessages( + public static IActivityBuilder SendMassTransitMessages( this IBuilder builder, object message, Uri endpointAddress) => diff --git a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs index df573733b..c41cc8927 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs @@ -27,13 +27,9 @@ namespace Elsa.Activities.Timers } [ActivityProperty(Hint = "Specify a CRON expression. See https://crontab.guru/ for help.")] - public IWorkflowExpression CronExpression - { - get => GetState>(() => new LiteralExpression("* * * * *")); - set => SetState(value); - } + public IWorkflowExpression CronExpression { get; set; } = new CodeExpression("* * * * *"); - public Instant? StartTime + private Instant? StartTime { get => GetState(); set => SetState(value); diff --git a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs index 21af0bd21..43d73b2f9 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs @@ -9,10 +9,10 @@ namespace Elsa.Activities.MassTransit { public static class CronEventBuilderExtensions { - public static ActivityBuilder CronEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder CronEvent(this IBuilder builder, IWorkflowExpression cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); - public static ActivityBuilder CronEvent(this IBuilder builder, Func cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); - public static ActivityBuilder CronEvent(this IBuilder builder, Func cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); - public static ActivityBuilder CronEvent(this IBuilder builder, string cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); + public static IActivityBuilder CronEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder CronEvent(this IBuilder builder, IWorkflowExpression cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); + public static IActivityBuilder CronEvent(this IBuilder builder, Func cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); + public static IActivityBuilder CronEvent(this IBuilder builder, Func cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); + public static IActivityBuilder CronEvent(this IBuilder builder, string cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression)); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs index 7fa8347af..e1e6a3452 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs @@ -10,10 +10,10 @@ namespace Elsa.Activities.MassTransit { public static class InstantEventBuilderExtensions { - public static ActivityBuilder InstantEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder InstantEvent(this IBuilder builder, IWorkflowExpression instant) => builder.InstantEvent(x => x.WithInstant(instant)); - public static ActivityBuilder InstantEvent(this IBuilder builder, Func instant) => builder.InstantEvent(x => x.WithInstant(instant)); - public static ActivityBuilder InstantEvent(this IBuilder builder, Func instant) => builder.InstantEvent(x => x.WithInstant(instant)); - public static ActivityBuilder InstantEvent(this IBuilder builder, Instant instant) => builder.InstantEvent(x => x.WithInstant(instant)); + public static IActivityBuilder InstantEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder InstantEvent(this IBuilder builder, IWorkflowExpression instant) => builder.InstantEvent(x => x.WithInstant(instant)); + public static IActivityBuilder InstantEvent(this IBuilder builder, Func instant) => builder.InstantEvent(x => x.WithInstant(instant)); + public static IActivityBuilder InstantEvent(this IBuilder builder, Func instant) => builder.InstantEvent(x => x.WithInstant(instant)); + public static IActivityBuilder InstantEvent(this IBuilder builder, Instant instant) => builder.InstantEvent(x => x.WithInstant(instant)); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEvent.cs b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEvent.cs index ca3435da0..232b3476f 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEvent.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEvent.cs @@ -24,13 +24,16 @@ namespace Elsa.Activities.Timers } [ActivityProperty(Hint = "An expression that evaluates to a Duration value")] - public IWorkflowExpression Timeout - { - get => GetState>(() => new LiteralExpression("00:01:00")); - set => SetState(value); - } - - public Instant? StartTime + public IWorkflowExpression Timeout { get; set; } + + // [ActivityProperty(Hint = "An expression that evaluates to a Duration value")] + // public IWorkflowExpression Timeout + // { + // get => GetState>(() => new LiteralExpression("00:01:00")); + // set => SetState(value); + // } + + private Instant? StartTime { get => GetState(); set => SetState(value); diff --git a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs index 41663810c..9aa0d74a6 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs @@ -10,10 +10,10 @@ namespace Elsa.Activities.MassTransit { public static class TimerEventBuilderExtensions { - public static ActivityBuilder TimerEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); - public static ActivityBuilder TimerEvent(this IBuilder builder, IWorkflowExpression value) => builder.TimerEvent(x => x.WithTimeout(value)); - public static ActivityBuilder TimerEvent(this IBuilder builder, Func value) => builder.TimerEvent(x => x.WithTimeout(value)); - public static ActivityBuilder TimerEvent(this IBuilder builder, Func value) => builder.TimerEvent(x => x.WithTimeout(value)); - public static ActivityBuilder TimerEvent(this IBuilder builder, Duration value) => builder.TimerEvent(x => x.WithTimeout(value)); + public static IActivityBuilder TimerEvent(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder TimerEvent(this IBuilder builder, IWorkflowExpression value) => builder.TimerEvent(x => x.WithTimeout(value)); + public static IActivityBuilder TimerEvent(this IBuilder builder, Func value) => builder.TimerEvent(x => x.WithTimeout(value)); + public static IActivityBuilder TimerEvent(this IBuilder builder, Func value) => builder.TimerEvent(x => x.WithTimeout(value)); + public static IActivityBuilder TimerEvent(this IBuilder builder, Duration value) => builder.TimerEvent(x => x.WithTimeout(value)); } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Builders/IActivityBuilder.cs b/src/core/Elsa.Abstractions/Builders/IActivityBuilder.cs new file mode 100644 index 000000000..ff70eb093 --- /dev/null +++ b/src/core/Elsa.Abstractions/Builders/IActivityBuilder.cs @@ -0,0 +1,17 @@ +using System; +using Elsa.Services; +using Elsa.Services.Models; + +namespace Elsa.Builders +{ + public interface IActivityBuilder : IBuilder + { + IWorkflowBuilder WorkflowBuilder { get; } + IActivity Activity { get; } + IActivityBuilder Add(Action? setup = default) where T : class, IActivity; + IOutcomeBuilder When(string? outcome); + IActivityBuilder Then(IActivityBuilder targetActivity); + IActivity BuildActivity(); + Workflow Build(); + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Builders/IBuilder.cs b/src/core/Elsa.Abstractions/Builders/IBuilder.cs new file mode 100644 index 000000000..4bb324ade --- /dev/null +++ b/src/core/Elsa.Abstractions/Builders/IBuilder.cs @@ -0,0 +1,11 @@ +using System; +using Elsa.Services; + +namespace Elsa.Builders +{ + public interface IBuilder + { + IActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity; + IActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity; + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs b/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs new file mode 100644 index 000000000..0e024803e --- /dev/null +++ b/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs @@ -0,0 +1,14 @@ +using System; +using Elsa.Services.Models; + +namespace Elsa.Builders +{ + public interface IConnectionBuilder + { + IWorkflowBuilder WorkflowBuilder { get; } + Func Source { get; } + Func Target{ get; } + string Outcome { get; } + Connection BuildConnection(); + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Builders/IOutcomeBuilder.cs b/src/core/Elsa.Abstractions/Builders/IOutcomeBuilder.cs new file mode 100644 index 000000000..cdc28154c --- /dev/null +++ b/src/core/Elsa.Abstractions/Builders/IOutcomeBuilder.cs @@ -0,0 +1,14 @@ +using System; +using Elsa.Services; +using Elsa.Services.Models; + +namespace Elsa.Builders +{ + public interface IOutcomeBuilder : IBuilder + { + IWorkflowBuilder WorkflowBuilder { get; } + IActivityBuilder Source { get; } + string? Outcome { get; } + Workflow Build(); + } +} \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/IWorkflow.cs b/src/core/Elsa.Abstractions/Builders/IWorkflow.cs similarity index 100% rename from src/core/Elsa.Core/Builders/IWorkflow.cs rename to src/core/Elsa.Abstractions/Builders/IWorkflow.cs diff --git a/src/core/Elsa.Core/Builders/IWorkflowBuilder.cs b/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs similarity index 54% rename from src/core/Elsa.Core/Builders/IWorkflowBuilder.cs rename to src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs index 2c302dca2..e94d21af8 100644 --- a/src/core/Elsa.Core/Builders/IWorkflowBuilder.cs +++ b/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs @@ -22,14 +22,14 @@ namespace Elsa.Builders IWorkflowBuilder AsTransient(); IWorkflowBuilder WithDeleteCompletedInstances(bool value); IWorkflowBuilder WithPersistenceBehavior(WorkflowPersistenceBehavior value); - T New(Action? setup = default, Action? branch = default) where T : class, IActivity; - T New(T activity, Action? branch = default) where T : class, IActivity; - ActivityBuilder StartWith(Action? setup = default, Action? branch = default) where T : class, IActivity; - ActivityBuilder StartWith(T activity, Action? branch = default) where T : class, IActivity; - ActivityBuilder Add(Action? setup = default, Action? branch = default) where T : class, IActivity; - ActivityBuilder Add(T activity, Action? branch = default) where T : class, IActivity; - ConnectionBuilder Connect(ActivityBuilder source, ActivityBuilder target, string? outcome = default); - ConnectionBuilder Connect(Func source, Func target, string? outcome = default); + T New(Action? setup = default, Action? branch = default) where T : class, IActivity; + T New(T activity, Action? branch = default) where T : class, IActivity; + IActivityBuilder StartWith(Action? setup = default, Action? branch = default) where T : class, IActivity; + IActivityBuilder StartWith(T activity, Action? branch = default) where T : class, IActivity; + IActivityBuilder Add(Action? setup = default, Action? branch = default) where T : class, IActivity; + IActivityBuilder Add(T activity, Action? branch = default) where T : class, IActivity; + IConnectionBuilder Connect(IActivityBuilder source, IActivityBuilder target, string outcome = OutcomeNames.Done); + IConnectionBuilder Connect(Func source, Func target, string outcome = OutcomeNames.Done); Workflow Build(); Workflow Build(IWorkflow workflow); Workflow Build(Type workflowType); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Complete/CompleteBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/Complete/CompleteBuilderExtensions.cs index b3c2d64a8..9d14495d8 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Complete/CompleteBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Complete/CompleteBuilderExtensions.cs @@ -6,6 +6,6 @@ namespace Elsa.Activities.ControlFlow { public static class CompleteBuilderExtensions { - public static ActivityBuilder Complete(this IBuilder builder, Action? setup = default) => builder.Then(setup); + public static IActivityBuilder Complete(this IBuilder builder, Action? setup = default) => builder.Then(setup); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/ControlFlow/For/ForBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/For/ForBuilderExtensions.cs index 293589372..ab4e0ee94 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/For/ForBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/For/ForBuilderExtensions.cs @@ -8,62 +8,62 @@ namespace Elsa.Activities.ControlFlow { public static class ForBuilderExtensions { - public static OutcomeBuilder For(this IBuilder builder, Action setup, Action iteration) => For(builder.Then(setup), iteration); + public static IOutcomeBuilder For(this IBuilder builder, Action setup, Action iteration) => For(builder.Then(setup), iteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, IWorkflowExpression start, IWorkflowExpression end, IWorkflowExpression step, - Action iteration) => + Action iteration) => builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, Func start, Func end, Func step, - Action iteration) => + Action iteration) => builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, Func start, Func end, - Action setupIteration) => + Action setupIteration) => builder.For(a => a.WithStart(start).WithEnd(end).WithStep(1), setupIteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, Func start, Func end, Func step, - Action iteration) => + Action iteration) => builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, Func start, Func end, - Action setupIteration) => + Action setupIteration) => For(builder.Then(a => a.WithStart(start).WithEnd(end).WithStep(1)), setupIteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, int start, int end, int step, - Action iteration) => + Action iteration) => builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration); - public static OutcomeBuilder For( + public static IOutcomeBuilder For( this IBuilder builder, int start, int end, - Action iteration) => + Action iteration) => builder.For(start, end, 1, iteration); - private static OutcomeBuilder For(ActivityBuilder @for, Action iteration) + private static IOutcomeBuilder For(IActivityBuilder @for, Action iteration) { iteration.Invoke(@for.When(OutcomeNames.Iterate)); return @for.When(OutcomeNames.Done); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEachBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEachBuilderExtensions.cs index 674c4aeec..9641d91e5 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEachBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEachBuilderExtensions.cs @@ -10,33 +10,33 @@ namespace Elsa.Activities.ControlFlow { public static class ForEachBuilderExtensions { - public static OutcomeBuilder ForEach(this IBuilder builder, Action setup, Action iteration) => ForEach(builder.Then(setup), iteration); + public static IOutcomeBuilder ForEach(this IBuilder builder, Action setup, Action iteration) => ForEach(builder.Then(setup), iteration); - public static OutcomeBuilder ForEach( + public static IOutcomeBuilder ForEach( this IBuilder builder, IWorkflowExpression collection, - Action iteration) => + Action iteration) => builder.ForEach(a => a.WithCollection(collection), iteration); - public static OutcomeBuilder ForEach( + public static IOutcomeBuilder ForEach( this IBuilder builder, Func collection, - Action iteration) => + Action iteration) => builder.ForEach(a => a.WithCollection(collection), iteration); - public static OutcomeBuilder ForEach( + public static IOutcomeBuilder ForEach( this IBuilder builder, Func collection, - Action iteration) => + Action iteration) => builder.ForEach(a => a.WithCollection(collection), iteration); - public static OutcomeBuilder ForEach( + public static IOutcomeBuilder ForEach( this IBuilder builder, ICollection collection, - Action iteration) => + Action iteration) => builder.ForEach(a => a.WithCollection(collection), iteration); - private static OutcomeBuilder ForEach(ActivityBuilder forEach, Action iteration) + private static IOutcomeBuilder ForEach(IActivityBuilder forEach, Action iteration) { iteration.Invoke(forEach.When(OutcomeNames.Iterate)); return forEach.When(OutcomeNames.Done); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Fork/ForkBuilder.cs b/src/core/Elsa.Core/Activities/ControlFlow/Fork/ForkBuilder.cs index d89bb2e21..6343500d5 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Fork/ForkBuilder.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Fork/ForkBuilder.cs @@ -5,16 +5,16 @@ namespace Elsa.Activities.ControlFlow { public class ForkBuilder { - private readonly ActivityBuilder activityBuilder; + private readonly IActivityBuilder activityBuilder; private readonly Fork fork; - public ForkBuilder(ActivityBuilder activityBuilder) + public ForkBuilder(IActivityBuilder activityBuilder) { this.activityBuilder = activityBuilder; fork = (Fork)activityBuilder.Activity; } - public OutcomeBuilder When(string branch) + public IOutcomeBuilder When(string branch) { fork.Branches.Add(branch); return activityBuilder.When(branch); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/IfElse/IfElseBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/IfElse/IfElseBuilderExtensions.cs index a8d3b8a46..4542396f2 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/IfElse/IfElseBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/IfElse/IfElseBuilderExtensions.cs @@ -8,12 +8,12 @@ namespace Elsa.Activities.ControlFlow { public static class IfElseBuilderExtensions { - public static OutcomeBuilder IfElse(this IBuilder builder, IWorkflowExpression condition, Action trueBranch, Action? falseBranch = default) => IfElse(builder.Then(x => x.Condition = condition), trueBranch, falseBranch); - public static OutcomeBuilder IfElse(this IBuilder builder, Func condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(condition), trueBranch, falseBranch); - public static OutcomeBuilder IfElse(this IBuilder builder, Func condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(condition), trueBranch, falseBranch); - public static OutcomeBuilder IfElse(this IBuilder builder, bool condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(() => condition), trueBranch, falseBranch); + public static IOutcomeBuilder IfElse(this IBuilder builder, IWorkflowExpression condition, Action trueBranch, Action? falseBranch = default) => IfElse(builder.Then(x => x.Condition = condition), trueBranch, falseBranch); + public static IOutcomeBuilder IfElse(this IBuilder builder, Func condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(condition), trueBranch, falseBranch); + public static IOutcomeBuilder IfElse(this IBuilder builder, Func condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(condition), trueBranch, falseBranch); + public static IOutcomeBuilder IfElse(this IBuilder builder, bool condition, Action trueBranch, Action? falseBranch = default) => builder.IfElse(new CodeExpression(() => condition), trueBranch, falseBranch); - private static OutcomeBuilder IfElse(ActivityBuilder ifElse, Action trueBranch, Action? falseBranch = default) + private static IOutcomeBuilder IfElse(IActivityBuilder ifElse, Action trueBranch, Action? falseBranch = default) { trueBranch.Invoke(ifElse.When(OutcomeNames.True)); falseBranch?.Invoke(ifElse.When(OutcomeNames.False)); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Join/JoinBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/Join/JoinBuilderExtensions.cs index 4e895b0a6..127de919f 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Join/JoinBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Join/JoinBuilderExtensions.cs @@ -5,6 +5,6 @@ namespace Elsa.Activities.ControlFlow { public static class JoinBuilderExtensions { - public static ActivityBuilder Join(this IBuilder builder, Join.JoinMode mode) => builder.Then(x => x.WithMode(mode)); + public static IActivityBuilder Join(this IBuilder builder, Join.JoinMode mode) => builder.Then(x => x.WithMode(mode)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchBuilder.cs b/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchBuilder.cs index 5a81eebd6..c78b72c8c 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchBuilder.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchBuilder.cs @@ -5,16 +5,16 @@ namespace Elsa.Activities.ControlFlow { public class SwitchBuilder { - private readonly ActivityBuilder activityBuilder; + private readonly IActivityBuilder activityBuilder; private readonly Switch @switch; - public SwitchBuilder(ActivityBuilder activityBuilder) + public SwitchBuilder(IActivityBuilder activityBuilder) { this.activityBuilder = activityBuilder; @switch = (Switch)activityBuilder.Activity; } - public OutcomeBuilder When(string @case) + public IOutcomeBuilder When(string @case) { @switch.Cases.Add(@case); return activityBuilder.When(@case); diff --git a/src/core/Elsa.Core/Activities/ControlFlow/While/WhileBuilderExtensions.cs b/src/core/Elsa.Core/Activities/ControlFlow/While/WhileBuilderExtensions.cs index f287ec258..f9485cede 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/While/WhileBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/While/WhileBuilderExtensions.cs @@ -8,12 +8,12 @@ namespace Elsa.Activities.ControlFlow { public static class WhileBuilderExtensions { - public static OutcomeBuilder While(this IBuilder builder, IWorkflowExpression condition, Action iteration) => While(builder.Then(x => x.WithCondition(condition)), iteration); - public static OutcomeBuilder While(this IBuilder builder, Func condition, Action iteration) => builder.While(new CodeExpression(condition), iteration); - public static OutcomeBuilder While(this IBuilder builder, Func condition, Action iteration) => builder.While(new CodeExpression(condition), iteration); - public static OutcomeBuilder While(this IBuilder builder, bool condition, Action iteration) => builder.While(new CodeExpression(() => condition), iteration); + public static IOutcomeBuilder While(this IBuilder builder, IWorkflowExpression condition, Action iteration) => While(builder.Then(x => x.WithCondition(condition)), iteration); + public static IOutcomeBuilder While(this IBuilder builder, Func condition, Action iteration) => builder.While(new CodeExpression(condition), iteration); + public static IOutcomeBuilder While(this IBuilder builder, Func condition, Action iteration) => builder.While(new CodeExpression(condition), iteration); + public static IOutcomeBuilder While(this IBuilder builder, bool condition, Action iteration) => builder.While(new CodeExpression(() => condition), iteration); - private static OutcomeBuilder While(ActivityBuilder @while, Action iteration) + private static IOutcomeBuilder While(IActivityBuilder @while, Action iteration) { iteration.Invoke(@while.When(OutcomeNames.Iterate)); return @while.When(OutcomeNames.Done); diff --git a/src/core/Elsa.Core/Activities/Primitives/Correlate/CorrelateBuilderExtensions.cs b/src/core/Elsa.Core/Activities/Primitives/Correlate/CorrelateBuilderExtensions.cs index c2ee0bf1c..4bd1d01bd 100644 --- a/src/core/Elsa.Core/Activities/Primitives/Correlate/CorrelateBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/Primitives/Correlate/CorrelateBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Activities.Primitives { public static class CorrelateBuilderExtensions { - public static ActivityBuilder Correlate(this IBuilder builder, IWorkflowExpression correlationId) => builder.Then(x => x.WithValue(correlationId)); - public static ActivityBuilder Correlate(this IBuilder builder, Func correlationId) => builder.Then(x => x.WithValue(correlationId)); - public static ActivityBuilder Correlate(this IBuilder builder, Func correlationId) => builder.Then(x => x.WithValue(correlationId)); - public static ActivityBuilder Correlate(this IBuilder builder, string correlationId) => builder.Then(x => x.WithValue(correlationId)); + public static IActivityBuilder Correlate(this IBuilder builder, IWorkflowExpression correlationId) => builder.Then(x => x.WithValue(correlationId)); + public static IActivityBuilder Correlate(this IBuilder builder, Func correlationId) => builder.Then(x => x.WithValue(correlationId)); + public static IActivityBuilder Correlate(this IBuilder builder, Func correlationId) => builder.Then(x => x.WithValue(correlationId)); + public static IActivityBuilder Correlate(this IBuilder builder, string correlationId) => builder.Then(x => x.WithValue(correlationId)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariableBuilderExtensions.cs b/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariableBuilderExtensions.cs index 6ab6da5c6..a4e55e7c7 100644 --- a/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariableBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariableBuilderExtensions.cs @@ -8,30 +8,30 @@ namespace Elsa.Activities.Primitives { public static class SetVariableBuilderExtensions { - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, IWorkflowExpression value) => builder.Then(x => + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, IWorkflowExpression value) => builder.Then(x => { x.VariableName = variableName; x.Value = value; }); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, CodeExpression value) => builder.SetVariable(variableName, (IWorkflowExpression)value); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, new CodeExpression(value)); + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, CodeExpression value) => builder.SetVariable(variableName, (IWorkflowExpression)value); + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, new CodeExpression(value)); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, new CodeExpression(context => { var currentValue = context.GetVariable(variableName); return value(currentValue); })); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, new CodeExpression(context => { var currentValue = context.GetVariable(variableName); return value(currentValue); })); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, (IWorkflowExpression)new CodeExpression(value)); - public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value); + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, (IWorkflowExpression)new CodeExpression(value)); + public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/Signaling/Signaled/SignaledBuilderExtensions.cs b/src/core/Elsa.Core/Activities/Signaling/Signaled/SignaledBuilderExtensions.cs index e461dfc05..5876bda75 100644 --- a/src/core/Elsa.Core/Activities/Signaling/Signaled/SignaledBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/Signaling/Signaled/SignaledBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling { public static class SignaledBuilderExtensions { - public static ActivityBuilder Signaled(this IBuilder builder, IWorkflowExpression signal) => builder.Then(x => x.WithSignal(signal)); - public static ActivityBuilder Signaled(this IBuilder builder, Func signal) => builder.Then(x => x.WithSignal(signal)); - public static ActivityBuilder Signaled(this IBuilder builder, Func signal) => builder.Then(x => x.WithSignal(signal)); - public static ActivityBuilder Signaled(this IBuilder builder, string signal) => builder.Then(x => x.WithSignal(signal)); + public static IActivityBuilder Signaled(this IBuilder builder, IWorkflowExpression signal) => builder.Then(x => x.WithSignal(signal)); + public static IActivityBuilder Signaled(this IBuilder builder, Func signal) => builder.Then(x => x.WithSignal(signal)); + public static IActivityBuilder Signaled(this IBuilder builder, Func signal) => builder.Then(x => x.WithSignal(signal)); + public static IActivityBuilder Signaled(this IBuilder builder, string signal) => builder.Then(x => x.WithSignal(signal)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/Signaling/TriggerEvent/TriggerEventBuilderExtensions.cs b/src/core/Elsa.Core/Activities/Signaling/TriggerEvent/TriggerEventBuilderExtensions.cs index 2aac4ac26..9432ad1eb 100644 --- a/src/core/Elsa.Core/Activities/Signaling/TriggerEvent/TriggerEventBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/Signaling/TriggerEvent/TriggerEventBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling { public static class TriggerEventBuilderExtensions { - public static ActivityBuilder TriggerEvent(this IBuilder builder, IWorkflowExpression activityType, IWorkflowExpression? correlationId = default, IWorkflowExpression? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerEvent(this IBuilder builder, Func activityType, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerEvent(this IBuilder builder, Func activityType, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerEvent(this IBuilder builder, string activityType, string? correlationId = default, object? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerEvent(this IBuilder builder, IWorkflowExpression activityType, IWorkflowExpression? correlationId = default, IWorkflowExpression? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerEvent(this IBuilder builder, Func activityType, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerEvent(this IBuilder builder, Func activityType, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerEvent(this IBuilder builder, string activityType, string? correlationId = default, object? input = default) => builder.Then(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/Signaling/TriggerSignal/TriggerSignalBuilderExtensions.cs b/src/core/Elsa.Core/Activities/Signaling/TriggerSignal/TriggerSignalBuilderExtensions.cs index a8a5d2cdd..3514dfddd 100644 --- a/src/core/Elsa.Core/Activities/Signaling/TriggerSignal/TriggerSignalBuilderExtensions.cs +++ b/src/core/Elsa.Core/Activities/Signaling/TriggerSignal/TriggerSignalBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling { public static class TriggerSignalBuilderExtensions { - public static ActivityBuilder TriggerSignal(this IBuilder builder, IWorkflowExpression signal, IWorkflowExpression? correlationId = default, IWorkflowExpression? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerSignal(this IBuilder builder, Func signal, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerSignal(this IBuilder builder, Func signal, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); - public static ActivityBuilder TriggerSignal(this IBuilder builder, string signal, string? correlationId = default, object? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerSignal(this IBuilder builder, IWorkflowExpression signal, IWorkflowExpression? correlationId = default, IWorkflowExpression? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerSignal(this IBuilder builder, Func signal, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerSignal(this IBuilder builder, Func signal, Func? correlationId = default, Func? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); + public static IActivityBuilder TriggerSignal(this IBuilder builder, string signal, string? correlationId = default, object? input = default) => builder.Then(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/ActivityBuilder.cs b/src/core/Elsa.Core/Builders/ActivityBuilder.cs index dcadbba44..dd40efab8 100644 --- a/src/core/Elsa.Core/Builders/ActivityBuilder.cs +++ b/src/core/Elsa.Core/Builders/ActivityBuilder.cs @@ -4,7 +4,7 @@ using Elsa.Services.Models; namespace Elsa.Builders { - public class ActivityBuilder : IBuilder + public class ActivityBuilder : IActivityBuilder { public ActivityBuilder(IWorkflowBuilder workflowBuilder, IActivity activity) { @@ -14,28 +14,13 @@ namespace Elsa.Builders public IWorkflowBuilder WorkflowBuilder { get; } public IActivity Activity { get; } + public IActivityBuilder Add(Action? setup = default) where T : class, IActivity => WorkflowBuilder.Add(setup); + public IOutcomeBuilder When(string? outcome) => new OutcomeBuilder(WorkflowBuilder, this, outcome); + public IActivityBuilder Then(Action? setup = null, Action? branch = null) where T : class, IActivity => When(null).Then(setup, branch); - public ActivityBuilder Add(Action? setup = default) where T : class, IActivity - { - return WorkflowBuilder.Add(setup); - } + public IActivityBuilder Then(T activity, Action? branch = null) where T : class, IActivity => When(null).Then(activity, branch); - public OutcomeBuilder When(string? outcome) - { - return new OutcomeBuilder(WorkflowBuilder, this, outcome); - } - - public ActivityBuilder Then(Action? setup = null, Action? branch = null) where T : class, IActivity - { - return When(null).Then(setup, branch); - } - - public ActivityBuilder Then(T activity, Action? branch = null) where T : class, IActivity - { - return When(null).Then(activity, branch); - } - - public ActivityBuilder Then(ActivityBuilder targetActivity) + public IActivityBuilder Then(IActivityBuilder targetActivity) { WorkflowBuilder.Connect(this, targetActivity); return this; diff --git a/src/core/Elsa.Core/Builders/ActivityBuilderExtensions.cs b/src/core/Elsa.Core/Builders/ActivityBuilderExtensions.cs index edd72d3d0..87383180e 100644 --- a/src/core/Elsa.Core/Builders/ActivityBuilderExtensions.cs +++ b/src/core/Elsa.Core/Builders/ActivityBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Builders { public static class ActivityBuilderExtensions { - public static ActivityBuilder Then(this IBuilder builder, Func> activity) => builder.Then(new Inline(activity)); - public static ActivityBuilder Then(this IBuilder builder, Func activity) => builder.Then(new Inline(activity)); - public static ActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity)); - public static ActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity)); + public static IActivityBuilder Then(this IBuilder builder, Func> activity) => builder.Then(new Inline(activity)); + public static IActivityBuilder Then(this IBuilder builder, Func activity) => builder.Then(new Inline(activity)); + public static IActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity)); + public static IActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity)); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/ConnectionBuilder.cs b/src/core/Elsa.Core/Builders/ConnectionBuilder.cs index 4c59f0245..975fc9630 100644 --- a/src/core/Elsa.Core/Builders/ConnectionBuilder.cs +++ b/src/core/Elsa.Core/Builders/ConnectionBuilder.cs @@ -3,14 +3,14 @@ using Elsa.Services.Models; namespace Elsa.Builders { - public class ConnectionBuilder + public class ConnectionBuilder : IConnectionBuilder { public IWorkflowBuilder WorkflowBuilder { get; } - public Func Source { get; } - public Func Target{ get; } + public Func Source { get; } + public Func Target{ get; } public string Outcome { get; } - public ConnectionBuilder(IWorkflowBuilder workflowBuilder, Func source, Func target, string? outcome = null) + public ConnectionBuilder(IWorkflowBuilder workflowBuilder, Func source, Func target, string outcome = OutcomeNames.Done) { Source = source; Target = target; @@ -18,9 +18,6 @@ namespace Elsa.Builders Outcome = outcome; } - public Connection BuildConnection() - { - return new Connection(Source().Activity, Target().Activity, Outcome); - } + public Connection BuildConnection() => new Connection(Source().Activity, Target().Activity, Outcome); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/IBuilder.cs b/src/core/Elsa.Core/Builders/IBuilder.cs deleted file mode 100644 index 7f7788efa..000000000 --- a/src/core/Elsa.Core/Builders/IBuilder.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using Elsa.Services; - -namespace Elsa.Builders -{ - public interface IBuilder - { - ActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity; - ActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity; - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/OutcomeBuilder.cs b/src/core/Elsa.Core/Builders/OutcomeBuilder.cs index 220c09180..36f63459a 100644 --- a/src/core/Elsa.Core/Builders/OutcomeBuilder.cs +++ b/src/core/Elsa.Core/Builders/OutcomeBuilder.cs @@ -4,9 +4,9 @@ using Elsa.Services.Models; namespace Elsa.Builders { - public class OutcomeBuilder : IBuilder + public class OutcomeBuilder : IOutcomeBuilder { - public OutcomeBuilder(IWorkflowBuilder workflowBuilder, ActivityBuilder source, string outcome) + public OutcomeBuilder(IWorkflowBuilder workflowBuilder, IActivityBuilder source, string? outcome) { WorkflowBuilder = workflowBuilder; Source = source; @@ -14,20 +14,14 @@ namespace Elsa.Builders } public IWorkflowBuilder WorkflowBuilder { get; } - public ActivityBuilder Source { get; } - public string Outcome { get; } + public IActivityBuilder Source { get; } + public string? Outcome { get; } - public ActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity - { - return Then(WorkflowBuilder.Add(setup), branch); - } - - public ActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity - { - return Then(WorkflowBuilder.Add(activity), branch); - } - - private ActivityBuilder Then(ActivityBuilder activityBuilder, Action? branch = default) + public IActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity => Then(WorkflowBuilder.Add(setup), branch); + + public IActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity => Then(WorkflowBuilder.Add(activity), branch); + + private IActivityBuilder Then(IActivityBuilder activityBuilder, Action? branch = default) { branch?.Invoke(activityBuilder); WorkflowBuilder.Connect(Source, activityBuilder, Outcome); diff --git a/src/core/Elsa.Core/Builders/OutcomeBuilderExtensions.cs b/src/core/Elsa.Core/Builders/OutcomeBuilderExtensions.cs index 3c101a8b4..ae15a749e 100644 --- a/src/core/Elsa.Core/Builders/OutcomeBuilderExtensions.cs +++ b/src/core/Elsa.Core/Builders/OutcomeBuilderExtensions.cs @@ -8,9 +8,9 @@ namespace Elsa.Builders { public static class OutcomeBuilderExtensions { - public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Func> activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); - public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Func activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); - public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Action activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); - public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Action activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); + public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Func> activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); + public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Func activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); + public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Action activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); + public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Action activity, Action? branch = default) => outcomeBuilder.Then(new Inline(activity), branch); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Builders/WorkflowBuilder.cs b/src/core/Elsa.Core/Builders/WorkflowBuilder.cs index a0c33c774..6cc0fec37 100644 --- a/src/core/Elsa.Core/Builders/WorkflowBuilder.cs +++ b/src/core/Elsa.Core/Builders/WorkflowBuilder.cs @@ -126,38 +126,38 @@ namespace Elsa.Builders return workflow; } - public T New(T activity, Action? branch = default) where T : class, IActivity + public T New(T activity, Action? branch = default) where T : class, IActivity { var activityBuilder = new ActivityBuilder(this, activity); branch?.Invoke(activityBuilder); return activity; } - public T New(Action? setup, Action? branch = default) where T : class, IActivity + public T New(Action? setup, Action? branch = default) where T : class, IActivity { var activity = activityResolver.ResolveActivity(); setup?.Invoke(activity); return New(activity, branch); } - public ActivityBuilder StartWith(Action? setup = default, Action? branch = default) where T : class, IActivity + public IActivityBuilder StartWith(Action? setup = default, Action? branch = default) where T : class, IActivity { var activity = New(setup, branch); return StartWith(activity, branch); } - public ActivityBuilder StartWith(T activity, Action? branch = default) where T : class, IActivity + public IActivityBuilder StartWith(T activity, Action? branch = default) where T : class, IActivity { return Add(activity, branch); } - public ActivityBuilder Add(Action? setup = default, Action? branch = default) where T : class, IActivity + public IActivityBuilder Add(Action? setup = default, Action? branch = default) where T : class, IActivity { var activity = New(setup, branch); return Add(activity, branch); } - public ActivityBuilder Add(T activity, Action? branch = default) where T : class, IActivity + public IActivityBuilder Add(T activity, Action? branch = default) where T : class, IActivity { var activityBuilder = new ActivityBuilder(this, activity); branch?.Invoke(activityBuilder); @@ -165,18 +165,18 @@ namespace Elsa.Builders return activityBuilder; } - public ConnectionBuilder Connect( - ActivityBuilder source, - ActivityBuilder target, - string? outcome = default) + public IConnectionBuilder Connect( + IActivityBuilder source, + IActivityBuilder target, + string outcome = OutcomeNames.Done) { return Connect(() => source, () => target, outcome); } - public ConnectionBuilder Connect( - Func source, - Func target, - string? outcome = default) + public IConnectionBuilder Connect( + Func source, + Func target, + string outcome = OutcomeNames.Done) { var connectionBuilder = new ConnectionBuilder(this, source, target, outcome); @@ -184,8 +184,8 @@ namespace Elsa.Builders return connectionBuilder; } - public ActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity => StartWith(setup, branch); - public ActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity => StartWith(activity, branch); + public IActivityBuilder Then(Action? setup = default, Action? branch = default) where T : class, IActivity => StartWith(setup, branch); + public IActivityBuilder Then(T activity, Action? branch = default) where T : class, IActivity => StartWith(activity, branch); public Workflow Build(IWorkflow workflow) { diff --git a/src/core/Elsa.Core/Builders/WorkflowBuilderExtensions.cs b/src/core/Elsa.Core/Builders/WorkflowBuilderExtensions.cs index ce4de5d0d..e6445c1f3 100644 --- a/src/core/Elsa.Core/Builders/WorkflowBuilderExtensions.cs +++ b/src/core/Elsa.Core/Builders/WorkflowBuilderExtensions.cs @@ -9,18 +9,18 @@ namespace Elsa.Builders { public static class WorkflowBuilderExtensions { - public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action)); - public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action)); - public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Func action) => builder.StartWith(new Inline(action)); - public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Func> action) => builder.StartWith(new Inline(action)); + public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action)); + public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action)); + public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Func action) => builder.StartWith(new Inline(action)); + public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Func> action) => builder.StartWith(new Inline(action)); - public static ActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, IWorkflowExpression value) => builder.StartWith(x => + public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, IWorkflowExpression value) => builder.StartWith(x => { x.VariableName = variableName; x.Value = value; }); - public static ActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, (IWorkflowExpression)new CodeExpression(value)); - public static ActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value); + public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, Func value) => builder.SetVariable(variableName, (IWorkflowExpression)new CodeExpression(value)); + public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Extensions/ElsaServiceCollectionExtensions.cs b/src/core/Elsa.Core/Extensions/ElsaServiceCollectionExtensions.cs index 80101a24d..1832d9c70 100644 --- a/src/core/Elsa.Core/Extensions/ElsaServiceCollectionExtensions.cs +++ b/src/core/Elsa.Core/Extensions/ElsaServiceCollectionExtensions.cs @@ -122,6 +122,7 @@ namespace Microsoft.Extensions.DependencyInjection .AddConsumer() .AddAutoMapperProfile(ServiceLifetime.Singleton) .AddTypeAlias(typeof(CodeExpression<>), "CodeExpression") + .AddTypeAlias("Duration") .AddSerializationHandlers() .AddMetadataHandlers() .AddPrimitiveActivities(); @@ -151,6 +152,7 @@ namespace Microsoft.Extensions.DependencyInjection .AddTypeNameValueHandler() .AddTypeNameValueHandler() .AddTypeNameValueHandler() + .AddTypeNameValueHandler() .AddTypeAlias() .AddTypeAlias() .AddTypeAlias() diff --git a/src/core/Elsa.Core/Serialization/Handlers/CodeExpressionHandler.cs b/src/core/Elsa.Core/Serialization/Handlers/CodeExpressionHandler.cs new file mode 100644 index 000000000..a6b293ce8 --- /dev/null +++ b/src/core/Elsa.Core/Serialization/Handlers/CodeExpressionHandler.cs @@ -0,0 +1,32 @@ +using System; +using System.Linq; +using System.Reflection; +using Elsa.Expressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Elsa.Serialization.Extensions; + +namespace Elsa.Serialization.Handlers +{ + public sealed class CodeExpressionHandler : IValueHandler + { + public int Priority => 0; + public bool CanSerialize(JToken token, Type type, object value) => typeof(CodeExpression).IsAssignableFrom(type); + public bool CanDeserialize(JToken token) => token.Type == JTokenType.Object && token.GetValue("Type") == TypeName; + private string TypeName => nameof(CodeExpression); + + public object? Deserialize(JsonSerializer serializer, JToken token) + { + return default; + } + + public void Serialize(JsonWriter writer, JsonSerializer serializer, Type type, JToken token, object? value) + { + var objectToken = new JObject + { + ["Type"] = TypeName + }; + objectToken.WriteTo(writer, serializer.Converters.ToArray()); + } + } +} \ No newline at end of file diff --git a/src/core/Elsa.Core/Serialization/Handlers/InstantHandler.cs b/src/core/Elsa.Core/Serialization/Handlers/InstantHandler.cs index 1694ab3f0..626901baa 100644 --- a/src/core/Elsa.Core/Serialization/Handlers/InstantHandler.cs +++ b/src/core/Elsa.Core/Serialization/Handlers/InstantHandler.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using NodaTime; using NodaTime.Text; @@ -6,6 +7,6 @@ namespace Elsa.Serialization.Handlers { public sealed class InstantHandler : PrimitiveValueHandler { - protected override object ParseValue(JToken value) => InstantPattern.ExtendedIso.Parse(value.ToString()).Value; + protected override object ParseValue(JToken value) => InstantPattern.ExtendedIso.Parse(value.ToString(Formatting.None).Trim('\"')).Value; } } \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.DocumentDb/Extensions/ElsaOptionsExtensions.cs b/src/providers/Elsa.Persistence.DocumentDb/Extensions/ElsaOptionsExtensions.cs index 74f0d7bec..13ffb3d93 100644 --- a/src/providers/Elsa.Persistence.DocumentDb/Extensions/ElsaOptionsExtensions.cs +++ b/src/providers/Elsa.Persistence.DocumentDb/Extensions/ElsaOptionsExtensions.cs @@ -1,6 +1,7 @@ using Elsa.Persistence.DocumentDb.Services; using Elsa.AutoMapper.Extensions; using Elsa.AutoMapper.Extensions.NodaTime; +using Elsa.Extensions; using Elsa.Persistence.DocumentDb.Mapping; using Microsoft.Extensions.DependencyInjection; diff --git a/src/providers/Elsa.Persistence.EntityFrameworkCore/Extensions/EFCoreServiceCollectionExtensions.cs b/src/providers/Elsa.Persistence.EntityFrameworkCore/Extensions/EFCoreServiceCollectionExtensions.cs index 69475a2a0..ac526f62b 100644 --- a/src/providers/Elsa.Persistence.EntityFrameworkCore/Extensions/EFCoreServiceCollectionExtensions.cs +++ b/src/providers/Elsa.Persistence.EntityFrameworkCore/Extensions/EFCoreServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ using System; using Elsa.AutoMapper.Extensions; using Elsa.AutoMapper.Extensions.NodaTime; +using Elsa.Extensions; using Elsa.Persistence.EntityFrameworkCore.CustomSchema; using Elsa.Persistence.EntityFrameworkCore.DbContexts; using Elsa.Persistence.EntityFrameworkCore.Mapping; diff --git a/src/samples/Elsa.Samples.Timers/Elsa.Samples.Timers.csproj b/src/samples/Elsa.Samples.Timers/Elsa.Samples.Timers.csproj index b11ddb3d4..e4cf83bae 100644 --- a/src/samples/Elsa.Samples.Timers/Elsa.Samples.Timers.csproj +++ b/src/samples/Elsa.Samples.Timers/Elsa.Samples.Timers.csproj @@ -12,6 +12,7 @@ + diff --git a/src/samples/Elsa.Samples.Timers/Program.cs b/src/samples/Elsa.Samples.Timers/Program.cs index 69199d664..3c643bc4b 100644 --- a/src/samples/Elsa.Samples.Timers/Program.cs +++ b/src/samples/Elsa.Samples.Timers/Program.cs @@ -19,10 +19,12 @@ namespace Elsa.Samples.Timers .ConfigureServices((hostContext, services) => { services - .AddElsa() - .AddTimerActivities(options => options.Configure(timer => timer.SweepInterval = Duration.FromSeconds(5))) - .AddWorkflow() - .AddWorkflow(); + .AddElsa(options => + options.UseMongoDbWorkflowStores("Elsa_Samples_Timers", "mongodb://localhost")) + .AddTimerActivities(options => + options.Configure(timer => timer.SweepInterval = Duration.FromSeconds(5))) + .AddWorkflow(); + //.AddWorkflow(); }); } } \ No newline at end of file diff --git a/src/samples/Elsa.Samples.Timers/RecurringTaskWorkflow.cs b/src/samples/Elsa.Samples.Timers/RecurringTaskWorkflow.cs index 341141a81..3d569bc9f 100644 --- a/src/samples/Elsa.Samples.Timers/RecurringTaskWorkflow.cs +++ b/src/samples/Elsa.Samples.Timers/RecurringTaskWorkflow.cs @@ -2,6 +2,8 @@ using System; using Elsa.Activities.Console; using Elsa.Activities.MassTransit; using Elsa.Builders; +using Elsa.Expressions; +using Elsa.Models; using NodaTime; namespace Elsa.Samples.Timers @@ -11,7 +13,9 @@ namespace Elsa.Samples.Timers public void Build(IWorkflowBuilder builder) { builder - .TimerEvent(Duration.FromSeconds(5)) + .WithPersistenceBehavior(WorkflowPersistenceBehavior.ActivityExecuted) + .TimerEvent(Duration.FromSeconds(1)) + .WriteLine(new CodeExpression("Hello World")) .WriteLine(() => $"Timer event at {DateTime.Now}"); } }