//-----------------------------------------------------------------------
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//-----------------------------------------------------------------------
namespace System.IdentityModel.Protocols.WSTrust
{
    /// 
    /// This class is used to represent the Request Claims collection inside RequestSecurityToken.
    /// Indicate whether the claim is optional or not. 
    /// 
    public class RequestClaim
    {
        string _claimType;
        bool _isOptional;
        string _value;
        /// 
        /// Instantiates a required RequestClaim instance with ClaimType Uri. 
        /// 
        /// ClaimType Uri attribute.
        public RequestClaim(string claimType)
            : this(claimType, false)
        {
        }
        /// 
        /// Instantiates a RequestClaim instance with ClaimType Uri and inidicates whether it is 
        /// optional.
        /// 
        /// The ClaimType Uri attribute.
        /// The ClaimType Optional attribute.
        public RequestClaim(string claimType, bool isOptional)
            : this(claimType, isOptional, null)
        {
        }
        /// 
        /// Instantiates a RequestClaim instance with ClaimType Uri, the flag to inidicate whether it is 
        /// optional and the value of the request.
        /// 
        /// The ClaimType Uri attribute.
        /// The ClaimType Optional attribute.
        /// The actual value of the claim.
        public RequestClaim(string claimType, bool isOptional, string value)
        {
            if (string.IsNullOrEmpty(claimType))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.ID0006), "claimType"));
            }
            _claimType = claimType;
            _isOptional = isOptional;
            _value = value;
        }
        /// 
        /// Gets ClaimType uri attribute.
        /// 
        public string ClaimType
        {
            get
            {
                return _claimType;
            }
        }
        /// 
        /// Gets ClaimType optional attribute.
        /// 
        public bool IsOptional
        {
            get
            {
                return _isOptional;
            }
            set
            {
                _isOptional = value;
            }
        }
        /// 
        /// Gets ClaimType value element.
        /// 
        public string Value
        {
            get
            {
                return _value;
            }
            set
            {
                _value = value;
            }
        }
    }
}