1 #pragma warning disable 1634, 1691
2 using System;
3 using System.Globalization;
4 using System.Collections;
5 using System.Collections.Generic;
6 using System.Collections.Specialized;
7 using System.Collections.ObjectModel;
8 using System.ComponentModel.Design.Serialization;
9 using System.Diagnostics;
10 using System.IO;
11 using System.Reflection;
12 using System.Text;
13 using System.Threading;
14 using System.Xml;
15 using System.Transactions;
16 using SES = System.EnterpriseServices;
17 using System.Workflow.ComponentModel;
18 using System.Workflow.Runtime.Hosting;
19 
20 namespace System.Workflow.Runtime
21 {
22     #region ContextActivityUtils Class
23 
24     internal static class ContextActivityUtils
25     {
ContextId(Activity activity)26         internal static int ContextId(Activity activity)
27         {
28             return ((ActivityExecutionContextInfo)ContextActivity(activity).GetValue(Activity.ActivityExecutionContextInfoProperty)).ContextId;
29         }
30 
ContextActivity(Activity activity)31         internal static Activity ContextActivity(Activity activity)
32         {
33             Activity contextActivity = activity;
34             while (contextActivity != null && contextActivity.GetValue(Activity.ActivityExecutionContextInfoProperty) == null)
35                 contextActivity = contextActivity.Parent;
36             return contextActivity;
37         }
ParentContextActivity(Activity activity)38         internal static Activity ParentContextActivity(Activity activity)
39         {
40             Activity contextActivity = ContextActivity(activity);
41             ActivityExecutionContextInfo executionContextInfo = (ActivityExecutionContextInfo)contextActivity.GetValue(Activity.ActivityExecutionContextInfoProperty);
42             if (executionContextInfo.ParentContextId == -1)
43                 return null;
44 
45             return RetrieveWorkflowExecutor(activity).GetContextActivityForId(executionContextInfo.ParentContextId);
46         }
RetrieveWorkflowExecutor(Activity activity)47         internal static IWorkflowCoreRuntime RetrieveWorkflowExecutor(Activity activity)
48         {
49             // fetch workflow executor
50             IWorkflowCoreRuntime workflowExecutor = null;
51             Activity rootActivity = activity;
52             while (rootActivity != null && rootActivity.Parent != null)
53                 rootActivity = rootActivity.Parent;
54             if (rootActivity != null)
55                 workflowExecutor = (IWorkflowCoreRuntime)rootActivity.GetValue(WorkflowExecutor.WorkflowExecutorProperty);
56 
57             return workflowExecutor;
58         }
RootContextActivity(Activity activity)59         internal static Activity RootContextActivity(Activity activity)
60         {
61             return RetrieveWorkflowExecutor(activity).RootActivity;
62         }
63     }
64     #endregion
65 }
66