public void MakeTransition(CMMNTransitions transition, bool isEvtPropagate = true) { var evt = new CaseTransitionRaisedEvent(Guid.NewGuid().ToString(), AggregateId, Version + 1, transition, DateTime.UtcNow); Handle(evt); DomainEvents.Add(evt); if (isEvtPropagate) { PropagateTransition(StageContent, transition); } }
private void Handle(CaseTransitionRaisedEvent evt) { switch (evt.Transition) { case CMMNTransitions.Create: if (State != null) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is already initialized") }); } State = CaseStates.Active; break; case CMMNTransitions.Complete: if (State != CaseStates.Active) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not active") }); } State = CaseStates.Completed; break; case CMMNTransitions.Terminate: if (State != CaseStates.Active) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not active") }); } State = CaseStates.Terminated; break; case CMMNTransitions.Fault: if (State != CaseStates.Active) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not active") }); } State = CaseStates.Failed; break; case CMMNTransitions.Suspend: if (State != CaseStates.Active) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not active") }); } State = CaseStates.Suspended; break; case CMMNTransitions.Resume: if (State != CaseStates.Suspended) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not suspended") }); } State = CaseStates.Active; break; case CMMNTransitions.Close: if (State != CaseStates.Completed && State != CaseStates.Terminated && State != CaseStates.Failed && State != CaseStates.Suspended) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not completed / terminated / failed / suspended") }); } State = CaseStates.Closed; break; case CMMNTransitions.Reactivate: if (State != CaseStates.Completed && State != CaseStates.Terminated && State != CaseStates.Failed && State != CaseStates.Suspended) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("transition", "case instance is not completed / terminated / failed / suspended") }); } State = CaseStates.Active; break; } UpdateDateTime = evt.UpdateDateTime; Version = evt.Version; }