Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataWeb / Server / System / Data / Services / UpdateTracker.cs / 1 / UpdateTracker.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides a class used to track updates for callbacks. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services { using System.Collections.Generic; using System.Data.Services.Providers; using System.Diagnostics; using System.Reflection; ///Provides a class used to track updates for callbacks. internal class UpdateTracker { #region Private fields. ////// A dictionary of containers mapping to the changes on those /// containers, each of which consists of an element and the /// action taken on it. /// private Dictionary> items; /// Underlying data source instance. private IDataServiceProvider provider; #endregion Private fields. ///Initializes a new /// underlying data source instance. private UpdateTracker(IDataServiceProvider provider) { this.provider = provider; this.items = new Dictionaryinstance. >(); } /// Fires the notification for a single action. /// Service on which methods should be invoked. /// Object to be tracked. /// Container in which object is changed. /// Action affecting target. internal static void FireNotification(object service, object target, ResourceContainer container, UpdateOperations action) { Debug.Assert(service != null, "service != null"); AssertActionValues(target, container); MethodInfo[] methods = container.WriteAuthorizationMethods; if (methods != null) { object[] parameters = new object[2]; parameters[0] = target; parameters[1] = action; for (int i = 0; i < methods.Length; i++) { try { methods[i].Invoke(service, parameters); } catch (TargetInvocationException exception) { ErrorHandler.HandleTargetInvocationException(exception); throw; } } } } ////// Create a new instance of update tracker /// /// description about the request uri. /// underlying data source. ////// Returns a new instance of UpdateTracker if the request is not targetted at open types; null otherwise. /// #if !ASTORIA_OPEN_OBJECT [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "description", Justification = "Required for open type support")] #endif internal static UpdateTracker CreateUpdateTracker(RequestDescription description, IDataServiceProvider provider) { // We don't support notifications for open types. Hence not creating a tracker for open types request. #if ASTORIA_OPEN_OBJECT if (description.TargetKind != RequestTargetKind.OpenProperty && description.TargetKind != RequestTargetKind.OpenPropertyValue) { #endif return new UpdateTracker(provider); #if ASTORIA_OPEN_OBJECT } return null; #endif } ///Fires all notifications /// Service on which methods should be invoked. internal void FireNotifications(object service) { Debug.Assert(service != null, "service != null"); object[] parameters = new object[2]; foreach (var item in this.items) { MethodInfo[] methods = item.Key.WriteAuthorizationMethods; Debug.Assert(methods != null, "methods != null - should not have been tracking changes to the container otherwise."); foreach (var element in item.Value) { parameters[0] = this.provider.ResolveResource(element.Key); parameters[1] = element.Value; for (int i = 0; i < methods.Length; i++) { try { methods[i].Invoke(service, parameters); } catch (TargetInvocationException exception) { ErrorHandler.HandleTargetInvocationException(exception); throw; } } } // Make elements elegible for garbage collection. item.Value.Clear(); } // Make dictionary elegible for garbage collection. this.items = null; } ////// Tracks the specified /// Object to be tracked. /// Container in which object is changed. /// Action affecting target. ///for a /// given on the . /// /// If internal void TrackAction(object target, ResourceContainer container, UpdateOperations action) { AssertActionValues(target, container); Debug.Assert(this.items != null, "this.items != null - otherwise FireNotification has already been called"); // If it won't be necessary for us to fire authorizatio methods, // skip tracking altogether. if (container.WriteAuthorizationMethods == null) { return; } // Get the container for which the change has taken place. Dictionarywas already being tracked, the actions are OR'ed together. ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlXml.cs
- EventProvider.cs
- DiscriminatorMap.cs
- SqlClientPermission.cs
- DomainUpDown.cs
- MouseOverProperty.cs
- BrowserCapabilitiesCompiler.cs
- ExpressionPrefixAttribute.cs
- BaseAppDomainProtocolHandler.cs
- WhitespaceRuleLookup.cs
- FontFaceLayoutInfo.cs
- XamlPointCollectionSerializer.cs
- AlphabeticalEnumConverter.cs
- ObjRef.cs
- NavigationWindowAutomationPeer.cs
- FormViewDeletedEventArgs.cs
- HtmlDocument.cs
- RawTextInputReport.cs
- securitymgrsite.cs
- BaseDataListDesigner.cs
- ReflectionServiceProvider.cs
- LineMetrics.cs
- LinqDataSourceContextData.cs
- SimpleTextLine.cs
- TreeViewDesigner.cs
- UxThemeWrapper.cs
- InlineObject.cs
- RequestDescription.cs
- WeakRefEnumerator.cs
- WindowsImpersonationContext.cs
- MenuItem.cs
- XmlSchemaIdentityConstraint.cs
- WebEventCodes.cs
- SettingsContext.cs
- StylusPointProperty.cs
- validationstate.cs
- CodeTryCatchFinallyStatement.cs
- DirectionalLight.cs
- BooleanStorage.cs
- ButtonBase.cs
- ControlUtil.cs
- ListBox.cs
- ItemCollection.cs
- EncodingStreamWrapper.cs
- AsymmetricAlgorithm.cs
- HtmlForm.cs
- ParseHttpDate.cs
- PieceDirectory.cs
- WindowsPen.cs
- PaintValueEventArgs.cs
- X509RawDataKeyIdentifierClause.cs
- EdmProperty.cs
- RuleSettingsCollection.cs
- autovalidator.cs
- PropertyManager.cs
- DbException.cs
- GifBitmapEncoder.cs
- FileUtil.cs
- ProcessModule.cs
- DrawingContextWalker.cs
- ISCIIEncoding.cs
- HtmlElementCollection.cs
- _ListenerAsyncResult.cs
- TimeManager.cs
- EntityModelSchemaGenerator.cs
- IHttpResponseInternal.cs
- BrowserCapabilitiesFactory.cs
- SqlDataSourceView.cs
- DataSysAttribute.cs
- NTAccount.cs
- FixedPage.cs
- CodeAttachEventStatement.cs
- PropertyIDSet.cs
- XmlSchemaProviderAttribute.cs
- WSFederationHttpBinding.cs
- XmlIncludeAttribute.cs
- TextTreeDeleteContentUndoUnit.cs
- entityreference_tresulttype.cs
- SchemaImporter.cs
- WebPartConnection.cs
- SimpleMailWebEventProvider.cs
- _NativeSSPI.cs
- RegisteredHiddenField.cs
- DependencyPropertyValueSerializer.cs
- ParallelTimeline.cs
- FunctionCommandText.cs
- TreeNodeCollection.cs
- WindowPattern.cs
- FloatUtil.cs
- ReferenceConverter.cs
- ColorTranslator.cs
- WebPartsPersonalizationAuthorization.cs
- PageVisual.cs
- ColorConvertedBitmap.cs
- XmlLinkedNode.cs
- ImageMetadata.cs
- EventDescriptorCollection.cs
- XPathDocumentNavigator.cs
- NavigateEvent.cs
- MouseEvent.cs