Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / SetState.cs / 1305376 / SetState.cs
namespace System.Workflow.Activities { using System; using System.Text; using System.Reflection; using System.Collections; using System.CodeDom; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using System.Drawing.Design; using System.Security; using System.Security.Permissions; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Collections.Generic; using System.Workflow.ComponentModel.Compiler; using System.Workflow.Activities.Common; [SRDescription(SR.SetStateActivityDescription)] [ToolboxItem(typeof(ActivityToolboxItem))] [Designer(typeof(SetStateDesigner), typeof(IDesigner))] [ToolboxBitmap(typeof(SetStateActivity), "Resources.SetStateActivity.png")] [ActivityValidator(typeof(SetStateValidator))] [SRCategory(SR.Standard)] [System.Runtime.InteropServices.ComVisible(false)] public sealed class SetStateActivity : Activity { internal const string TargetStateNamePropertyName = "TargetStateName"; //metadata property public static readonly DependencyProperty TargetStateNameProperty = DependencyProperty.Register(TargetStateNamePropertyName, typeof(string), typeof(SetStateActivity), new PropertyMetadata("", DependencyPropertyOptions.Metadata, new ValidationOptionAttribute(ValidationOption.Optional))); #region Constructors public SetStateActivity() { } public SetStateActivity(string name) : base(name) { } #endregion [SRDescription(SR.TargetStateDescription)] [Editor(typeof(StateDropDownEditor), typeof(UITypeEditor))] [DefaultValue((string)null)] public string TargetStateName { get { return base.GetValue(TargetStateNameProperty) as string; } set { base.SetValue(TargetStateNameProperty, value); } } protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); StateActivity parentState = StateMachineHelpers.FindEnclosingState(executionContext.Activity); StateActivity rootState = StateMachineHelpers.GetRootState(parentState); StateMachineExecutionState executionState = StateMachineExecutionState.Get(rootState); executionState.NextStateName = this.TargetStateName; return ActivityExecutionStatus.Closed; } } [System.Runtime.InteropServices.ComVisible(false)] internal sealed class SetStateValidator : ActivityValidator { public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj)); SetStateActivity setState = obj as SetStateActivity; if (setState == null) throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(StateActivity).FullName), "obj"); if (!SetStateContainment.Validate(setState, validationErrors)) return validationErrors; // could not find a valid parent if (String.IsNullOrEmpty(setState.TargetStateName)) { validationErrors.Add(new ValidationError( SR.GetString(SR.Error_PropertyNotSet, SetStateActivity.TargetStateNamePropertyName), ErrorNumbers.Error_PropertyNotSet, false, SetStateActivity.TargetStateNamePropertyName)); } else { StateActivity enclosingState = StateMachineHelpers.FindEnclosingState(setState); Debug.Assert(enclosingState != null); // this should be caught by the SetStateContainment.Validate call above StateActivity rootState = StateMachineHelpers.GetRootState(enclosingState); StateActivity targetActivity = StateMachineHelpers.FindStateByName( rootState, setState.TargetStateName); StateActivity targetState = targetActivity as StateActivity; if (targetState == null) { validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToAState(), ErrorNumbers.Error_SetStateMustPointToAState, false, SetStateActivity.TargetStateNamePropertyName)); } else { if (!StateMachineHelpers.IsLeafState(targetState)) { validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToALeafNodeState(), ErrorNumbers.Error_SetStateMustPointToALeafNodeState, false, SetStateActivity.TargetStateNamePropertyName)); } } } return validationErrors; } #region SetStateContainement private class SetStateContainment { private bool validParentFound = true; private bool validParentStateFound; private SetStateContainment() { } public static bool Validate(SetStateActivity setState, ValidationErrorCollection validationErrors) { SetStateContainment containment = new SetStateContainment(); ValidateContainment(containment, setState); if (!containment.validParentFound || !containment.validParentStateFound) { validationErrors.Add(new ValidationError(SR.GetError_SetStateOnlyWorksOnStateMachineWorkflow(), ErrorNumbers.Error_SetStateOnlyWorksOnStateMachineWorkflow)); return false; } return true; } private static void ValidateContainment(SetStateContainment containment, Activity activity) { Debug.Assert(activity != null); if (activity.Parent == null || activity.Parent == activity) { containment.validParentFound = false; return; } if (SetStateValidator.IsValidContainer(activity.Parent)) { ValidateParentState(containment, activity.Parent); return; } ValidateContainment(containment, activity.Parent); } private static void ValidateParentState(SetStateContainment containment, CompositeActivity activity) { Debug.Assert(activity != null); if (activity.Parent == null) return; StateActivity state = activity.Parent as StateActivity; if (state != null) { containment.validParentStateFound = true; return; } ValidateParentState(containment, activity.Parent); } } #endregion #region Helper methods static internal bool IsValidContainer(CompositeActivity activity) { return (activity is EventDrivenActivity || activity is StateInitializationActivity); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Workflow.Activities { using System; using System.Text; using System.Reflection; using System.Collections; using System.CodeDom; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using System.Drawing.Design; using System.Security; using System.Security.Permissions; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Collections.Generic; using System.Workflow.ComponentModel.Compiler; using System.Workflow.Activities.Common; [SRDescription(SR.SetStateActivityDescription)] [ToolboxItem(typeof(ActivityToolboxItem))] [Designer(typeof(SetStateDesigner), typeof(IDesigner))] [ToolboxBitmap(typeof(SetStateActivity), "Resources.SetStateActivity.png")] [ActivityValidator(typeof(SetStateValidator))] [SRCategory(SR.Standard)] [System.Runtime.InteropServices.ComVisible(false)] public sealed class SetStateActivity : Activity { internal const string TargetStateNamePropertyName = "TargetStateName"; //metadata property public static readonly DependencyProperty TargetStateNameProperty = DependencyProperty.Register(TargetStateNamePropertyName, typeof(string), typeof(SetStateActivity), new PropertyMetadata("", DependencyPropertyOptions.Metadata, new ValidationOptionAttribute(ValidationOption.Optional))); #region Constructors public SetStateActivity() { } public SetStateActivity(string name) : base(name) { } #endregion [SRDescription(SR.TargetStateDescription)] [Editor(typeof(StateDropDownEditor), typeof(UITypeEditor))] [DefaultValue((string)null)] public string TargetStateName { get { return base.GetValue(TargetStateNameProperty) as string; } set { base.SetValue(TargetStateNameProperty, value); } } protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); StateActivity parentState = StateMachineHelpers.FindEnclosingState(executionContext.Activity); StateActivity rootState = StateMachineHelpers.GetRootState(parentState); StateMachineExecutionState executionState = StateMachineExecutionState.Get(rootState); executionState.NextStateName = this.TargetStateName; return ActivityExecutionStatus.Closed; } } [System.Runtime.InteropServices.ComVisible(false)] internal sealed class SetStateValidator : ActivityValidator { public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.Validate(manager, obj)); SetStateActivity setState = obj as SetStateActivity; if (setState == null) throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(StateActivity).FullName), "obj"); if (!SetStateContainment.Validate(setState, validationErrors)) return validationErrors; // could not find a valid parent if (String.IsNullOrEmpty(setState.TargetStateName)) { validationErrors.Add(new ValidationError( SR.GetString(SR.Error_PropertyNotSet, SetStateActivity.TargetStateNamePropertyName), ErrorNumbers.Error_PropertyNotSet, false, SetStateActivity.TargetStateNamePropertyName)); } else { StateActivity enclosingState = StateMachineHelpers.FindEnclosingState(setState); Debug.Assert(enclosingState != null); // this should be caught by the SetStateContainment.Validate call above StateActivity rootState = StateMachineHelpers.GetRootState(enclosingState); StateActivity targetActivity = StateMachineHelpers.FindStateByName( rootState, setState.TargetStateName); StateActivity targetState = targetActivity as StateActivity; if (targetState == null) { validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToAState(), ErrorNumbers.Error_SetStateMustPointToAState, false, SetStateActivity.TargetStateNamePropertyName)); } else { if (!StateMachineHelpers.IsLeafState(targetState)) { validationErrors.Add(new ValidationError(SR.GetError_SetStateMustPointToALeafNodeState(), ErrorNumbers.Error_SetStateMustPointToALeafNodeState, false, SetStateActivity.TargetStateNamePropertyName)); } } } return validationErrors; } #region SetStateContainement private class SetStateContainment { private bool validParentFound = true; private bool validParentStateFound; private SetStateContainment() { } public static bool Validate(SetStateActivity setState, ValidationErrorCollection validationErrors) { SetStateContainment containment = new SetStateContainment(); ValidateContainment(containment, setState); if (!containment.validParentFound || !containment.validParentStateFound) { validationErrors.Add(new ValidationError(SR.GetError_SetStateOnlyWorksOnStateMachineWorkflow(), ErrorNumbers.Error_SetStateOnlyWorksOnStateMachineWorkflow)); return false; } return true; } private static void ValidateContainment(SetStateContainment containment, Activity activity) { Debug.Assert(activity != null); if (activity.Parent == null || activity.Parent == activity) { containment.validParentFound = false; return; } if (SetStateValidator.IsValidContainer(activity.Parent)) { ValidateParentState(containment, activity.Parent); return; } ValidateContainment(containment, activity.Parent); } private static void ValidateParentState(SetStateContainment containment, CompositeActivity activity) { Debug.Assert(activity != null); if (activity.Parent == null) return; StateActivity state = activity.Parent as StateActivity; if (state != null) { containment.validParentStateFound = true; return; } ValidateParentState(containment, activity.Parent); } } #endregion #region Helper methods static internal bool IsValidContainer(CompositeActivity activity) { return (activity is EventDrivenActivity || activity is StateInitializationActivity); } #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
- ImplicitInputBrush.cs
- RouteUrlExpressionBuilder.cs
- KoreanLunisolarCalendar.cs
- FrameworkContentElement.cs
- FormViewPagerRow.cs
- CatalogPart.cs
- IndexOutOfRangeException.cs
- DecimalAnimationBase.cs
- DecoderReplacementFallback.cs
- PerformanceCounterPermission.cs
- followingsibling.cs
- DefaultDiscoveryService.cs
- ByeOperationCD1AsyncResult.cs
- XsltArgumentList.cs
- DefaultHttpHandler.cs
- Memoizer.cs
- Drawing.cs
- SendSecurityHeaderElementContainer.cs
- XmlNamespaceManager.cs
- DrawingVisual.cs
- LayoutUtils.cs
- BooleanSwitch.cs
- Convert.cs
- ParseNumbers.cs
- ColumnWidthChangedEvent.cs
- VirtualPathProvider.cs
- BindingExpressionBase.cs
- IndependentAnimationStorage.cs
- TabControlDesigner.cs
- WebPartDeleteVerb.cs
- CodeStatement.cs
- PointCollection.cs
- EventSetterHandlerConverter.cs
- FamilyTypeface.cs
- PageThemeBuildProvider.cs
- StateRuntime.cs
- ReferencedAssemblyResolver.cs
- TranslateTransform3D.cs
- RadioButtonFlatAdapter.cs
- ListView.cs
- Cursor.cs
- HtmlContainerControl.cs
- MarkupObject.cs
- SimpleHandlerBuildProvider.cs
- PointHitTestResult.cs
- DocobjHost.cs
- WindowsComboBox.cs
- TraceXPathNavigator.cs
- CultureInfoConverter.cs
- BooleanToVisibilityConverter.cs
- FamilyMapCollection.cs
- Journal.cs
- TimelineGroup.cs
- CommonBehaviorsSection.cs
- CodeActivityContext.cs
- RowUpdatedEventArgs.cs
- QueryCacheManager.cs
- Debug.cs
- IRCollection.cs
- DependencyPropertyDescriptor.cs
- XmlCodeExporter.cs
- EnumConverter.cs
- WindowsTreeView.cs
- SqlDataSourceView.cs
- AcceptorSessionSymmetricTransportSecurityProtocol.cs
- OleDbSchemaGuid.cs
- MessageSecurityOverTcpElement.cs
- TemplateKey.cs
- IPEndPoint.cs
- GZipStream.cs
- LogLogRecord.cs
- ByteAnimationUsingKeyFrames.cs
- DynamicPropertyHolder.cs
- ConfigXmlComment.cs
- BlockCollection.cs
- ButtonBaseAdapter.cs
- GregorianCalendarHelper.cs
- AssemblyInfo.cs
- SelectionPattern.cs
- SchemaComplexType.cs
- XLinq.cs
- RichTextBoxAutomationPeer.cs
- ConfigurationLockCollection.cs
- CmsInterop.cs
- WCFBuildProvider.cs
- EndpointAddressMessageFilter.cs
- ClientUIRequest.cs
- TransformedBitmap.cs
- IgnoreDeviceFilterElementCollection.cs
- IItemContainerGenerator.cs
- SimpleTextLine.cs
- CounterSample.cs
- ProcessStartInfo.cs
- SimpleWorkerRequest.cs
- DmlSqlGenerator.cs
- WaitHandle.cs
- InputReport.cs
- ComponentEvent.cs
- SiteMapPathDesigner.cs
- InheritanceContextHelper.cs