Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataPropertyCollection.cs / 2 / 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
- _AutoWebProxyScriptEngine.cs
- PropertyStore.cs
- EndpointDiscoveryBehavior.cs
- PerCallInstanceContextProvider.cs
- MailAddressCollection.cs
- TrackingMemoryStream.cs
- QualificationDataAttribute.cs
- ContainerUIElement3D.cs
- CheckStoreFileValidityRequest.cs
- GridErrorDlg.cs
- EntitySet.cs
- _ListenerRequestStream.cs
- HttpPostedFileBase.cs
- SettingsContext.cs
- BindValidationContext.cs
- GetWinFXPath.cs
- ActivitySurrogate.cs
- ListBoxChrome.cs
- HitTestDrawingContextWalker.cs
- PolyQuadraticBezierSegment.cs
- LocalTransaction.cs
- HtmlSelect.cs
- MouseGesture.cs
- httpapplicationstate.cs
- XmlSchemaCompilationSettings.cs
- DispatchRuntime.cs
- HttpHandlersSection.cs
- MatrixUtil.cs
- Comparer.cs
- LightweightCodeGenerator.cs
- ErrorFormatterPage.cs
- TransformProviderWrapper.cs
- OleDbError.cs
- DataControlFieldCell.cs
- FlagsAttribute.cs
- DataGridViewCellLinkedList.cs
- ActivityStateRecord.cs
- NodeInfo.cs
- UrlAuthFailedErrorFormatter.cs
- EDesignUtil.cs
- AxDesigner.cs
- BufferedWebEventProvider.cs
- MenuItem.cs
- TextBoxAutomationPeer.cs
- ByteStorage.cs
- TableItemStyle.cs
- CryptoProvider.cs
- Soap12FormatExtensions.cs
- ItemDragEvent.cs
- RtType.cs
- InputReport.cs
- CreatingCookieEventArgs.cs
- UpdateCompiler.cs
- LinkUtilities.cs
- TextAnchor.cs
- StructuredTypeInfo.cs
- NumericUpDownAccelerationCollection.cs
- InputManager.cs
- DesignBinding.cs
- RegionIterator.cs
- GenericRootAutomationPeer.cs
- SHA1CryptoServiceProvider.cs
- ResXDataNode.cs
- FileDialog_Vista.cs
- XmlSchemaSequence.cs
- ChtmlPhoneCallAdapter.cs
- DbProviderFactories.cs
- Configuration.cs
- XmlSchema.cs
- Page.cs
- SQLCharsStorage.cs
- ColorComboBox.cs
- DataGridPageChangedEventArgs.cs
- SqlStream.cs
- ProxyWebPartConnectionCollection.cs
- SchemaImporter.cs
- SafeEventHandle.cs
- Msec.cs
- WmpBitmapEncoder.cs
- ExtendedPropertiesHandler.cs
- Array.cs
- PlainXmlDeserializer.cs
- PipelineDeploymentState.cs
- ExpanderAutomationPeer.cs
- SqlUserDefinedAggregateAttribute.cs
- TranslateTransform.cs
- IPHostEntry.cs
- UnmanagedBitmapWrapper.cs
- AsyncInvokeContext.cs
- Stylesheet.cs
- KeyValueConfigurationCollection.cs
- ApplicationBuildProvider.cs
- DeleteHelper.cs
- TableParagraph.cs
- WbmpConverter.cs
- DiscriminatorMap.cs
- MexHttpsBindingElement.cs
- X509Utils.cs
- Descriptor.cs
- CollectionViewGroupInternal.cs