Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / While.cs / 1305376 / While.cs
namespace System.Workflow.Activities { #region Imports using System; using System.Text; using System.Reflection; using System.Collections; using System.CodeDom; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; using System.Drawing; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Collections.Generic; using System.Workflow.ComponentModel.Compiler; using System.Workflow.Activities.Common; #endregion [SRDescription(SR.WhileActivityDescription)] [ToolboxItem(typeof(ActivityToolboxItem))] [Designer(typeof(WhileDesigner), typeof(IDesigner))] [ActivityValidator(typeof(WhileValidator))] [ToolboxBitmap(typeof(WhileActivity), "Resources.While.png")] public sealed class WhileActivity : CompositeActivity, IActivityEventListener{ #region Dependency Properties //metadata properties go here public static readonly DependencyProperty ConditionProperty = DependencyProperty.Register("Condition", typeof(ActivityCondition), typeof(WhileActivity), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new ValidationOptionAttribute(ValidationOption.Required) })); #endregion #region Constructors public WhileActivity() { } public WhileActivity(string name) : base(name) { } #endregion #region Public Properties [SRCategory(SR.Conditions)] [SRDescription(SR.WhileConditionDescr)] public ActivityCondition Condition { get { return base.GetValue(ConditionProperty) as ActivityCondition; } set { base.SetValue(ConditionProperty, value); } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Activity DynamicActivity { get { if (this.EnabledActivities.Count > 0) { Activity[] dynamicChildren = this.GetDynamicActivities(this.EnabledActivities[0]); if (dynamicChildren.Length != 0) return dynamicChildren[0]; } return null; } } #endregion #region Protected Methods protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (TryNextIteration(executionContext)) return ActivityExecutionStatus.Executing; return ActivityExecutionStatus.Closed; } protected override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (this.EnabledActivities.Count == 0) return ActivityExecutionStatus.Closed; Activity childActivity = this.EnabledActivities[0]; ActivityExecutionContextManager contextManager = executionContext.ExecutionContextManager; ActivityExecutionContext childContext = contextManager.GetExecutionContext(childActivity); if (childContext != null) { if (childContext.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) childContext.CancelActivity(childContext.Activity); return ActivityExecutionStatus.Canceling; } return ActivityExecutionStatus.Closed; } #endregion #region Private Implementations private bool TryNextIteration(ActivityExecutionContext context) { if (this.ExecutionStatus == ActivityExecutionStatus.Canceling || this.ExecutionStatus == ActivityExecutionStatus.Faulting || !this.Condition.Evaluate(this, context)) return false; else { if (this.EnabledActivities.Count > 0) { ActivityExecutionContextManager contextManager = context.ExecutionContextManager; ActivityExecutionContext innerContext = contextManager.CreateExecutionContext(this.EnabledActivities[0]); innerContext.Activity.RegisterForStatusChange(Activity.ClosedEvent, this); innerContext.ExecuteActivity(innerContext.Activity); } else { System.Diagnostics.Debug.Assert(false); } return true; } } #endregion #region IActivityEventListener Members void IActivityEventListener .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { if (e == null) throw new ArgumentNullException("e"); if (sender == null) throw new ArgumentNullException("sender"); ActivityExecutionContext context = sender as ActivityExecutionContext; if (context == null) throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender"); e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this); ActivityExecutionContextManager contextManager = context.ExecutionContextManager; contextManager.CompleteExecutionContext(contextManager.GetExecutionContext(e.Activity)); if (!TryNextIteration(context)) context.CloseActivity(); } #endregion } #region Validator internal sealed class WhileValidator : CompositeActivityValidator { public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj)); WhileActivity whileActivity = obj as WhileActivity; if (whileActivity == null) throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(WhileActivity).FullName), "obj"); if(whileActivity.EnabledActivities.Count != 1) validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WhileShouldHaveOneChild), ErrorNumbers.Error_WhileShouldHaveOneChild)); return validationErrors; } public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) throw new ArgumentNullException("activity"); if (action == null) throw new ArgumentNullException("action"); if (activity.ExecutionStatus != ActivityExecutionStatus.Initialized && activity.ExecutionStatus != ActivityExecutionStatus.Executing && activity.ExecutionStatus != ActivityExecutionStatus.Closed) { return new ValidationError(SR.GetString(SR.Error_DynamicActivity2, activity.QualifiedName, Enum.GetName(typeof(ActivityExecutionStatus), activity.ExecutionStatus), activity.GetType().FullName), ErrorNumbers.Error_DynamicActivity2); } return null; } } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Workflow.Activities { #region Imports using System; using System.Text; using System.Reflection; using System.Collections; using System.CodeDom; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; using System.Drawing; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Collections.Generic; using System.Workflow.ComponentModel.Compiler; using System.Workflow.Activities.Common; #endregion [SRDescription(SR.WhileActivityDescription)] [ToolboxItem(typeof(ActivityToolboxItem))] [Designer(typeof(WhileDesigner), typeof(IDesigner))] [ActivityValidator(typeof(WhileValidator))] [ToolboxBitmap(typeof(WhileActivity), "Resources.While.png")] public sealed class WhileActivity : CompositeActivity, IActivityEventListener { #region Dependency Properties //metadata properties go here public static readonly DependencyProperty ConditionProperty = DependencyProperty.Register("Condition", typeof(ActivityCondition), typeof(WhileActivity), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new ValidationOptionAttribute(ValidationOption.Required) })); #endregion #region Constructors public WhileActivity() { } public WhileActivity(string name) : base(name) { } #endregion #region Public Properties [SRCategory(SR.Conditions)] [SRDescription(SR.WhileConditionDescr)] public ActivityCondition Condition { get { return base.GetValue(ConditionProperty) as ActivityCondition; } set { base.SetValue(ConditionProperty, value); } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Activity DynamicActivity { get { if (this.EnabledActivities.Count > 0) { Activity[] dynamicChildren = this.GetDynamicActivities(this.EnabledActivities[0]); if (dynamicChildren.Length != 0) return dynamicChildren[0]; } return null; } } #endregion #region Protected Methods protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (TryNextIteration(executionContext)) return ActivityExecutionStatus.Executing; return ActivityExecutionStatus.Closed; } protected override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (this.EnabledActivities.Count == 0) return ActivityExecutionStatus.Closed; Activity childActivity = this.EnabledActivities[0]; ActivityExecutionContextManager contextManager = executionContext.ExecutionContextManager; ActivityExecutionContext childContext = contextManager.GetExecutionContext(childActivity); if (childContext != null) { if (childContext.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) childContext.CancelActivity(childContext.Activity); return ActivityExecutionStatus.Canceling; } return ActivityExecutionStatus.Closed; } #endregion #region Private Implementations private bool TryNextIteration(ActivityExecutionContext context) { if (this.ExecutionStatus == ActivityExecutionStatus.Canceling || this.ExecutionStatus == ActivityExecutionStatus.Faulting || !this.Condition.Evaluate(this, context)) return false; else { if (this.EnabledActivities.Count > 0) { ActivityExecutionContextManager contextManager = context.ExecutionContextManager; ActivityExecutionContext innerContext = contextManager.CreateExecutionContext(this.EnabledActivities[0]); innerContext.Activity.RegisterForStatusChange(Activity.ClosedEvent, this); innerContext.ExecuteActivity(innerContext.Activity); } else { System.Diagnostics.Debug.Assert(false); } return true; } } #endregion #region IActivityEventListener Members void IActivityEventListener .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { if (e == null) throw new ArgumentNullException("e"); if (sender == null) throw new ArgumentNullException("sender"); ActivityExecutionContext context = sender as ActivityExecutionContext; if (context == null) throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender"); e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this); ActivityExecutionContextManager contextManager = context.ExecutionContextManager; contextManager.CompleteExecutionContext(contextManager.GetExecutionContext(e.Activity)); if (!TryNextIteration(context)) context.CloseActivity(); } #endregion } #region Validator internal sealed class WhileValidator : CompositeActivityValidator { public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj)); WhileActivity whileActivity = obj as WhileActivity; if (whileActivity == null) throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(WhileActivity).FullName), "obj"); if(whileActivity.EnabledActivities.Count != 1) validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WhileShouldHaveOneChild), ErrorNumbers.Error_WhileShouldHaveOneChild)); return validationErrors; } public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) throw new ArgumentNullException("activity"); if (action == null) throw new ArgumentNullException("action"); if (activity.ExecutionStatus != ActivityExecutionStatus.Initialized && activity.ExecutionStatus != ActivityExecutionStatus.Executing && activity.ExecutionStatus != ActivityExecutionStatus.Closed) { return new ValidationError(SR.GetString(SR.Error_DynamicActivity2, activity.QualifiedName, Enum.GetName(typeof(ActivityExecutionStatus), activity.ExecutionStatus), activity.GetType().FullName), ErrorNumbers.Error_DynamicActivity2); } return null; } } #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
- ArglessEventHandlerProxy.cs
- StylusPointProperty.cs
- XmlImplementation.cs
- PageAsyncTaskManager.cs
- UnmanagedMemoryAccessor.cs
- DbLambda.cs
- ModelItemDictionary.cs
- SizeLimitedCache.cs
- ProjectionPlan.cs
- ConfigurationSectionGroupCollection.cs
- ExpressionNormalizer.cs
- ChangeProcessor.cs
- XXXOnTypeBuilderInstantiation.cs
- CodeGeneratorOptions.cs
- _UncName.cs
- NativeRecognizer.cs
- OracleParameterBinding.cs
- FontFamilyConverter.cs
- ResXResourceReader.cs
- UnitySerializationHolder.cs
- ITextView.cs
- DbCommandDefinition.cs
- CategoryState.cs
- MeasureItemEvent.cs
- sqlstateclientmanager.cs
- XDRSchema.cs
- WebPartActionVerb.cs
- ReplyChannelBinder.cs
- RegisteredDisposeScript.cs
- IPAddressCollection.cs
- BitmapSource.cs
- TheQuery.cs
- BitmapFrameDecode.cs
- XmlReader.cs
- WebPartDisplayModeCancelEventArgs.cs
- UserControlParser.cs
- ItemDragEvent.cs
- SelectedDatesCollection.cs
- DocumentViewerConstants.cs
- BindingExpressionBase.cs
- FileNotFoundException.cs
- FamilyTypeface.cs
- SafeNativeMethodsOther.cs
- FilteredDataSetHelper.cs
- TextContainerChangeEventArgs.cs
- StateInitialization.cs
- BlurEffect.cs
- _ListenerAsyncResult.cs
- DataServiceStreamProviderWrapper.cs
- XmlMtomReader.cs
- LinkTarget.cs
- DoubleAnimationUsingPath.cs
- SortQuery.cs
- TransmissionStrategy.cs
- ApplicationServicesHostFactory.cs
- PasswordPropertyTextAttribute.cs
- XslCompiledTransform.cs
- GridViewAutomationPeer.cs
- AttachmentService.cs
- SizeValueSerializer.cs
- DataGridViewBand.cs
- VirtualPathExtension.cs
- AttachedAnnotation.cs
- QueryAccessibilityHelpEvent.cs
- RegularExpressionValidator.cs
- FixedSOMElement.cs
- SchemaObjectWriter.cs
- PersonalizableAttribute.cs
- StylusCaptureWithinProperty.cs
- ListViewGroupConverter.cs
- Operand.cs
- HttpListener.cs
- BitmapSizeOptions.cs
- DataGridViewColumnCollectionDialog.cs
- XamlPathDataSerializer.cs
- ComPlusThreadInitializer.cs
- LinkTarget.cs
- Color.cs
- LOSFormatter.cs
- Tokenizer.cs
- DirectionalLight.cs
- TypeEnumerableViewSchema.cs
- AnchoredBlock.cs
- XmlNamedNodeMap.cs
- GridViewDeleteEventArgs.cs
- FixedDSBuilder.cs
- FigureHelper.cs
- AttachInfo.cs
- OracleCommandSet.cs
- MethodAccessException.cs
- XmlSchemaImporter.cs
- AxisAngleRotation3D.cs
- WorkflowInstanceTerminatedRecord.cs
- TemplateColumn.cs
- HttpPostClientProtocol.cs
- TextTreeRootTextBlock.cs
- HandlerBase.cs
- FixedSOMSemanticBox.cs
- ToolConsole.cs
- ListItemParagraph.cs