Added content property and reworked FileStream usage
This commit is contained in:
parent
0ec6e10d01
commit
ddf4be6e8f
|
|
@ -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<IActivityExecutionResult> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,36 +13,41 @@ namespace Elsa.Activities.File
|
|||
{
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Action<ISetupActivity<OutFile>> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile);
|
||||
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, string> path, Func<ActivityExecutionContext, CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, string> content, Func<ActivityExecutionContext, string> path, Func<ActivityExecutionContext, 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,
|
||||
sourceFile);
|
||||
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, ValueTask<string>> path, Func<ActivityExecutionContext, ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, ValueTask<string>> content, Func<ActivityExecutionContext, ValueTask<string>> path, Func<ActivityExecutionContext, ValueTask<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,
|
||||
sourceFile);
|
||||
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<string> path, Func<CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<string> content, Func<string> path, Func<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,
|
||||
sourceFile);
|
||||
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ValueTask<string>> path, Func<ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
public static IActivityBuilder OutFile(this IBuilder builder, Func<ValueTask<string>> content, Func<ValueTask<string>> path, Func<ValueTask<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,
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@ namespace Elsa.Activities.File
|
|||
{
|
||||
public static class OutFileExtensions
|
||||
{
|
||||
#region Content
|
||||
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, ValueTask<string>> content) => setup.Set(x => x.Content, content);
|
||||
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, string> content) => setup.Set(x => x.Content, content);
|
||||
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ValueTask<string>> content) => setup.Set(x => x.Content, content);
|
||||
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<string> content) => setup.Set(x => x.Content, content);
|
||||
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, string content) => setup.Set(x => x.Content, content);
|
||||
#endregion
|
||||
|
||||
#region Path
|
||||
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, ValueTask<string>> path) => setup.Set(x => x.Path, path);
|
||||
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, string> path) => setup.Set(x => x.Path, path);
|
||||
|
|
@ -27,4 +35,4 @@ namespace Elsa.Activities.File
|
|||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue