internal void CompensateActivity(System.Workflow.ComponentModel.Activity activity)
 {
     if (this.currentActivity == null)
     {
         throw new ObjectDisposedException("ActivityExecutionContext");
     }
     if (activity == null)
     {
         throw new ArgumentNullException("activity");
     }
     if (!this.IsValidNestedChild(activity))
     {
         throw new ArgumentException(SR.GetString("AEC_InvalidNestedActivity"), "activity");
     }
     if (activity.ExecutionStatus != ActivityExecutionStatus.Closed)
     {
         throw new InvalidOperationException(SR.GetString("Error_InvalidCompensatingState"));
     }
     try
     {
         activity.SetStatus(ActivityExecutionStatus.Compensating, false);
     }
     finally
     {
         this.currentActivity.WorkflowCoreRuntime.ScheduleItem(new ActivityExecutorOperation(activity, ActivityOperationType.Compensate, this.ContextId), IsInAtomicTransaction(activity), false, false);
     }
 }
 internal void InitializeActivity(System.Workflow.ComponentModel.Activity activity)
 {
     if (this.currentActivity == null)
     {
         throw new ObjectDisposedException("ActivityExecutionContext");
     }
     if (activity == null)
     {
         throw new ArgumentNullException("activity");
     }
     if (!this.IsValidChild(activity, false))
     {
         throw new ArgumentException(SR.GetString("AEC_InvalidActivity"), "activity");
     }
     if (activity.ExecutionStatus != ActivityExecutionStatus.Initialized)
     {
         throw new InvalidOperationException(SR.GetString("Error_InvalidInitializingState"));
     }
     using (ActivityExecutionContext context = new ActivityExecutionContext(activity))
     {
         using (this.currentActivity.WorkflowCoreRuntime.SetCurrentActivity(activity))
         {
             activity.Initialize(context);
         }
     }
 }
 public void CancelActivity(System.Workflow.ComponentModel.Activity activity)
 {
     if (this.currentActivity == null)
     {
         throw new ObjectDisposedException("ActivityExecutionContext");
     }
     if (activity == null)
     {
         throw new ArgumentNullException("activity");
     }
     if (!this.allowSignalsOnCurrentActivity && ((this.currentActivity.WorkflowCoreRuntime.CurrentActivity.ExecutionStatus == ActivityExecutionStatus.Initialized) || (this.currentActivity.WorkflowCoreRuntime.CurrentActivity.ExecutionStatus == ActivityExecutionStatus.Closed)))
     {
         throw new InvalidOperationException(SR.GetString("Error_InvalidStateToExecuteChild"));
     }
     if (!this.IsValidChild(activity, false))
     {
         throw new ArgumentException(SR.GetString("AEC_InvalidActivity"), "activity");
     }
     if (activity.ExecutionStatus != ActivityExecutionStatus.Executing)
     {
         throw new InvalidOperationException(SR.GetString("Error_InvalidCancelingState"));
     }
     try
     {
         activity.SetStatus(ActivityExecutionStatus.Canceling, false);
     }
     finally
     {
         this.currentActivity.WorkflowCoreRuntime.ScheduleItem(new ActivityExecutorOperation(activity, ActivityOperationType.Cancel, this.ContextId), IsInAtomicTransaction(activity), false, false);
     }
 }
 void IDisposable.Dispose()
 {
     if (this.currentActivity != null)
     {
         if (this.contextManager != null)
         {
             this.contextManager.Dispose();
             this.contextManager = null;
         }
         this.currentActivity = null;
     }
 }
 internal static bool IsInAtomicTransaction(System.Workflow.ComponentModel.Activity activity)
 {
     while (activity != null)
     {
         if (activity == activity.WorkflowCoreRuntime.CurrentAtomicActivity)
         {
             return(true);
         }
         activity = activity.Parent;
     }
     return(false);
 }
 internal bool IsValidChild(System.Workflow.ComponentModel.Activity activity, bool allowContextVariance)
 {
     if (this.currentActivity == null)
     {
         throw new ObjectDisposedException("ActivityExecutionContext");
     }
     if (((activity != this.currentActivity.WorkflowCoreRuntime.CurrentActivity) || !this.allowSignalsOnCurrentActivity) && ((!activity.Enabled || (activity.Parent != this.currentActivity.WorkflowCoreRuntime.CurrentActivity)) || (!allowContextVariance && !activity.Equals(this.Activity.GetActivityByName(activity.QualifiedName, true)))))
     {
         return(false);
     }
     return(true);
 }
예제 #7
0
 public void Execute(System.Workflow.ComponentModel.Activity definition, NativeActivityContext context)
 {
     Debug.Assert(!disposed, "Cannot access disposed object");
     try
     {
         this.executor.Initialize(definition, this.Activity.GetInputArgumentValues(context), this.Activity.HasNameCollision);
         ProcessExecutionStatus(this.executor.Execute());
     }
     catch (Exception e)
     {
         this.uncaughtException = e;
         throw;
     }
 }
 internal bool IsValidNestedChild(System.Workflow.ComponentModel.Activity activity)
 {
     if (this.currentActivity == null)
     {
         throw new ObjectDisposedException("ActivityExecutionContext");
     }
     if (activity == this.currentActivity)
     {
         return(true);
     }
     System.Workflow.ComponentModel.Activity parent = activity;
     while (((parent != null) && parent.Enabled) && (parent.Parent != this.currentActivity.ContextActivity))
     {
         parent = parent.Parent;
     }
     return((parent != null) && parent.Enabled);
 }
예제 #9
0
 public void TrackActivityStatusChange(System.Workflow.ComponentModel.Activity activity, int eventCounter)
 {
     this.nativeActivityContext.Track(
         new InteropTrackingRecord(this.Activity.DisplayName,
                                   new ActivityTrackingRecord(
                                       activity.GetType(),
                                       activity.QualifiedName,
                                       activity.ContextGuid,
                                       activity.Parent == null ? Guid.Empty : activity.Parent.ContextGuid,
                                       activity.ExecutionStatus,
                                       DateTime.UtcNow,
                                       eventCounter,
                                       null
                                       )
                                   )
         );
 }
예제 #10
0
 public void TrackData(System.Workflow.ComponentModel.Activity activity, int eventCounter, string key, object data)
 {
     this.nativeActivityContext.Track(
         new InteropTrackingRecord(this.Activity.DisplayName,
                                   new UserTrackingRecord(
                                       activity.GetType(),
                                       activity.QualifiedName,
                                       activity.ContextGuid,
                                       activity.Parent == null ? Guid.Empty : activity.Parent.ContextGuid,
                                       DateTime.UtcNow,
                                       eventCounter,
                                       key,
                                       data
                                       )
                                   )
         );
 }
        private bool AcquireLocks(System.Workflow.ComponentModel.Activity activity)
        {
            ICollection <string> allSynchronizationHandles = this.GetAllSynchronizationHandles(activity);

            if ((allSynchronizationHandles != null) && (allSynchronizationHandles.Count != 0))
            {
                for (System.Workflow.ComponentModel.Activity activity2 = activity.Parent; activity2 != null; activity2 = activity2.Parent)
                {
                    if (activity2.SupportsSynchronization || (activity2.Parent == null))
                    {
                        Dictionary <string, GrantedLock> dictionary = (Dictionary <string, GrantedLock>)activity2.GetValue(GrantedLocksProperty);
                        if (dictionary == null)
                        {
                            dictionary = new Dictionary <string, GrantedLock>();
                            activity2.SetValue(GrantedLocksProperty, dictionary);
                        }
                        foreach (string str in allSynchronizationHandles)
                        {
                            bool flag = true;
                            if (!dictionary.ContainsKey(str))
                            {
                                dictionary[str] = new GrantedLock(activity);
                            }
                            else if (dictionary[str].Holder != activity)
                            {
                                dictionary[str].WaitList.Add(activity);
                                flag = false;
                            }
                            if (!flag)
                            {
                                return(false);
                            }
                        }
                    }
                    ICollection <string> is3 = (ICollection <string>)activity2.GetValue(System.Workflow.ComponentModel.Activity.SynchronizationHandlesProperty);
                    if ((is3 != null) && (is3.Count != 0))
                    {
                        break;
                    }
                }
            }
            return(true);
        }
        private ICollection <string> GetAllSynchronizationHandles(System.Workflow.ComponentModel.Activity activity)
        {
            WalkerEventHandler   handler = null;
            ICollection <string> is2     = (ICollection <string>)activity.GetValue(System.Workflow.ComponentModel.Activity.SynchronizationHandlesProperty);

            if ((is2 == null) || (is2.Count == 0))
            {
                return(is2);
            }
            List <string> handles = new List <string>(is2);

            if (activity is CompositeActivity)
            {
                Walker walker = new Walker();
                if (handler == null)
                {
                    handler = delegate(Walker w, WalkerEventArgs e) {
                        if (e.CurrentActivity != activity)
                        {
                            ICollection <string> collection = (ICollection <string>)e.CurrentActivity.GetValue(System.Workflow.ComponentModel.Activity.SynchronizationHandlesProperty);
                            if (collection != null)
                            {
                                handles.AddRange(collection);
                            }
                        }
                    };
                }
                walker.FoundActivity += handler;
                walker.Walk(activity);
            }
            handles.Sort();
            for (int i = 1; i < handles.Count; i++)
            {
                if (handles[i] == handles[i - 1])
                {
                    handles.RemoveAt(--i);
                }
            }
            handles.TrimExcess();
            return(handles);
        }
