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); } }
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); }
private void PopulateDropDownList(ListBox dropDownList, Activity activity) { StateActivity state = StateMachineHelpers.FindEnclosingState(activity); if (state != null) { StateActivity rootState = StateMachineHelpers.GetRootState(state); this.FindStates(dropDownList, rootState); } }
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); }
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); }
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; }