コード例 #1
0
        private static void ValidateInitialState(StateActivity state, ValidationErrorCollection validationErrors)
        {
            string initialStateName = StateMachineHelpers.GetInitialStateName(state);

            if (string.IsNullOrEmpty(initialStateName))
            {
                if (state.Activities.Count > 0)
                {
                    validationErrors.Add(new ValidationError(SR.GetString("Error_PropertyNotSet", new object[] { "InitialStateName" }), 0x116, false, "InitialStateName"));
                }
            }
            else
            {
                StateActivity activity = StateMachineHelpers.FindStateByName(state, initialStateName);
                if (activity == null)
                {
                    validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustPointToAState(), 0x5f5, false, "InitialStateName"));
                }
                else
                {
                    if (!StateMachineHelpers.IsLeafState(activity))
                    {
                        validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustPointToALeafNodeState(), 0x5f7, false, "InitialStateName"));
                    }
                    string completedStateName = StateMachineHelpers.GetCompletedStateName(state);
                    if (initialStateName == completedStateName)
                    {
                        validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustBeDifferentThanCompletedState(), 0x62c, false, "InitialStateName"));
                    }
                }
            }
        }
コード例 #2
0
        private static void ValidateInitialState(StateActivity state, ValidationErrorCollection validationErrors)
        {
            string initialStateName = StateMachineHelpers.GetInitialStateName(state);

            if (String.IsNullOrEmpty(initialStateName))
            {
                if (state.Activities.Count > 0)
                {
                    // we only require an initial state if the state machine is
                    // not empty
                    validationErrors.Add(new ValidationError(
                                             SR.GetString(SR.Error_PropertyNotSet, StateMachineWorkflowActivity.InitialStateNamePropertyName),
                                             ErrorNumbers.Error_PropertyNotSet, false,
                                             StateMachineWorkflowActivity.InitialStateNamePropertyName));
                }
            }
            else
            {
                StateActivity initialState = StateMachineHelpers.FindStateByName(
                    state,
                    initialStateName);
                if (initialState == null)
                {
                    validationErrors.Add(new ValidationError(
                                             SR.GetError_InitialStateMustPointToAState(),
                                             ErrorNumbers.Error_InitialStateMustPointToAState,
                                             false,
                                             StateMachineWorkflowActivity.InitialStateNamePropertyName));
                }
                else
                {
                    if (!StateMachineHelpers.IsLeafState(initialState))
                    {
                        validationErrors.Add(new ValidationError(
                                                 SR.GetError_InitialStateMustPointToALeafNodeState(),
                                                 ErrorNumbers.Error_InitialStateMustPointToALeafNodeState,
                                                 false,
                                                 StateMachineWorkflowActivity.InitialStateNamePropertyName));
                    }

                    // InitialState cannot be the completed state
                    string completedStateName = StateMachineHelpers.GetCompletedStateName(state);
                    if (initialStateName == completedStateName)
                    {
                        validationErrors.Add(new ValidationError(
                                                 SR.GetError_InitialStateMustBeDifferentThanCompletedState(),
                                                 ErrorNumbers.Error_InitialStateMustBeDifferentThanCompletedState,
                                                 false,
                                                 StateMachineWorkflowActivity.InitialStateNamePropertyName));
                    }
                }
            }
        }
コード例 #3
0
        private static void EnteringLeafState(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            StateActivity state = (StateActivity)context.Activity;

            Debug.Assert(StateMachineHelpers.IsLeafState(state));

            StateMachineExecutionState executionState = GetExecutionState(state);

            executionState.SubscriptionManager.SubscribeToSetStateEvent(context);

            string completedStateName = StateMachineHelpers.GetCompletedStateName(state);

            if (StateMachineHelpers.IsCompletedState(state))
            {
                // make sure that we track that we entered the completed state
                EnteringStateAction enteringState = new EnteringStateAction(state.QualifiedName);
                executionState.EnqueueAction(enteringState);
                executionState.ProcessActions(context);

                // this is the final state, so we start completing this tree
                executionState.Completed = true;
                LeavingState(context);
            }
            else
            {
                if (String.IsNullOrEmpty(executionState.NextStateName))
                {
                    executionState.SubscriptionManager.ReevaluateSubscriptions(context);
                    EnteringStateAction enteringState = new EnteringStateAction(state.QualifiedName);
                    executionState.EnqueueAction(enteringState);
                    executionState.LockQueue();
                }
                else
                {
                    // The StateInitialization requested a state transtion
                    EnteringStateAction enteringState = new EnteringStateAction(state.QualifiedName);
                    executionState.EnqueueAction(enteringState);
                    executionState.ProcessTransitionRequest(context);
                }
                executionState.ProcessActions(context);
            }
        }
