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
- HebrewNumber.cs
- PointLightBase.cs
- DataReaderContainer.cs
- AudioFormatConverter.cs
- StringSource.cs
- StrokeCollectionConverter.cs
- StringConverter.cs
- DataMemberConverter.cs
- CollectionEditVerbManager.cs
- _NegoStream.cs
- RelationshipNavigation.cs
- WindowsRichEdit.cs
- SchemaCollectionPreprocessor.cs
- PreservationFileReader.cs
- DbConnectionPoolGroup.cs
- CheckBox.cs
- Attributes.cs
- GeneralTransform.cs
- Msec.cs
- ReadWriteObjectLock.cs
- XD.cs
- BulletedListEventArgs.cs
- COM2PropertyDescriptor.cs
- VectorConverter.cs
- HtmlAnchor.cs
- TextBoxBase.cs
- PersonalizationStateQuery.cs
- CodeGenHelper.cs
- WeakReadOnlyCollection.cs
- GeometryDrawing.cs
- OletxCommittableTransaction.cs
- TemplatePartAttribute.cs
- InlinedAggregationOperatorEnumerator.cs
- StorageAssociationSetMapping.cs
- EventRouteFactory.cs
- _ShellExpression.cs
- KeyedHashAlgorithm.cs
- SpotLight.cs
- TextParagraphView.cs
- AccessorTable.cs
- RTLAwareMessageBox.cs
- HtmlInputReset.cs
- DataTableMapping.cs
- CellQuery.cs
- SettingsPropertyIsReadOnlyException.cs
- DropSource.cs
- RemoteCryptoTokenProvider.cs
- SQLGuid.cs
- DocumentOrderQuery.cs
- UInt16.cs
- TextUtf8RawTextWriter.cs
- TextParaLineResult.cs
- TreeIterators.cs
- BooleanFunctions.cs
- ToolStripSplitButton.cs
- WebRequestModuleElement.cs
- RelationshipDetailsRow.cs
- IntSecurity.cs
- EntityStoreSchemaGenerator.cs
- SQLGuidStorage.cs
- LayeredChannelFactory.cs
- GradientStopCollection.cs
- EnvironmentPermission.cs
- StoragePropertyMapping.cs
- LOSFormatter.cs
- ManagementScope.cs
- PermissionRequestEvidence.cs
- ResolveNameEventArgs.cs
- IRCollection.cs
- StylusCollection.cs
- SecurityUtils.cs
- DotAtomReader.cs
- ValidatorCollection.cs
- MultidimensionalArrayItemReference.cs
- DataTableReaderListener.cs
- DeviceContext2.cs
- PageDeviceFont.cs
- PermissionSetEnumerator.cs
- ShapingWorkspace.cs
- WpfPayload.cs
- DeflateStream.cs
- TextTreeFixupNode.cs
- WindowsGraphicsWrapper.cs
- ListSortDescriptionCollection.cs
- MSAAEventDispatcher.cs
- DataSourceHelper.cs
- NotifyParentPropertyAttribute.cs
- PrintingPermissionAttribute.cs
- _UriSyntax.cs
- ToolStripEditorManager.cs
- EnumerableCollectionView.cs
- TextRenderer.cs
- TextComposition.cs
- LambdaSerializationException.cs
- MouseActionConverter.cs
- XMLDiffLoader.cs
- DynamicDocumentPaginator.cs
- Trace.cs
- NavigationPropertyEmitter.cs
- SharedPerformanceCounter.cs