From 8a0fd05973234aa561d35b50234471396d27da89 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 30 Jul 2021 22:30:32 +0200 Subject: [PATCH] Update activity type providers --- .../CommandActivityTypeProvider.cs | 21 +++-- .../EventActivityTypeProvider.cs | 21 +++-- .../ActivityTypes/TaskActivityTypeProvider.cs | 21 +++-- .../NotificationActivityTypeProvider.cs | 23 +++-- .../WebhookActivityTypeProvider.cs | 91 ++++++++++--------- 5 files changed, 105 insertions(+), 72 deletions(-) diff --git a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/CommandActivityTypeProvider.cs b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/CommandActivityTypeProvider.cs index 8fdf62808..8969e0b11 100644 --- a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/CommandActivityTypeProvider.cs +++ b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/CommandActivityTypeProvider.cs @@ -40,19 +40,26 @@ namespace Elsa.Activities.Conductor.Providers.ActivityTypes private async Task CreateActivityTypeAsync(CommandDefinition command, CancellationToken cancellationToken) { - var descriptor = await _describesActivityType.DescribeAsync(cancellationToken); + async ValueTask CreateDescriptorAsync() + { + var des = await _describesActivityType.DescribeAsync(cancellationToken); - descriptor.Type = command.Name; - descriptor.DisplayName = command.DisplayName ?? command.Name; - descriptor.Description = command.Description; - descriptor.InputProperties = descriptor.InputProperties.Where(x => x.Name != nameof(SendCommand.CommandName)).ToArray(); + des.Type = command.Name; + des.DisplayName = command.DisplayName ?? command.Name; + des.Description = command.Description; + des.InputProperties = des.InputProperties.Where(x => x.Name != nameof(SendCommand.CommandName)).ToArray(); + + return des; + } + + var descriptor = await CreateDescriptorAsync(); return new ActivityType { Type = typeof(SendCommand), TypeName = descriptor.Type, DisplayName = descriptor.DisplayName, - Describe = () => descriptor, + DescribeAsync = CreateDescriptorAsync, Description = descriptor.Description, ActivateAsync = async context => { @@ -66,7 +73,7 @@ namespace Elsa.Activities.Conductor.Providers.ActivityTypes }; } - private async Task> GetCommandsAsync(CancellationToken cancellationToken) => + private async Task> GetCommandsAsync(CancellationToken cancellationToken) => await _scopedCommandsProviders.UseServiceAsync(async commandProviders => await GetCommandsAsync(commandProviders, cancellationToken).ToListAsync(cancellationToken)); private static async IAsyncEnumerable GetCommandsAsync(IEnumerable commandProviders, [EnumeratorCancellation] CancellationToken cancellationToken) diff --git a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/EventActivityTypeProvider.cs b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/EventActivityTypeProvider.cs index 189aeea6d..193724cb6 100644 --- a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/EventActivityTypeProvider.cs +++ b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/EventActivityTypeProvider.cs @@ -40,20 +40,27 @@ namespace Elsa.Activities.Conductor.Providers.ActivityTypes private async Task CreateActivityTypeAsync(EventDefinition eventDefinition, CancellationToken cancellationToken) { - var descriptor = await _describesActivityType.DescribeAsync(cancellationToken); + async ValueTask CreateDescriptorAsync() + { + var des = await _describesActivityType.DescribeAsync(cancellationToken); - descriptor.Type = eventDefinition.Name; - descriptor.DisplayName = eventDefinition.DisplayName ?? eventDefinition.Name; - descriptor.Description = eventDefinition.Description; - descriptor.InputProperties = Array.Empty(); - descriptor.Outcomes = eventDefinition.Outcomes?.ToArray() ?? new[] { OutcomeNames.Done }; + des.Type = eventDefinition.Name; + des.DisplayName = eventDefinition.DisplayName ?? eventDefinition.Name; + des.Description = eventDefinition.Description; + des.InputProperties = Array.Empty(); + des.Outcomes = eventDefinition.Outcomes?.ToArray() ?? new[] { OutcomeNames.Done }; + + return des; + } + + var descriptor = await CreateDescriptorAsync(); return new ActivityType { Type = typeof(EventReceived), TypeName = descriptor.Type, DisplayName = descriptor.DisplayName, - Describe = () => descriptor, + DescribeAsync = CreateDescriptorAsync, Description = descriptor.Description, ActivateAsync = async context => { diff --git a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/TaskActivityTypeProvider.cs b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/TaskActivityTypeProvider.cs index 5b2d52fb1..8282dd7de 100644 --- a/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/TaskActivityTypeProvider.cs +++ b/src/activities/Elsa.Activities.Conductor/Providers/ActivityTypes/TaskActivityTypeProvider.cs @@ -40,20 +40,27 @@ namespace Elsa.Activities.Conductor.Providers.ActivityTypes private async Task CreateActivityTypeAsync(TaskDefinition taskDefinition, CancellationToken cancellationToken) { - var descriptor = await _describesActivityType.DescribeAsync(cancellationToken); + async ValueTask CreateDescriptorAsync() + { + var des = await _describesActivityType.DescribeAsync(cancellationToken); - descriptor.Type = taskDefinition.Name; - descriptor.DisplayName = taskDefinition.DisplayName ?? taskDefinition.Name; - descriptor.Description = taskDefinition.Description; - descriptor.InputProperties = Array.Empty(); - descriptor.Outcomes = taskDefinition.Outcomes?.ToArray() ?? new[] { OutcomeNames.Done }; + des.Type = taskDefinition.Name; + des.DisplayName = taskDefinition.DisplayName ?? taskDefinition.Name; + des.Description = taskDefinition.Description; + des.InputProperties = Array.Empty(); + des.Outcomes = taskDefinition.Outcomes?.ToArray() ?? new[] { OutcomeNames.Done }; + + return des; + } + + var descriptor = await CreateDescriptorAsync(); return new ActivityType { Type = typeof(RunTask), TypeName = descriptor.Type, DisplayName = descriptor.DisplayName, - Describe = () => descriptor, + DescribeAsync = CreateDescriptorAsync, Description = descriptor.Description, ActivateAsync = async context => { diff --git a/src/activities/Elsa.Activities.Telnyx/Providers/ActivityTypes/NotificationActivityTypeProvider.cs b/src/activities/Elsa.Activities.Telnyx/Providers/ActivityTypes/NotificationActivityTypeProvider.cs index f060029c7..876cc170e 100644 --- a/src/activities/Elsa.Activities.Telnyx/Providers/ActivityTypes/NotificationActivityTypeProvider.cs +++ b/src/activities/Elsa.Activities.Telnyx/Providers/ActivityTypes/NotificationActivityTypeProvider.cs @@ -59,19 +59,26 @@ namespace Elsa.Activities.Telnyx.Providers.ActivityTypes private async Task CreateWebhookActivityTypeAsync(Type payloadType, WebhookAttribute webhookAttribute, CancellationToken cancellationToken) { - var descriptor = await _describesActivityType.DescribeAsync(cancellationToken); + async ValueTask CreateDescriptorAsync() + { + var des = await _describesActivityType.DescribeAsync(cancellationToken); - descriptor.Description = webhookAttribute.Description; - descriptor.DisplayName = webhookAttribute.DisplayName; - descriptor.Type = webhookAttribute.ActivityType; + des.Description = webhookAttribute.Description; + des.DisplayName = webhookAttribute.DisplayName; + des.Type = webhookAttribute.ActivityType; - var outputProperties = descriptor.OutputProperties.Where(x => x.Name != nameof(Webhook.Output)).ToList(); - outputProperties.Add(new ActivityOutputDescriptor(nameof(Webhook.Output), payloadType)); - descriptor.OutputProperties = outputProperties.ToArray(); + var outputProperties = des.OutputProperties.Where(x => x.Name != nameof(Webhook.Output)).ToList(); + outputProperties.Add(new ActivityOutputDescriptor(nameof(Webhook.Output), payloadType)); + des.OutputProperties = outputProperties.ToArray(); + + return des; + } + + var descriptor = await CreateDescriptorAsync(); return new ActivityType { - Describe = () => descriptor, + DescribeAsync = CreateDescriptorAsync, Description = descriptor.Description, DisplayName = descriptor.DisplayName, TypeName = descriptor.Type, diff --git a/src/activities/webhooks/Elsa.Activities.Webhooks/ActivityTypes/WebhookActivityTypeProvider.cs b/src/activities/webhooks/Elsa.Activities.Webhooks/ActivityTypes/WebhookActivityTypeProvider.cs index 84917fd02..3acb89472 100644 --- a/src/activities/webhooks/Elsa.Activities.Webhooks/ActivityTypes/WebhookActivityTypeProvider.cs +++ b/src/activities/webhooks/Elsa.Activities.Webhooks/ActivityTypes/WebhookActivityTypeProvider.cs @@ -54,52 +54,57 @@ namespace Elsa.Activities.Webhooks.ActivityTypes var activityTypeName = webhook.Name.EndsWith(WebhooksActivityTypeSuffix) ? webhook.Name : $"{webhook.Name}{WebhooksActivityTypeSuffix}"; var activityDisplayName = activityTypeName.Humanize(); - var descriptor = new ActivityDescriptor + ValueTask CreateDescriptorAsync() { - Type = activityTypeName, - DisplayName = activityDisplayName, - Category = WebhooksActivityCategory, - Outcomes = new[] { OutcomeNames.Done }, - Traits = ActivityTraits.Trigger, - InputProperties = new[] + var descriptor = new ActivityDescriptor { - new ActivityInputDescriptor( - nameof(HttpEndpoint.Path), - typeof(PathString), - ActivityInputUIHints.SingleLine, - "Path", - "The relative path that triggers this activity.", - null, - default, - 0, - webhook.Path, - SyntaxNames.Literal, - new[] { SyntaxNames.Literal }, - true + Type = activityTypeName!, + DisplayName = activityDisplayName!, + Category = WebhooksActivityCategory, + Outcomes = new[] { OutcomeNames.Done }, + Traits = ActivityTraits.Trigger, + InputProperties = new[] + { + new ActivityInputDescriptor( + nameof(HttpEndpoint.Path), + typeof(PathString), + ActivityInputUIHints.SingleLine, + "Path", + "The relative path that triggers this activity.", + null, + default, + 0, + webhook.Path, + SyntaxNames.Literal, + new[] { SyntaxNames.Literal }, + true ), - new ActivityInputDescriptor( - nameof(HttpEndpoint.Methods), - typeof(HashSet), - ActivityInputUIHints.CheckList, - "Request Method", - "Specify what request method this webhook should handle. Leave empty to handle both GET and POST requests", - new[] { "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD" }, - default, - 1, - new[] { "GET", "POST" }, - SyntaxNames.Json, - new[] { SyntaxNames.Json, SyntaxNames.JavaScript, SyntaxNames.Liquid } + new ActivityInputDescriptor( + nameof(HttpEndpoint.Methods), + typeof(HashSet), + ActivityInputUIHints.CheckList, + "Request Method", + "Specify what request method this webhook should handle. Leave empty to handle both GET and POST requests", + new[] { "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD" }, + default, + 1, + new[] { "GET", "POST" }, + SyntaxNames.Json, + new[] { SyntaxNames.Json, SyntaxNames.JavaScript, SyntaxNames.Liquid } ) - }, - OutputProperties = new[] - { - new ActivityOutputDescriptor - ( - "Request", - typeof(Models.WebhookRequestModel), - "The received HTTP request." - ) - } + }, + OutputProperties = new[] + { + new ActivityOutputDescriptor + ( + "Request", + typeof(Models.WebhookRequestModel), + "The received HTTP request." + ) + } + }; + + return new ValueTask(descriptor); }; async ValueTask ActivateActivityAsync(ActivityExecutionContext context) @@ -123,7 +128,7 @@ namespace Elsa.Activities.Webhooks.ActivityTypes [WebhookMarkerAttribute] = true, ["Path"] = webhook.Path, }, - Describe = () => descriptor + DescribeAsync = CreateDescriptorAsync }; } }