public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }

            RemovedActivityAction removedAction = action as RemovedActivityAction;

            if (removedAction != null && removedAction.RemovedActivityIndex == 0)
            {
                return(new ValidationError(SR.GetString(SR.Error_EventActivityIsImmutable), ErrorNumbers.Error_DynamicActivity, false));
            }
            else
            {
                AddedActivityAction addedAction = action as AddedActivityAction;

                if (addedAction != null && addedAction.Index == 0)
                {
                    return(new ValidationError(SR.GetString(SR.Error_EventActivityIsImmutable), ErrorNumbers.Error_DynamicActivity, false));
                }
            }
            return(base.ValidateActivityChange(activity, action));
        }
        public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }
            if (((activity.ExecutionStatus != ActivityExecutionStatus.Initialized) && (activity.ExecutionStatus != ActivityExecutionStatus.Executing)) && (activity.ExecutionStatus != ActivityExecutionStatus.Closed))
            {
                return(new ValidationError(SR.GetString("Error_DynamicActivity2", new object[] { activity.QualifiedName, activity.ExecutionStatus, activity.GetType().FullName }), 0x50f));
            }
            RemovedActivityAction action2 = action as RemovedActivityAction;

            if (action2 != null)
            {
                StateActivity originalRemovedActivity = action2.OriginalRemovedActivity as StateActivity;
                if (originalRemovedActivity != null)
                {
                    return(new ValidationError(SR.GetError_CantRemoveState(originalRemovedActivity.QualifiedName), 0x61b));
                }
                if (activity.ExecutionStatus == ActivityExecutionStatus.Executing)
                {
                    EventDrivenActivity activity3 = action2.OriginalRemovedActivity as EventDrivenActivity;
                    if (activity3 != null)
                    {
                        return(new ValidationError(SR.GetError_CantRemoveEventDrivenFromExecutingState(activity3.QualifiedName, activity.QualifiedName), 0x620));
                    }
                }
            }
            return(null);
        }
        public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }

            if (activity.ExecutionStatus != ActivityExecutionStatus.Initialized &&
                activity.ExecutionStatus != ActivityExecutionStatus.Executing &&
                activity.ExecutionStatus != ActivityExecutionStatus.Closed)
            {
                return(new ValidationError(SR.GetString(SR.Error_DynamicActivity2, activity.QualifiedName, activity.ExecutionStatus, activity.GetType().FullName), ErrorNumbers.Error_DynamicActivity2));
            }

            RemovedActivityAction remove = action as RemovedActivityAction;

            if (remove != null)
            {
                StateActivity removedState = remove.OriginalRemovedActivity as StateActivity;
                if (removedState != null)
                {
                    // we don't have a way to check if the removed
                    // activity is executing or not, so if the user is trying to
                    // remove a StateActivity, we simply disallow it.
                    //

                    return(new ValidationError(
                               SR.GetError_CantRemoveState(removedState.QualifiedName),
                               ErrorNumbers.Error_CantRemoveState));
                }

                if (activity.ExecutionStatus == ActivityExecutionStatus.Executing)
                {
                    EventDrivenActivity removedEventDriven = remove.OriginalRemovedActivity as EventDrivenActivity;
                    if (removedEventDriven != null)
                    {
                        return(new ValidationError(
                                   SR.GetError_CantRemoveEventDrivenFromExecutingState(removedEventDriven.QualifiedName, activity.QualifiedName),
                                   ErrorNumbers.Error_CantRemoveEventDrivenFromExecutingState));
                    }
                }
            }
            return(null);
        }
