/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the entitlement.marketplace-2017-01-11.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.MarketplaceEntitlementService.Model
{
    /// 
    /// An entitlement represents capacity in a product owned by the customer. For example,
    /// a customer might own some number of users or seats in an SaaS application or some
    /// amount of data capacity in a multi-tenant database.
    /// 
    public partial class Entitlement
    {
        private string _customerIdentifier;
        private string _dimension;
        private DateTime? _expirationDate;
        private string _productCode;
        private EntitlementValue _value;
        /// 
        /// Gets and sets the property CustomerIdentifier. 
        /// 
        /// The customer identifier is a handle to each unique customer in an application. Customer
        /// identifiers are obtained through the ResolveCustomer operation in AWS Marketplace
        /// Metering Service.
        /// 
        /// 
        public string CustomerIdentifier
        {
            get { return this._customerIdentifier; }
            set { this._customerIdentifier = value; }
        }
        // Check to see if CustomerIdentifier property is set
        internal bool IsSetCustomerIdentifier()
        {
            return this._customerIdentifier != null;
        }
        /// 
        /// Gets and sets the property Dimension. 
        /// 
        /// The dimension for which the given entitlement applies. Dimensions represent categories
        /// of capacity in a product and are specified when the product is listed in AWS Marketplace.
        /// 
        /// 
        public string Dimension
        {
            get { return this._dimension; }
            set { this._dimension = value; }
        }
        // Check to see if Dimension property is set
        internal bool IsSetDimension()
        {
            return this._dimension != null;
        }
        /// 
        /// Gets and sets the property ExpirationDate. 
        /// 
        /// The expiration date represents the minimum date through which this entitlement is
        /// expected to remain valid. For contractual products listed on AWS Marketplace, the
        /// expiration date is the date at which the customer will renew or cancel their contract.
        /// Customers who are opting to renew their contract will still have entitlements with
        /// an expiration date.
        /// 
        /// 
        public DateTime ExpirationDate
        {
            get { return this._expirationDate.GetValueOrDefault(); }
            set { this._expirationDate = value; }
        }
        // Check to see if ExpirationDate property is set
        internal bool IsSetExpirationDate()
        {
            return this._expirationDate.HasValue; 
        }
        /// 
        /// Gets and sets the property ProductCode. 
        /// 
        /// The product code for which the given entitlement applies. Product codes are provided
        /// by AWS Marketplace when the product listing is created.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string ProductCode
        {
            get { return this._productCode; }
            set { this._productCode = value; }
        }
        // Check to see if ProductCode property is set
        internal bool IsSetProductCode()
        {
            return this._productCode != null;
        }
        /// 
        /// Gets and sets the property Value. 
        /// 
        /// The EntitlementValue represents the amount of capacity that the customer is entitled
        /// to for the product.
        /// 
        /// 
        public EntitlementValue Value
        {
            get { return this._value; }
            set { this._value = value; }
        }
        // Check to see if Value property is set
        internal bool IsSetValue()
        {
            return this._value != null;
        }
    }
}