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
- GeneralTransformCollection.cs
- SiteOfOriginContainer.cs
- documentsequencetextpointer.cs
- XmlChoiceIdentifierAttribute.cs
- HelpEvent.cs
- XmlDataFileEditor.cs
- PreDigestedSignedInfo.cs
- HiddenFieldPageStatePersister.cs
- NonBatchDirectoryCompiler.cs
- ElementHostAutomationPeer.cs
- WorkflowRuntimeServiceElementCollection.cs
- HtmlButton.cs
- TypeSystem.cs
- EntryPointNotFoundException.cs
- HGlobalSafeHandle.cs
- RolePrincipal.cs
- XPathParser.cs
- _CommandStream.cs
- StrokeCollection2.cs
- CurrentChangedEventManager.cs
- FloaterParagraph.cs
- OleDbDataReader.cs
- XamlFrame.cs
- RegularExpressionValidator.cs
- DbConnectionStringBuilder.cs
- DesignerAttribute.cs
- PrivilegeNotHeldException.cs
- fixedPageContentExtractor.cs
- HtmlImage.cs
- NumberSubstitution.cs
- XmlILTrace.cs
- Invariant.cs
- DerivedKeyCachingSecurityTokenSerializer.cs
- SelectionWordBreaker.cs
- MemberDomainMap.cs
- AnnotationComponentChooser.cs
- SystemIcmpV6Statistics.cs
- TabletDeviceInfo.cs
- WebPartPersonalization.cs
- SiteMapNode.cs
- DataStreams.cs
- TypeUtils.cs
- StatusStrip.cs
- _AutoWebProxyScriptHelper.cs
- ProcessRequestAsyncResult.cs
- TimersDescriptionAttribute.cs
- MergeFilterQuery.cs
- xmlformatgeneratorstatics.cs
- X509AudioLogo.cs
- PtsCache.cs
- ResourcePool.cs
- FullTextLine.cs
- TextRange.cs
- OracleRowUpdatedEventArgs.cs
- SettingsAttributes.cs
- SeekStoryboard.cs
- BigInt.cs
- ThreadStartException.cs
- BamlLocalizationDictionary.cs
- XdrBuilder.cs
- ObfuscationAttribute.cs
- CompilerTypeWithParams.cs
- XamlGridLengthSerializer.cs
- FragmentQueryKB.cs
- SyntaxCheck.cs
- ToggleButtonAutomationPeer.cs
- cookiecollection.cs
- UIElement.cs
- StickyNoteHelper.cs
- Track.cs
- OdbcRowUpdatingEvent.cs
- DownloadProgressEventArgs.cs
- DockPatternIdentifiers.cs
- NameValuePair.cs
- AncestorChangedEventArgs.cs
- DrawingCollection.cs
- CopyAttributesAction.cs
- ObjectRef.cs
- QilList.cs
- TagMapCollection.cs
- PieceNameHelper.cs
- XmlTextEncoder.cs
- GeometryHitTestResult.cs
- ColumnCollection.cs
- MarkupExtensionParser.cs
- View.cs
- WebPartConnectionsCloseVerb.cs
- XmlSchemaSimpleContent.cs
- ProcessProtocolHandler.cs
- UpdateDelegates.Generated.cs
- ConfigurationProperty.cs
- SoapCommonClasses.cs
- PlainXmlSerializer.cs
- EdgeModeValidation.cs
- StorageEntitySetMapping.cs
- TrustManagerMoreInformation.cs
- PointAnimation.cs
- CodeConditionStatement.cs
- ColorTranslator.cs
- UserInitiatedNavigationPermission.cs