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
- SoapEnumAttribute.cs
- TableCellCollection.cs
- XmlName.cs
- BufferCache.cs
- Debug.cs
- AlgoModule.cs
- XmlSchemaIdentityConstraint.cs
- ConnectionManagementElement.cs
- SqlParameter.cs
- AutomationEventArgs.cs
- GCHandleCookieTable.cs
- CodeMemberMethod.cs
- EmptyQuery.cs
- SQLChars.cs
- DataGridCommandEventArgs.cs
- ScrollableControl.cs
- DecoderFallbackWithFailureFlag.cs
- Scene3D.cs
- DesignerActionPanel.cs
- PasswordRecovery.cs
- SqlTransaction.cs
- LocalizabilityAttribute.cs
- AnnotationResource.cs
- Expressions.cs
- CompensationParticipant.cs
- EnumerableRowCollectionExtensions.cs
- AspCompat.cs
- HostingEnvironment.cs
- ApplicationContext.cs
- WinEventHandler.cs
- FileIOPermission.cs
- EntitySqlQueryBuilder.cs
- InvalidOperationException.cs
- SessionParameter.cs
- PlainXmlSerializer.cs
- DataGridViewHitTestInfo.cs
- AutomationPropertyInfo.cs
- SurrogateEncoder.cs
- NamespaceList.cs
- DebugController.cs
- ValidationError.cs
- Timer.cs
- NextPreviousPagerField.cs
- HMACSHA384.cs
- ExternalFile.cs
- DrawingContextWalker.cs
- ProfilePropertySettingsCollection.cs
- CompiledQuery.cs
- CustomPopupPlacement.cs
- _StreamFramer.cs
- XmlDocumentSchema.cs
- FixedPageProcessor.cs
- StoreItemCollection.Loader.cs
- MD5HashHelper.cs
- AsymmetricSecurityProtocolFactory.cs
- embossbitmapeffect.cs
- TokenFactoryCredential.cs
- ImportCatalogPart.cs
- InputScope.cs
- DataControlFieldHeaderCell.cs
- ToolStripOverflowButton.cs
- DateTimeOffset.cs
- AnnotationResourceChangedEventArgs.cs
- AggregateNode.cs
- RegexGroupCollection.cs
- SmtpException.cs
- LambdaReference.cs
- CheckoutException.cs
- Rectangle.cs
- DecimalAnimationBase.cs
- DataGridViewCellParsingEventArgs.cs
- CacheSection.cs
- RMEnrollmentPage3.cs
- TreeNode.cs
- ExpressionStringBuilder.cs
- BuilderPropertyEntry.cs
- Debug.cs
- validation.cs
- SqlPersonalizationProvider.cs
- XmlAttributeCache.cs
- LogSwitch.cs
- KoreanLunisolarCalendar.cs
- TextPenaltyModule.cs
- EntityContainerRelationshipSet.cs
- ReaderWriterLock.cs
- PermissionAttributes.cs
- WebServiceErrorEvent.cs
- StdValidatorsAndConverters.cs
- wmiutil.cs
- QilFunction.cs
- InstanceDataCollectionCollection.cs
- LabelEditEvent.cs
- WebBrowser.cs
- BlobPersonalizationState.cs
- OutputCacheModule.cs
- MergePropertyDescriptor.cs
- DataRowChangeEvent.cs
- __ConsoleStream.cs
- ShaperBuffers.cs
- Rectangle.cs