public TransitionResult Transition(string name) { WorkflowTransition t = FindTransitionByName(name); if (t == null) { throw new ArgumentException("WorkflowGraph.Transition: no transition with name " + name); } return(Transition(t)); }
public TransitionResult Transition(WorkflowTransition t) { if (ActiveState != t.From) { if (LogF != null) { LogF("[WorfklowGraph.Transition] cannot from {0} to {1} along {2} because in state {3}!", t.From.Name, t.To.Name, t.Name, ActiveState.Name); } return(TransitionResult.Failed_InvalidPrecondition); } foreach (var p in t.Preconditions) { bool r = p(); if (r == false) { if (LogF != null) { LogF("[WorfklowGraph.Transition] precondition failed on transition {0} from {1} to {2}!", t.Name, ActiveState.Name, t.To.Name); } return(TransitionResult.Failed_InvalidPrecondition); } } foreach (Action b in t.BeforeTransition) { b(); } var prevState = ActiveState; ActiveState.OnDeactivated(); ActiveState = t.To; ActiveState.OnActivated(); foreach (Action a in t.AfterTransition) { a(); } if (LogF != null) { LogF("[WorfklowGraph.Transition] transitioned from {0} to {1} along {2}!", t.From.Name, t.To.Name, t.Name); } OnStateTransition?.Invoke(prevState, ActiveState); return(TransitionResult.Ok); }
public TransitionResult TransitionToState(WorkflowState newState) { WorkflowTransition t = FindTransition(ActiveState, newState); if (t == null) { if (LogF != null) { LogF("[WorfklowGraph.TransitionToState] ANONYMOUS transition from {0} to {1} does not exist!", ActiveState.Name, newState.Name); } return(TransitionResult.Failed_NoTransition); } return(Transition(t)); }
public WorkflowTransition AddTransition(WorkflowState from, WorkflowState to, string name) { if (FindTransitionByName(name) != null) { throw new InvalidOperationException("WorkflowGraph.AddTransition: transition " + name + " from " + from.Name + " to " + to.Name + " already exists!"); } WorkflowTransition t = new WorkflowTransition() { From = from, To = to, Name = name }; Transitions[name] = t; return(t); }
public bool CanTransition(WorkflowTransition t) { if (ActiveState != t.From) { return(false); } foreach (var p in t.Preconditions) { bool r = p(); if (r == false) { return(false); } } return(true); }
public void AddTransition(WorkflowState fromState, WorkflowState toState, string identifier, Func <bool> precondition, Action beforeF, Action afterF) { WorkflowTransition transition = Graph.AddTransition(fromState, toState, identifier); if (precondition != null) { transition.Preconditions.Add(precondition); } if (beforeF != null) { transition.BeforeTransition.Add(beforeF); } if (afterF != null) { transition.AfterTransition.Add(afterF); } }
public bool CanTransition(string transitionName) { WorkflowTransition t = FindTransitionByName(transitionName); return((t == null) ? false : CanTransition(t)); }