コード例 #4
0
        private static void ValidateCompletedState(StateActivity state, ValidationErrorCollection validationErrors)
        {
            string completedStateName = StateMachineHelpers.GetCompletedStateName(state);

            if (!String.IsNullOrEmpty(completedStateName))
            {
                StateActivity completedState = StateMachineHelpers.FindStateByName(
                    state,
                    completedStateName);
                if (completedState == null)
                {
                    validationErrors.Add(new ValidationError(
                                             SR.GetError_CompletedStateMustPointToAState(),
                                             ErrorNumbers.Error_CompletedStateMustPointToAState,
                                             false,
                                             StateMachineWorkflowActivity.CompletedStateNamePropertyName));
                }
                else
                {
                    if (StateMachineHelpers.IsLeafState(completedState))
                    {
                        if (completedState.EnabledActivities.Count > 0)
                        {
                            validationErrors.Add(new ValidationError(
                                                     SR.GetString(SR.Error_CompletedStateCannotContainActivities),
                                                     ErrorNumbers.Error_CompletedStateCannotContainActivities,
                                                     false,
                                                     StateMachineWorkflowActivity.CompletedStateNamePropertyName));
                        }
                    }
                    else
                    {
                        validationErrors.Add(new ValidationError(
                                                 SR.GetError_CompletedStateMustPointToALeafNodeState(),
                                                 ErrorNumbers.Error_CompletedStateMustPointToALeafNodeState,
                                                 false,
                                                 StateMachineWorkflowActivity.CompletedStateNamePropertyName));
                    }
                }
            }
        }
コード例 #5
0
        private static void EnteringLeafState(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            StateActivity activity = (StateActivity)context.Activity;
            StateMachineExecutionState executionState = GetExecutionState(activity);

            executionState.SubscriptionManager.SubscribeToSetStateEvent(context);
            StateMachineHelpers.GetCompletedStateName(activity);
            if (StateMachineHelpers.IsCompletedState(activity))
            {
                EnteringStateAction action = new EnteringStateAction(activity.QualifiedName);
                executionState.EnqueueAction(action);
                executionState.ProcessActions(context);
                executionState.Completed = true;
                LeavingState(context);
            }
            else
            {
                if (string.IsNullOrEmpty(executionState.NextStateName))
                {
                    executionState.SubscriptionManager.ReevaluateSubscriptions(context);
                    EnteringStateAction action2 = new EnteringStateAction(activity.QualifiedName);
                    executionState.EnqueueAction(action2);
                    executionState.LockQueue();
                }
                else
                {
                    EnteringStateAction action3 = new EnteringStateAction(activity.QualifiedName);
                    executionState.EnqueueAction(action3);
                    executionState.ProcessTransitionRequest(context);
                }
                executionState.ProcessActions(context);
            }
        }
コード例 #6
0
        private static void ValidateCompletedState(StateActivity state, ValidationErrorCollection validationErrors)
        {
            string completedStateName = StateMachineHelpers.GetCompletedStateName(state);

            if (!string.IsNullOrEmpty(completedStateName))
            {
                StateActivity activity = StateMachineHelpers.FindStateByName(state, completedStateName);
                if (activity == null)
                {
                    validationErrors.Add(new ValidationError(SR.GetError_CompletedStateMustPointToAState(), 0x5f6, false, "CompletedStateName"));
                }
                else if (StateMachineHelpers.IsLeafState(activity))
                {
                    if (activity.EnabledActivities.Count > 0)
                    {
                        validationErrors.Add(new ValidationError(SR.GetString("Error_CompletedStateCannotContainActivities"), 0x5ff, false, "CompletedStateName"));
                    }
                }
                else
                {
                    validationErrors.Add(new ValidationError(SR.GetError_CompletedStateMustPointToALeafNodeState(), 0x5f8, false, "CompletedStateName"));
                }
            }
        }