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
- ByteStream.cs
- OdbcDataReader.cs
- UniformGrid.cs
- SoapHeaderException.cs
- EDesignUtil.cs
- AttachedAnnotationChangedEventArgs.cs
- ClientScriptItem.cs
- DataBoundControl.cs
- ClientCultureInfo.cs
- FactoryId.cs
- Stream.cs
- GridSplitter.cs
- DisplayInformation.cs
- Transactions.cs
- ColumnMapCopier.cs
- GridItem.cs
- CommandValueSerializer.cs
- SpellerInterop.cs
- SerialReceived.cs
- LinqDataView.cs
- WindowsScroll.cs
- CheckedPointers.cs
- CacheMode.cs
- IconBitmapDecoder.cs
- XmlDataContract.cs
- BinHexDecoder.cs
- TabControlEvent.cs
- CacheVirtualItemsEvent.cs
- DataGridViewHitTestInfo.cs
- GlyphRunDrawing.cs
- HttpProtocolImporter.cs
- Label.cs
- PageAsyncTaskManager.cs
- Queue.cs
- RenderData.cs
- NativeMethods.cs
- PropertyCondition.cs
- ConfigDefinitionUpdates.cs
- ThemeDirectoryCompiler.cs
- StorageModelBuildProvider.cs
- CommandBinding.cs
- VirtualPath.cs
- XPathNodeList.cs
- HtmlEncodedRawTextWriter.cs
- RemoteWebConfigurationHost.cs
- NavigatorInput.cs
- EmptyCollection.cs
- SHA512.cs
- UserInitiatedNavigationPermission.cs
- Storyboard.cs
- MetadataConversionError.cs
- ReturnEventArgs.cs
- Vector3DCollectionConverter.cs
- UTF7Encoding.cs
- MetafileHeaderWmf.cs
- IssuedTokenServiceElement.cs
- XmlSchemaResource.cs
- ProtectedProviderSettings.cs
- MobileControlsSectionHandler.cs
- ModelToObjectValueConverter.cs
- InOutArgument.cs
- TextBoxAutomationPeer.cs
- TypedAsyncResult.cs
- CalendarDesigner.cs
- SqlFileStream.cs
- ControlCollection.cs
- XmlWellformedWriter.cs
- SectionXmlInfo.cs
- AlgoModule.cs
- DataServiceProcessingPipelineEventArgs.cs
- HierarchicalDataTemplate.cs
- DataRowExtensions.cs
- ErrorProvider.cs
- SqlFacetAttribute.cs
- CopyAction.cs
- StateItem.cs
- AttributeSetAction.cs
- httpapplicationstate.cs
- Helpers.cs
- EntitySqlException.cs
- ContextProperty.cs
- WorkflowOperationBehavior.cs
- TreeBuilderXamlTranslator.cs
- WebPartUtil.cs
- HttpProcessUtility.cs
- Track.cs
- LineMetrics.cs
- FormViewPageEventArgs.cs
- ThrowHelper.cs
- WizardSideBarListControlItem.cs
- Root.cs
- InputLanguageEventArgs.cs
- XhtmlStyleClass.cs
- NetworkAddressChange.cs
- InlineCollection.cs
- OracleTransaction.cs
- DataGridColumn.cs
- XmlSchemaSimpleContentRestriction.cs
- CharAnimationUsingKeyFrames.cs
- RawStylusInputCustomData.cs