/*
 * 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 directconnect-2012-10-25.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.DirectConnect.Model
{
    /// 
    /// Information about an interconnect.
    /// 
    public partial class Interconnect
    {
        private string _awsDevice;
        private string _awsDeviceV2;
        private string _awsLogicalDeviceId;
        private string _bandwidth;
        private HasLogicalRedundancy _hasLogicalRedundancy;
        private string _interconnectId;
        private string _interconnectName;
        private InterconnectState _interconnectState;
        private bool? _jumboFrameCapable;
        private string _lagId;
        private DateTime? _loaIssueTime;
        private string _location;
        private string _providerName;
        private string _region;
        private List _tags = new List();
        /// 
        /// Gets and sets the property AwsDevice. 
        /// 
        /// The Direct Connect endpoint on which the physical connection terminates.
        /// 
        /// 
        public string AwsDevice
        {
            get { return this._awsDevice; }
            set { this._awsDevice = value; }
        }
        // Check to see if AwsDevice property is set
        internal bool IsSetAwsDevice()
        {
            return this._awsDevice != null;
        }
        /// 
        /// Gets and sets the property AwsDeviceV2. 
        /// 
        /// The Direct Connect endpoint that terminates the physical connection.
        /// 
        /// 
        public string AwsDeviceV2
        {
            get { return this._awsDeviceV2; }
            set { this._awsDeviceV2 = value; }
        }
        // Check to see if AwsDeviceV2 property is set
        internal bool IsSetAwsDeviceV2()
        {
            return this._awsDeviceV2 != null;
        }
        /// 
        /// Gets and sets the property AwsLogicalDeviceId. 
        /// 
        /// The Direct Connect endpoint that terminates the logical connection. This device might
        /// be different than the device that terminates the physical connection.
        /// 
        /// 
        public string AwsLogicalDeviceId
        {
            get { return this._awsLogicalDeviceId; }
            set { this._awsLogicalDeviceId = value; }
        }
        // Check to see if AwsLogicalDeviceId property is set
        internal bool IsSetAwsLogicalDeviceId()
        {
            return this._awsLogicalDeviceId != null;
        }
        /// 
        /// Gets and sets the property Bandwidth. 
        /// 
        /// The bandwidth of the connection.
        /// 
        /// 
        public string Bandwidth
        {
            get { return this._bandwidth; }
            set { this._bandwidth = value; }
        }
        // Check to see if Bandwidth property is set
        internal bool IsSetBandwidth()
        {
            return this._bandwidth != null;
        }
        /// 
        /// Gets and sets the property HasLogicalRedundancy. 
        /// 
        /// Indicates whether the interconnect supports a secondary BGP in the same address family
        /// (IPv4/IPv6).
        /// 
        /// 
        public HasLogicalRedundancy HasLogicalRedundancy
        {
            get { return this._hasLogicalRedundancy; }
            set { this._hasLogicalRedundancy = value; }
        }
        // Check to see if HasLogicalRedundancy property is set
        internal bool IsSetHasLogicalRedundancy()
        {
            return this._hasLogicalRedundancy != null;
        }
        /// 
        /// Gets and sets the property InterconnectId. 
        /// 
        /// The ID of the interconnect.
        /// 
        /// 
        public string InterconnectId
        {
            get { return this._interconnectId; }
            set { this._interconnectId = value; }
        }
        // Check to see if InterconnectId property is set
        internal bool IsSetInterconnectId()
        {
            return this._interconnectId != null;
        }
        /// 
        /// Gets and sets the property InterconnectName. 
        /// 
        /// The name of the interconnect.
        /// 
        /// 
        public string InterconnectName
        {
            get { return this._interconnectName; }
            set { this._interconnectName = value; }
        }
        // Check to see if InterconnectName property is set
        internal bool IsSetInterconnectName()
        {
            return this._interconnectName != null;
        }
        /// 
        /// Gets and sets the property InterconnectState. 
        /// 
        /// The state of the interconnect. The following are the possible values:
        /// 
        ///   -  
        /// 
        ///  
requested: The initial state of an interconnect. The interconnect stays
        /// in the requested state until the Letter of Authorization (LOA) is sent to the customer.
        /// 
        ///    -  
        /// 
        ///  
pending: The interconnect is approved, and is being initialized.
        /// 
        ///    -  
        /// 
        ///  
available: The network link is up, and the interconnect is ready for
        /// use.
        /// 
        ///    -  
        /// 
        ///  
down: The network link is down.
        /// 
        ///    -  
        /// 
        ///  
deleting: The interconnect is being deleted.
        /// 
        ///    -  
        /// 
        ///  
deleted: The interconnect is deleted.
        /// 
        ///    -  
        /// 
        ///  
unknown: The state of the interconnect is not available.
        /// 
        ///    
        /// 
        public InterconnectState InterconnectState
        {
            get { return this._interconnectState; }
            set { this._interconnectState = value; }
        }
        // Check to see if InterconnectState property is set
        internal bool IsSetInterconnectState()
        {
            return this._interconnectState != null;
        }
        /// 
        /// Gets and sets the property JumboFrameCapable. 
        /// 
        /// Indicates whether jumbo frames are supported.
        /// 
        /// 
        public bool JumboFrameCapable
        {
            get { return this._jumboFrameCapable.GetValueOrDefault(); }
            set { this._jumboFrameCapable = value; }
        }
        // Check to see if JumboFrameCapable property is set
        internal bool IsSetJumboFrameCapable()
        {
            return this._jumboFrameCapable.HasValue; 
        }
        /// 
        /// Gets and sets the property LagId. 
        /// 
        /// The ID of the LAG.
        /// 
        /// 
        public string LagId
        {
            get { return this._lagId; }
            set { this._lagId = value; }
        }
        // Check to see if LagId property is set
        internal bool IsSetLagId()
        {
            return this._lagId != null;
        }
        /// 
        /// Gets and sets the property LoaIssueTime. 
        /// 
        /// The time of the most recent call to DescribeLoa for this connection.
        /// 
        /// 
        public DateTime LoaIssueTime
        {
            get { return this._loaIssueTime.GetValueOrDefault(); }
            set { this._loaIssueTime = value; }
        }
        // Check to see if LoaIssueTime property is set
        internal bool IsSetLoaIssueTime()
        {
            return this._loaIssueTime.HasValue; 
        }
        /// 
        /// Gets and sets the property Location. 
        /// 
        /// The location of the connection.
        /// 
        /// 
        public string Location
        {
            get { return this._location; }
            set { this._location = value; }
        }
        // Check to see if Location property is set
        internal bool IsSetLocation()
        {
            return this._location != null;
        }
        /// 
        /// Gets and sets the property ProviderName. 
        /// 
        /// The name of the service provider associated with the interconnect.
        /// 
        /// 
        public string ProviderName
        {
            get { return this._providerName; }
            set { this._providerName = value; }
        }
        // Check to see if ProviderName property is set
        internal bool IsSetProviderName()
        {
            return this._providerName != null;
        }
        /// 
        /// Gets and sets the property Region. 
        /// 
        /// The Amazon Web Services Region where the connection is located.
        /// 
        /// 
        public string Region
        {
            get { return this._region; }
            set { this._region = value; }
        }
        // Check to see if Region property is set
        internal bool IsSetRegion()
        {
            return this._region != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The tags associated with the interconnect.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public List Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
    }
}