예제 #13
0
 /// <summary>
 /// The Initialize method will set the image used for CreateSubSiteActivity class.
 /// </summary>
 /// <param name="activity"></param>
 protected override void Initialize(System.Workflow.ComponentModel.Activity activity)
 {
     base.Initialize(activity);
     this.Image = Resources.NewWebsite;
 }
 internal ActivityExecutionContext(System.Workflow.ComponentModel.Activity activity)
 {
     this.currentActivity = activity;
 }
 internal ActivityExecutionContext(System.Workflow.ComponentModel.Activity activity, bool allowSignalsOnCurrentActivity) : this(activity)
 {
     this.allowSignalsOnCurrentActivity = allowSignalsOnCurrentActivity;
 }
        internal void ReleaseLocks(bool transactional)
        {
            if (this.currentActivity == null)
            {
                throw new ObjectDisposedException("ActivityExecutionContext");
            }
            this.Activity.RemoveProperty(LockAcquiredCallbackProperty);
            ICollection <string> allSynchronizationHandles = this.GetAllSynchronizationHandles(this.Activity);

            if ((allSynchronizationHandles != null) && (allSynchronizationHandles.Count != 0))
            {
                List <System.Workflow.ComponentModel.Activity> list = new List <System.Workflow.ComponentModel.Activity>();
                for (System.Workflow.ComponentModel.Activity activity = this.Activity.Parent; activity != null; activity = activity.Parent)
                {
                    if (activity.SupportsSynchronization || (activity.Parent == null))
                    {
                        Dictionary <string, GrantedLock> dictionary = (Dictionary <string, GrantedLock>)activity.GetValue(GrantedLocksProperty);
                        if (transactional)
                        {
                            Dictionary <string, GrantedLock> dictionary2 = new Dictionary <string, GrantedLock>();
                            if (dictionary != null)
                            {
                                foreach (KeyValuePair <string, GrantedLock> pair in dictionary)
                                {
                                    dictionary2.Add(pair.Key, (GrantedLock)pair.Value.Clone());
                                }
                            }
                            activity.SetValue(CachedGrantedLocksProperty, dictionary2);
                        }
                        if (dictionary != null)
                        {
                            foreach (string str in allSynchronizationHandles)
                            {
                                if (dictionary.ContainsKey(str))
                                {
                                    if (dictionary[str].WaitList.Count == 0)
                                    {
                                        dictionary.Remove(str);
                                    }
                                    else if (dictionary[str].Holder != this.Activity)
                                    {
                                        dictionary[str].WaitList.Remove(this.Activity);
                                    }
                                    else
                                    {
                                        System.Workflow.ComponentModel.Activity item = dictionary[str].WaitList[0];
                                        dictionary[str].WaitList.RemoveAt(0);
                                        dictionary[str].Holder = item;
                                        if (!list.Contains(item))
                                        {
                                            list.Add(item);
                                        }
                                    }
                                }
                            }
                            if (dictionary.Count == 0)
                            {
                                activity.RemoveProperty(GrantedLocksProperty);
                            }
                        }
                    }
                    ICollection <string> is3 = (ICollection <string>)activity.GetValue(System.Workflow.ComponentModel.Activity.SynchronizationHandlesProperty);
                    if ((is3 != null) && (is3.Count != 0))
                    {
                        break;
                    }
                }
                foreach (System.Workflow.ComponentModel.Activity activity3 in list)
                {
                    if (this.AcquireLocks(activity3))
                    {
                        ((ActivityExecutorDelegateInfo <EventArgs>)activity3.GetValue(LockAcquiredCallbackProperty)).InvokeDelegate(this.Activity.ContextActivity, EventArgs.Empty, false, transactional);
                    }
                }
            }
        }
 internal ActivityExecutionStatusChangedEventArgs(ActivityExecutionStatus executionStatus, ActivityExecutionResult executionResult, System.Workflow.ComponentModel.Activity activity)
 {
     this.status = executionStatus;
     this.activityExecutionResult = executionResult;
     this.activityQualifiedName   = activity.QualifiedName;
     this.stateId = activity.ContextActivity.ContextId;
 }
예제 #18
0
 /// <summary>
 /// The Initialize method will set the image used for CreateSubSiteActivity class.
 /// </summary>
 /// <param name="activity"></param>
 protected override void Initialize(System.Workflow.ComponentModel.Activity activity)
 {
     base.Initialize(activity);
     this.Image = Resources.SychronizeList;
 }
 /// <summary>
 /// The Initialize method will set the image used for ResolveSiteTemplateActivity class.
 /// </summary>
 /// <param name="activity"></param>
 protected override void Initialize(System.Workflow.ComponentModel.Activity activity)
 {
     base.Initialize(activity);
     this.Image = Resources.SearchInFolder;
 }