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
- DesignerDataView.cs
- CustomCategoryAttribute.cs
- ToolStripSeparator.cs
- DecimalKeyFrameCollection.cs
- IDispatchConstantAttribute.cs
- ContentOnlyMessage.cs
- VarRemapper.cs
- PageRequestManager.cs
- CustomTypeDescriptor.cs
- StoreContentChangedEventArgs.cs
- ConfigurationStrings.cs
- FilteredXmlReader.cs
- AccessText.cs
- FixedSOMGroup.cs
- LocalIdKeyIdentifierClause.cs
- WorkflowMessageEventArgs.cs
- CoTaskMemUnicodeSafeHandle.cs
- SequentialUshortCollection.cs
- NavigationPropertyEmitter.cs
- KeyNotFoundException.cs
- BaseDataBoundControl.cs
- SmtpReplyReaderFactory.cs
- TargetFrameworkAttribute.cs
- SmtpFailedRecipientException.cs
- EmptyControlCollection.cs
- ObjectViewListener.cs
- AnnotationResource.cs
- StructuredTypeEmitter.cs
- ConfigurationStrings.cs
- ComplexTypeEmitter.cs
- HttpProcessUtility.cs
- MinimizableAttributeTypeConverter.cs
- AutoResetEvent.cs
- WebPartCloseVerb.cs
- QilTypeChecker.cs
- TextFormatterImp.cs
- _ShellExpression.cs
- RequestQueue.cs
- ReflectionUtil.cs
- ISAPIApplicationHost.cs
- ToolStripMenuItem.cs
- Authorization.cs
- ExpressionList.cs
- CompositeDispatchFormatter.cs
- PrincipalPermission.cs
- StatusBarDesigner.cs
- SerTrace.cs
- WSFederationHttpSecurityMode.cs
- OleDbErrorCollection.cs
- CompatibleComparer.cs
- ParsedAttributeCollection.cs
- RadioButtonPopupAdapter.cs
- UndoManager.cs
- Base64Decoder.cs
- TimeSpanStorage.cs
- WebControlAdapter.cs
- ThreadPool.cs
- RichTextBox.cs
- TreeWalkHelper.cs
- FormatConvertedBitmap.cs
- RelationshipEndMember.cs
- PropertyChangeTracker.cs
- ColorTransformHelper.cs
- FactoryRecord.cs
- WebEvents.cs
- ExistsInCollection.cs
- DesigntimeLicenseContext.cs
- AnonymousIdentificationModule.cs
- DataErrorValidationRule.cs
- DateTime.cs
- TypeUtils.cs
- QueryStatement.cs
- SignatureHelper.cs
- XmlSchemaAnyAttribute.cs
- BufferedGraphics.cs
- MouseBinding.cs
- NotifyCollectionChangedEventArgs.cs
- ReversePositionQuery.cs
- MeasureItemEvent.cs
- QuaternionRotation3D.cs
- StyleSelector.cs
- entitydatasourceentitysetnameconverter.cs
- ArrayTypeMismatchException.cs
- FieldInfo.cs
- AffineTransform3D.cs
- XmlNullResolver.cs
- ManipulationStartingEventArgs.cs
- BooleanFacetDescriptionElement.cs
- Padding.cs
- Columns.cs
- DateTimePicker.cs
- ExpandSegmentCollection.cs
- iisPickupDirectory.cs
- FilteredAttributeCollection.cs
- RawStylusInputCustomDataList.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- AssemblyBuilder.cs
- LayeredChannelFactory.cs
- Dictionary.cs
- TextCollapsingProperties.cs