File: System\ServiceModel\Description\MessagePartDescription.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
 
namespace System.ServiceModel.Description
{
    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Net.Security;
    using System.Reflection;
    using System.ServiceModel.Security;
 
    [DebuggerDisplay("Name={name}, Namespace={ns}, Type={Type}, Index={index}}")]
    public class MessagePartDescription
    {
        XmlName name;
        string ns;        
        int index;
        Type type;
        int serializationPosition;
        ProtectionLevel protectionLevel;
        bool hasProtectionLevel;
        MemberInfo memberInfo;
        ICustomAttributeProvider additionalAttributesProvider;
 
        bool multiple;
        string baseType;
        string uniquePartName;
 
        public MessagePartDescription(string name, string ns)
        {
            if (name == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("name", SR.GetString(SR.SFxParameterNameCannotBeNull));
            }
 
            this.name = new XmlName(name, true /*isEncoded*/);
 
            if (!string.IsNullOrEmpty(ns))
            {
                NamingHelper.CheckUriParameter(ns, "ns");
            }
 
            this.ns = ns;
        }
 
        internal MessagePartDescription(MessagePartDescription other)
        {
            this.name = other.name;
            this.ns = other.ns;
            this.index = other.index;
            this.type = other.type;
            this.serializationPosition = other.serializationPosition;
            this.hasProtectionLevel = other.hasProtectionLevel;
            this.protectionLevel = other.protectionLevel;
            this.memberInfo = other.memberInfo;
            this.multiple = other.multiple;
            this.additionalAttributesProvider = other.additionalAttributesProvider;
            this.baseType = other.baseType;
            this.uniquePartName = other.uniquePartName;
        }
 
        internal virtual MessagePartDescription Clone()
        {
            return new MessagePartDescription(this);
        }
 
        internal string BaseType
        {
            get { return this.baseType; }
            set { this.baseType = value; }
        }
 
        internal XmlName XmlName
        {
            get { return this.name; }
        }
 
        internal string CodeName
        {
            get { return this.name.DecodedName; }
        }
 
        public string Name
        {
            get { return this.name.EncodedName; }
        }
 
        public string Namespace
        {
            get { return this.ns; }            
        }
 
        public Type Type
        {
            get { return type; }
            set { type = value; }
        }
 
        public int Index
        {
            get { return index; }
            set { index = value; }
        }
        
        [DefaultValue(false)]
        public bool Multiple
        {
            get { return this.multiple; }
            set { this.multiple = value; }
        }
        
        public ProtectionLevel ProtectionLevel
        {
            get { return this.protectionLevel; }
            set
            {
                if (!ProtectionLevelHelper.IsDefined(value))
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
                this.protectionLevel = value;
                this.hasProtectionLevel = true;
            }
        }
 
        public bool HasProtectionLevel
        {
            get { return this.hasProtectionLevel; }
        }
 
        public MemberInfo MemberInfo
        {
            get { return this.memberInfo; }
            set { this.memberInfo = value; }
        }
 
        internal ICustomAttributeProvider AdditionalAttributesProvider
        {
            get { return this.additionalAttributesProvider ?? this.memberInfo; }
            set { this.additionalAttributesProvider = value; }
        }
 
        internal string UniquePartName
        {
            get { return this.uniquePartName; }
            set { this.uniquePartName = value; }
        }
 
        internal int SerializationPosition
        {
            get { return serializationPosition; }
            set { serializationPosition = value; }
        }
 
        internal void ResetProtectionLevel()
        {
            this.protectionLevel = ProtectionLevel.None;
            this.hasProtectionLevel = false;
        }
    }
}