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
- HttpModule.cs
- XpsSerializationManagerAsync.cs
- AppDomainFactory.cs
- WeakEventManager.cs
- QueryAccessibilityHelpEvent.cs
- TypeConverterAttribute.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- SqlInternalConnectionSmi.cs
- DataBoundControlAdapter.cs
- DispatchChannelSink.cs
- NamedPipeConnectionPoolSettingsElement.cs
- ByteAnimation.cs
- DependencyObject.cs
- Operand.cs
- PersonalizationProviderHelper.cs
- RequestCacheManager.cs
- HostedController.cs
- DecoderFallbackWithFailureFlag.cs
- XmlDesignerDataSourceView.cs
- HttpRequestCacheValidator.cs
- ConfigurationManagerInternal.cs
- CompatibleComparer.cs
- LoginCancelEventArgs.cs
- CounterNameConverter.cs
- infer.cs
- MenuBase.cs
- Helper.cs
- SQLInt64Storage.cs
- XmlQualifiedNameTest.cs
- HtmlImage.cs
- CorrelationScope.cs
- Brush.cs
- OracleConnectionFactory.cs
- DocumentSequence.cs
- DependencyObjectProvider.cs
- TrustManagerMoreInformation.cs
- CellCreator.cs
- ObjectSecurity.cs
- EntityDataSourceDesigner.cs
- InternalDuplexChannelListener.cs
- relpropertyhelper.cs
- ParameterBuilder.cs
- XamlGridLengthSerializer.cs
- TextDecorationLocationValidation.cs
- SqlRemoveConstantOrderBy.cs
- DesignRelationCollection.cs
- relpropertyhelper.cs
- PropertyInformationCollection.cs
- PointCollection.cs
- ConsoleEntryPoint.cs
- DependencyPropertyKey.cs
- HttpValueCollection.cs
- TouchPoint.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- ZoneIdentityPermission.cs
- DataSourceControl.cs
- EntityContainerRelationshipSetEnd.cs
- Queue.cs
- AccessText.cs
- ProgressChangedEventArgs.cs
- CopyNamespacesAction.cs
- MailWebEventProvider.cs
- XmlChildEnumerator.cs
- ClientSettingsProvider.cs
- ObservableDictionary.cs
- MeshGeometry3D.cs
- WaitHandle.cs
- Selector.cs
- SqlProvider.cs
- StrongName.cs
- EmptyWorkItem.cs
- TransformerInfo.cs
- TransformPatternIdentifiers.cs
- Switch.cs
- AnonymousIdentificationModule.cs
- SessionEndingEventArgs.cs
- HttpClientCertificate.cs
- DataGridCell.cs
- ScriptingProfileServiceSection.cs
- ScopelessEnumAttribute.cs
- SqlDataSourceEnumerator.cs
- KernelTypeValidation.cs
- SqlMethodTransformer.cs
- Condition.cs
- _ProxyChain.cs
- InputScopeNameConverter.cs
- FileDialogCustomPlace.cs
- CollectionConverter.cs
- Rotation3D.cs
- ProcessInputEventArgs.cs
- CodeTypeReferenceCollection.cs
- SoapClientMessage.cs
- MappingItemCollection.cs
- ExtenderControl.cs
- DbCommandDefinition.cs
- ToolStripComboBox.cs
- ControlLocalizer.cs
- XmlNode.cs
- XPathSelectionIterator.cs
- BamlLocalizableResource.cs