From b3efb277222e4bba83eb35aaccf0473639696adc Mon Sep 17 00:00:00 2001 From: Cameron Cowen Date: Sun, 9 May 2021 17:13:07 +0100 Subject: [PATCH] Added initial readfile activity --- .../Activities/ReadFile/ReadFile.cs | 28 +++++++++++ .../ReadFile/ReadFileBuilderExtensions.cs | 46 +++++++++++++++++++ .../Activities/ReadFile/ReadFileExtensions.cs | 19 ++++++++ .../Extensions/ServiceCollectionExtensions.cs | 18 ++++---- 4 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFile.cs create mode 100644 src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileBuilderExtensions.cs create mode 100644 src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileExtensions.cs diff --git a/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFile.cs b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFile.cs new file mode 100644 index 000000000..e7e2da715 --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFile.cs @@ -0,0 +1,28 @@ +using Elsa.ActivityResults; +using Elsa.Attributes; +using Elsa.Design; +using Elsa.Expressions; +using Elsa.Services; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File +{ + [Action(Category = "File", + Description = "Output input value to specified location", + Outcomes = new[] { OutcomeNames.Done })] + public class ReadFile : Activity + { + [ActivityProperty(Hint = "Path to read content from.", UIHint = ActivityPropertyUIHints.SingleLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string Path { get; set; } + + public async override ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var content = System.IO.File.ReadAllTextAsync(Path); + return Done(content); + } + } +} diff --git a/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileBuilderExtensions.cs b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileBuilderExtensions.cs new file mode 100644 index 000000000..4218285f4 --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileBuilderExtensions.cs @@ -0,0 +1,46 @@ +using Elsa.Builders; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File +{ + public static class ReadFileBuilderExtensions + { + public static IActivityBuilder ReadFile(this IBuilder builder, Action> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile); + + public static IActivityBuilder ReadFile(this IBuilder builder, Func path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.OutFile(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder ReadFile(this IBuilder builder, Func> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.OutFile(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder ReadFile(this IBuilder builder, Func path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.OutFile(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder ReadFile(this IBuilder builder, Func> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.OutFile(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder ReadFile(this IBuilder builder, string path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.OutFile(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + } +} diff --git a/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileExtensions.cs b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileExtensions.cs new file mode 100644 index 000000000..2bca02f51 --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/ReadFile/ReadFileExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Builders; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File +{ + public static class ReadFileExtensions + { + public static ISetupActivity WithPath(this ISetupActivity setup, Func> path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func> path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, string path) => setup.Set(x => x.Path, path); + } +} \ No newline at end of file diff --git a/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs index 28c7f58c8..79dd9dbe4 100644 --- a/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ using Elsa; using Elsa.Activities.File; using Elsa.Activities.File.Options; +using Elsa.Activities.File.Services; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; @@ -15,16 +16,12 @@ namespace Microsoft.Extensions.DependencyInjection return services; } - public static ElsaOptionsBuilder AddFileActivities(this ElsaOptionsBuilder builder, Action? configureOptions = null) - { - builder.Services.AddFileServices(configureOptions); - builder.AddActivity(); - builder.AddActivity(); - builder.AddActivity(); - builder.AddActivity(); - - return builder; - } + public static ElsaOptionsBuilder AddFileActivities(this ElsaOptionsBuilder builder, Action? configureOptions = null) => builder + .AddActivity() + .AddActivity() + .AddActivity() + .AddActivity() + .AddActivity(); public static IServiceCollection AddFileServices(this IServiceCollection services, Action? configureOptions = null) { @@ -32,6 +29,7 @@ namespace Microsoft.Extensions.DependencyInjection { services.Configure(configureOptions); } + services.AddHostedService(); return services; }