/*
 * 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 storagegateway-2013-06-30.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.StorageGateway.Model
{
    /// 
    /// The Unix file permissions and ownership information assigned, by default, to native
    /// S3 objects when an S3 File Gateway discovers them in S3 buckets. This operation is
    /// only supported in S3 File Gateways.
    /// 
    public partial class NFSFileShareInfo
    {
        private string _auditDestinationARN;
        private string _bucketRegion;
        private CacheAttributes _cacheAttributes;
        private List _clientList = new List();
        private string _defaultStorageClass;
        private string _fileShareARN;
        private string _fileShareId;
        private string _fileShareName;
        private string _fileShareStatus;
        private string _gatewayARN;
        private bool? _guessMIMETypeEnabled;
        private bool? _kmsEncrypted;
        private string _kmsKey;
        private string _locationARN;
        private NFSFileShareDefaults _nfsFileShareDefaults;
        private string _notificationPolicy;
        private ObjectACL _objectACL;
        private string _path;
        private bool? _readOnly;
        private bool? _requesterPays;
        private string _role;
        private string _squash;
        private List _tags = new List();
        private string _vpcEndpointDNSName;
        /// 
        /// Gets and sets the property AuditDestinationARN. 
        /// 
        /// The Amazon Resource Name (ARN) of the storage used for audit logs.
        /// 
        /// 
        [AWSProperty(Max=1024)]
        public string AuditDestinationARN
        {
            get { return this._auditDestinationARN; }
            set { this._auditDestinationARN = value; }
        }
        // Check to see if AuditDestinationARN property is set
        internal bool IsSetAuditDestinationARN()
        {
            return this._auditDestinationARN != null;
        }
        /// 
        /// Gets and sets the property BucketRegion. 
        /// 
        /// Specifies the Region of the S3 bucket where the NFS file share stores files.
        /// 
        ///   
        /// 
        /// This parameter is required for NFS file shares that connect to Amazon S3 through a
        /// VPC endpoint, a VPC access point, or an access point alias that points to a VPC access
        /// point.
        /// 
        ///  
        /// 
        [AWSProperty(Min=1, Max=25)]
        public string BucketRegion
        {
            get { return this._bucketRegion; }
            set { this._bucketRegion = value; }
        }
        // Check to see if BucketRegion property is set
        internal bool IsSetBucketRegion()
        {
            return this._bucketRegion != null;
        }
        /// 
        /// Gets and sets the property CacheAttributes. 
        /// 
        /// Refresh cache information for the file share.
        /// 
        /// 
        public CacheAttributes CacheAttributes
        {
            get { return this._cacheAttributes; }
            set { this._cacheAttributes = value; }
        }
        // Check to see if CacheAttributes property is set
        internal bool IsSetCacheAttributes()
        {
            return this._cacheAttributes != null;
        }
        /// 
        /// Gets and sets the property ClientList.
        /// 
        [AWSProperty(Min=1, Max=100)]
        public List ClientList
        {
            get { return this._clientList; }
            set { this._clientList = value; }
        }
        // Check to see if ClientList property is set
        internal bool IsSetClientList()
        {
            return this._clientList != null && this._clientList.Count > 0; 
        }
        /// 
        /// Gets and sets the property DefaultStorageClass. 
        /// 
        /// The default storage class for objects put into an Amazon S3 bucket by the S3 File
        /// Gateway. The default value is S3_STANDARD. Optional.
        /// 
        ///  
        /// 
        /// Valid Values: S3_STANDARD | S3_INTELLIGENT_TIERING | S3_STANDARD_IA
        /// | S3_ONEZONE_IA 
        /// 
        /// 
        [AWSProperty(Min=5, Max=50)]
        public string DefaultStorageClass
        {
            get { return this._defaultStorageClass; }
            set { this._defaultStorageClass = value; }
        }
        // Check to see if DefaultStorageClass property is set
        internal bool IsSetDefaultStorageClass()
        {
            return this._defaultStorageClass != null;
        }
        /// 
        /// Gets and sets the property FileShareARN.
        /// 
        [AWSProperty(Min=50, Max=500)]
        public string FileShareARN
        {
            get { return this._fileShareARN; }
            set { this._fileShareARN = value; }
        }
        // Check to see if FileShareARN property is set
        internal bool IsSetFileShareARN()
        {
            return this._fileShareARN != null;
        }
        /// 
        /// Gets and sets the property FileShareId.
        /// 
        [AWSProperty(Min=12, Max=30)]
        public string FileShareId
        {
            get { return this._fileShareId; }
            set { this._fileShareId = value; }
        }
        // Check to see if FileShareId property is set
        internal bool IsSetFileShareId()
        {
            return this._fileShareId != null;
        }
        /// 
        /// Gets and sets the property FileShareName. 
        /// 
        /// The name of the file share. Optional.
        /// 
        ///   
        /// 
        ///  FileShareName must be set if an S3 prefix name is set in LocationARN,
        /// or if an access point or access point alias is used.
        /// 
        ///  
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string FileShareName
        {
            get { return this._fileShareName; }
            set { this._fileShareName = value; }
        }
        // Check to see if FileShareName property is set
        internal bool IsSetFileShareName()
        {
            return this._fileShareName != null;
        }
        /// 
        /// Gets and sets the property FileShareStatus.
        /// 
        [AWSProperty(Min=3, Max=50)]
        public string FileShareStatus
        {
            get { return this._fileShareStatus; }
            set { this._fileShareStatus = value; }
        }
        // Check to see if FileShareStatus property is set
        internal bool IsSetFileShareStatus()
        {
            return this._fileShareStatus != null;
        }
        /// 
        /// Gets and sets the property GatewayARN.
        /// 
        [AWSProperty(Min=50, Max=500)]
        public string GatewayARN
        {
            get { return this._gatewayARN; }
            set { this._gatewayARN = value; }
        }
        // Check to see if GatewayARN property is set
        internal bool IsSetGatewayARN()
        {
            return this._gatewayARN != null;
        }
        /// 
        /// Gets and sets the property GuessMIMETypeEnabled. 
        /// 
        /// A value that enables guessing of the MIME type for uploaded objects based on file
        /// extensions. Set this value to true to enable MIME type guessing, otherwise
        /// set to false. The default value is true.
        /// 
        ///  
        /// 
        /// Valid Values: true | false 
        /// 
        /// 
        public bool GuessMIMETypeEnabled
        {
            get { return this._guessMIMETypeEnabled.GetValueOrDefault(); }
            set { this._guessMIMETypeEnabled = value; }
        }
        // Check to see if GuessMIMETypeEnabled property is set
        internal bool IsSetGuessMIMETypeEnabled()
        {
            return this._guessMIMETypeEnabled.HasValue; 
        }
        /// 
        /// Gets and sets the property KMSEncrypted. 
        /// 
        /// Set to true to use Amazon S3 server-side encryption with your own KMS
        /// key, or false to use a key managed by Amazon S3. Optional.
        /// 
        ///  
        /// 
        /// Valid Values: true | false 
        /// 
        /// 
        public bool KMSEncrypted
        {
            get { return this._kmsEncrypted.GetValueOrDefault(); }
            set { this._kmsEncrypted = value; }
        }
        // Check to see if KMSEncrypted property is set
        internal bool IsSetKMSEncrypted()
        {
            return this._kmsEncrypted.HasValue; 
        }
        /// 
        /// Gets and sets the property KMSKey.
        /// 
        [AWSProperty(Min=7, Max=2048)]
        public string KMSKey
        {
            get { return this._kmsKey; }
            set { this._kmsKey = value; }
        }
        // Check to see if KMSKey property is set
        internal bool IsSetKMSKey()
        {
            return this._kmsKey != null;
        }
        /// 
        /// Gets and sets the property LocationARN.
        /// 
        [AWSProperty(Min=16, Max=1400)]
        public string LocationARN
        {
            get { return this._locationARN; }
            set { this._locationARN = value; }
        }
        // Check to see if LocationARN property is set
        internal bool IsSetLocationARN()
        {
            return this._locationARN != null;
        }
        /// 
        /// Gets and sets the property NFSFileShareDefaults.
        /// 
        public NFSFileShareDefaults NFSFileShareDefaults
        {
            get { return this._nfsFileShareDefaults; }
            set { this._nfsFileShareDefaults = value; }
        }
        // Check to see if NFSFileShareDefaults property is set
        internal bool IsSetNFSFileShareDefaults()
        {
            return this._nfsFileShareDefaults != null;
        }
        /// 
        /// Gets and sets the property NotificationPolicy. 
        /// 
        /// The notification policy of the file share. SettlingTimeInSeconds controls
        /// the number of seconds to wait after the last point in time a client wrote to a file
        /// before generating an ObjectUploaded notification. Because clients can
        /// make many small writes to files, it's best to set this parameter for as long as possible
        /// to avoid generating multiple notifications for the same file in a small time period.
        /// 
        ///   
        /// 
        ///  SettlingTimeInSeconds has no effect on the timing of the object uploading
        /// to Amazon S3, only the timing of the notification.
        /// 
        ///   
        /// 
        /// The following example sets NotificationPolicy on with SettlingTimeInSeconds
        /// set to 60.
        /// 
        ///  
        /// 
        ///  {\"Upload\": {\"SettlingTimeInSeconds\": 60}} 
        /// 
        ///  
        /// 
        /// The following example sets NotificationPolicy off.
        /// 
        ///  
        /// 
        ///  {} 
        /// 
        /// 
        [AWSProperty(Min=2, Max=100)]
        public string NotificationPolicy
        {
            get { return this._notificationPolicy; }
            set { this._notificationPolicy = value; }
        }
        // Check to see if NotificationPolicy property is set
        internal bool IsSetNotificationPolicy()
        {
            return this._notificationPolicy != null;
        }
        /// 
        /// Gets and sets the property ObjectACL.
        /// 
        public ObjectACL ObjectACL
        {
            get { return this._objectACL; }
            set { this._objectACL = value; }
        }
        // Check to see if ObjectACL property is set
        internal bool IsSetObjectACL()
        {
            return this._objectACL != null;
        }
        /// 
        /// Gets and sets the property Path.
        /// 
        public string Path
        {
            get { return this._path; }
            set { this._path = value; }
        }
        // Check to see if Path property is set
        internal bool IsSetPath()
        {
            return this._path != null;
        }
        /// 
        /// Gets and sets the property ReadOnly. 
        /// 
        /// A value that sets the write status of a file share. Set this value to true
        /// to set the write status to read-only, otherwise set to false.
        /// 
        ///  
        /// 
        /// Valid Values: true | false 
        /// 
        /// 
        public bool ReadOnly
        {
            get { return this._readOnly.GetValueOrDefault(); }
            set { this._readOnly = value; }
        }
        // Check to see if ReadOnly property is set
        internal bool IsSetReadOnly()
        {
            return this._readOnly.HasValue; 
        }
        /// 
        /// Gets and sets the property RequesterPays. 
        /// 
        /// A value that sets who pays the cost of the request and the cost associated with data
        /// download from the S3 bucket. If this value is set to true, the requester
        /// pays the costs; otherwise, the S3 bucket owner pays. However, the S3 bucket owner
        /// always pays the cost of storing data.
        /// 
        ///   
        /// 
        ///  RequesterPays is a configuration for the S3 bucket that backs the file
        /// share, so make sure that the configuration on the file share is the same as the S3
        /// bucket configuration.
        /// 
        ///   
        /// 
        /// Valid Values: true | false 
        /// 
        /// 
        public bool RequesterPays
        {
            get { return this._requesterPays.GetValueOrDefault(); }
            set { this._requesterPays = value; }
        }
        // Check to see if RequesterPays property is set
        internal bool IsSetRequesterPays()
        {
            return this._requesterPays.HasValue; 
        }
        /// 
        /// Gets and sets the property Role.
        /// 
        [AWSProperty(Min=20, Max=2048)]
        public string Role
        {
            get { return this._role; }
            set { this._role = value; }
        }
        // Check to see if Role property is set
        internal bool IsSetRole()
        {
            return this._role != null;
        }
        /// 
        /// Gets and sets the property Squash.
        /// 
        [AWSProperty(Min=5, Max=15)]
        public string Squash
        {
            get { return this._squash; }
            set { this._squash = value; }
        }
        // Check to see if Squash property is set
        internal bool IsSetSquash()
        {
            return this._squash != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// A list of up to 50 tags assigned to the NFS file share, sorted alphabetically by key
        /// name. Each tag is a key-value pair. For a gateway with more than 10 tags assigned,
        /// you can view all tags using the ListTagsForResource API operation.
        /// 
        /// 
        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; 
        }
        /// 
        /// Gets and sets the property VPCEndpointDNSName. 
        /// 
        /// Specifies the DNS name for the VPC endpoint that the NFS file share uses to connect
        /// to Amazon S3.
        /// 
        ///   
        /// 
        /// This parameter is required for NFS file shares that connect to Amazon S3 through a
        /// VPC endpoint, a VPC access point, or an access point alias that points to a VPC access
        /// point.
        /// 
        ///  
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string VPCEndpointDNSName
        {
            get { return this._vpcEndpointDNSName; }
            set { this._vpcEndpointDNSName = value; }
        }
        // Check to see if VPCEndpointDNSName property is set
        internal bool IsSetVPCEndpointDNSName()
        {
            return this._vpcEndpointDNSName != null;
        }
    }
}