diff --git a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFile.cs b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFile.cs index 97111f006..35e55c336 100644 --- a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFile.cs +++ b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFile.cs @@ -1,5 +1,7 @@ using Elsa.ActivityResults; using Elsa.Attributes; +using Elsa.Design; +using Elsa.Expressions; using Elsa.Services; using Elsa.Services.Models; using System; @@ -15,44 +17,44 @@ namespace Elsa.Activities.File Outcomes = new[] { OutcomeNames.Done })] public class OutFile : Activity { - [ActivityProperty(Hint = "Path to create file at.")] + [ActivityProperty(Hint = "Content of the file.", UIHint = ActivityPropertyUIHints.MultiLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string Content { get; set; } + + [ActivityProperty(Hint = "Path to create file at.", UIHint = ActivityPropertyUIHints.SingleLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] public string Path { get; set; } - [ActivityProperty(Hint = "How the output file should be written to.")] + [ActivityProperty(Hint = "How the output file should be written to.", UIHint = ActivityPropertyUIHints.Dropdown)] public CopyMode Mode { get; set; } = CopyMode.CreateNew; protected async override ValueTask OnExecuteAsync(ActivityExecutionContext context) { - FileStream fs; + FileMode fileMode; + FileAccess fileAccess; switch (Mode) { case CopyMode.Append: - fs = new FileStream(Path, FileMode.Append, FileAccess.Write); + fileMode = FileMode.Append; + fileAccess = FileAccess.Write; break; case CopyMode.Overwrite: - fs = new FileStream(Path, FileMode.Create, FileAccess.ReadWrite); + fileMode = FileMode.Create; + fileAccess = FileAccess.ReadWrite; break; case CopyMode.CreateNew: - fs = new FileStream(Path, FileMode.CreateNew, FileAccess.ReadWrite); + fileMode = FileMode.CreateNew; + fileAccess = FileAccess.ReadWrite; break; default: throw new ApplicationException("Unsupported copy mode"); } - try - { - using var sw = new StreamWriter(fs); - await sw.WriteLineAsync((string)context.Input); - await sw.FlushAsync(); - await fs.FlushAsync(); + using var fs = new FileStream(Path, fileMode, fileAccess); + using var sw = new StreamWriter(fs); + await sw.WriteLineAsync((string)Content); + await sw.FlushAsync(); + await fs.FlushAsync(); - return Done(); - } - finally - { - if (fs != null) - await fs.DisposeAsync(); - } + return Done(); } } } diff --git a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileBuilderExtensions.cs b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileBuilderExtensions.cs index c97b2bf0a..6465197ad 100644 --- a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileBuilderExtensions.cs @@ -13,36 +13,41 @@ namespace Elsa.Activities.File { public static IActivityBuilder OutFile(this IBuilder builder, Action> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile); - public static IActivityBuilder OutFile(this IBuilder builder, Func path, Func mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + public static IActivityBuilder OutFile(this IBuilder builder, Func content, Func path, Func mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.OutFile(activity => activity + .Set(x => x.Content, content) .Set(x => x.Path, path) .Set(x => x.Mode, mode), lineNumber, sourceFile); - public static IActivityBuilder OutFile(this IBuilder builder, Func> path, Func> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + public static IActivityBuilder OutFile(this IBuilder builder, Func> content, Func> path, Func> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.OutFile(activity => activity + .Set(x => x.Content, content) .Set(x => x.Path, path) .Set(x => x.Mode, mode), lineNumber, sourceFile); - public static IActivityBuilder OutFile(this IBuilder builder, Func path, Func mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + public static IActivityBuilder OutFile(this IBuilder builder, Func content, Func path, Func mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.OutFile(activity => activity + .Set(x => x.Content, content) .Set(x => x.Path, path) .Set(x => x.Mode, mode), lineNumber, sourceFile); - public static IActivityBuilder OutFile(this IBuilder builder, Func> path, Func> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + public static IActivityBuilder OutFile(this IBuilder builder, Func> content, Func> path, Func> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.OutFile(activity => activity + .Set(x => x.Content, content) .Set(x => x.Path, path) .Set(x => x.Mode, mode), lineNumber, sourceFile); - public static IActivityBuilder OutFile(this IBuilder builder, string path, CopyMode mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + public static IActivityBuilder OutFile(this IBuilder builder, string content, string path, CopyMode mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.OutFile(activity => activity + .Set(x => x.Content, content) .Set(x => x.Path, path) .Set(x => x.Mode, mode), lineNumber, diff --git a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileExtensions.cs b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileExtensions.cs index 978959c65..3c74baca9 100644 --- a/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileExtensions.cs +++ b/src/activities/Elsa.Activities.File/Activities/OutFile/OutFileExtensions.cs @@ -10,6 +10,14 @@ namespace Elsa.Activities.File { public static class OutFileExtensions { + #region Content + public static ISetupActivity WithContent(this ISetupActivity setup, Func> content) => setup.Set(x => x.Content, content); + public static ISetupActivity WithContent(this ISetupActivity setup, Func content) => setup.Set(x => x.Content, content); + public static ISetupActivity WithContent(this ISetupActivity setup, Func> content) => setup.Set(x => x.Content, content); + public static ISetupActivity WithContent(this ISetupActivity setup, Func content) => setup.Set(x => x.Content, content); + public static ISetupActivity WithContent(this ISetupActivity setup, string content) => setup.Set(x => x.Content, content); + #endregion + #region 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); @@ -27,4 +35,4 @@ namespace Elsa.Activities.File #endregion } -} +} \ No newline at end of file