elsa-core/src/core/Flowsharp.Abstractions/Handlers/ActivityHandlerBase.cs

30 lines
2.6 KiB
C#
Raw Normal View History

2018-10-16 10:30:36 +00:00
using System;
2018-11-03 09:21:44 +00:00
using System.Collections.Generic;
2018-10-16 10:30:36 +00:00
using System.Threading;
using System.Threading.Tasks;
using Flowsharp.Models;
using Flowsharp.Results;
2018-11-03 09:21:44 +00:00
using Microsoft.Extensions.Localization;
2018-10-16 10:30:36 +00:00
namespace Flowsharp.Handlers
{
2018-11-03 09:21:44 +00:00
public abstract class ActivityHandlerBase<T> : IActivityHandler where T : IActivity
2018-10-16 10:30:36 +00:00
{
public Type ActivityType => typeof(T);
2018-11-05 08:37:17 +00:00
public virtual LocalizedString DisplayText => new LocalizedString(ActivityType.Name, ActivityType.Name);
public virtual LocalizedString Description => new LocalizedString("", "");
2018-10-16 10:30:36 +00:00
public Task<bool> CanExecuteAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnCanExecuteAsync((T)activity, workflowContext, cancellationToken);
public Task<ActivityExecutionResult> ExecuteAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnExecuteAsync((T) activity, workflowContext, cancellationToken);
public Task<ActivityExecutionResult> ResumeAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnResumeAsync((T)activity, workflowContext, cancellationToken);
protected virtual Task<bool> OnCanExecuteAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnCanExecute(activity, workflowContext));
protected virtual Task<ActivityExecutionResult> OnExecuteAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnExecute(activity, workflowContext));
protected virtual Task<ActivityExecutionResult> OnResumeAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnResume(activity, workflowContext));
protected virtual bool OnCanExecute(T activity, WorkflowExecutionContext workflowContext) => true;
protected virtual ActivityExecutionResult OnExecute(T activity, WorkflowExecutionContext workflowContext) => Noop();
protected virtual ActivityExecutionResult OnResume(T activity, WorkflowExecutionContext workflowContext) => Noop();
protected NoopResult Noop() => new NoopResult();
2018-11-03 09:21:44 +00:00
protected IEnumerable<LocalizedString> Endpoints(params LocalizedString[] endpoints) => endpoints;
2018-11-05 08:37:17 +00:00
public virtual IEnumerable<LocalizedString> GetEndpoints() => Endpoints(GetEndpoint());
2018-11-03 09:21:44 +00:00
protected virtual LocalizedString GetEndpoint() => throw new NotImplementedException("At least GetEndpoints or GetEndpoint must be overridden.");
2018-10-16 10:30:36 +00:00
}
}