Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataPropertyCollection.cs / 1305376 / MetadataPropertyCollection.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.Reflection;
using System.Data.Common.Utils;
namespace System.Data.Metadata.Edm
{
///
/// Metadata collection class supporting delay-loading of system item attributes and
/// extended attributes.
///
internal sealed class MetadataPropertyCollection : MetadataCollection
{
///
/// Constructor taking item.
///
/// Item with which the collection is associated.
internal MetadataPropertyCollection(MetadataItem item)
: base(GetSystemMetadataProperties(item))
{
}
private readonly static Memoizer s_itemTypeMemoizer =
new Memoizer(clrType => new ItemTypeInformation(clrType), null);
// Given an item, returns all system type attributes for the item.
private static IEnumerable GetSystemMetadataProperties(MetadataItem item)
{
EntityUtil.CheckArgumentNull(item, "item");
Type type = item.GetType();
ItemTypeInformation itemTypeInformation = GetItemTypeInformation(type);
return itemTypeInformation.GetItemAttributes(item);
}
// Retrieves metadata for type.
private static ItemTypeInformation GetItemTypeInformation(Type clrType)
{
return s_itemTypeMemoizer.Evaluate(clrType);
}
///
/// Encapsulates information about system item attributes for a particular item type.
///
private class ItemTypeInformation
{
///
/// Retrieves system attribute information for the given type.
/// Requires: type must derive from MetadataItem
///
/// Type
internal ItemTypeInformation(Type clrType)
{
Debug.Assert(null != clrType);
_itemProperties = GetItemProperties(clrType);
}
private readonly List _itemProperties;
// Returns system item attributes for the given item.
internal IEnumerable GetItemAttributes(MetadataItem item)
{
foreach (ItemPropertyInfo propertyInfo in _itemProperties)
{
yield return propertyInfo.GetMetadataProperty(item);
}
}
// Gets type information for item with the given type. Uses cached information where
// available.
private static List GetItemProperties(Type clrType)
{
List result = new List();
foreach (PropertyInfo propertyInfo in clrType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
{
foreach (MetadataPropertyAttribute attribute in propertyInfo.GetCustomAttributes(
typeof(MetadataPropertyAttribute), false))
{
result.Add(new ItemPropertyInfo(propertyInfo, attribute));
}
}
return result;
}
}
///
/// Encapsulates information about a CLR property of an item class.
///
private class ItemPropertyInfo
{
///
/// Initialize information.
/// Requires: attribute must belong to the given property.
///
/// Property referenced.
/// Attribute for the property.
internal ItemPropertyInfo(PropertyInfo propertyInfo, MetadataPropertyAttribute attribute)
{
Debug.Assert(null != propertyInfo);
Debug.Assert(null != attribute);
_propertyInfo = propertyInfo;
_attribute = attribute;
}
private readonly MetadataPropertyAttribute _attribute;
private readonly PropertyInfo _propertyInfo;
///
/// Given an item, returns an instance of the item attribute described by this class.
///
/// Item from which to retrieve attribute.
/// Item attribute.
internal MetadataProperty GetMetadataProperty(MetadataItem item)
{
return new MetadataProperty(_propertyInfo.Name, _attribute.Type, _attribute.IsCollectionType,
new MetadataPropertyValue(_propertyInfo, item));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.Reflection;
using System.Data.Common.Utils;
namespace System.Data.Metadata.Edm
{
///
/// Metadata collection class supporting delay-loading of system item attributes and
/// extended attributes.
///
internal sealed class MetadataPropertyCollection : MetadataCollection
{
///
/// Constructor taking item.
///
/// Item with which the collection is associated.
internal MetadataPropertyCollection(MetadataItem item)
: base(GetSystemMetadataProperties(item))
{
}
private readonly static Memoizer s_itemTypeMemoizer =
new Memoizer(clrType => new ItemTypeInformation(clrType), null);
// Given an item, returns all system type attributes for the item.
private static IEnumerable GetSystemMetadataProperties(MetadataItem item)
{
EntityUtil.CheckArgumentNull(item, "item");
Type type = item.GetType();
ItemTypeInformation itemTypeInformation = GetItemTypeInformation(type);
return itemTypeInformation.GetItemAttributes(item);
}
// Retrieves metadata for type.
private static ItemTypeInformation GetItemTypeInformation(Type clrType)
{
return s_itemTypeMemoizer.Evaluate(clrType);
}
///
/// Encapsulates information about system item attributes for a particular item type.
///
private class ItemTypeInformation
{
///
/// Retrieves system attribute information for the given type.
/// Requires: type must derive from MetadataItem
///
/// Type
internal ItemTypeInformation(Type clrType)
{
Debug.Assert(null != clrType);
_itemProperties = GetItemProperties(clrType);
}
private readonly List _itemProperties;
// Returns system item attributes for the given item.
internal IEnumerable GetItemAttributes(MetadataItem item)
{
foreach (ItemPropertyInfo propertyInfo in _itemProperties)
{
yield return propertyInfo.GetMetadataProperty(item);
}
}
// Gets type information for item with the given type. Uses cached information where
// available.
private static List GetItemProperties(Type clrType)
{
List result = new List();
foreach (PropertyInfo propertyInfo in clrType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
{
foreach (MetadataPropertyAttribute attribute in propertyInfo.GetCustomAttributes(
typeof(MetadataPropertyAttribute), false))
{
result.Add(new ItemPropertyInfo(propertyInfo, attribute));
}
}
return result;
}
}
///
/// Encapsulates information about a CLR property of an item class.
///
private class ItemPropertyInfo
{
///
/// Initialize information.
/// Requires: attribute must belong to the given property.
///
/// Property referenced.
/// Attribute for the property.
internal ItemPropertyInfo(PropertyInfo propertyInfo, MetadataPropertyAttribute attribute)
{
Debug.Assert(null != propertyInfo);
Debug.Assert(null != attribute);
_propertyInfo = propertyInfo;
_attribute = attribute;
}
private readonly MetadataPropertyAttribute _attribute;
private readonly PropertyInfo _propertyInfo;
///
/// Given an item, returns an instance of the item attribute described by this class.
///
/// Item from which to retrieve attribute.
/// Item attribute.
internal MetadataProperty GetMetadataProperty(MetadataItem item)
{
return new MetadataProperty(_propertyInfo.Name, _attribute.Type, _attribute.IsCollectionType,
new MetadataPropertyValue(_propertyInfo, item));
}
}
}
}
// 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
- ReadWriteObjectLock.cs
- VSWCFServiceContractGenerator.cs
- BoundingRectTracker.cs
- CqlErrorHelper.cs
- WindowsAuthenticationEventArgs.cs
- Exceptions.cs
- RouteParser.cs
- Queue.cs
- DomainUpDown.cs
- unsafenativemethodsother.cs
- CustomActivityDesigner.cs
- _FixedSizeReader.cs
- ZipIOCentralDirectoryBlock.cs
- BaseCollection.cs
- CodeExpressionCollection.cs
- KeyValueConfigurationElement.cs
- ListViewAutomationPeer.cs
- BaseTemplateParser.cs
- ValueConversionAttribute.cs
- NavigationWindowAutomationPeer.cs
- TextCompositionEventArgs.cs
- _SSPIWrapper.cs
- EmbeddedObject.cs
- MemberInfoSerializationHolder.cs
- MetadataFile.cs
- ColorAnimationUsingKeyFrames.cs
- BitmapPalettes.cs
- BamlResourceContent.cs
- cache.cs
- ConsoleKeyInfo.cs
- X509PeerCertificateAuthentication.cs
- AlphabeticalEnumConverter.cs
- AssemblyResourceLoader.cs
- XamlStream.cs
- ContentPlaceHolder.cs
- OperationAbortedException.cs
- ProcessHostMapPath.cs
- DetailsViewCommandEventArgs.cs
- SqlConnectionHelper.cs
- Pointer.cs
- DesignerWebPartChrome.cs
- Latin1Encoding.cs
- ThemeConfigurationDialog.cs
- LayoutEditorPart.cs
- LocalServiceSecuritySettingsElement.cs
- FileCodeGroup.cs
- Journaling.cs
- InteropBitmapSource.cs
- ViewBase.cs
- DurableErrorHandler.cs
- DragDeltaEventArgs.cs
- DbDataReader.cs
- XmlSerializerNamespaces.cs
- GCHandleCookieTable.cs
- CriticalFinalizerObject.cs
- CleanUpVirtualizedItemEventArgs.cs
- CoordinationService.cs
- ResourceSet.cs
- ADConnectionHelper.cs
- MSAAEventDispatcher.cs
- HGlobalSafeHandle.cs
- CustomCategoryAttribute.cs
- SelectionEditingBehavior.cs
- SerialStream.cs
- StylusPointProperties.cs
- MimeTypePropertyAttribute.cs
- _SafeNetHandles.cs
- BitmapInitialize.cs
- XmlNodeChangedEventArgs.cs
- GregorianCalendarHelper.cs
- ModifierKeysConverter.cs
- WindowsAuthenticationEventArgs.cs
- WindowsUpDown.cs
- ElementsClipboardData.cs
- SQLMoneyStorage.cs
- XPathNodePointer.cs
- Encoding.cs
- SourceFileBuildProvider.cs
- SecurityTokenRequirement.cs
- DefaultValueMapping.cs
- DataObjectEventArgs.cs
- RIPEMD160.cs
- Point4DValueSerializer.cs
- cryptoapiTransform.cs
- SmiMetaDataProperty.cs
- InvalidPrinterException.cs
- MatcherBuilder.cs
- TreeIterator.cs
- WebConfigurationHostFileChange.cs
- BitmapEffect.cs
- TextServicesDisplayAttribute.cs
- Inline.cs
- DataGridRow.cs
- DefaultTextStoreTextComposition.cs
- QueryStoreStatusRequest.cs
- DataGridColumn.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- CngKeyBlobFormat.cs
- BaseProcessor.cs
- RotationValidation.cs