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:43:11 +00:00
|
|
|
public string ActivityName => typeof(T).Name;
|
|
|
|
|
public virtual LocalizedString DisplayText => new LocalizedString(ActivityName, ActivityName);
|
2018-11-05 08:37:17 +00:00
|
|
|
public virtual LocalizedString Description => new LocalizedString("", "");
|
2018-11-18 21:43:11 +00:00
|
|
|
public Task<bool> CanExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnCanExecuteAsync((ActivityExecutionContext<T>) activityContext, workflowContext, cancellationToken);
|
|
|
|
|
public Task<ActivityExecutionResult> ExecuteAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnExecuteAsync((ActivityExecutionContext<T>) activityContext, workflowContext, cancellationToken);
|
|
|
|
|
public Task<ActivityExecutionResult> ResumeAsync(ActivityExecutionContext activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnResumeAsync((ActivityExecutionContext<T>) activityContext, workflowContext, cancellationToken);
|
|
|
|
|
protected virtual Task<bool> OnCanExecuteAsync(ActivityExecutionContext<T> 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-11-18 21:43:11 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext<T> activityContext, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) => OnExecuteAsync(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-11-18 21:43:11 +00:00
|
|
|
protected virtual Task<ActivityExecutionResult> OnResumeAsync(ActivityExecutionContext<T> 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-11-18 21:43:11 +00:00
|
|
|
protected virtual bool OnCanExecute(ActivityExecutionContext<T> activityContext, WorkflowExecutionContext workflowContext) => OnCanExecute(activityContext.Activity, workflowContext);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual bool OnCanExecute(T activity, WorkflowExecutionContext workflowContext) => true;
|
2018-11-18 21:43:11 +00:00
|
|
|
protected virtual ActivityExecutionResult OnExecute(ActivityExecutionContext<T> activityContext, WorkflowExecutionContext workflowContext) => OnExecute(activityContext.Activity, workflowContext);
|
2018-10-16 10:30:36 +00:00
|
|
|
protected virtual ActivityExecutionResult OnExecute(T activity, WorkflowExecutionContext workflowContext) => Noop();
|
2018-11-18 21:43:11 +00:00
|
|
|
protected virtual ActivityExecutionResult OnResume(ActivityExecutionContext<T> activityContext, WorkflowExecutionContext workflowContext) => OnResume(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
|
|
|
}
|
|
|
|
|
}
|