Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / ActivityExecutor.cs / 1305376 / ActivityExecutor.cs
using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Runtime.Serialization; using System.Security.Permissions; namespace System.Workflow.ComponentModel { #region ActivityExecutor internal abstract class ActivityExecutor { public abstract ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext); public abstract ActivityExecutionStatus Cancel(Activity activity, ActivityExecutionContext executionContext); public abstract ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception); public abstract ActivityExecutionStatus Compensate(Activity activity, ActivityExecutionContext executionContext); } internal class ActivityExecutor: ActivityExecutor where T : Activity { #region System.Workflow.ComponentModel.ActivityExecutor Methods public sealed override ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext) { return this.Execute((T)activity, executionContext); } public sealed override ActivityExecutionStatus Cancel(Activity activity, ActivityExecutionContext executionContext) { return this.Cancel((T)activity, executionContext); } public sealed override ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception) { return this.HandleFault((T)activity, executionContext, exception); } public sealed override ActivityExecutionStatus Compensate(Activity activity, ActivityExecutionContext executionContext) { return this.Compensate((T)activity, executionContext); } #endregion #region ActivityExecutor Members protected virtual ActivityExecutionStatus Execute(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.Execute(executionContext); } protected virtual ActivityExecutionStatus Cancel(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.Cancel(executionContext); } protected virtual ActivityExecutionStatus HandleFault(T activity, ActivityExecutionContext executionContext, Exception exception) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.HandleFault(executionContext, exception); } protected virtual ActivityExecutionStatus Compensate(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); System.Diagnostics.Debug.Assert(activity is ICompensatableActivity, "should not get Compensate, if activity is not compensatable"); return ((ICompensatableActivity)activity).Compensate(executionContext); } #endregion ActivityExecutor } #endregion #region CompositeActivityExecutor internal class CompositeActivityExecutor : ActivityExecutor , ISupportWorkflowChanges where T : CompositeActivity { //@@undone:mayankm Once all ActivityExecutor is removed this method should not be virtual. void ISupportWorkflowChanges.OnActivityAdded(ActivityExecutionContext executionContext, Activity addedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (addedActivity == null) throw new ArgumentNullException("addedActivity"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnActivityChangeAdd(executionContext, addedActivity); } void ISupportWorkflowChanges.OnActivityRemoved(ActivityExecutionContext executionContext, Activity removedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (removedActivity == null) throw new ArgumentNullException("removedActivity"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnActivityChangeRemove(executionContext, removedActivity); } void ISupportWorkflowChanges.OnWorkflowChangesCompleted(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnWorkflowChangesCompleted(executionContext); } // Refer Bug 9339 (VB Compilation Failure - Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.) //An unhandled exception of type 'System.TypeLoadException' occurred // "Signature of the body and declaration in a method implementation do not match" protected override ActivityExecutionStatus Execute(T activity, ActivityExecutionContext executionContext) { return base.Execute(activity, executionContext); } protected override ActivityExecutionStatus Cancel(T activity, ActivityExecutionContext executionContext) { return base.Cancel(activity, executionContext); } } #endregion #region ActivityExecutors Class internal static class ActivityExecutors { private static Hashtable typeToExecutorMapping = new Hashtable(); private static Hashtable executors = new Hashtable(); internal static ActivityExecutor[] GetActivityExecutors(Activity activity) { if (activity == null) throw new ArgumentNullException("activity"); Type activityType = activity.GetType(); ActivityExecutor[] activityExecutors = executors[activityType] as ActivityExecutor[]; if (activityExecutors != null) return activityExecutors; lock (executors.SyncRoot) { activityExecutors = executors[activityType] as ActivityExecutor[]; if (activityExecutors != null) return activityExecutors; object[] activityExecutorsObjects = null; try { //activityExecutorsObjects = ComponentDispenser.CreateComponents(activityType, typeof(ActivityExecutorAttribute)); activityExecutorsObjects = ComponentDispenser.CreateActivityExecutors(activity); } catch (Exception e) { throw new InvalidOperationException(SR.GetString(SR.ExecutorCreationFailedErrorMessage, activityType.FullName), e); } if (activityExecutorsObjects == null || activityExecutorsObjects.Length == 0) throw new InvalidOperationException(SR.GetString(SR.ExecutorCreationFailedErrorMessage, activityType.FullName)); activityExecutors = new ActivityExecutor[activityExecutorsObjects.Length]; for (int index = 0; index < activityExecutorsObjects.Length; index++) { if (!typeToExecutorMapping.Contains(activityExecutorsObjects[index].GetType())) { lock (typeToExecutorMapping.SyncRoot) { if (!typeToExecutorMapping.Contains(activityExecutorsObjects[index].GetType())) { System.Threading.Thread.MemoryBarrier(); typeToExecutorMapping[activityExecutorsObjects[index].GetType()] = activityExecutorsObjects[index]; } } } activityExecutors[index] = (ActivityExecutor)typeToExecutorMapping[activityExecutorsObjects[index].GetType()]; } System.Threading.Thread.MemoryBarrier(); executors[activityType] = activityExecutors; } return activityExecutors; } public static ActivityExecutor GetActivityExecutorFromType(Type executorType) { if (executorType == null) throw new ArgumentNullException("executorType"); if (!typeof(ActivityExecutor).IsAssignableFrom(executorType)) throw new ArgumentException( SR.GetString(SR.Error_NonActivityExecutor, executorType.FullName), "executorType"); ActivityExecutor activityExecutor = typeToExecutorMapping[executorType] as ActivityExecutor; if (activityExecutor != null) return activityExecutor; lock (typeToExecutorMapping.SyncRoot) { activityExecutor = typeToExecutorMapping[executorType] as ActivityExecutor; if (activityExecutor != null) return activityExecutor; System.Threading.Thread.MemoryBarrier(); typeToExecutorMapping[executorType] = Activator.CreateInstance(executorType); } return (ActivityExecutor)typeToExecutorMapping[executorType]; } public static ActivityExecutor GetActivityExecutor(Activity activity) { if (activity == null) throw new ArgumentNullException("activity"); return GetActivityExecutors(activity)[0]; } } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Runtime.Serialization; using System.Security.Permissions; namespace System.Workflow.ComponentModel { #region ActivityExecutor internal abstract class ActivityExecutor { public abstract ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext); public abstract ActivityExecutionStatus Cancel(Activity activity, ActivityExecutionContext executionContext); public abstract ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception); public abstract ActivityExecutionStatus Compensate(Activity activity, ActivityExecutionContext executionContext); } internal class ActivityExecutor : ActivityExecutor where T : Activity { #region System.Workflow.ComponentModel.ActivityExecutor Methods public sealed override ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext) { return this.Execute((T)activity, executionContext); } public sealed override ActivityExecutionStatus Cancel(Activity activity, ActivityExecutionContext executionContext) { return this.Cancel((T)activity, executionContext); } public sealed override ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception) { return this.HandleFault((T)activity, executionContext, exception); } public sealed override ActivityExecutionStatus Compensate(Activity activity, ActivityExecutionContext executionContext) { return this.Compensate((T)activity, executionContext); } #endregion #region ActivityExecutor Members protected virtual ActivityExecutionStatus Execute(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.Execute(executionContext); } protected virtual ActivityExecutionStatus Cancel(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.Cancel(executionContext); } protected virtual ActivityExecutionStatus HandleFault(T activity, ActivityExecutionContext executionContext, Exception exception) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return activity.HandleFault(executionContext, exception); } protected virtual ActivityExecutionStatus Compensate(T activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); System.Diagnostics.Debug.Assert(activity is ICompensatableActivity, "should not get Compensate, if activity is not compensatable"); return ((ICompensatableActivity)activity).Compensate(executionContext); } #endregion ActivityExecutor } #endregion #region CompositeActivityExecutor internal class CompositeActivityExecutor : ActivityExecutor , ISupportWorkflowChanges where T : CompositeActivity { //@@undone:mayankm Once all ActivityExecutor is removed this method should not be virtual. void ISupportWorkflowChanges.OnActivityAdded(ActivityExecutionContext executionContext, Activity addedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (addedActivity == null) throw new ArgumentNullException("addedActivity"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnActivityChangeAdd(executionContext, addedActivity); } void ISupportWorkflowChanges.OnActivityRemoved(ActivityExecutionContext executionContext, Activity removedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (removedActivity == null) throw new ArgumentNullException("removedActivity"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnActivityChangeRemove(executionContext, removedActivity); } void ISupportWorkflowChanges.OnWorkflowChangesCompleted(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); CompositeActivity compositeActivity = executionContext.Activity as CompositeActivity; if (compositeActivity == null) throw new ArgumentException(SR.Error_InvalidActivityExecutionContext, "executionContext"); compositeActivity.OnWorkflowChangesCompleted(executionContext); } // Refer Bug 9339 (VB Compilation Failure - Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.) //An unhandled exception of type 'System.TypeLoadException' occurred // "Signature of the body and declaration in a method implementation do not match" protected override ActivityExecutionStatus Execute(T activity, ActivityExecutionContext executionContext) { return base.Execute(activity, executionContext); } protected override ActivityExecutionStatus Cancel(T activity, ActivityExecutionContext executionContext) { return base.Cancel(activity, executionContext); } } #endregion #region ActivityExecutors Class internal static class ActivityExecutors { private static Hashtable typeToExecutorMapping = new Hashtable(); private static Hashtable executors = new Hashtable(); internal static ActivityExecutor[] GetActivityExecutors(Activity activity) { if (activity == null) throw new ArgumentNullException("activity"); Type activityType = activity.GetType(); ActivityExecutor[] activityExecutors = executors[activityType] as ActivityExecutor[]; if (activityExecutors != null) return activityExecutors; lock (executors.SyncRoot) { activityExecutors = executors[activityType] as ActivityExecutor[]; if (activityExecutors != null) return activityExecutors; object[] activityExecutorsObjects = null; try { //activityExecutorsObjects = ComponentDispenser.CreateComponents(activityType, typeof(ActivityExecutorAttribute)); activityExecutorsObjects = ComponentDispenser.CreateActivityExecutors(activity); } catch (Exception e) { throw new InvalidOperationException(SR.GetString(SR.ExecutorCreationFailedErrorMessage, activityType.FullName), e); } if (activityExecutorsObjects == null || activityExecutorsObjects.Length == 0) throw new InvalidOperationException(SR.GetString(SR.ExecutorCreationFailedErrorMessage, activityType.FullName)); activityExecutors = new ActivityExecutor[activityExecutorsObjects.Length]; for (int index = 0; index < activityExecutorsObjects.Length; index++) { if (!typeToExecutorMapping.Contains(activityExecutorsObjects[index].GetType())) { lock (typeToExecutorMapping.SyncRoot) { if (!typeToExecutorMapping.Contains(activityExecutorsObjects[index].GetType())) { System.Threading.Thread.MemoryBarrier(); typeToExecutorMapping[activityExecutorsObjects[index].GetType()] = activityExecutorsObjects[index]; } } } activityExecutors[index] = (ActivityExecutor)typeToExecutorMapping[activityExecutorsObjects[index].GetType()]; } System.Threading.Thread.MemoryBarrier(); executors[activityType] = activityExecutors; } return activityExecutors; } public static ActivityExecutor GetActivityExecutorFromType(Type executorType) { if (executorType == null) throw new ArgumentNullException("executorType"); if (!typeof(ActivityExecutor).IsAssignableFrom(executorType)) throw new ArgumentException( SR.GetString(SR.Error_NonActivityExecutor, executorType.FullName), "executorType"); ActivityExecutor activityExecutor = typeToExecutorMapping[executorType] as ActivityExecutor; if (activityExecutor != null) return activityExecutor; lock (typeToExecutorMapping.SyncRoot) { activityExecutor = typeToExecutorMapping[executorType] as ActivityExecutor; if (activityExecutor != null) return activityExecutor; System.Threading.Thread.MemoryBarrier(); typeToExecutorMapping[executorType] = Activator.CreateInstance(executorType); } return (ActivityExecutor)typeToExecutorMapping[executorType]; } public static ActivityExecutor GetActivityExecutor(Activity activity) { if (activity == null) throw new ArgumentNullException("activity"); return GetActivityExecutors(activity)[0]; } } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AttachedAnnotation.cs
- DoubleKeyFrameCollection.cs
- IntellisenseTextBox.designer.cs
- TemplateKeyConverter.cs
- WebCodeGenerator.cs
- CodeGeneratorOptions.cs
- UInt16Storage.cs
- RSAOAEPKeyExchangeFormatter.cs
- InvariantComparer.cs
- MarkupCompilePass1.cs
- ComplexType.cs
- BindingElementExtensionElement.cs
- TimeoutHelper.cs
- XsdDataContractImporter.cs
- DataColumnMappingCollection.cs
- ControlIdConverter.cs
- EntitySqlException.cs
- Documentation.cs
- SplitContainerDesigner.cs
- AxWrapperGen.cs
- ScriptComponentDescriptor.cs
- SystemIcmpV4Statistics.cs
- Char.cs
- UnaryExpression.cs
- SelectionWordBreaker.cs
- ButtonFieldBase.cs
- WebPartAuthorizationEventArgs.cs
- TypeSystemHelpers.cs
- CodeSnippetExpression.cs
- TrackingProfileDeserializationException.cs
- XmlSchemaSimpleContentExtension.cs
- Int16Converter.cs
- LineGeometry.cs
- GridViewCancelEditEventArgs.cs
- XmlNamedNodeMap.cs
- D3DImage.cs
- AnnotationAuthorChangedEventArgs.cs
- EntityViewGenerationAttribute.cs
- XmlSchema.cs
- SqlProviderServices.cs
- SoapCodeExporter.cs
- FileAuthorizationModule.cs
- Sequence.cs
- DesignerActionPanel.cs
- CopyAttributesAction.cs
- SerialReceived.cs
- ServiceHostingEnvironment.cs
- NullableFloatSumAggregationOperator.cs
- WindowsFont.cs
- FileAuthorizationModule.cs
- SqlXmlStorage.cs
- ToolBarButtonClickEvent.cs
- QuadraticBezierSegment.cs
- NodeFunctions.cs
- MessageDirection.cs
- SerializationStore.cs
- ScalarOps.cs
- DataGridParentRows.cs
- DescendantBaseQuery.cs
- DataServiceBuildProvider.cs
- QueryExpression.cs
- GeneralTransform2DTo3D.cs
- RegistryPermission.cs
- ButtonFieldBase.cs
- MsmqIntegrationInputMessage.cs
- input.cs
- LocalizableResourceBuilder.cs
- EntityClassGenerator.cs
- RepeaterCommandEventArgs.cs
- StylusOverProperty.cs
- KeyManager.cs
- ICspAsymmetricAlgorithm.cs
- WebUtility.cs
- TileBrush.cs
- DoubleAnimationClockResource.cs
- SafeEventHandle.cs
- SizeChangedInfo.cs
- FirstMatchCodeGroup.cs
- Rijndael.cs
- SystemException.cs
- ImageListUtils.cs
- RayMeshGeometry3DHitTestResult.cs
- MetadataSerializer.cs
- SelectionHighlightInfo.cs
- BrowserTree.cs
- EventSource.cs
- TypedDataSetSchemaImporterExtension.cs
- TranslateTransform3D.cs
- XmlEnumAttribute.cs
- UIElement.cs
- BStrWrapper.cs
- DialogWindow.cs
- HttpModuleAction.cs
- EncodingNLS.cs
- UnsafeNativeMethods.cs
- XPathNodeIterator.cs
- SetStateEventArgs.cs
- DataStreamFromComStream.cs
- SrgsNameValueTag.cs
- CasesDictionary.cs