MetadataProperty.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataProperty.cs / 1305376 / MetadataProperty.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; 

namespace System.Data.Metadata.Edm 
{ 
    /// 
    /// Class representing a metadata attribute for an item 
    /// 
    public sealed class MetadataProperty : MetadataItem
    {
        #region Constructors 
        /// 
        /// The constructor for MetadataProperty taking in a name, a TypeUsage object, and a value for the attribute 
        ///  
        /// The name of this MetadataProperty
        /// The TypeUsage describing the type of this MetadataProperty 
        /// The value for this attribute
        /// Thrown if typeUsage argument is null
        internal MetadataProperty(string name, TypeUsage typeUsage, object value)
        { 
            EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage");
 
            _name = name; 
            _value = value;
            _typeUsage = typeUsage; 
            _propertyKind = PropertyKind.Extended;
        }

        ///  
        /// The constructor for MetadataProperty taking in all the ingredients for creating TypeUsage and the actual value
        ///  
        /// The name of the attribute 
        /// The edm type of the attribute
        /// Whether the collection type of the given edm type should be used 
        /// The value of the attribute
        internal MetadataProperty(string name, EdmType edmType, bool isCollectionType, object value)
        {
            EntityUtil.CheckArgumentNull(edmType, "edmType"); 

            _name = name; 
            _value = value; 
            if (isCollectionType)
            { 
                _typeUsage = TypeUsage.Create(edmType.GetCollectionType());
            }
            else
            { 
                _typeUsage = TypeUsage.Create(edmType);
            } 
            _propertyKind = PropertyKind.System; 
        }
        #endregion 

        #region Fields
        private string _name;
        private PropertyKind _propertyKind; 
        private object _value;
        private TypeUsage _typeUsage; 
        #endregion 

        #region Properties 
        /// 
        /// Returns the kind of the type
        /// 
        public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.MetadataProperty; } } 

        ///  
        /// Gets the identity of this item 
        /// 
        internal override string Identity 
        {
            get
            {
                return Name; 
            }
        } 
 
        /// 
        /// Gets/Sets the name of this MetadataProperty 
        /// 
        [MetadataProperty(PrimitiveTypeKind.String, false)]
        public string Name
        { 
            get
            { 
                // The name is immutable, so it should be safe to always get it from the field 
                return _name;
            } 
        }

        /// 
        /// Gets/Sets the value of this MetadataProperty 
        /// 
        /// Thrown if the MetadataProperty instance is in readonly state 
        [MetadataProperty(typeof(Object), false)] 
        public object Value
        { 
            get
            {
                // Check if we're redirecting to an MetadataItem system property
                MetadataPropertyValue redirectValue = _value as MetadataPropertyValue; 
                if (null != redirectValue)
                { 
                    return redirectValue.GetValue(); 
                }
 
                // If not, return the actual stored value
                return _value;
            }
        } 

        ///  
        /// Gets/Sets the TypeUsage object describing the type of this attribute 
        /// 
        /// Thrown if value passed into setter is null 
        /// Thrown if the MetadataProperty instance is in readonly state
        [MetadataProperty(BuiltInTypeKind.TypeUsage, false)]
        public TypeUsage TypeUsage
        { 
            get
            { 
                return _typeUsage; 
            }
        } 
        #endregion

        #region Methods
        ///  
        /// Sets this item to be readonly, once this is set, the item will never be writable again.
        ///  
        internal override void SetReadOnly() 
        {
            if (!IsReadOnly) 
            {
                base.SetReadOnly();

                // TypeUsage is always readonly, no need to set _typeUsage 
            }
        } 
 
        /// 
        /// Returns the kind of the attribute 
        /// 
        public PropertyKind PropertyKind
        {
            get 
            {
                return _propertyKind; 
            } 
        }
        #endregion 
    }
}

// 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; 

namespace System.Data.Metadata.Edm 
{ 
    /// 
    /// Class representing a metadata attribute for an item 
    /// 
    public sealed class MetadataProperty : MetadataItem
    {
        #region Constructors 
        /// 
        /// The constructor for MetadataProperty taking in a name, a TypeUsage object, and a value for the attribute 
        ///  
        /// The name of this MetadataProperty
        /// The TypeUsage describing the type of this MetadataProperty 
        /// The value for this attribute
        /// Thrown if typeUsage argument is null
        internal MetadataProperty(string name, TypeUsage typeUsage, object value)
        { 
            EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage");
 
            _name = name; 
            _value = value;
            _typeUsage = typeUsage; 
            _propertyKind = PropertyKind.Extended;
        }

        ///  
        /// The constructor for MetadataProperty taking in all the ingredients for creating TypeUsage and the actual value
        ///  
        /// The name of the attribute 
        /// The edm type of the attribute
        /// Whether the collection type of the given edm type should be used 
        /// The value of the attribute
        internal MetadataProperty(string name, EdmType edmType, bool isCollectionType, object value)
        {
            EntityUtil.CheckArgumentNull(edmType, "edmType"); 

            _name = name; 
            _value = value; 
            if (isCollectionType)
            { 
                _typeUsage = TypeUsage.Create(edmType.GetCollectionType());
            }
            else
            { 
                _typeUsage = TypeUsage.Create(edmType);
            } 
            _propertyKind = PropertyKind.System; 
        }
        #endregion 

        #region Fields
        private string _name;
        private PropertyKind _propertyKind; 
        private object _value;
        private TypeUsage _typeUsage; 
        #endregion 

        #region Properties 
        /// 
        /// Returns the kind of the type
        /// 
        public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.MetadataProperty; } } 

        ///  
        /// Gets the identity of this item 
        /// 
        internal override string Identity 
        {
            get
            {
                return Name; 
            }
        } 
 
        /// 
        /// Gets/Sets the name of this MetadataProperty 
        /// 
        [MetadataProperty(PrimitiveTypeKind.String, false)]
        public string Name
        { 
            get
            { 
                // The name is immutable, so it should be safe to always get it from the field 
                return _name;
            } 
        }

        /// 
        /// Gets/Sets the value of this MetadataProperty 
        /// 
        /// Thrown if the MetadataProperty instance is in readonly state 
        [MetadataProperty(typeof(Object), false)] 
        public object Value
        { 
            get
            {
                // Check if we're redirecting to an MetadataItem system property
                MetadataPropertyValue redirectValue = _value as MetadataPropertyValue; 
                if (null != redirectValue)
                { 
                    return redirectValue.GetValue(); 
                }
 
                // If not, return the actual stored value
                return _value;
            }
        } 

        ///  
        /// Gets/Sets the TypeUsage object describing the type of this attribute 
        /// 
        /// Thrown if value passed into setter is null 
        /// Thrown if the MetadataProperty instance is in readonly state
        [MetadataProperty(BuiltInTypeKind.TypeUsage, false)]
        public TypeUsage TypeUsage
        { 
            get
            { 
                return _typeUsage; 
            }
        } 
        #endregion

        #region Methods
        ///  
        /// Sets this item to be readonly, once this is set, the item will never be writable again.
        ///  
        internal override void SetReadOnly() 
        {
            if (!IsReadOnly) 
            {
                base.SetReadOnly();

                // TypeUsage is always readonly, no need to set _typeUsage 
            }
        } 
 
        /// 
        /// Returns the kind of the attribute 
        /// 
        public PropertyKind PropertyKind
        {
            get 
            {
                return _propertyKind; 
            } 
        }
        #endregion 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK