Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ClientRoleProvider.cs
- ObjectComplexPropertyMapping.cs
- PackWebRequest.cs
- ThemeInfoAttribute.cs
- MaterialCollection.cs
- PrePostDescendentsWalker.cs
- BaseDataList.cs
- TextSpanModifier.cs
- NetworkInterface.cs
- SqlCommandSet.cs
- InvokeHandlers.cs
- BufferedReadStream.cs
- ProbeMatchesMessageCD1.cs
- RelationshipEndCollection.cs
- CookielessHelper.cs
- NetTcpBindingElement.cs
- DecoderNLS.cs
- XamlToRtfParser.cs
- SqlGatherProducedAliases.cs
- BitmapEffectGroup.cs
- InfiniteIntConverter.cs
- SqlWebEventProvider.cs
- LayoutEngine.cs
- PocoEntityKeyStrategy.cs
- SqlMethodAttribute.cs
- HttpWebRequest.cs
- AuthenticationModuleElement.cs
- GlyphingCache.cs
- ScalarConstant.cs
- HttpCacheVaryByContentEncodings.cs
- UIPropertyMetadata.cs
- ColumnHeader.cs
- ResourcePermissionBase.cs
- X509ChainElement.cs
- SpeakProgressEventArgs.cs
- CollectionAdapters.cs
- TemplateComponentConnector.cs
- PrintControllerWithStatusDialog.cs
- IfJoinedCondition.cs
- BitmapFrameDecode.cs
- CapabilitiesRule.cs
- ApplicationSettingsBase.cs
- XmlSchemaException.cs
- TreeNodeStyle.cs
- SocketAddress.cs
- IERequestCache.cs
- InputMethodStateTypeInfo.cs
- CodeDOMProvider.cs
- XmlValueConverter.cs
- XsdValidatingReader.cs
- MorphHelper.cs
- JsonWriterDelegator.cs
- StylusCollection.cs
- CodeCatchClause.cs
- TailPinnedEventArgs.cs
- FontStyles.cs
- BitmapMetadata.cs
- AddIn.cs
- DbConnectionPool.cs
- AccessControlList.cs
- ListViewHitTestInfo.cs
- DeferredTextReference.cs
- MarkupWriter.cs
- unsafenativemethodstextservices.cs
- ChtmlTextWriter.cs
- LockedHandleGlyph.cs
- BevelBitmapEffect.cs
- InvalidPipelineStoreException.cs
- KeyInterop.cs
- ColorInterpolationModeValidation.cs
- NativeRecognizer.cs
- BrowserDefinition.cs
- TraceHandler.cs
- ByteAnimationUsingKeyFrames.cs
- HtmlContainerControl.cs
- QuaternionRotation3D.cs
- AppendHelper.cs
- HttpRequest.cs
- StringOutput.cs
- XmlUnspecifiedAttribute.cs
- PackageDigitalSignatureManager.cs
- AttachmentService.cs
- TransformedBitmap.cs
- XamlRtfConverter.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DriveInfo.cs
- SHA384Managed.cs
- SortQuery.cs
- OleDbCommand.cs
- ToolStripItemImageRenderEventArgs.cs
- ColorTransform.cs
- DataGridColumnCollection.cs
- MsmqIntegrationBinding.cs
- HostSecurityManager.cs
- ExpandedProjectionNode.cs
- PrintPreviewGraphics.cs
- DocumentViewerConstants.cs
- DiscreteKeyFrames.cs
- SqlMethodAttribute.cs
- ObjectNavigationPropertyMapping.cs