internal static IEnumerable GetPreceedingActivities(Activity startActivity, bool crossOverLoop)
        {
            Activity         activity          = null;
            Stack <Activity> iteratorVariable1 = new Stack <Activity>();

            iteratorVariable1.Push(startActivity);
            while ((activity = iteratorVariable1.Pop()) != null)
            {
                if ((activity is CompositeActivity) && Helpers.IsCustomActivity((CompositeActivity)activity))
                {
                    break;
                }
                if (activity.Parent != null)
                {
                    foreach (Activity iteratorVariable2 in activity.Parent.Activities)
                    {
                        if (((iteratorVariable2 == activity) && (((activity.Parent is ParallelActivity) && !Helpers.IsFrameworkActivity(activity)) || ((activity.Parent is StateActivity) && !Helpers.IsFrameworkActivity(activity)))) || (((activity.Parent is IfElseActivity) && !Helpers.IsFrameworkActivity(activity)) || ((activity.Parent is ListenActivity) && !Helpers.IsFrameworkActivity(activity))))
                        {
                            continue;
                        }
                        StateActivity parent = activity.Parent as StateActivity;
                        if (parent != null)
                        {
                            StateActivity state = StateMachineHelpers.FindEnclosingState(startActivity);
                            if (StateMachineHelpers.IsInitialState(state))
                            {
                                break;
                            }
                            yield return(parent);
                        }
                        if (iteratorVariable2 == activity)
                        {
                            break;
                        }
                        if (iteratorVariable2.Enabled)
                        {
                            if (((iteratorVariable2 is CompositeActivity) && !Helpers.IsCustomActivity((CompositeActivity)iteratorVariable2)) && (crossOverLoop || !IsLoopActivity(iteratorVariable2)))
                            {
                                IEnumerator enumerator = GetContainedActivities((CompositeActivity)iteratorVariable2).GetEnumerator();
                                while (enumerator.MoveNext())
                                {
                                    Activity current = (Activity)enumerator.Current;
                                    yield return(current);
                                }
                                continue;
                            }
                            yield return(iteratorVariable2);
                        }
                    }
                }
                if (!crossOverLoop && IsLoopActivity(activity.Parent))
                {
                    break;
                }
                iteratorVariable1.Push(activity.Parent);
            }
        }
Exemple #2
0
 protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
 {
     if (executionContext == null)
     {
         throw new ArgumentNullException("executionContext");
     }
     StateMachineExecutionState.Get(StateMachineHelpers.GetRootState(StateMachineHelpers.FindEnclosingState(executionContext.Activity))).NextStateName = this.TargetStateName;
     return(ActivityExecutionStatus.Closed);
 }
Exemple #3
0
        private void PopulateDropDownList(ListBox dropDownList, Activity activity)
        {
            StateActivity state = StateMachineHelpers.FindEnclosingState(activity);

            if (state != null)
            {
                StateActivity rootState = StateMachineHelpers.GetRootState(state);
                this.FindStates(dropDownList, rootState);
            }
        }
Exemple #4
0
        public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
        {
            ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj));

            SetStateActivity setState = obj as SetStateActivity;

            if (setState == null)
            {
                throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(StateActivity).FullName), "obj");
            }

            if (!SetStateContainment.Validate(setState, validationErrors))
            {
                return(validationErrors); // could not find a valid parent
            }
            if (String.IsNullOrEmpty(setState.TargetStateName))
            {
                validationErrors.Add(new ValidationError(
                                         SR.GetString(SR.Error_PropertyNotSet, SetStateActivity.TargetStateNamePropertyName),
                                         ErrorNumbers.Error_PropertyNotSet, false,
                                         SetStateActivity.TargetStateNamePropertyName));
            }
            else
            {
                StateActivity enclosingState = StateMachineHelpers.FindEnclosingState(setState);
                Debug.Assert(enclosingState != null); // this should be caught by the SetStateContainment.Validate call above

                StateActivity rootState = StateMachineHelpers.GetRootState(enclosingState);

                StateActivity targetActivity = StateMachineHelpers.FindStateByName(
                    rootState,
                    setState.TargetStateName);
                StateActivity targetState = targetActivity as StateActivity;
                if (targetState == null)
                {
                    validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToAState(), ErrorNumbers.Error_SetStateMustPointToAState, false, SetStateActivity.TargetStateNamePropertyName));
                }
                else
                {
                    if (!StateMachineHelpers.IsLeafState(targetState))
                    {
                        validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToALeafNodeState(), ErrorNumbers.Error_SetStateMustPointToALeafNodeState, false, SetStateActivity.TargetStateNamePropertyName));
                    }
                }
            }

            return(validationErrors);
        }
