using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Console.Activities;
using Elsa.Handlers;
using Elsa.Models;
using Elsa.Results;
using Microsoft.Extensions.Localization;
namespace Elsa.Activities.Console.Handlers
{
///
/// Writes a text string to the specified stream.
///
public class WriteLineHandler : ActivityHandler
{
private readonly IWorkflowExpressionEvaluator evaluator;
private readonly TextWriter output;
public WriteLineHandler(IStringLocalizer localizer, IWorkflowExpressionEvaluator evaluator)
: this(localizer, evaluator, System.Console.Out)
{
}
public WriteLineHandler(IStringLocalizer localizer, IWorkflowExpressionEvaluator evaluator, TextWriter output)
{
T = localizer;
this.evaluator = evaluator;
this.output = output;
}
private IStringLocalizer T { get; }
protected override LocalizedString GetEndpoint() => T["Done"];
public override LocalizedString Category => T["Console"];
public override LocalizedString DisplayText => T["Write Line"];
public override LocalizedString Description => T["Write a line to the console"];
protected override async Task OnExecuteAsync(WriteLine activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken)
{
var text = await evaluator.EvaluateAsync(activity.TextExpression, workflowContext, cancellationToken);
await output.WriteLineAsync(text);
return TriggerEndpoint("Done");
}
}
}