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);
 }
Beispiel #3
0
        /// <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));
 }