public static ISagaStep FindStepForExecutionStateAndEvent( this ISagaActions actions, ISaga saga) { ISagaActions foundActions = actions. FindActionsByState(saga.ExecutionState.GetExecutionState()); Type eventType = saga.ExecutionState.CurrentEvent.GetType(); if (saga.IsIdle() && !eventType.Is <EmptyEvent>()) { return(FindStepForEventType(saga, eventType, foundActions)); } return(FindStepForCurrentState(saga, foundActions)); }
static ISagaStep FindStepForEventType( ISaga saga, Type eventType, ISagaActions actions) { ISagaAction action = actions. FindActionByEventType(eventType); if (action == null) { throw new SagaInvalidEventForStateException(saga.Data.ID, saga.ExecutionState.GetExecutionState(), eventType); } ISagaStep step = action. ChildSteps.GetFirstStep(); if (step == null) { throw new SagaStepNotRegisteredException(saga.Data.ID, saga.ExecutionState.GetExecutionState(), saga.ExecutionState.CurrentStep); } return(step); }
static ISagaStep FindStepForCurrentState( ISaga saga, ISagaActions actions) { ISagaAction action = actions. FindActionByStep(saga.ExecutionState.CurrentStep); if (action == null) { throw new SagaStepNotRegisteredException(saga.Data.ID, saga.ExecutionState.GetExecutionState(), saga.ExecutionState.CurrentStep); } ISagaStep step = action. GetStep(saga.ExecutionState.CurrentStep); if (step == null) { throw new SagaStepNotRegisteredException(saga.Data.ID, saga.ExecutionState.GetExecutionState(), saga.ExecutionState.CurrentStep); } return(step); }
public static ISagaActions FindActionsByState( this ISagaActions actions, string state) { return(new SagaActions( actions.Where(s => s.State == state))); }
public static ISagaAction FindActionByStateAndEventType( this ISagaActions actions, string state, Type eventType) { return(actions. FirstOrDefault(action => action.State == state && action.Event == eventType)); }
public static ISagaAction FindActionByEventType( this ISagaActions actions, Type eventType) { return(actions. FirstOrDefault(action => action.Event == eventType)); }
public static ISagaAction FindActionByStep( this ISagaActions actions, string step) { return(actions. FirstOrDefault(action => action.GetStep(step) != null)); }