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
|
|
|
{
|
2018-11-18 21:46:42 +00:00
|
|
|
public Type ActivityType => typeof(T);
|
2018-12-30 17:20:12 +00:00
|
|
|
public virtual bool IsTrigger => false;
|
2018-12-24 11:31:18 +00:00
|
|
|
public abstract LocalizedString Category { get; }
|
2018-11-18 21:46:42 +00:00
|
|
|
public virtual LocalizedString DisplayText => new LocalizedString(ActivityType.Name, ActivityType.Name);
|
2018-11-05 08:37:17 +00:00
|
|
|
public virtual LocalizedString Description => new LocalizedString("", "");
|
2018-12-30 17:20:12 +00:00
|
|
|
public Task<bool> CanExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnCanExecuteAsync(activityContext, workflowContext, cancellationToken);
|
|
|
|
|
public Task<ActivityExecutionResult> ExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnExecuteAsync(activityContext, workflowContext, cancellationToken);
|
|
|
|
|
public Task<ActivityExecutionResult> ResumeAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnResumeAsync(activityContext, workflowContext, cancellationToken);
|
|
|
|
|
protected virtual Task<bool> OnCanExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnCanExecuteAsync((T)activityContext.Activity, workflowContext, cancellationToken);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual Task<bool> OnCanExecuteAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnCanExecute(activity, workflowContext));
|
2018-12-30 17:20:12 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnExecuteAsync((T)activityContext.Activity, workflowContext, cancellationToken);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnExecuteAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnExecute(activity, workflowContext));
|
2018-12-30 17:20:12 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnResumeAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnResume(activityContext, workflowContext));
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnResumeAsync(T activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => Task.FromResult(OnResume(activity, workflowContext));
|
2018-12-30 17:20:12 +00:00
|
|
|
protected virtual bool OnCanExecute(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext) => OnCanExecute((T)activityContext.Activity, workflowContext);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual bool OnCanExecute(T activity, WorkflowExecutionContext workflowContext) => true;
|
2018-12-30 17:20:12 +00:00
|
|
|
protected virtual ActivityExecutionResult OnExecute(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext) => OnExecute((T)activityContext.Activity, workflowContext);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual ActivityExecutionResult OnExecute(T activity, WorkflowExecutionContext workflowContext) => Noop();
|
2018-12-30 17:20:12 +00:00
|
|
|
protected virtual ActivityExecutionResult OnResume(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext) => OnResume((T)activityContext.Activity, workflowContext);
|
2018-10-16 10:30:36 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
|
}
|