Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RuntimeConfig.cs
- FlowLayoutPanel.cs
- XappLauncher.cs
- DataGridCellClipboardEventArgs.cs
- PassportIdentity.cs
- DataGridViewTextBoxEditingControl.cs
- TextEndOfSegment.cs
- _CommandStream.cs
- StrongNameIdentityPermission.cs
- clipboard.cs
- PersonalizationProvider.cs
- GenericTypeParameterBuilder.cs
- DataRowView.cs
- QuotedPrintableStream.cs
- OneOfTypeConst.cs
- HostExecutionContextManager.cs
- IBuiltInEvidence.cs
- WindowsRichEdit.cs
- ConsoleKeyInfo.cs
- NamespaceDecl.cs
- DoubleMinMaxAggregationOperator.cs
- XmlBinaryReader.cs
- DataServiceProcessingPipeline.cs
- BulletedList.cs
- RawTextInputReport.cs
- DeleteMemberBinder.cs
- ScheduleChanges.cs
- WebProxyScriptElement.cs
- PartialClassGenerationTaskInternal.cs
- CallSiteBinder.cs
- ReadOnlyTernaryTree.cs
- PasswordBox.cs
- XmlAnyElementAttributes.cs
- DesignerAttribute.cs
- HtmlEncodedRawTextWriter.cs
- OdbcParameterCollection.cs
- KerberosRequestorSecurityToken.cs
- ComponentResourceManager.cs
- codemethodreferenceexpression.cs
- XmlEncodedRawTextWriter.cs
- ActivityBindForm.cs
- FunctionCommandText.cs
- altserialization.cs
- DataPagerFieldCollection.cs
- WrappedReader.cs
- activationcontext.cs
- XmlComment.cs
- ImageList.cs
- ImageCodecInfo.cs
- BamlBinaryReader.cs
- NativeMethods.cs
- ImageMap.cs
- BooleanSwitch.cs
- ResourceContainer.cs
- QueueProcessor.cs
- OrderByBuilder.cs
- TemplatePartAttribute.cs
- ZipIOExtraFieldZip64Element.cs
- BitmapEffectDrawing.cs
- LinqDataSourceDeleteEventArgs.cs
- ItemList.cs
- ContractHandle.cs
- ConfigXmlElement.cs
- NotificationContext.cs
- EventItfInfo.cs
- ObjectItemAttributeAssemblyLoader.cs
- SqlConnectionManager.cs
- UserNameSecurityToken.cs
- ContourSegment.cs
- EntityContainerEmitter.cs
- AnimationClock.cs
- TraceContextEventArgs.cs
- LinkClickEvent.cs
- SerializerDescriptor.cs
- ReferentialConstraint.cs
- ParseChildrenAsPropertiesAttribute.cs
- WebRequest.cs
- SqlDependencyUtils.cs
- Regex.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- AnimationTimeline.cs
- WmlObjectListAdapter.cs
- GorillaCodec.cs
- CultureSpecificCharacterBufferRange.cs
- FrameworkElement.cs
- SBCSCodePageEncoding.cs
- DataGridViewCellMouseEventArgs.cs
- FormatSettings.cs
- Pkcs7Signer.cs
- ComponentResourceKeyConverter.cs
- Size3D.cs
- SByte.cs
- KeyGestureConverter.cs
- EntityObject.cs
- ServicePoint.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- FixedSOMGroup.cs
- XmlSignificantWhitespace.cs
- RankException.cs
- IApplicationTrustManager.cs