Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Filters / ActivityExecutionFilter.cs / 1305376 / ActivityExecutionFilter.cs
namespace System.Workflow.ComponentModel { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; internal abstract class ActivityExecutionFilter : ActivityExecutor, ISupportWorkflowChanges { #region ISupportWorkflowChanges Members public virtual void OnActivityAdded(ActivityExecutionContext executionContext, Activity addedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (addedActivity == null) throw new ArgumentNullException("addedActivity"); NextDynamicChangeExecutorInChain(executionContext.Activity).OnActivityAdded(executionContext, addedActivity); } public virtual void OnActivityRemoved(ActivityExecutionContext executionContext, Activity removedActivity) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (removedActivity == null) throw new ArgumentNullException("removedActivity"); NextDynamicChangeExecutorInChain(executionContext.Activity).OnActivityRemoved(executionContext, removedActivity); } public virtual void OnWorkflowChangesCompleted(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); NextDynamicChangeExecutorInChain(executionContext.Activity).OnWorkflowChangesCompleted(executionContext); } #endregion ISupportWorkflowChanges #region Execute, Cancel, Compensate and HandleFault public override ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return NextActivityExecutorInChain(executionContext.Activity).Execute(activity, executionContext); } public override ActivityExecutionStatus Cancel(Activity activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); // If primary activity is Closed, then return, these filters might have acquired locks // on to the primary activity, and in that case even if the activity has closed itself // it might get Cancel signal. So we don't want activity to get Cancel signal, when it // already has declared itself Closed. ActivityExecutor nextActivityExecutor = NextActivityExecutorInChain(executionContext.Activity); if (!(nextActivityExecutor is ActivityExecutionFilter) && executionContext.Activity.HasPrimaryClosed) return ActivityExecutionStatus.Closed; return nextActivityExecutor.Cancel(activity, executionContext); } public override ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (exception == null) throw new ArgumentNullException("exception"); // If primary activity is Closed, then return, these filters might have acquired locks // on to the primary activity, and in that case even if the activity has closed itself // it might get HandleFault signal. So we don't want activity to get HandleFault signal, when it // already has declared itself Closed. ActivityExecutor nextActivityExecutor = NextActivityExecutorInChain(executionContext.Activity); if (!(nextActivityExecutor is ActivityExecutionFilter) && executionContext.Activity.HasPrimaryClosed) return ActivityExecutionStatus.Closed; return nextActivityExecutor.HandleFault(activity, executionContext, exception); } public override ActivityExecutionStatus Compensate(Activity activity, ActivityExecutionContext executionContext) { if (activity == null) throw new ArgumentNullException("activity"); if (executionContext == null) throw new ArgumentNullException("executionContext"); return NextActivityExecutorInChain(executionContext.Activity).Compensate(activity, executionContext); } #endregion #region Helper Methods protected ActivityExecutor NextActivityExecutorInChain(Activity activity) { if (activity == null) throw new ArgumentNullException("activity"); ActivityExecutor nextActivityExecutor = null; IList activityExecutors = ActivityExecutors.GetActivityExecutors(activity); int thisIndex = activityExecutors.IndexOf(this); if (thisIndex < activityExecutors.Count - 1) nextActivityExecutor = (ActivityExecutor)activityExecutors[thisIndex + 1]; return nextActivityExecutor; } protected ISupportWorkflowChanges NextDynamicChangeExecutorInChain(Activity activity) { return NextActivityExecutorInChain(activity) as ISupportWorkflowChanges; } #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
- HMACSHA512.cs
- SoapEnvelopeProcessingElement.cs
- DataExpression.cs
- DesigntimeLicenseContext.cs
- OracleInfoMessageEventArgs.cs
- KeyGestureConverter.cs
- BufferAllocator.cs
- CodeGeneratorOptions.cs
- InkCanvasInnerCanvas.cs
- QuotedStringWriteStateInfo.cs
- TagNameToTypeMapper.cs
- TcpServerChannel.cs
- StylusDownEventArgs.cs
- SchemaNamespaceManager.cs
- AssemblyName.cs
- TrustManagerPromptUI.cs
- IdnMapping.cs
- Array.cs
- EventLogPermissionEntryCollection.cs
- StylusEventArgs.cs
- BaseParaClient.cs
- SqlTypeConverter.cs
- DataPagerCommandEventArgs.cs
- TextStore.cs
- QueryExpr.cs
- SecurityContext.cs
- Timer.cs
- TimestampInformation.cs
- RadioButtonFlatAdapter.cs
- RunWorkerCompletedEventArgs.cs
- DbConnectionFactory.cs
- ResourceDefaultValueAttribute.cs
- DrawToolTipEventArgs.cs
- RightsManagementEncryptedStream.cs
- UIElementParaClient.cs
- TableLayoutSettingsTypeConverter.cs
- SafeCryptoHandles.cs
- NullEntityWrapper.cs
- DashStyle.cs
- Selection.cs
- HostSecurityManager.cs
- MobileCapabilities.cs
- WmlMobileTextWriter.cs
- VirtualizingPanel.cs
- QueryOutputWriter.cs
- webeventbuffer.cs
- DropTarget.cs
- CellNormalizer.cs
- TailPinnedEventArgs.cs
- Matrix.cs
- StreamWithDictionary.cs
- TableAutomationPeer.cs
- ISO2022Encoding.cs
- KeyFrames.cs
- StringDictionaryWithComparer.cs
- OrderedDictionaryStateHelper.cs
- ToolBarButton.cs
- ComponentCollection.cs
- CodeDirectiveCollection.cs
- EndpointAddressElementBase.cs
- ApplicationGesture.cs
- GridViewColumn.cs
- DataPager.cs
- Validator.cs
- DataRowChangeEvent.cs
- TextModifier.cs
- InputMethodStateChangeEventArgs.cs
- WebDescriptionAttribute.cs
- DataSpaceManager.cs
- MailHeaderInfo.cs
- PageContent.cs
- DiffuseMaterial.cs
- OleDbWrapper.cs
- ListBoxChrome.cs
- AssemblyUtil.cs
- BuiltInExpr.cs
- CorrelationService.cs
- BindingList.cs
- RegexBoyerMoore.cs
- ContainsRowNumberChecker.cs
- LinkConverter.cs
- EventWaitHandle.cs
- SamlEvidence.cs
- BitmapEffectInputConnector.cs
- WindowsListView.cs
- AutomationPropertyInfo.cs
- SqlWebEventProvider.cs
- CodeDelegateInvokeExpression.cs
- CodeChecksumPragma.cs
- DataSourceControlBuilder.cs
- WebSysDefaultValueAttribute.cs
- BackStopAuthenticationModule.cs
- ContentPathSegment.cs
- PersonalizableTypeEntry.cs
- WindowsStatic.cs
- ErrorItem.cs
- SafeEventLogWriteHandle.cs
- CachingHintValidation.cs
- ToolStripKeyboardHandlingService.cs
- ObjectSecurity.cs