Exemple #5
0
        private void PopulateDropDownList(ListBox dropDownList, Activity activity)
        {
            Debug.Assert(dropDownList != null);
            Debug.Assert(activity != null);

            StateActivity enclosingState = StateMachineHelpers.FindEnclosingState(activity);

            if (enclosingState == null)
            {
                return;
            }

            StateActivity rootState = StateMachineHelpers.GetRootState(enclosingState);

            FindStates(dropDownList, rootState);
        }
Exemple #6
0
        public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
        {
            ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj));
            SetStateActivity          setState         = obj as SetStateActivity;

            if (setState == null)
            {
                throw new ArgumentException(SR.GetString("Error_UnexpectedArgumentType", new object[] { typeof(StateActivity).FullName }), "obj");
            }
            if (SetStateContainment.Validate(setState, validationErrors))
            {
                if (string.IsNullOrEmpty(setState.TargetStateName))
                {
                    validationErrors.Add(new ValidationError(SR.GetString("Error_PropertyNotSet", new object[] { "TargetStateName" }), 0x116, false, "TargetStateName"));
                    return(validationErrors);
                }
                StateActivity state = StateMachineHelpers.FindStateByName(StateMachineHelpers.GetRootState(StateMachineHelpers.FindEnclosingState(setState)), setState.TargetStateName);
                if (state == null)
                {
                    validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToAState(), 0x5f3, false, "TargetStateName"));
                    return(validationErrors);
                }
                if (!StateMachineHelpers.IsLeafState(state))
                {
                    validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToALeafNodeState(), 0x5f4, false, "TargetStateName"));
                }
            }
            return(validationErrors);
        }
        internal static IEnumerable GetPreceedingActivities(Activity startActivity, bool crossOverLoop)
        {
            Activity         currentActivity = null;
            Stack <Activity> activityStack   = new Stack <Activity>();

            activityStack.Push(startActivity);

            while ((currentActivity = activityStack.Pop()) != null)
            {
                if (currentActivity is CompositeActivity && Helpers.IsCustomActivity((CompositeActivity)currentActivity))
                {
                    break;
                }

                if (currentActivity.Parent != null)
                {
                    foreach (Activity siblingActivity in currentActivity.Parent.Activities)
                    {
                        //
                        if (siblingActivity == currentActivity && ((currentActivity.Parent is ParallelActivity && !Helpers.IsFrameworkActivity(currentActivity)) || (currentActivity.Parent is StateActivity && !Helpers.IsFrameworkActivity(currentActivity))))
                        {
                            continue;
                        }

                        //
                        if (currentActivity.Parent is IfElseActivity && !Helpers.IsFrameworkActivity(currentActivity))
                        {
                            continue;
                        }

                        //For Listen Case.
                        if (currentActivity.Parent is ListenActivity && !Helpers.IsFrameworkActivity(currentActivity))
                        {
                            continue;
                        }

                        // State Machine logic:
                        // If startActivity was in the InitialState, then
                        // there are no preceeding activities.
                        // Otherwise, we just return the parent state as
                        // the preceeding activity.
                        StateActivity currentState = currentActivity.Parent as StateActivity;
                        if (currentState != null)
                        {
                            StateActivity enclosingState = StateMachineHelpers.FindEnclosingState(startActivity);
                            //If we are at Initial State there is no preceeding above us.
                            if (StateMachineHelpers.IsInitialState(enclosingState))
                            {
                                yield break;
                            }
                            else
                            {
                                yield return(currentState);
                            }
                        }

                        if (siblingActivity == currentActivity)
                        {
                            break;
                        }

                        if (siblingActivity.Enabled)
                        {
                            if (siblingActivity is CompositeActivity && !Helpers.IsCustomActivity((CompositeActivity)siblingActivity) && (crossOverLoop || !IsLoopActivity(siblingActivity)))
                            {
                                foreach (Activity containedActivity in WebServiceActivityHelpers.GetContainedActivities((CompositeActivity)siblingActivity))
                                {
                                    yield return(containedActivity);
                                }
                            }
                            else
                            {
                                yield return(siblingActivity);
                            }
                        }
                    }
                }

                if (!crossOverLoop && IsLoopActivity(currentActivity.Parent))
                {
                    break;
                }
                else
                {
                    activityStack.Push(currentActivity.Parent);
                }
            }
            yield break;
        }