Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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;
        }