ExtendedPropertyInfo.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / ExtendedPropertyInfo.cs / 1305376 / ExtendedPropertyInfo.cs

                            namespace System.Workflow.ComponentModel.Serialization 
{
    using System;
    using System.IO;
    using System.CodeDom; 
    using System.ComponentModel;
    using System.ComponentModel.Design; 
    using System.ComponentModel.Design.Serialization; 
    using System.Collections;
    using System.Xml; 
    using System.Xml.Serialization;
    using System.Reflection;
    using System.Collections.Generic;
    using System.Diagnostics; 
    using System.Text;
    using System.Globalization; 
    using System.Workflow.ComponentModel.Compiler; 
    using System.Workflow.ComponentModel.Design;
    using System.Runtime.Serialization; 
 	using System.Security.Permissions;
    using System.Collections.ObjectModel;
    using System.Drawing;
 

 
    #region X:Key Support 
    internal delegate object GetValueHandler(ExtendedPropertyInfo extendedProperty, object extendee);
    internal delegate void SetValueHandler(ExtendedPropertyInfo extendedProperty, object extendee, object value); 
    internal delegate XmlQualifiedName GetQualifiedNameHandler(ExtendedPropertyInfo extendedProperty, WorkflowMarkupSerializationManager manager, out string prefix);

    #region Class ExtendedPropertyInfo
    internal sealed class ExtendedPropertyInfo : PropertyInfo 
    {
        #region Members and Constructors 
        private PropertyInfo                    realPropertyInfo = null; 
        private GetValueHandler                 OnGetValue;
        private SetValueHandler                 OnSetValue; 
        private GetQualifiedNameHandler         OnGetXmlQualifiedName;
        private WorkflowMarkupSerializationManager manager = null;

        internal ExtendedPropertyInfo(PropertyInfo propertyInfo, GetValueHandler getValueHandler, SetValueHandler setValueHandler, GetQualifiedNameHandler qualifiedNameHandler) 
        {
            this.realPropertyInfo = propertyInfo; 
            this.OnGetValue = getValueHandler; 
            this.OnSetValue = setValueHandler;
            this.OnGetXmlQualifiedName = qualifiedNameHandler; 
        }

        internal ExtendedPropertyInfo(PropertyInfo propertyInfo, GetValueHandler getValueHandler, SetValueHandler setValueHandler, GetQualifiedNameHandler qualifiedNameHandler, WorkflowMarkupSerializationManager manager)
            : this(propertyInfo, getValueHandler, setValueHandler, qualifiedNameHandler) 
        {
            this.manager = manager; 
        } 

        internal PropertyInfo RealPropertyInfo 
        {
            get
            {
                return this.realPropertyInfo; 
            }
        } 
 
        internal WorkflowMarkupSerializationManager SerializationManager
        { 
            get
            {
                return this.manager;
            } 
        }
        #endregion 
 
        #region Property Info overrides
        public override string Name 
        {
            get
            {
                return this.realPropertyInfo.Name; 
            }
        } 
 
        public override Type DeclaringType
        { 
            get
            {
                return this.realPropertyInfo.DeclaringType;
            } 
        }
 
        public override Type ReflectedType 
        {
            get 
            {
                return this.realPropertyInfo.ReflectedType;
            }
        } 

        public override Type PropertyType 
        { 
            get
            { 
                return this.realPropertyInfo.PropertyType;
            }
        }
 
        public override MethodInfo[] GetAccessors(bool nonPublic)
        { 
            return this.realPropertyInfo.GetAccessors(nonPublic); 
        }
 
        public override MethodInfo GetGetMethod(bool nonPublic)
        {
            return this.realPropertyInfo.GetGetMethod(nonPublic);
        } 

        public override MethodInfo GetSetMethod(bool nonPublic) 
        { 
            return this.realPropertyInfo.GetSetMethod(nonPublic);
        } 

        public override object GetValue(object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture)
        {
            if (OnGetValue != null) 
                return OnGetValue(this, obj);
            else 
                return null; 
        }
 
        public override void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture)
        {
            if (OnSetValue != null)
                OnSetValue(this, obj, value); 
        }
 
        public XmlQualifiedName GetXmlQualifiedName(WorkflowMarkupSerializationManager manager, out string prefix) 
        {
            prefix = String.Empty; 
            if (OnGetXmlQualifiedName != null)
                return OnGetXmlQualifiedName(this, manager, out prefix);
            else
                return null; 
        }
 
        public override ParameterInfo[] GetIndexParameters() 
        {
            return this.realPropertyInfo.GetIndexParameters(); 
        }

        public override PropertyAttributes Attributes
        { 
            get
            { 
                return this.realPropertyInfo.Attributes; 
            }
        } 

        public override bool CanRead
        {
            get 
            {
                return this.realPropertyInfo.CanRead; 
            } 
        }
 
        public override bool CanWrite
        {
            get
            { 
                return this.realPropertyInfo.CanWrite;
            } 
        } 
        #endregion
 
        #region MemberInfo Overrides
        public override object[] GetCustomAttributes(bool inherit)
        {
            return this.realPropertyInfo.GetCustomAttributes(inherit); 
        }
 
        public override object[] GetCustomAttributes(Type attributeType, bool inherit) 
        {
            return this.realPropertyInfo.GetCustomAttributes(attributeType, inherit); 
        }

        public override bool IsDefined(Type attributeType, bool inherit)
        { 
            return this.realPropertyInfo.IsDefined(attributeType, inherit);
        } 
        #endregion 

        #region  Helpers 
        internal static bool IsExtendedProperty(WorkflowMarkupSerializationManager manager, XmlQualifiedName xmlQualifiedName)
        {
            bool isExtendedProperty = false;
            object extendee = manager.Context.Current; 
            if (extendee != null)
            { 
                foreach (ExtendedPropertyInfo extendedProperty in manager.GetExtendedProperties(extendee)) 
                {
                    string prefix = String.Empty; 
                    XmlQualifiedName qualifiedPropertyName = extendedProperty.GetXmlQualifiedName(manager, out prefix);
                    if (qualifiedPropertyName.Name.Equals(xmlQualifiedName.Name, StringComparison.Ordinal)
                        && qualifiedPropertyName.Namespace.Equals(xmlQualifiedName.Namespace, StringComparison.Ordinal))
                    { 
                        isExtendedProperty = true;
                        break; 
                    } 
                }
            } 

            return isExtendedProperty;
        }
        internal static bool IsExtendedProperty(WorkflowMarkupSerializationManager manager, IList propInfos, XmlQualifiedName xmlQualifiedName) 
        {
            foreach (PropertyInfo propInfo in propInfos) 
            { 
                ExtendedPropertyInfo extendedProperty = propInfo as ExtendedPropertyInfo;
                if (extendedProperty == null) 
                    continue;

                string prefix = String.Empty;
                XmlQualifiedName qualifiedPropertyName = extendedProperty.GetXmlQualifiedName(manager, out prefix); 
                if (qualifiedPropertyName.Name.Equals(xmlQualifiedName.Name, StringComparison.Ordinal)
                    && qualifiedPropertyName.Namespace.Equals(xmlQualifiedName.Namespace, StringComparison.Ordinal)) 
                { 
                    return true;
                } 
            }

            return false;
        } 
        #endregion
    } 
    #endregion 

    #endregion 
}


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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