File: Compilation\WCFModel\ClientOptions.cs
Project: ndp\fx\src\xsp\system\Extensions\System.Web.Extensions.csproj (System.Web.Extensions)
#region Copyright (c) Microsoft Corporation
/// <copyright company='Microsoft Corporation'>
///    Copyright (c) Microsoft Corporation. All Rights Reserved.
///    Information Contained Herein is Proprietary and Confidential.
/// </copyright>
#endregion
 
using System;
using System.Collections.Generic;
using XmlSerialization = System.Xml.Serialization;
 
#if WEB_EXTENSIONS_CODE
namespace System.Web.Compilation.WCFModel
#else
namespace Microsoft.VSDesigner.WCFModel
#endif
{
#if WEB_EXTENSIONS_CODE
    internal class ClientOptions
#else
    [CLSCompliant(true)]
    public class ClientOptions
#endif
    {
        private bool m_GenerateAsynchronousMethods;
        private bool m_GenerateTaskBasedAsynchronousMethod;
        private bool m_GenerateTaskBasedAsynchronousMethodSpecified;
        private bool m_EnableDataBinding;
        private List<ReferencedType> m_ExcludedTypeList;
        private bool m_ImportXmlTypes;
        private bool m_GenerateInternalTypes;
        private bool m_GenerateMessageContracts;
        private List<NamespaceMapping> m_NamespaceMappingList;
        private List<ReferencedCollectionType> m_CollectionMappingList;
        private bool m_GenerateSerializableTypes;
        private ProxySerializerType m_Serializer;
        private bool m_ReferenceAllAssemblies;
        private List<ReferencedAssembly> m_ReferencedAssemblyList;
        private List<ReferencedType> m_ReferencedDataContractTypeList;
        private List<ContractMapping> m_ServiceContractMappingList;
        private bool m_UseSerializerForFaults;
        private bool m_UseSerializerForFaultsSpecified;
        private bool m_Wrapped;
        private bool m_WrappedSpecified;
 
        /// <summary>
        /// Control whether asynchronous proxy will be generated
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool GenerateAsynchronousMethods
        {
            get
            {
                return m_GenerateAsynchronousMethods;
            }
            set
            {
                m_GenerateAsynchronousMethods = value;
 
                // GenerateAsynchronousMethods and GenerateTaskBasedAsynchronousMethod are mutually exclusive.
                if (GenerateAsynchronousMethods)
                {
                    GenerateTaskBasedAsynchronousMethod = false;
                }
            }
        }
 
        /// <summary>
        /// Control whether task-based async operations will be generated
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool GenerateTaskBasedAsynchronousMethod
        {
            get
            {
                return m_GenerateTaskBasedAsynchronousMethod;
            }
            set
            {
                // In order to maximally keep compatible with Dev10 and previous VS, if GenerateTaskBasedAsynchronousMethod is false,
                // we will not persist it.
                m_GenerateTaskBasedAsynchronousMethod = value;
                m_GenerateTaskBasedAsynchronousMethodSpecified = value;
 
                // GenerateAsynchronousMethods and GenerateTaskBasedAsynchronousMethod are mutually exclusive.
                if (GenerateTaskBasedAsynchronousMethod)
                {
                    GenerateAsynchronousMethods = false;
                }
            }
        }
 
        /// <summary>
        /// Is GenerateTaskBasedAsynchronousMethod specified?
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlIgnore()]
        public bool GenerateTaskBasedAsynchronousMethodSpecified
        {
            get
            {
                return m_GenerateTaskBasedAsynchronousMethodSpecified;
            }
        }
 
        /// <summary>
        /// control whether to generate INotifyPropertyChanged interface on data contract types
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool EnableDataBinding
        {
            get
            {
                return m_EnableDataBinding;
            }
            set
            {
                m_EnableDataBinding = value;
            }
        }
 
        /// <summary>
        /// contains a list of types which will be excluded when the design time tool matches types automatically
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "ExcludedTypes")]
        [XmlSerialization.XmlArrayItem("ExcludedType", typeof(ReferencedType))]
        public List<ReferencedType> ExcludedTypeList
        {
            get
            {
                if (m_ExcludedTypeList == null)
                {
                    m_ExcludedTypeList = new List<ReferencedType>();
                }
                return m_ExcludedTypeList;
            }
        }
 
        /// <summary>
        /// control whether the data contract serializer should import non-DataContract types as IXmlSerializable types
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool ImportXmlTypes
        {
            get
            {
                return m_ImportXmlTypes;
            }
            set
            {
                m_ImportXmlTypes = value;
            }
        }
 
        /// <summary>
        /// control whether to generate internal types
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool GenerateInternalTypes
        {
            get
            {
                return m_GenerateInternalTypes;
            }
            set
            {
                m_GenerateInternalTypes = value;
            }
        }
 
        /// <summary>
        /// control whether to generate message contract types
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool GenerateMessageContracts
        {
            get
            {
                return m_GenerateMessageContracts;
            }
            set
            {
                m_GenerateMessageContracts = value;
            }
        }
 
        /// <summary>
        /// namespace mapping between metadata namespace and clr namespace
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "NamespaceMappings")]
        [XmlSerialization.XmlArrayItem("NamespaceMapping", typeof(NamespaceMapping))]
        public List<NamespaceMapping> NamespaceMappingList
        {
            get
            {
                if (m_NamespaceMappingList == null)
                {
                    m_NamespaceMappingList = new List<NamespaceMapping>();
                }
                return m_NamespaceMappingList;
            }
        }
 
        /// <summary>
        ///  known collection types which will be used by code generator
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "CollectionMappings")]
        [XmlSerialization.XmlArrayItem("CollectionMapping", typeof(ReferencedCollectionType))]
        public List<ReferencedCollectionType> CollectionMappingList
        {
            get
            {
                if (m_CollectionMappingList == null)
                {
                    m_CollectionMappingList = new List<ReferencedCollectionType>();
                }
                return m_CollectionMappingList;
            }
        }
 
        /// <summary>
        /// whether class need be marked with Serializable attribute
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool GenerateSerializableTypes
        {
            get
            {
                return m_GenerateSerializableTypes;
            }
            set
            {
                m_GenerateSerializableTypes = value;
            }
        }
 
        /// <summary>
        /// select serializer between DataContractSerializer or XmlSerializer
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public ProxySerializerType Serializer
        {
            get
            {
                return m_Serializer;
            }
            set
            {
                m_Serializer = value;
            }
        }
 
        /// <summary>
        /// Control whether or not to UseSerializerForFaults.  The System.ServiceModel.FaultImportOptions 
        /// will set its UseMessageFormat Property using this value.
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool UseSerializerForFaults
        {
            get
            {
                if (m_UseSerializerForFaultsSpecified)
                {
                    return m_UseSerializerForFaults;
                }
                else
                {
                    return false;
                }
            }
            set
            {
                m_UseSerializerForFaultsSpecified = true;
                m_UseSerializerForFaults = value;
            }
        }
 
        /// <summary>
        /// Is UseSerializerForFaults specified?
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlIgnore()]
        public bool UseSerializerForFaultsSpecified
        {
            get
            {
                return m_UseSerializerForFaultsSpecified;
            }
        }
 
        /// <summary>
        /// Control whether or not to WrappedOption.  The System.ServiceModel.Channels.WrappedOption
        /// will set its WrappedFlag Property using this value.
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool Wrapped
        {
            get
            {
                if (m_WrappedSpecified)
                {
                    return m_Wrapped;
                }
                else
                {
                    return false;
                }
            }
            set
            {
                m_WrappedSpecified = true;
                m_Wrapped = value;
            }
        }
 
        /// <summary>
        /// Is WrappedOption specified?
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlIgnore()]
        public bool WrappedSpecified
        {
            get
            {
                return m_WrappedSpecified;
            }
        }
 
        /// <summary>
        /// Whether we will scan all dependent assemblies for type sharing
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlElement()]
        public bool ReferenceAllAssemblies
        {
            get
            {
                return m_ReferenceAllAssemblies;
            }
            set
            {
                m_ReferenceAllAssemblies = value;
            }
        }
 
        /// <summary>
        ///  controll DataContract type sharing
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "ReferencedAssemblies")]
        [XmlSerialization.XmlArrayItem("ReferencedAssembly", typeof(ReferencedAssembly))]
        public List<ReferencedAssembly> ReferencedAssemblyList
        {
            get
            {
                if (m_ReferencedAssemblyList == null)
                {
                    m_ReferencedAssemblyList = new List<ReferencedAssembly>();
                }
                return m_ReferencedAssemblyList;
            }
        }
 
        /// <summary>
        ///  controll DataContract type sharing
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "ReferencedDataContractTypes")]
        [XmlSerialization.XmlArrayItem("ReferencedDataContractType", typeof(ReferencedType))]
        public List<ReferencedType> ReferencedDataContractTypeList
        {
            get
            {
                if (m_ReferencedDataContractTypeList == null)
                {
                    m_ReferencedDataContractTypeList = new List<ReferencedType>();
                }
                return m_ReferencedDataContractTypeList;
            }
        }
 
        /// <summary>
        /// control service contract type sharing
        /// </summary>
        /// <value></value>
        /// <remarks></remarks>
        [XmlSerialization.XmlArray(ElementName = "ServiceContractMappings")]
        [XmlSerialization.XmlArrayItem("ServiceContractMapping", typeof(ContractMapping))]
        public List<ContractMapping> ServiceContractMappingList
        {
            get
            {
                if (m_ServiceContractMappingList == null)
                {
                    m_ServiceContractMappingList = new List<ContractMapping>();
                }
                return m_ServiceContractMappingList;
            }
        }
 
 
        /// <summary>
        /// Serializer used in proxy generator
        /// </summary>
        /// <remarks></remarks>
        public enum ProxySerializerType
        {
            [XmlSerialization.XmlEnum(Name = "Auto")]
            Auto = 0,
 
            [XmlSerialization.XmlEnum(Name = "DataContractSerializer")]
            DataContractSerializer = 1,
 
            [XmlSerialization.XmlEnum(Name = "XmlSerializer")]
            XmlSerializer = 2,
        }
    }
}