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
- InitializationEventAttribute.cs
- UrlMapping.cs
- EventDescriptorCollection.cs
- WbemProvider.cs
- FilteredDataSetHelper.cs
- XmlHierarchicalEnumerable.cs
- ElementHostPropertyMap.cs
- UpdateRecord.cs
- ContentType.cs
- LocationEnvironment.cs
- SafeSecurityHandles.cs
- EntityDesignPluralizationHandler.cs
- RangeValuePatternIdentifiers.cs
- PageAsyncTaskManager.cs
- OdbcStatementHandle.cs
- HMACRIPEMD160.cs
- RuntimeArgumentHandle.cs
- CredentialCache.cs
- CharacterShapingProperties.cs
- PrtTicket_Base.cs
- Msmq4PoisonHandler.cs
- TextDecorationUnitValidation.cs
- Matrix.cs
- DisplayNameAttribute.cs
- HtmlSelectionListAdapter.cs
- VisualStyleRenderer.cs
- WebPartDisplayModeCancelEventArgs.cs
- XAMLParseException.cs
- LinqDataSourceDisposeEventArgs.cs
- PointAnimationClockResource.cs
- ErrorHandlerFaultInfo.cs
- XamlStyleSerializer.cs
- WindowsSolidBrush.cs
- CaseDesigner.xaml.cs
- ToolStripSplitButton.cs
- ClientConfigurationHost.cs
- ActivityStatusChangeEventArgs.cs
- PrinterResolution.cs
- Oid.cs
- ProtocolReflector.cs
- PathGeometry.cs
- HelpKeywordAttribute.cs
- EntityCollectionChangedParams.cs
- ApplicationProxyInternal.cs
- Metafile.cs
- MarkupCompiler.cs
- ContextMenuAutomationPeer.cs
- BasicCellRelation.cs
- Trace.cs
- LocalizableResourceBuilder.cs
- SmtpAuthenticationManager.cs
- FloatAverageAggregationOperator.cs
- WebServiceResponse.cs
- ModuleBuilder.cs
- ComMethodElementCollection.cs
- SQLBytesStorage.cs
- SafeMarshalContext.cs
- ISFClipboardData.cs
- HandledMouseEvent.cs
- DesignerCategoryAttribute.cs
- WebPartExportVerb.cs
- CollectionView.cs
- FixUpCollection.cs
- MimeTypeAttribute.cs
- TextParaClient.cs
- IMembershipProvider.cs
- COAUTHIDENTITY.cs
- CommandManager.cs
- GenericTextProperties.cs
- SecurityPolicySection.cs
- DrawingDrawingContext.cs
- ADMembershipUser.cs
- TraceLevelStore.cs
- Stroke2.cs
- DeviceContext.cs
- CodeSpit.cs
- GlobalizationSection.cs
- MultiViewDesigner.cs
- ColumnResizeAdorner.cs
- TableCell.cs
- DataGridViewImageCell.cs
- TextContainer.cs
- Stream.cs
- _WinHttpWebProxyDataBuilder.cs
- ExecutionEngineException.cs
- DynamicPropertyHolder.cs
- EtwTrace.cs
- InertiaRotationBehavior.cs
- StreamResourceInfo.cs
- ServiceModelDictionary.cs
- PathFigureCollection.cs
- DataGridItemCollection.cs
- XmlHelper.cs
- StylusButtonEventArgs.cs
- TickBar.cs
- Rect.cs
- XmlNodeReader.cs
- InheritanceContextHelper.cs
- VisualStyleInformation.cs
- ReferenceConverter.cs