예제 #4
0
        /// <summary>
        /// Serialise a <see cref="TrackingWorkflowChangedEventArgs" /> ready for persistence.
        /// </summary>
        /// <param name="eventArgs">
        /// The original <see cref="TrackingWorkflowChangedEventArgs" /> to serialise.
        /// </param>
        /// <returns>
        /// A <see cref="SerialisableTrackingWorkflowChangedEventArgs" /> containing a
        /// serialised copy of the <see cref="TrackingWorkflowChangedEventArgs" />.
        /// </returns>
        private static SerialisableTrackingWorkflowChangedEventArgs buildSerialisableTrackingWorkflowChangedEventArgs(TrackingWorkflowChangedEventArgs eventArgs)
        {
            SerialisableTrackingWorkflowChangedEventArgs serialisableEventArgs = new SerialisableTrackingWorkflowChangedEventArgs();

            byte [] serialisedData;
            bool    nonSerialisable;

            serialiseData(eventArgs, out serialisedData, out nonSerialisable);

            serialisableEventArgs.NonSerialisable  = nonSerialisable;
            serialisableEventArgs.SerialisedData   = serialisedData;
            serialisableEventArgs.StringData       = eventArgs.ToString();
            serialisableEventArgs.Type             = eventArgs.GetType();
            serialisableEventArgs.UnserialisedData = eventArgs;

            for (int i = 0; i < eventArgs.Changes.Count; i++)
            {
                AddedActivityAction addedActivityAction = eventArgs.Changes[i] as AddedActivityAction;
                if (addedActivityAction != null)
                {
                    List <SerialisableActivityAddedAction> addedActions =
                        buildSerialisableAddedActivityAction(addedActivityAction, i);

                    foreach (SerialisableActivityAddedAction addedAction in addedActions)
                    {
                        serialisableEventArgs.Changes.Add(addedAction);
                    }

                    continue;
                }

                RemovedActivityAction removedActivityAction = eventArgs.Changes[i] as RemovedActivityAction;
                if (removedActivityAction != null)
                {
                    List <SerialisableActivityRemovedAction> removedActions =
                        buildSerialisableRemovedActivityAction(removedActivityAction, i);

                    foreach (SerialisableActivityRemovedAction removedAction in removedActions)
                    {
                        serialisableEventArgs.Changes.Add(removedAction);
                    }

                    continue;
                }
            }

            return(serialisableEventArgs);
        }
        public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }
            RemovedActivityAction action2 = action as RemovedActivityAction;

            if ((action2 != null) && (action2.RemovedActivityIndex == 0))
            {
                return(new ValidationError(SR.GetString("Error_EventActivityIsImmutable"), 260, false));
            }
            AddedActivityAction action3 = action as AddedActivityAction;

            if ((action3 != null) && (action3.Index == 0))
            {
                return(new ValidationError(SR.GetString("Error_EventActivityIsImmutable"), 260, false));
            }
            return(base.ValidateActivityChange(activity, action));
        }
예제 #6
0
        private static List <SerialisableActivityRemovedAction> buildSerialisableRemovedActivityAction(RemovedActivityAction action, int order)
        {
            List <SerialisableActivityRemovedAction> removedActivities = new List <SerialisableActivityRemovedAction>();

            Queue <Activity> activityQueue = new Queue <Activity>();

            activityQueue.Enqueue(action.OriginalRemovedActivity);
            while (activityQueue.Count > 0)
            {
                // is this the first record?
                Activity currentActivity = activityQueue.Dequeue();
                if (currentActivity == action.OriginalRemovedActivity)
                {
                    removedActivities.Add(new SerialisableActivityRemovedAction(
                                              currentActivity.GetType(), currentActivity.QualifiedName,
                                              currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName,
                                              order, WorkflowInstanceHelper.GetXomlDocument(currentActivity)));
                }
                else
                {
                    removedActivities.Add(new SerialisableActivityRemovedAction(
                                              currentActivity.GetType(), currentActivity.QualifiedName,
                                              currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName,
                                              -1, WorkflowInstanceHelper.GetXomlDocument(currentActivity)));
                }

                CompositeActivity parentActivity = currentActivity as CompositeActivity;
                if (parentActivity != null)
                {
                    foreach (Activity childActivity in parentActivity.Activities)
                    {
                        activityQueue.Enqueue(childActivity);
                    }
                }
            }

            return(removedActivities);
        }