Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Epm / EpmSourceTree.cs / 1305376 / EpmSourceTree.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Tree for managing SourceNames on EntityPropertyMappingAttributes // for a ResourceType. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { using System.Collections.Generic; using System.Diagnostics; using System.Linq; #if ASTORIA_CLIENT using System.Data.Services.Client; #else using System.Data.Services; #endif ////// Tree representing the sourceName properties in all the EntityPropertyMappingAttributes for a resource type /// internal sealed class EpmSourceTree { #region Fields ///Root of the tree private readonly EpmSourcePathSegment root; ///private readonly EpmTargetTree epmTargetTree; #endregion /// corresponding to this tree Default constructor creates a null root /// Target xml tree internal EpmSourceTree(EpmTargetTree epmTargetTree) { this.root = new EpmSourcePathSegment(""); this.epmTargetTree = epmTargetTree; } #region Properties ////// Root of the tree /// internal EpmSourcePathSegment Root { get { return this.root; } } #endregion ////// Adds a path to the source and target tree which is obtained by looking at the EntityPropertyMappingAttribute in the /// EnitityPropertyMappingInfo holding the source path internal void Add(EntityPropertyMappingInfo epmInfo) { String sourceName = epmInfo.Attribute.SourcePath; EpmSourcePathSegment currentProperty = this.Root; IList/// activeSubProperties = currentProperty.SubProperties; EpmSourcePathSegment foundProperty = null; Debug.Assert(!String.IsNullOrEmpty(sourceName), "Must have been validated during EntityPropertyMappingAttribute construction"); foreach (String propertyName in sourceName.Split('/')) { if (propertyName.Length == 0) { throw new InvalidOperationException(Strings.EpmSourceTree_InvalidSourcePath(epmInfo.DefiningType.Name, sourceName)); } foundProperty = activeSubProperties.SingleOrDefault(e => e.PropertyName == propertyName); if (foundProperty != null) { currentProperty = foundProperty; } else { currentProperty = new EpmSourcePathSegment(propertyName); activeSubProperties.Add(currentProperty); } activeSubProperties = currentProperty.SubProperties; } // Two EpmAttributes with same PropertyName in the same ResourceType, this could be a result of inheritance if (foundProperty != null) { Debug.Assert(Object.ReferenceEquals(foundProperty, currentProperty), "currentProperty variable should have been updated already to foundProperty"); // Check for duplicates on the same entity type #if !ASTORIA_CLIENT Debug.Assert(foundProperty.SubProperties.Count == 0, "If non-leaf, it means we allowed complex type to be a leaf node"); if (foundProperty.EpmInfo.DefiningType == epmInfo.DefiningType) { throw new InvalidOperationException(Strings.EpmSourceTree_DuplicateEpmAttrsWithSameSourceName(epmInfo.Attribute.SourcePath, epmInfo.DefiningType.Name)); } #else if (foundProperty.EpmInfo.DefiningType.Name == epmInfo.DefiningType.Name) { throw new InvalidOperationException(Strings.EpmSourceTree_DuplicateEpmAttrsWithSameSourceName(epmInfo.Attribute.SourcePath, epmInfo.DefiningType.Name)); } #endif // In case of inheritance, we need to remove the node from target tree which was mapped to base type property this.epmTargetTree.Remove(foundProperty.EpmInfo); } currentProperty.EpmInfo = epmInfo; this.epmTargetTree.Add(epmInfo); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // //// Tree for managing SourceNames on EntityPropertyMappingAttributes // for a ResourceType. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { using System.Collections.Generic; using System.Diagnostics; using System.Linq; #if ASTORIA_CLIENT using System.Data.Services.Client; #else using System.Data.Services; #endif ////// Tree representing the sourceName properties in all the EntityPropertyMappingAttributes for a resource type /// internal sealed class EpmSourceTree { #region Fields ///Root of the tree private readonly EpmSourcePathSegment root; ///private readonly EpmTargetTree epmTargetTree; #endregion /// corresponding to this tree Default constructor creates a null root /// Target xml tree internal EpmSourceTree(EpmTargetTree epmTargetTree) { this.root = new EpmSourcePathSegment(""); this.epmTargetTree = epmTargetTree; } #region Properties ////// Root of the tree /// internal EpmSourcePathSegment Root { get { return this.root; } } #endregion ////// Adds a path to the source and target tree which is obtained by looking at the EntityPropertyMappingAttribute in the /// EnitityPropertyMappingInfo holding the source path internal void Add(EntityPropertyMappingInfo epmInfo) { String sourceName = epmInfo.Attribute.SourcePath; EpmSourcePathSegment currentProperty = this.Root; IList/// activeSubProperties = currentProperty.SubProperties; EpmSourcePathSegment foundProperty = null; Debug.Assert(!String.IsNullOrEmpty(sourceName), "Must have been validated during EntityPropertyMappingAttribute construction"); foreach (String propertyName in sourceName.Split('/')) { if (propertyName.Length == 0) { throw new InvalidOperationException(Strings.EpmSourceTree_InvalidSourcePath(epmInfo.DefiningType.Name, sourceName)); } foundProperty = activeSubProperties.SingleOrDefault(e => e.PropertyName == propertyName); if (foundProperty != null) { currentProperty = foundProperty; } else { currentProperty = new EpmSourcePathSegment(propertyName); activeSubProperties.Add(currentProperty); } activeSubProperties = currentProperty.SubProperties; } // Two EpmAttributes with same PropertyName in the same ResourceType, this could be a result of inheritance if (foundProperty != null) { Debug.Assert(Object.ReferenceEquals(foundProperty, currentProperty), "currentProperty variable should have been updated already to foundProperty"); // Check for duplicates on the same entity type #if !ASTORIA_CLIENT Debug.Assert(foundProperty.SubProperties.Count == 0, "If non-leaf, it means we allowed complex type to be a leaf node"); if (foundProperty.EpmInfo.DefiningType == epmInfo.DefiningType) { throw new InvalidOperationException(Strings.EpmSourceTree_DuplicateEpmAttrsWithSameSourceName(epmInfo.Attribute.SourcePath, epmInfo.DefiningType.Name)); } #else if (foundProperty.EpmInfo.DefiningType.Name == epmInfo.DefiningType.Name) { throw new InvalidOperationException(Strings.EpmSourceTree_DuplicateEpmAttrsWithSameSourceName(epmInfo.Attribute.SourcePath, epmInfo.DefiningType.Name)); } #endif // In case of inheritance, we need to remove the node from target tree which was mapped to base type property this.epmTargetTree.Remove(foundProperty.EpmInfo); } currentProperty.EpmInfo = epmInfo; this.epmTargetTree.Add(epmInfo); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Rfc4050KeyFormatter.cs
- TrustManagerMoreInformation.cs
- ResourceKey.cs
- StateMachineWorkflow.cs
- DesignerTextWriter.cs
- CompoundFileStreamReference.cs
- SqlDataSourceFilteringEventArgs.cs
- Dictionary.cs
- Properties.cs
- GroupBoxRenderer.cs
- QilTargetType.cs
- XmlWrappingReader.cs
- UnsafeNativeMethodsMilCoreApi.cs
- XmlDataSourceNodeDescriptor.cs
- PathGradientBrush.cs
- UndoManager.cs
- DataControlImageButton.cs
- WindowsAuthenticationEventArgs.cs
- TextProperties.cs
- TraceEventCache.cs
- BaseAddressPrefixFilterElement.cs
- WSTransactionSection.cs
- XPathAncestorIterator.cs
- EndpointAddress.cs
- SpecialFolderEnumConverter.cs
- GenericNameHandler.cs
- ComplexPropertyEntry.cs
- ServiceProviders.cs
- WindowsSpinner.cs
- TextHidden.cs
- ProfileSettingsCollection.cs
- ObjectDataSourceMethodEventArgs.cs
- ServiceModelInstallComponent.cs
- DesignerActionPanel.cs
- Formatter.cs
- ViewUtilities.cs
- TemplatedMailWebEventProvider.cs
- AuthenticationManager.cs
- QuarticEase.cs
- SeekStoryboard.cs
- configsystem.cs
- CanExecuteRoutedEventArgs.cs
- Statements.cs
- FlowchartDesigner.xaml.cs
- OracleConnection.cs
- DocumentSequenceHighlightLayer.cs
- ReadWriteSpinLock.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- RenderingBiasValidation.cs
- NonVisualControlAttribute.cs
- EntityViewGenerationAttribute.cs
- DbConnectionPoolGroupProviderInfo.cs
- SQLBytes.cs
- RowsCopiedEventArgs.cs
- RequestQueue.cs
- ConnectorDragDropGlyph.cs
- SqlMultiplexer.cs
- TextServicesContext.cs
- StateWorkerRequest.cs
- ObjectAssociationEndMapping.cs
- PagesSection.cs
- MobileUserControl.cs
- RadioButtonBaseAdapter.cs
- CookieProtection.cs
- OpenTypeLayout.cs
- FormsAuthenticationCredentials.cs
- ResourcePermissionBase.cs
- MemoryRecordBuffer.cs
- SymmetricAlgorithm.cs
- SizeAnimationUsingKeyFrames.cs
- Clock.cs
- RootBrowserWindowProxy.cs
- safemediahandle.cs
- sqlstateclientmanager.cs
- UnSafeCharBuffer.cs
- CollectionView.cs
- ConnectionStringsExpressionBuilder.cs
- WasAdminWrapper.cs
- DocumentXmlWriter.cs
- KeyboardNavigation.cs
- SoapIncludeAttribute.cs
- TextRunTypographyProperties.cs
- RegexFCD.cs
- Dictionary.cs
- ToolBarButtonClickEvent.cs
- PngBitmapEncoder.cs
- DataGridViewCellValidatingEventArgs.cs
- Color.cs
- CodeVariableReferenceExpression.cs
- CriticalExceptions.cs
- ApplicationInterop.cs
- GeneralTransform3DTo2D.cs
- RichTextBox.cs
- NativeCppClassAttribute.cs
- CTreeGenerator.cs
- ConnectionsZoneDesigner.cs
- AlgoModule.cs
- InkCollectionBehavior.cs
- Object.cs
- ToolStripDropDownItem.cs