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
- CompModSwitches.cs
- VisualTreeUtils.cs
- DefaultBindingPropertyAttribute.cs
- RuntimeConfig.cs
- HtmlValidatorAdapter.cs
- CapabilitiesRule.cs
- UmAlQuraCalendar.cs
- SchemaObjectWriter.cs
- XmlSchemaImport.cs
- HostedBindingBehavior.cs
- DataGridViewRowsAddedEventArgs.cs
- GridViewSelectEventArgs.cs
- NamespaceCollection.cs
- TypeDescriptionProvider.cs
- AvTraceDetails.cs
- RectConverter.cs
- ImportFileRequest.cs
- GeneratedContractType.cs
- ManagedWndProcTracker.cs
- ApplicationFileCodeDomTreeGenerator.cs
- WsatConfiguration.cs
- DataKeyArray.cs
- WindowsListViewItem.cs
- IisTraceListener.cs
- FlowDocumentView.cs
- SafeRegistryKey.cs
- ThicknessAnimation.cs
- FixedSOMTableRow.cs
- Missing.cs
- UrlPropertyAttribute.cs
- BoundingRectTracker.cs
- ActivityDefaults.cs
- DiscoveryClientDuplexChannel.cs
- Random.cs
- ReflectionPermission.cs
- ImageFormat.cs
- WhiteSpaceTrimStringConverter.cs
- DataGridViewCellMouseEventArgs.cs
- FrameworkTextComposition.cs
- SqlUtils.cs
- GridViewDeletedEventArgs.cs
- CodeEntryPointMethod.cs
- SchemaInfo.cs
- ViewEventArgs.cs
- SqlUnionizer.cs
- TextBoxLine.cs
- HtmlTable.cs
- TextAutomationPeer.cs
- ComplexLine.cs
- HttpPostedFile.cs
- SmiContextFactory.cs
- EdmTypeAttribute.cs
- KeyboardNavigation.cs
- UpdateEventArgs.cs
- SqlGatherProducedAliases.cs
- EmptyReadOnlyDictionaryInternal.cs
- FastEncoder.cs
- TableAdapterManagerHelper.cs
- InlinedAggregationOperator.cs
- SingleConverter.cs
- QilCloneVisitor.cs
- DeadCharTextComposition.cs
- TableRowsCollectionEditor.cs
- XmlSchemaSet.cs
- PeerReferralPolicy.cs
- AtomMaterializer.cs
- AccessedThroughPropertyAttribute.cs
- FtpWebResponse.cs
- XamlSerializer.cs
- Crypto.cs
- SecurityDocument.cs
- KeyPullup.cs
- AssemblyContextControlItem.cs
- OrderedParallelQuery.cs
- FixedSOMSemanticBox.cs
- WinEventWrap.cs
- CfgParser.cs
- HttpRequestWrapper.cs
- StrokeIntersection.cs
- Funcletizer.cs
- SamlAssertionKeyIdentifierClause.cs
- TreeNodeStyleCollection.cs
- XmlDeclaration.cs
- DataObjectMethodAttribute.cs
- Perspective.cs
- ImmComposition.cs
- TypeReference.cs
- SqlClientPermission.cs
- Expressions.cs
- BatchWriter.cs
- DataGridViewRowStateChangedEventArgs.cs
- PackWebRequestFactory.cs
- NamespaceInfo.cs
- BindingValueChangedEventArgs.cs
- EntityDataSourceView.cs
- SegmentInfo.cs
- StylusPointPropertyInfoDefaults.cs
- FixedHyperLink.cs
- DriveNotFoundException.cs
- DataStreams.cs