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
- UniqueEventHelper.cs
- DrawToolTipEventArgs.cs
- KeyValueInternalCollection.cs
- Membership.cs
- SingleAnimationUsingKeyFrames.cs
- ListViewHitTestInfo.cs
- MemberPath.cs
- DbConnectionPoolGroup.cs
- System.Data.OracleClient_BID.cs
- HandledEventArgs.cs
- ThreadStartException.cs
- Or.cs
- DataGrid.cs
- VarRefManager.cs
- OdbcReferenceCollection.cs
- RowVisual.cs
- RuntimeCompatibilityAttribute.cs
- IImplicitResourceProvider.cs
- FrameAutomationPeer.cs
- IconBitmapDecoder.cs
- DataRecordInternal.cs
- MimeFormReflector.cs
- DbConnectionPoolGroup.cs
- TouchFrameEventArgs.cs
- FileCodeGroup.cs
- TagElement.cs
- NativeMethods.cs
- StringAnimationUsingKeyFrames.cs
- XpsFilter.cs
- DbMetaDataFactory.cs
- SafeEventHandle.cs
- EasingFunctionBase.cs
- XmlCharType.cs
- TableRowGroup.cs
- SettingsSection.cs
- TextEditorTyping.cs
- CalendarData.cs
- RealProxy.cs
- HtmlSelectionListAdapter.cs
- WebServiceReceiveDesigner.cs
- FontFamilyConverter.cs
- DispatcherProcessingDisabled.cs
- DependencySource.cs
- ToolStripDropDownItem.cs
- NumberSubstitution.cs
- DataGridViewCellStateChangedEventArgs.cs
- MissingFieldException.cs
- AnnotationHighlightLayer.cs
- HttpCapabilitiesSectionHandler.cs
- ProfilePropertyNameValidator.cs
- ThousandthOfEmRealDoubles.cs
- MeasureItemEvent.cs
- ActionNotSupportedException.cs
- CodeDomLoader.cs
- CompositeActivityCodeGenerator.cs
- SplitContainerDesigner.cs
- DropShadowBitmapEffect.cs
- ListItemConverter.cs
- UrlUtility.cs
- ToolStripTextBox.cs
- ParameterCollection.cs
- EncodingTable.cs
- GridLengthConverter.cs
- UriTemplateTable.cs
- TextDecorationUnitValidation.cs
- ExpressionTextBox.xaml.cs
- ColorTranslator.cs
- TimeZone.cs
- WindowsToolbarItemAsMenuItem.cs
- XmlSchemaValidator.cs
- ISAPIApplicationHost.cs
- ToolStripPanelSelectionBehavior.cs
- InstanceOwnerQueryResult.cs
- FileChangeNotifier.cs
- ThreadStartException.cs
- SqlDataSourceCustomCommandEditor.cs
- CommandDevice.cs
- User.cs
- CombinedGeometry.cs
- ComponentEditorForm.cs
- TokenBasedSet.cs
- XamlReaderHelper.cs
- WorkflowRequestContext.cs
- PageDeviceFont.cs
- DataGridViewImageColumn.cs
- DataRelation.cs
- CompoundFileReference.cs
- ConfigurationProperty.cs
- EmptyEnumerable.cs
- UriTemplate.cs
- WebScriptEnablingBehavior.cs
- PartitionResolver.cs
- ProxyWebPartManager.cs
- SetterBaseCollection.cs
- MimeXmlReflector.cs
- EffectiveValueEntry.cs
- Module.cs
- UserUseLicenseDictionaryLoader.cs
- EntitySet.cs
- OraclePermission.cs