public static List <IStateTransitionAction> GetMatchingTransitionActions(this IStateMachineContext context, StateTransitionPhase transitionPhase) { var actions = new List <IStateTransitionAction>(); if (context == null || context.StateMachine == null) { return(actions); } if (context.StateMachine.StateTransitionActions != null) { foreach (IStateTransitionAction action in context.StateMachine.StateTransitionActions) { if (action.Matches(context, transitionPhase)) { actions.Add(action); } } } if (context.CurrentState != null && context.CurrentState.StateTransitionActions != null) { foreach (IStateTransitionAction action in context.CurrentState.StateTransitionActions) { if (action.Matches(context, transitionPhase)) { actions.Add(action); } } } return(actions); }
public static bool Matches(this StateTransitionPhase left, StateTransitionPhase right) { if (left == StateTransitionPhase.All || right == StateTransitionPhase.All) { return(true); } return(left == right); }
/// <summary> /// Adds the new transition action. /// </summary> /// <param name="actionTaskName">Name of the action task.</param> /// <param name="targetPhase">The target phase.</param> /// <param name="actionArgs">The action args.</param> /// <returns></returns> public virtual IStateTransitionAction AddNewTransitionAction(string actionTaskName, StateTransitionPhase targetPhase, params object[] actionArgs) { var action = new StateTransitionAction(this, actionTaskName, targetPhase, actionArgs); StateTransitionActionList.Add(action); return(action); }
protected void AddAction(string taskName, object[] args, StateTransitionPhase phase) { EnsureName(); if (CurrentState != null) { CurrentState.AddNewTransitionAction(taskName, phase, args); } else { StateMachine.AddNewTransitionAction(taskName, phase, args); } }
protected void ExecuteAction(IStateMachineAction action, IStateTransition transition, StateTransitionPhase phase) { var context = new StateMachineActionContext { WorkflowContext = this, Action = action, CurrentTransition = transition, CurrentPhase = phase }; action.Execute(context); }
public StateTransitionAction(IStateMachine stateMachine, string actionName, StateTransitionPhase targetPhase, params object[] actionArgs) : base(stateMachine, actionName, actionArgs) { TargetPhase = targetPhase; }
public virtual bool Matches(IStateMachineContext context, StateTransitionPhase phase) { return(TargetPhase.Matches(phase)); }