Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / RunTime / CorrelationToken.cs / 1305376 / CorrelationToken.cs
using System; using System.Xml; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; using System.Reflection; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Diagnostics; using System.Runtime.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.ComponentModel.Serialization; using System.Workflow.Runtime; using System.Globalization; namespace System.Workflow.Runtime { [DesignerSerializer(typeof(DependencyObjectCodeDomSerializer), typeof(CodeDomSerializer))] public sealed class CorrelationToken : DependencyObject, IPropertyValueProvider { internal static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(CorrelationToken), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new BrowsableAttribute(false)})); internal static readonly DependencyProperty OwnerActivityNameProperty = DependencyProperty.Register("OwnerActivityName", typeof(string), typeof(CorrelationToken), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new TypeConverterAttribute(typeof(PropertyValueProviderTypeConverter)) })); // instance properties internal static readonly DependencyProperty PropertiesProperty = DependencyProperty.Register("Properties", typeof(ICollection), typeof(CorrelationToken),new PropertyMetadata(new Attribute[] { new BrowsableAttribute(false), new DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)})); internal static readonly DependencyProperty SubscriptionsProperty = DependencyProperty.Register("Subscriptions", typeof(IList >), typeof(CorrelationToken)); internal static readonly DependencyProperty InitializedProperty = DependencyProperty.Register("Initialized", typeof(bool), typeof(CorrelationToken), new PropertyMetadata(false, new Attribute[] { new BrowsableAttribute(false), new DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden) })); public CorrelationToken() { } public CorrelationToken(string name) { this.Name = name; } [Browsable(false)] public string Name { get { return (string)GetValue(NameProperty); } set { SetValue(NameProperty, value); } } [TypeConverter(typeof(PropertyValueProviderTypeConverter))] public string OwnerActivityName { get { return (string)GetValue(OwnerActivityNameProperty); } set { SetValue(OwnerActivityNameProperty, value); } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ICollection Properties { get { return GetValue(PropertiesProperty) as ICollection ; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool Initialized { get { return (bool)GetValue(InitializedProperty); } } ICollection IPropertyValueProvider.GetPropertyValues(ITypeDescriptorContext context) { StringCollection names = new StringCollection(); if (string.Equals(context.PropertyDescriptor.Name, "OwnerActivityName", StringComparison.Ordinal)) { ISelectionService selectionService = context.GetService(typeof(ISelectionService)) as ISelectionService; if (selectionService != null && selectionService.SelectionCount == 1 && selectionService.PrimarySelection is Activity) { Activity currentActivity = selectionService.PrimarySelection as Activity; foreach (Activity activity in GetEnclosingCompositeActivities(currentActivity)) { string activityId = activity.QualifiedName; if (!names.Contains(activityId)) names.Add(activityId); } } } return names; } public void Initialize(Activity activity, ICollection propertyValues) { if (this.Initialized) throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,ExecutionStringManager.CorrelationAlreadyInitialized, this.Name)); SetValue(PropertiesProperty,propertyValues); // fire correlation initialized events CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this, true); IList > subscribers = GetValue(SubscriptionsProperty) as IList >; if (subscribers != null) { foreach (ActivityExecutorDelegateInfo subscriber in subscribers) { subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false); } } SetValue(InitializedProperty,true); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken initialized for {0} owner activity {1} ", this.Name, this.OwnerActivityName); } internal void Uninitialize(Activity activity) { SetValue(PropertiesProperty, null); // fire correlation uninitialized events CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this,false); IList > subscribers = GetValue(SubscriptionsProperty) as IList >; if (subscribers != null) { ActivityExecutorDelegateInfo [] clonedSubscribers = new ActivityExecutorDelegateInfo [subscribers.Count]; subscribers.CopyTo(clonedSubscribers, 0); foreach (ActivityExecutorDelegateInfo subscriber in clonedSubscribers) { subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false); } } //SetValue(InitializedProperty, false); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken Uninitialized for {0} owner activity {1}", this.Name, this.OwnerActivityName); } public void SubscribeForCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener dataChangeListener) { if (dataChangeListener == null) throw new ArgumentNullException("dataChangeListener"); if (activity == null) throw new ArgumentNullException("activity"); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (dataChangeListener, ContextActivityUtils.ContextActivity(activity), true); IList > subscriptions = GetValue(SubscriptionsProperty) as IList >; if (subscriptions == null) { subscriptions = new List >(); SetValue(SubscriptionsProperty,subscriptions); } subscriptions.Add(subscriber); } public void UnsubscribeFromCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener dataChangeListener) { if (dataChangeListener == null) throw new ArgumentNullException("dataChangeListener"); if (activity == null) throw new ArgumentNullException("activity"); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (dataChangeListener, ContextActivityUtils.ContextActivity(activity), true); IList > subscriptions = GetValue(SubscriptionsProperty) as IList >; if (subscriptions != null) { subscriptions.Remove(subscriber); } } private static IEnumerable GetEnclosingCompositeActivities(Activity startActivity) { Activity currentActivity = null; Stack activityStack = new Stack (); activityStack.Push(startActivity); while ((currentActivity = activityStack.Pop()) != null) { if ((typeof(CompositeActivity).IsAssignableFrom(currentActivity.GetType())) && currentActivity.Enabled) { yield return currentActivity; } activityStack.Push(currentActivity.Parent); } yield break; } } [Serializable] public sealed class CorrelationTokenCollection : KeyedCollection { public static readonly DependencyProperty CorrelationTokenCollectionProperty = DependencyProperty.RegisterAttached("CorrelationTokenCollection", typeof(CorrelationTokenCollection), typeof(CorrelationTokenCollection)); public CorrelationTokenCollection() { } public CorrelationToken GetItem(string key) { return this[key]; } protected override string GetKeyForItem(CorrelationToken item) { return item.Name; } protected override void ClearItems() { base.ClearItems(); } protected override void InsertItem(int index, CorrelationToken item) { if (item == null) throw new ArgumentNullException("item"); base.InsertItem(index, item); } protected override void RemoveItem(int index) { base.RemoveItem(index); } protected override void SetItem(int index, CorrelationToken item) { if (item == null) throw new ArgumentNullException("item"); base.SetItem(index, item); } internal static void UninitializeCorrelationTokens(Activity activity) { CorrelationTokenCollection collection = activity.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection; if (collection != null) { foreach (CorrelationToken correlator in collection) { correlator.Uninitialize(activity); } } } public static CorrelationToken GetCorrelationToken(Activity activity, string correlationTokenName, string ownerActivityName) { if (null == correlationTokenName) throw new ArgumentNullException("correlationTokenName"); if (null == ownerActivityName) throw new ArgumentNullException("ownerActivityName"); if (null == activity) throw new ArgumentNullException("activity"); Activity contextActivity = ContextActivityUtils.ContextActivity(activity); Activity owner = null; if (!String.IsNullOrEmpty(ownerActivityName)) { while (contextActivity != null) { owner = contextActivity.GetActivityByName(ownerActivityName, true); if (owner != null) break; contextActivity = ContextActivityUtils.ParentContextActivity(contextActivity); } if (owner == null) owner = Helpers.ParseActivityForBind(activity, ownerActivityName); } if (owner == null) throw new InvalidOperationException(ExecutionStringManager.OwnerActivityMissing); CorrelationTokenCollection collection = owner.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection; if (collection == null) { collection = new CorrelationTokenCollection(); owner.SetValue(CorrelationTokenCollection.CorrelationTokenCollectionProperty, collection); } if (!collection.Contains(correlationTokenName)) { collection.Add(new CorrelationToken(correlationTokenName)); } return collection[correlationTokenName]; } } [Serializable] public class CorrelationProperty { private object value = null; private string name; public CorrelationProperty(string name, object value) { if (null == name) { throw new ArgumentNullException("name"); } this.name = name; this.value = value; } public object Value { get { return this.value; } } public string Name { get { return this.name; } } } public sealed class CorrelationTokenEventArgs : EventArgs { CorrelationToken correlator; bool initialized; internal CorrelationTokenEventArgs(CorrelationToken correlator, bool initialized) { this.correlator = correlator; this.initialized = initialized; } public bool IsInitializing { get { return this.initialized; } } public CorrelationToken CorrelationToken { get { return this.correlator; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Xml; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; using System.Reflection; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Diagnostics; using System.Runtime.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.ComponentModel.Serialization; using System.Workflow.Runtime; using System.Globalization; namespace System.Workflow.Runtime { [DesignerSerializer(typeof(DependencyObjectCodeDomSerializer), typeof(CodeDomSerializer))] public sealed class CorrelationToken : DependencyObject, IPropertyValueProvider { internal static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(CorrelationToken), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new BrowsableAttribute(false)})); internal static readonly DependencyProperty OwnerActivityNameProperty = DependencyProperty.Register("OwnerActivityName", typeof(string), typeof(CorrelationToken), new PropertyMetadata(DependencyPropertyOptions.Metadata, new Attribute[] { new TypeConverterAttribute(typeof(PropertyValueProviderTypeConverter)) })); // instance properties internal static readonly DependencyProperty PropertiesProperty = DependencyProperty.Register("Properties", typeof(ICollection ), typeof(CorrelationToken),new PropertyMetadata(new Attribute[] { new BrowsableAttribute(false), new DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)})); internal static readonly DependencyProperty SubscriptionsProperty = DependencyProperty.Register("Subscriptions", typeof(IList >), typeof(CorrelationToken)); internal static readonly DependencyProperty InitializedProperty = DependencyProperty.Register("Initialized", typeof(bool), typeof(CorrelationToken), new PropertyMetadata(false, new Attribute[] { new BrowsableAttribute(false), new DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden) })); public CorrelationToken() { } public CorrelationToken(string name) { this.Name = name; } [Browsable(false)] public string Name { get { return (string)GetValue(NameProperty); } set { SetValue(NameProperty, value); } } [TypeConverter(typeof(PropertyValueProviderTypeConverter))] public string OwnerActivityName { get { return (string)GetValue(OwnerActivityNameProperty); } set { SetValue(OwnerActivityNameProperty, value); } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ICollection Properties { get { return GetValue(PropertiesProperty) as ICollection ; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool Initialized { get { return (bool)GetValue(InitializedProperty); } } ICollection IPropertyValueProvider.GetPropertyValues(ITypeDescriptorContext context) { StringCollection names = new StringCollection(); if (string.Equals(context.PropertyDescriptor.Name, "OwnerActivityName", StringComparison.Ordinal)) { ISelectionService selectionService = context.GetService(typeof(ISelectionService)) as ISelectionService; if (selectionService != null && selectionService.SelectionCount == 1 && selectionService.PrimarySelection is Activity) { Activity currentActivity = selectionService.PrimarySelection as Activity; foreach (Activity activity in GetEnclosingCompositeActivities(currentActivity)) { string activityId = activity.QualifiedName; if (!names.Contains(activityId)) names.Add(activityId); } } } return names; } public void Initialize(Activity activity, ICollection propertyValues) { if (this.Initialized) throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,ExecutionStringManager.CorrelationAlreadyInitialized, this.Name)); SetValue(PropertiesProperty,propertyValues); // fire correlation initialized events CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this, true); IList > subscribers = GetValue(SubscriptionsProperty) as IList >; if (subscribers != null) { foreach (ActivityExecutorDelegateInfo subscriber in subscribers) { subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false); } } SetValue(InitializedProperty,true); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken initialized for {0} owner activity {1} ", this.Name, this.OwnerActivityName); } internal void Uninitialize(Activity activity) { SetValue(PropertiesProperty, null); // fire correlation uninitialized events CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this,false); IList > subscribers = GetValue(SubscriptionsProperty) as IList >; if (subscribers != null) { ActivityExecutorDelegateInfo [] clonedSubscribers = new ActivityExecutorDelegateInfo [subscribers.Count]; subscribers.CopyTo(clonedSubscribers, 0); foreach (ActivityExecutorDelegateInfo subscriber in clonedSubscribers) { subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false); } } //SetValue(InitializedProperty, false); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken Uninitialized for {0} owner activity {1}", this.Name, this.OwnerActivityName); } public void SubscribeForCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener dataChangeListener) { if (dataChangeListener == null) throw new ArgumentNullException("dataChangeListener"); if (activity == null) throw new ArgumentNullException("activity"); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (dataChangeListener, ContextActivityUtils.ContextActivity(activity), true); IList > subscriptions = GetValue(SubscriptionsProperty) as IList >; if (subscriptions == null) { subscriptions = new List >(); SetValue(SubscriptionsProperty,subscriptions); } subscriptions.Add(subscriber); } public void UnsubscribeFromCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener dataChangeListener) { if (dataChangeListener == null) throw new ArgumentNullException("dataChangeListener"); if (activity == null) throw new ArgumentNullException("activity"); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (dataChangeListener, ContextActivityUtils.ContextActivity(activity), true); IList > subscriptions = GetValue(SubscriptionsProperty) as IList >; if (subscriptions != null) { subscriptions.Remove(subscriber); } } private static IEnumerable GetEnclosingCompositeActivities(Activity startActivity) { Activity currentActivity = null; Stack activityStack = new Stack (); activityStack.Push(startActivity); while ((currentActivity = activityStack.Pop()) != null) { if ((typeof(CompositeActivity).IsAssignableFrom(currentActivity.GetType())) && currentActivity.Enabled) { yield return currentActivity; } activityStack.Push(currentActivity.Parent); } yield break; } } [Serializable] public sealed class CorrelationTokenCollection : KeyedCollection { public static readonly DependencyProperty CorrelationTokenCollectionProperty = DependencyProperty.RegisterAttached("CorrelationTokenCollection", typeof(CorrelationTokenCollection), typeof(CorrelationTokenCollection)); public CorrelationTokenCollection() { } public CorrelationToken GetItem(string key) { return this[key]; } protected override string GetKeyForItem(CorrelationToken item) { return item.Name; } protected override void ClearItems() { base.ClearItems(); } protected override void InsertItem(int index, CorrelationToken item) { if (item == null) throw new ArgumentNullException("item"); base.InsertItem(index, item); } protected override void RemoveItem(int index) { base.RemoveItem(index); } protected override void SetItem(int index, CorrelationToken item) { if (item == null) throw new ArgumentNullException("item"); base.SetItem(index, item); } internal static void UninitializeCorrelationTokens(Activity activity) { CorrelationTokenCollection collection = activity.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection; if (collection != null) { foreach (CorrelationToken correlator in collection) { correlator.Uninitialize(activity); } } } public static CorrelationToken GetCorrelationToken(Activity activity, string correlationTokenName, string ownerActivityName) { if (null == correlationTokenName) throw new ArgumentNullException("correlationTokenName"); if (null == ownerActivityName) throw new ArgumentNullException("ownerActivityName"); if (null == activity) throw new ArgumentNullException("activity"); Activity contextActivity = ContextActivityUtils.ContextActivity(activity); Activity owner = null; if (!String.IsNullOrEmpty(ownerActivityName)) { while (contextActivity != null) { owner = contextActivity.GetActivityByName(ownerActivityName, true); if (owner != null) break; contextActivity = ContextActivityUtils.ParentContextActivity(contextActivity); } if (owner == null) owner = Helpers.ParseActivityForBind(activity, ownerActivityName); } if (owner == null) throw new InvalidOperationException(ExecutionStringManager.OwnerActivityMissing); CorrelationTokenCollection collection = owner.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection; if (collection == null) { collection = new CorrelationTokenCollection(); owner.SetValue(CorrelationTokenCollection.CorrelationTokenCollectionProperty, collection); } if (!collection.Contains(correlationTokenName)) { collection.Add(new CorrelationToken(correlationTokenName)); } return collection[correlationTokenName]; } } [Serializable] public class CorrelationProperty { private object value = null; private string name; public CorrelationProperty(string name, object value) { if (null == name) { throw new ArgumentNullException("name"); } this.name = name; this.value = value; } public object Value { get { return this.value; } } public string Name { get { return this.name; } } } public sealed class CorrelationTokenEventArgs : EventArgs { CorrelationToken correlator; bool initialized; internal CorrelationTokenEventArgs(CorrelationToken correlator, bool initialized) { this.correlator = correlator; this.initialized = initialized; } public bool IsInitializing { get { return this.initialized; } } public CorrelationToken CorrelationToken { get { return this.correlator; } } } } // 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
- ConfigXmlElement.cs
- BooleanConverter.cs
- PropertyOverridesDialog.cs
- TypeSource.cs
- EdmValidator.cs
- DetailsViewPagerRow.cs
- FileDialog_Vista_Interop.cs
- NavigationWindow.cs
- ActiveXContainer.cs
- QilParameter.cs
- SamlAuthenticationStatement.cs
- RichTextBoxConstants.cs
- SecurityDocument.cs
- ExceptionUtil.cs
- HostedTransportConfigurationBase.cs
- CacheRequest.cs
- HttpRuntime.cs
- QuadraticEase.cs
- DeploymentSection.cs
- CodeTypeConstructor.cs
- Renderer.cs
- DirectoryNotFoundException.cs
- MetadataArtifactLoaderCompositeFile.cs
- LexicalChunk.cs
- ElasticEase.cs
- HelpInfo.cs
- PackWebResponse.cs
- CodeGenerator.cs
- GlyphManager.cs
- SqlDataSourceRefreshSchemaForm.cs
- __Filters.cs
- WindowShowOrOpenTracker.cs
- WebServiceReceive.cs
- ResponseStream.cs
- RouteValueDictionary.cs
- SafeThemeHandle.cs
- ListViewCancelEventArgs.cs
- DataSourceControlBuilder.cs
- FrameworkContentElement.cs
- ProcessHost.cs
- safesecurityhelperavalon.cs
- SafeEventLogReadHandle.cs
- GeneralTransform2DTo3D.cs
- mediaeventshelper.cs
- assemblycache.cs
- EventLogStatus.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- BamlRecordReader.cs
- SqlConnectionHelper.cs
- ThrowHelper.cs
- DocumentPageViewAutomationPeer.cs
- UriSection.cs
- EmptyEnumerator.cs
- HtmlInputReset.cs
- basenumberconverter.cs
- ContextMarshalException.cs
- XsltContext.cs
- CancelRequestedRecord.cs
- ListGeneralPage.cs
- DataGridViewRowCancelEventArgs.cs
- ExtensibleClassFactory.cs
- PseudoWebRequest.cs
- ProfilePropertySettingsCollection.cs
- ToolStrip.cs
- ExpressionBuilder.cs
- PermissionAttributes.cs
- BamlLocalizableResource.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- TagPrefixAttribute.cs
- EmissiveMaterial.cs
- BinaryFormatterWriter.cs
- ThicknessAnimation.cs
- ProfileGroupSettingsCollection.cs
- TcpProcessProtocolHandler.cs
- SqlVisitor.cs
- SqlVisitor.cs
- GenericIdentity.cs
- UnsafeNativeMethods.cs
- BindingMAnagerBase.cs
- Property.cs
- SoapEnumAttribute.cs
- TableLayoutPanelCellPosition.cs
- SafeBitVector32.cs
- SessionEndingCancelEventArgs.cs
- COMException.cs
- ScrollPattern.cs
- Preprocessor.cs
- DatagridviewDisplayedBandsData.cs
- EntityCommand.cs
- DataPager.cs
- DataChangedEventManager.cs
- ToolStripPanelRow.cs
- TransformerInfo.cs
- Calendar.cs
- SerialReceived.cs
- WsatTransactionFormatter.cs
- SqlVisitor.cs
- SqlException.cs
- XmlSchemaAttributeGroup.cs
- PeerCustomResolverBindingElement.cs