Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataPropertyCollection.cs / 1 / MetadataPropertyCollection.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....],[....]
//---------------------------------------------------------------------
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 [....],[....]
//---------------------------------------------------------------------
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
- OdbcTransaction.cs
- RemotingConfiguration.cs
- StylusPointPropertyInfoDefaults.cs
- OTFRasterizer.cs
- InstanceDataCollectionCollection.cs
- NodeLabelEditEvent.cs
- SchemaDeclBase.cs
- ReverseInheritProperty.cs
- GeneratedContractType.cs
- CopyOfAction.cs
- DataGridItemEventArgs.cs
- GenerateHelper.cs
- ValidationResult.cs
- NumericUpDownAcceleration.cs
- CfgSemanticTag.cs
- TransactionException.cs
- BamlResourceDeserializer.cs
- LayoutTable.cs
- ResolveMatchesMessage11.cs
- CheckBoxRenderer.cs
- BamlLocalizableResource.cs
- CodeLinePragma.cs
- HostingPreferredMapPath.cs
- IProvider.cs
- RectAnimationClockResource.cs
- Transform3DGroup.cs
- OptimalTextSource.cs
- CommandValueSerializer.cs
- SourceSwitch.cs
- HScrollProperties.cs
- BufferModeSettings.cs
- PersonalizationState.cs
- DataBindingHandlerAttribute.cs
- LassoSelectionBehavior.cs
- TextAnchor.cs
- InstanceLockLostException.cs
- TimeSpanValidatorAttribute.cs
- WebPartConnectionsEventArgs.cs
- HtmlTableCellCollection.cs
- WindowsFormsHelpers.cs
- ScriptingWebServicesSectionGroup.cs
- DocumentPageView.cs
- QuotaExceededException.cs
- UInt32Converter.cs
- PackWebRequestFactory.cs
- LineInfo.cs
- SessionSwitchEventArgs.cs
- DataGridToolTip.cs
- InheritedPropertyChangedEventArgs.cs
- ActiveDocumentEvent.cs
- ModulesEntry.cs
- HttpCachePolicy.cs
- MetadataCache.cs
- UnmanagedMemoryStream.cs
- EmptyEnumerable.cs
- TemplateManager.cs
- SectionUpdates.cs
- ErrorTableItemStyle.cs
- KeyedCollection.cs
- CryptoKeySecurity.cs
- WizardStepBase.cs
- StyleXamlTreeBuilder.cs
- EdmMember.cs
- TextBlockAutomationPeer.cs
- TreeViewImageKeyConverter.cs
- RectangleHotSpot.cs
- InputDevice.cs
- GetImportedCardRequest.cs
- StylusOverProperty.cs
- HttpListenerException.cs
- DeploymentExceptionMapper.cs
- QueryCacheKey.cs
- ProcessStartInfo.cs
- SrgsSubset.cs
- TypeUtil.cs
- AssociationEndMember.cs
- BindingExpressionBase.cs
- CheckPair.cs
- BasicBrowserDialog.designer.cs
- MdiWindowListStrip.cs
- ControlSerializer.cs
- CompatibleComparer.cs
- FrameworkElementFactory.cs
- UriTemplateQueryValue.cs
- UserValidatedEventArgs.cs
- VerticalAlignConverter.cs
- MimeReflector.cs
- OdbcReferenceCollection.cs
- InstanceCreationEditor.cs
- JsonEnumDataContract.cs
- EventListenerClientSide.cs
- HtmlTextArea.cs
- Timer.cs
- XmlSchemaNotation.cs
- VarRefManager.cs
- _UncName.cs
- InvokeProviderWrapper.cs
- CacheMode.cs
- PolicyLevel.cs
- ManagementNamedValueCollection.cs