From ffe071ca552dc4eb44aea7856b3256f093e297c7 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 17 Feb 2019 15:28:23 +0100 Subject: [PATCH] Implemented SetVariable activity (#26) --- .../Drivers/HttpRequestTriggerDriver.cs | 21 ++++++++++++++----- .../Models/HttpRequestModel.cs | 1 + .../Drivers/SetVariableDriver.cs | 4 ++-- .../Drivers/SetVariableDisplay.cs | 15 ++++++++++++- .../ViewModels/SetVariableViewModel.cs | 12 +++++++++++ .../Views/SetVariable.Card.cshtml | 4 ++-- .../Views/SetVariable.Design.cshtml | 2 +- .../Views/SetVariable.Edit.cshtml | 13 ++++++++++++ 8 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 src/web/modules/Elsa.Web.Activities.Primitives/ViewModels/SetVariableViewModel.cs create mode 100644 src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Edit.cshtml diff --git a/src/activities/Elsa.Activities.Http/Drivers/HttpRequestTriggerDriver.cs b/src/activities/Elsa.Activities.Http/Drivers/HttpRequestTriggerDriver.cs index 8da284a25..4f5878855 100644 --- a/src/activities/Elsa.Activities.Http/Drivers/HttpRequestTriggerDriver.cs +++ b/src/activities/Elsa.Activities.Http/Drivers/HttpRequestTriggerDriver.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -16,13 +17,16 @@ namespace Elsa.Activities.Http.Drivers { private readonly IHttpContextAccessor httpContextAccessor; private readonly IWorkflowExpressionEvaluator expressionEvaluator; + private readonly IEnumerable contentFormatters; public HttpRequestTriggerDriver( IHttpContextAccessor httpContextAccessor, - IWorkflowExpressionEvaluator expressionEvaluator) + IWorkflowExpressionEvaluator expressionEvaluator, + IEnumerable contentFormatters) { this.httpContextAccessor = httpContextAccessor; this.expressionEvaluator = expressionEvaluator; + this.contentFormatters = contentFormatters; } protected override ActivityExecutionResult OnExecute(HttpRequestTrigger activity, WorkflowExecutionContext workflowContext) @@ -47,15 +51,22 @@ namespace Elsa.Activities.Http.Drivers { model.Form = (await request.ReadFormAsync(cancellationToken)).ToDictionary(x => x.Key, x => x.Value); } - else - { - model.Content = await request.ReadBodyAsync(); - } + + var formatter = SelectContentFormatter(request.ContentType); + var content = await request.ReadBodyAsync(); + model.Content = content; + model.FormattedContent = await formatter.FormatAsync(content, request.ContentType); } workflowContext.CurrentScope.LastResult = model; return Endpoint("Done"); } + + private IContentFormatter SelectContentFormatter(string contentType) + { + var formatters = contentFormatters.OrderByDescending(x => x.Priority).ToList(); + return formatters.FirstOrDefault(x => x.SupportedContentTypes.Contains(contentType, StringComparer.OrdinalIgnoreCase)) ?? formatters.Last(); + } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs b/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs index f0bfecc40..273770a7a 100644 --- a/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs +++ b/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs @@ -11,6 +11,7 @@ namespace Elsa.Activities.Http.Models public IDictionary QueryString { get; set; } public IDictionary Headers { get; set; } public string Content { get; set; } + public object FormattedContent { get; set; } public IDictionary Form { get; set; } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Primitives/Drivers/SetVariableDriver.cs b/src/activities/Elsa.Activities.Primitives/Drivers/SetVariableDriver.cs index 5d6c4f21f..2e9ef8c78 100644 --- a/src/activities/Elsa.Activities.Primitives/Drivers/SetVariableDriver.cs +++ b/src/activities/Elsa.Activities.Primitives/Drivers/SetVariableDriver.cs @@ -19,8 +19,8 @@ namespace Elsa.Activities.Primitives.Drivers protected override async Task OnExecuteAsync(SetVariable activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) { - //var value = await expressionEvaluator.EvaluateAsync(activity.ValueExpression, workflowContext, cancellationToken); - //workflowContext.CurrentScope.SetVariable(activity.VariableName, value); + var value = await expressionEvaluator.EvaluateAsync(activity.ValueExpression, workflowContext, cancellationToken); + workflowContext.CurrentScope.SetVariable(activity.VariableName, value); return Endpoint("Done"); } } diff --git a/src/web/modules/Elsa.Web.Activities.Primitives/Drivers/SetVariableDisplay.cs b/src/web/modules/Elsa.Web.Activities.Primitives/Drivers/SetVariableDisplay.cs index 0996730fa..27681c9c1 100644 --- a/src/web/modules/Elsa.Web.Activities.Primitives/Drivers/SetVariableDisplay.cs +++ b/src/web/modules/Elsa.Web.Activities.Primitives/Drivers/SetVariableDisplay.cs @@ -1,9 +1,22 @@ using Elsa.Activities.Primitives.Activities; +using Elsa.Web.Activities.Primitives.ViewModels; +using Elsa.Web.Components.ViewModels; using Elsa.Web.Drivers; namespace Elsa.Web.Activities.Primitives.Drivers { - public class SetVariableDisplay : ActivityDisplayDriver + public class SetVariableDisplay : ActivityDisplayDriver { + protected override void EditActivity(SetVariable activity, SetVariableViewModel model) + { + model.VariableName = activity.VariableName; + model.ValueExpression = new ExpressionViewModel(activity.ValueExpression); + } + + protected override void UpdateActivity(SetVariableViewModel model, SetVariable activity) + { + activity.VariableName = model.VariableName; + activity.ValueExpression = model.ValueExpression.ToWorkflowExpression(); + } } } \ No newline at end of file diff --git a/src/web/modules/Elsa.Web.Activities.Primitives/ViewModels/SetVariableViewModel.cs b/src/web/modules/Elsa.Web.Activities.Primitives/ViewModels/SetVariableViewModel.cs new file mode 100644 index 000000000..bf4cadd4d --- /dev/null +++ b/src/web/modules/Elsa.Web.Activities.Primitives/ViewModels/SetVariableViewModel.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; +using Elsa.Web.Components.ViewModels; + +namespace Elsa.Web.Activities.Primitives.ViewModels +{ + public class SetVariableViewModel + { + [Required] + public string VariableName { get; set; } + public ExpressionViewModel ValueExpression { get; set; } + } +} \ No newline at end of file diff --git a/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Card.cshtml b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Card.cshtml index 4ec7854e0..e9cf5ec05 100644 --- a/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Card.cshtml +++ b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Card.cshtml @@ -1,6 +1,6 @@ -@model Elsa.Web.ViewModels.ActivityShapeModel +@model ActivityShapeModel @{ var activityDescriptor = Model.Activity.Descriptor; } -

@activityDescriptor.DisplayText

+

@activityDescriptor.DisplayText

@activityDescriptor.Description

\ No newline at end of file diff --git a/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Design.cshtml b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Design.cshtml index cc032fb4e..4cec0623d 100644 --- a/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Design.cshtml +++ b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Design.cshtml @@ -1,4 +1,4 @@ -@model Elsa.Web.ViewModels.ActivityShapeModel +@model ActivityShapeModel

@Model.DisplayText

diff --git a/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Edit.cshtml b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Edit.cshtml new file mode 100644 index 000000000..7470a0122 --- /dev/null +++ b/src/web/modules/Elsa.Web.Activities.Primitives/Views/SetVariable.Edit.cshtml @@ -0,0 +1,13 @@ +@model SetVariableViewModel +
+ + + + @T["The name of the variable to set."] +
+
+ + + + @T["Enter an expression that evaluates to the value to use for the variable to set."] +
\ No newline at end of file