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
- ArglessEventHandlerProxy.cs
- KeyEvent.cs
- LayoutManager.cs
- SourceElementsCollection.cs
- DataGridViewTextBoxEditingControl.cs
- PersonalizationStateInfo.cs
- Message.cs
- TypeBrowser.xaml.cs
- DataListItemEventArgs.cs
- ErrorEventArgs.cs
- ContractNamespaceAttribute.cs
- XmlElementAttributes.cs
- IPHostEntry.cs
- RsaKeyGen.cs
- SystemWebSectionGroup.cs
- DbConnectionStringCommon.cs
- SHA256.cs
- DateRangeEvent.cs
- BuildProvidersCompiler.cs
- SelectionEditor.cs
- DictionaryTraceRecord.cs
- RTLAwareMessageBox.cs
- InteropAutomationProvider.cs
- CorrelationRequestContext.cs
- SchemaElementDecl.cs
- M3DUtil.cs
- SqlConnectionString.cs
- BinHexEncoder.cs
- CounterSetInstanceCounterDataSet.cs
- TableLayoutStyleCollection.cs
- FontSourceCollection.cs
- IgnoreSectionHandler.cs
- XPathAxisIterator.cs
- ReaderOutput.cs
- AsymmetricKeyExchangeFormatter.cs
- MemberPath.cs
- EmptyEnumerable.cs
- WebRequestModulesSection.cs
- TokenBasedSet.cs
- UIElementPropertyUndoUnit.cs
- DesignerProperties.cs
- ServiceHostFactory.cs
- StickyNoteHelper.cs
- ExpressionBuilder.cs
- InternalUserCancelledException.cs
- EventWaitHandleSecurity.cs
- ScrollBar.cs
- DiscoveryReferences.cs
- Int32CollectionValueSerializer.cs
- MetadataCollection.cs
- OpacityConverter.cs
- ChannelServices.cs
- ExceptionUtil.cs
- EventEntry.cs
- FlowDocumentReaderAutomationPeer.cs
- SystemNetHelpers.cs
- FixedStringLookup.cs
- DelegateHelpers.Generated.cs
- DataGridViewTopRowAccessibleObject.cs
- DbDataAdapter.cs
- CodeIndexerExpression.cs
- StyleXamlParser.cs
- UnaryNode.cs
- ColorConverter.cs
- ToolBarTray.cs
- ContextInformation.cs
- FontDialog.cs
- XmlValueConverter.cs
- RegexWorker.cs
- SqlConnectionStringBuilder.cs
- SafeArchiveContext.cs
- LinkLabel.cs
- InputReport.cs
- DbDataAdapter.cs
- MyContact.cs
- RequestSecurityToken.cs
- ExpressionPrefixAttribute.cs
- Decoder.cs
- RawAppCommandInputReport.cs
- InfocardExtendedInformationCollection.cs
- TraceLevelHelper.cs
- DataGridViewColumnEventArgs.cs
- CancellableEnumerable.cs
- SapiRecoContext.cs
- HttpCookie.cs
- DeviceFiltersSection.cs
- OdbcConnectionPoolProviderInfo.cs
- IisTraceListener.cs
- IntSecurity.cs
- CompositeKey.cs
- MediaContextNotificationWindow.cs
- FixedSchema.cs
- QualificationDataAttribute.cs
- XslTransform.cs
- AnimatedTypeHelpers.cs
- File.cs
- IProducerConsumerCollection.cs
- MemberRelationshipService.cs
- SQLGuidStorage.cs
- DetailsViewActionList.cs