diff --git a/src/core/Elsa.Abstractions/ActivityResults/OutcomeResult.cs b/src/core/Elsa.Abstractions/ActivityResults/OutcomeResult.cs index b35510acd..191963a77 100644 --- a/src/core/Elsa.Abstractions/ActivityResults/OutcomeResult.cs +++ b/src/core/Elsa.Abstractions/ActivityResults/OutcomeResult.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Elsa.Models; -using Elsa.Services; using Elsa.Services.Models; namespace Elsa.ActivityResults diff --git a/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs b/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs index a8b07cf44..2e1ea2c2d 100644 --- a/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs +++ b/src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs @@ -1,6 +1,3 @@ -using System; -using Elsa.Services.Models; - namespace Elsa.Builders { public interface IConnectionBuilder diff --git a/src/core/Elsa.Abstractions/Extensions/WorkflowExecutionContextExtensions.cs b/src/core/Elsa.Abstractions/Extensions/WorkflowExecutionContextExtensions.cs index ee773dff7..37c22f8d4 100644 --- a/src/core/Elsa.Abstractions/Extensions/WorkflowExecutionContextExtensions.cs +++ b/src/core/Elsa.Abstractions/Extensions/WorkflowExecutionContextExtensions.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; using System.Linq; -using Elsa.Models; -using Elsa.Services; using Elsa.Services.Models; namespace Elsa diff --git a/src/core/Elsa.Abstractions/Extensions/WorkflowExtensions.cs b/src/core/Elsa.Abstractions/Extensions/WorkflowExtensions.cs index 8abd71078..fb920b8b7 100644 --- a/src/core/Elsa.Abstractions/Extensions/WorkflowExtensions.cs +++ b/src/core/Elsa.Abstractions/Extensions/WorkflowExtensions.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using Elsa.Models; -using Elsa.Services; using Elsa.Services.Models; namespace Elsa diff --git a/src/core/Elsa.Abstractions/Messaging/Domain/ActivityNotification.cs b/src/core/Elsa.Abstractions/Messaging/Domain/ActivityNotification.cs index ed7f78462..642826044 100644 --- a/src/core/Elsa.Abstractions/Messaging/Domain/ActivityNotification.cs +++ b/src/core/Elsa.Abstractions/Messaging/Domain/ActivityNotification.cs @@ -1,6 +1,4 @@ -using Elsa.Models; -using Elsa.Services; -using Elsa.Services.Models; +using Elsa.Services.Models; using MediatR; namespace Elsa.Messaging.Domain diff --git a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs index 83021f0fc..9765c58f4 100644 --- a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs +++ b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs @@ -4,7 +4,6 @@ using System.Reflection; using System.Threading; using System.Threading.Tasks; using Elsa.Attributes; -using Elsa.Models; using Elsa.Services.Models; namespace Elsa.Services diff --git a/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs b/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs index 2d817f3e8..ae55d457d 100644 --- a/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs +++ b/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs @@ -1,7 +1,6 @@ using System; using System.Threading; using System.Threading.Tasks; -using Newtonsoft.Json.Linq; namespace Elsa.Services.Models { @@ -30,8 +29,7 @@ namespace Elsa.Services.Models public string Type { get; set; } = default!; public bool PersistWorkflow { get; set; } - - //public JObject Data { get; set; } = new JObject(); + public Func> CreateActivityAsync { get; set; } = default!; } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs index 45a30e104..1b6b7f543 100644 --- a/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs @@ -1,11 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Reflection; using System.Threading; using System.Threading.Tasks; -using Elsa.Attributes; -using Elsa.Models; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Services.Models diff --git a/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs b/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs index 341775603..436a61bb4 100644 --- a/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs +++ b/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs @@ -1,7 +1,6 @@ using System; using System.Threading; using System.Threading.Tasks; -using Newtonsoft.Json.Linq; namespace Elsa.Services.Models { diff --git a/src/core/Elsa.Abstractions/Services/Models/IWorkflowFault.cs b/src/core/Elsa.Abstractions/Services/Models/IWorkflowFault.cs index efba0b72d..691c662ae 100644 --- a/src/core/Elsa.Abstractions/Services/Models/IWorkflowFault.cs +++ b/src/core/Elsa.Abstractions/Services/Models/IWorkflowFault.cs @@ -1,5 +1,4 @@ -using Elsa.Models; -using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Localization; namespace Elsa.Services.Models { diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs index cf3e6126b..135eea7d6 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs @@ -6,7 +6,6 @@ using Elsa.Expressions; using Elsa.Models; using Microsoft.Extensions.Localization; using Newtonsoft.Json.Linq; -using NodaTime; namespace Elsa.Services.Models { @@ -17,54 +16,26 @@ namespace Elsa.Services.Models IServiceProvider serviceProvider, IWorkflowBlueprint workflowBlueprint, WorkflowInstance workflowInstance - //IWorkflow workflow, - //WorkflowStatus status, - //Variables variables, - //string correlationId, - //IWorkflowFault? workflowFault, - //ICollection scheduledActivities, - //ICollection blockingActivities, - //IEnumerable? executionLog = default ) { ServiceProvider = serviceProvider; WorkflowBlueprint = workflowBlueprint; - //WorkflowDefinition = workflowDefinition; WorkflowInstance = workflowInstance; - //Workflow = workflow; - //CorrelationId = correlationId; ExpressionEvaluator = expressionEvaluator; - ScheduledActivities = new Stack(workflowInstance.ScheduledActivities.Reverse()); - //BlockingActivities = new HashSet(blockingActivities); - //Variables = variables; - //Status = status; - //PersistenceBehavior = workflow.PersistenceBehavior; - //ActivityPropertyProviders = workflow.ActivityPropertyProviders; - //WorkflowFault = workflowFault; ExecutionLog = new List(workflowInstance.ExecutionLog); IsFirstPass = true; } - private ScheduledActivity CreateScheduledActivity(ScheduledActivity scheduledActivityModel) => - new ScheduledActivity(scheduledActivityModel.ActivityId, scheduledActivityModel.Input); - public IWorkflowBlueprint WorkflowBlueprint { get; } - public IServiceProvider ServiceProvider { get; } - - // public WorkflowDefinition WorkflowDefinition { get; } public WorkflowInstance WorkflowInstance { get; } - public WorkflowStatus Status { get; set; } - public Stack ScheduledActivities { get; } public HashSet BlockingActivities { get; } = new HashSet(new BlockingActivityEqualityComparer()); - - public Variables Variables { get; } - public bool HasScheduledActivities => ScheduledActivities.Any(); - public ScheduledActivity? ScheduledActivity { get; private set; } + + public bool HasScheduledActivities => WorkflowInstance.ScheduledActivities.Any(); public IWorkflowFault? WorkflowFault { get; private set; } - public object? Output { get; set; } + public bool IsFirstPass { get; private set; } public void ScheduleActivities(IEnumerable activityIds, object? input = default) { @@ -78,72 +49,35 @@ namespace Elsa.Services.Models ScheduleActivity(activity); } - public void ScheduleActivity(string activityId, object? input = default) => - ScheduleActivity(new ScheduledActivity(activityId, input)); - - public void ScheduleActivity(ScheduledActivity activity) => ScheduledActivities.Push(activity); - public ScheduledActivity PopScheduledActivity() => ScheduledActivity = ScheduledActivities.Pop(); - public ScheduledActivity PeekScheduledActivity() => ScheduledActivities.Peek(); + public void ScheduleActivity(string activityId, object? input = default) => ScheduleActivity(new ScheduledActivity(activityId, input)); + public void ScheduleActivity(ScheduledActivity activity) => WorkflowInstance.ScheduledActivities.Push(activity); + public ScheduledActivity PopScheduledActivity() => WorkflowInstance.ScheduledActivities.Pop(); + public ScheduledActivity PeekScheduledActivity() => WorkflowInstance.ScheduledActivities.Peek(); public IExpressionEvaluator ExpressionEvaluator { get; } public string? CorrelationId { get; set; } public bool DeleteCompletedInstances { get; set; } public ICollection ExecutionLog { get; } - public bool IsFirstPass { get; private set; } + public WorkflowStatus Status => WorkflowInstance.Status; - public bool AddBlockingActivity(IActivity activity) => - BlockingActivities.Add(new BlockingActivity(activity.Id, activity.Type)); - - public void SetVariable(string name, object? value) => Variables.Set(name, JToken.FromObject(value!)); + public void SetVariable(string name, object? value) => WorkflowInstance.Variables.Set(name, JToken.FromObject(value!)); public T GetVariable(string name) => (T)GetVariable(name)!; - public object? GetVariable(string name) => Variables.Get(name); + public object? GetVariable(string name) => WorkflowInstance.Variables.Get(name); public void CompletePass() => IsFirstPass = false; - - public void Suspend() => Status = WorkflowStatus.Suspended; + public void Begin() => WorkflowInstance.Status = WorkflowStatus.Running; + public void Resume() => WorkflowInstance.Status = WorkflowStatus.Running; + public void Suspend() => WorkflowInstance.Status = WorkflowStatus.Suspended; public void Fault(string? activityId, LocalizedString? message) { - Status = WorkflowStatus.Faulted; + WorkflowInstance.Status = WorkflowStatus.Faulted; WorkflowFault = new WorkflowFault(activityId, message); } - public void Complete() => Status = WorkflowStatus.Completed; + public void Complete() => WorkflowInstance.Status = WorkflowStatus.Completed; - public IActivityBlueprint? GetActivity(string id) => + public IActivityBlueprint? GetActivityBlueprint(string id) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Id == id); - public WorkflowInstance UpdateWorkflowInstance() - { - var workflowInstance = WorkflowInstance; - workflowInstance.Variables = Variables; - - workflowInstance.ScheduledActivities = new Stack( - ScheduledActivities.Select(x => new Elsa.Models.ScheduledActivity(x.ActivityId, x.Input))); - - //workflowInstance.Activities = - // WorkflowBlueprint.Activities.Select(x => new ActivityInstance(x.Id, x.Type, x.Output, Serialize(x))).ToList(); - - workflowInstance.BlockingActivities = BlockingActivities; - workflowInstance.Status = Status; - workflowInstance.CorrelationId = CorrelationId; - workflowInstance.Output = Output; - - var executionLog = workflowInstance.ExecutionLog.Concat( - ExecutionLog.Select(x => new Elsa.Models.ExecutionLogEntry(x.ActivityId, x.Timestamp))); - - workflowInstance.ExecutionLog = executionLog.ToList(); - - if (WorkflowFault != null) - { - workflowInstance.Fault = new Elsa.Models.WorkflowFault - { - FaultedActivityId = WorkflowFault.FaultedActivityId, - Message = WorkflowFault.Message - }; - } - - return workflowInstance; - } - private JObject Serialize(IActivity activity) => JObject.FromObject(activity); } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowFault.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowFault.cs index 2471eb449..0ac6ad151 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowFault.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowFault.cs @@ -1,5 +1,4 @@ -using Elsa.Models; -using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Localization; namespace Elsa.Services.Models { diff --git a/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEach.cs b/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEach.cs index 6c0f49a86..dbca7b878 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEach.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/ForEach/ForEach.cs @@ -2,8 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using System.Threading; -using System.Threading.Tasks; using Elsa.ActivityResults; using Elsa.Attributes; using Elsa.Services; diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Switch/Switch.cs b/src/core/Elsa.Core/Activities/ControlFlow/Switch/Switch.cs index daa3f4618..a450bf164 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Switch/Switch.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Switch/Switch.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; using Elsa.ActivityResults; using Elsa.Attributes; using Elsa.Services; diff --git a/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariable.cs b/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariable.cs index e96e94b05..19b37fd43 100644 --- a/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariable.cs +++ b/src/core/Elsa.Core/Activities/Primitives/SetVariable/SetVariable.cs @@ -1,5 +1,3 @@ -using System.Threading; -using System.Threading.Tasks; using Elsa.ActivityResults; using Elsa.Attributes; using Elsa.Services; diff --git a/src/core/Elsa.Core/Builders/ConnectionBuilder.cs b/src/core/Elsa.Core/Builders/ConnectionBuilder.cs index dc9f4d060..ea1fdeed8 100644 --- a/src/core/Elsa.Core/Builders/ConnectionBuilder.cs +++ b/src/core/Elsa.Core/Builders/ConnectionBuilder.cs @@ -1,6 +1,3 @@ -using System; -using Elsa.Services.Models; - namespace Elsa.Builders { public class ConnectionBuilder : IConnectionBuilder diff --git a/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs b/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs index d41536210..9518c3681 100644 --- a/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs +++ b/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs @@ -5,7 +5,6 @@ using System.Threading.Tasks; using Elsa.Models; using Elsa.Services; using Elsa.Services.Models; -using Newtonsoft.Json.Linq; namespace Elsa.Data.Services { diff --git a/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs b/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs index 695020d0f..7fc84e552 100644 --- a/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs +++ b/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs @@ -68,7 +68,7 @@ namespace Elsa.Messaging.Domain.Handlers WorkflowExecutionContext workflowExecutionContext, CancellationToken cancellationToken) { - var workflowInstance = workflowExecutionContext.UpdateWorkflowInstance(); + var workflowInstance = workflowExecutionContext.WorkflowInstance; await _workflowInstanceManager.SaveAsync(workflowInstance, cancellationToken); } } diff --git a/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs b/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs index 8312ceaa6..73b474ef1 100644 --- a/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs +++ b/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs @@ -1,7 +1,6 @@ using System.Threading; using System.Threading.Tasks; using Elsa.Models; -using Elsa.Services.Models; using MediatR; using NodaTime; diff --git a/src/core/Elsa.Core/Services/WorkflowHost.cs b/src/core/Elsa.Core/Services/WorkflowHost.cs index 2097eadeb..861bb5690 100644 --- a/src/core/Elsa.Core/Services/WorkflowHost.cs +++ b/src/core/Elsa.Core/Services/WorkflowHost.cs @@ -141,7 +141,7 @@ namespace Elsa.Services if (statusEvent != null) await _mediator.Publish(statusEvent, cancellationToken); - return workflowExecutionContext.UpdateWorkflowInstance(); + return workflowExecutionContext.WorkflowInstance; } private async Task BeginWorkflow( @@ -156,7 +156,7 @@ namespace Elsa.Services if (!await CanExecuteAsync(workflowExecutionContext, activity, input, cancellationToken)) return; - workflowExecutionContext.Status = WorkflowStatus.Running; + workflowExecutionContext.Begin(); workflowExecutionContext.ScheduleActivity(activity.Id, input); await RunAsync(workflowExecutionContext, Execute, cancellationToken); } @@ -178,7 +178,7 @@ namespace Elsa.Services return; workflowExecutionContext.BlockingActivities.RemoveWhere(x => x.ActivityId == activityBlueprint.Id); - workflowExecutionContext.Status = WorkflowStatus.Running; + workflowExecutionContext.Resume(); workflowExecutionContext.ScheduleActivity(activityBlueprint.Id, input); await RunAsync(workflowExecutionContext, Resume, cancellationToken); } diff --git a/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs b/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs index e14637f10..828992341 100644 --- a/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs +++ b/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs @@ -38,13 +38,13 @@ namespace Elsa.Scripting.Liquid.Handlers context.MemberAccessStrategy.Register( "Variables", - x => new LiquidPropertyAccessor(name => ToFluidValue(x.WorkflowExecutionContext.Variables, name))); + x => new LiquidPropertyAccessor(name => ToFluidValue(x.WorkflowExecutionContext.WorkflowInstance.Variables, name))); context.MemberAccessStrategy.Register>( "Activities", x => new LiquidObjectAccessor(name => GetActivityAsync(x, name))); - context.MemberAccessStrategy.Register, object>(GetActivityOutput); + context.MemberAccessStrategy.Register, object?>(GetActivityOutput); context.MemberAccessStrategy.Register, object>( (x, name) => x.GetValueAsync(name)); @@ -52,7 +52,7 @@ namespace Elsa.Scripting.Liquid.Handlers context.MemberAccessStrategy.Register( (x, name) => ((IDictionary)x)[name]); - context.MemberAccessStrategy.Register((source, name) => source[name]); + context.MemberAccessStrategy.Register((source, name) => source[name]); return Task.CompletedTask; } diff --git a/src/scripting/Elsa.Scripting.Liquid/Helpers/LiquidPropertyAccessor.cs b/src/scripting/Elsa.Scripting.Liquid/Helpers/LiquidPropertyAccessor.cs index 0c0baf3de..f150d7ba1 100644 --- a/src/scripting/Elsa.Scripting.Liquid/Helpers/LiquidPropertyAccessor.cs +++ b/src/scripting/Elsa.Scripting.Liquid/Helpers/LiquidPropertyAccessor.cs @@ -12,7 +12,7 @@ namespace Elsa.Scripting.Liquid.Helpers /// public class LiquidPropertyAccessor : LiquidObjectAccessor { - public LiquidPropertyAccessor(Func> getter) : base(getter) + public LiquidPropertyAccessor(Func> getter) : base(getter!) { } } diff --git a/src/server/Elsa.Server.GraphQL/Mapping/MappingProfile.cs b/src/server/Elsa.Server.GraphQL/Mapping/MappingProfile.cs index 8dd10018f..85d62765e 100644 --- a/src/server/Elsa.Server.GraphQL/Mapping/MappingProfile.cs +++ b/src/server/Elsa.Server.GraphQL/Mapping/MappingProfile.cs @@ -1,7 +1,6 @@ using AutoMapper; using Elsa.Models; using Elsa.Server.GraphQL.Models; -using Elsa.Server.GraphQL.Types; namespace Elsa.Server.GraphQL.Mapping {