/*
 * 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 macie2-2020-01-01.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.Macie2.Model
{
    /// 
    /// Provides information about the S3 object that a finding applies to.
    /// 
    public partial class S3Object
    {
        private string _bucketArn;
        private string _eTag;
        private string _extension;
        private string _key;
        private DateTime? _lastModified;
        private string _path;
        private bool? _publicAccess;
        private ServerSideEncryption _serverSideEncryption;
        private long? _size;
        private StorageClass _storageClass;
        private List _tags = new List();
        private string _versionId;
        /// 
        /// Gets and sets the property BucketArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the bucket that contains the object.
        /// 
        /// 
        public string BucketArn
        {
            get { return this._bucketArn; }
            set { this._bucketArn = value; }
        }
        // Check to see if BucketArn property is set
        internal bool IsSetBucketArn()
        {
            return this._bucketArn != null;
        }
        /// 
        /// Gets and sets the property ETag. 
        /// 
        /// The entity tag (ETag) that identifies the affected version of the object. If the object
        /// was overwritten or changed after Amazon Macie produced the finding, this value might
        /// be different from the current ETag for the object.
        /// 
        /// 
        public string ETag
        {
            get { return this._eTag; }
            set { this._eTag = value; }
        }
        // Check to see if ETag property is set
        internal bool IsSetETag()
        {
            return this._eTag != null;
        }
        /// 
        /// Gets and sets the property Extension. 
        /// 
        /// The file name extension of the object. If the object doesn't have a file name extension,
        /// this value is "".
        /// 
        /// 
        public string Extension
        {
            get { return this._extension; }
            set { this._extension = value; }
        }
        // Check to see if Extension property is set
        internal bool IsSetExtension()
        {
            return this._extension != null;
        }
        /// 
        /// Gets and sets the property Key. 
        /// 
        /// The full name (key) of the object, including the object's prefix if applicable.
        /// 
        /// 
        public string Key
        {
            get { return this._key; }
            set { this._key = value; }
        }
        // Check to see if Key property is set
        internal bool IsSetKey()
        {
            return this._key != null;
        }
        /// 
        /// Gets and sets the property LastModified. 
        /// 
        /// The date and time, in UTC and extended ISO 8601 format, when the object was last modified.
        /// 
        /// 
        public DateTime LastModified
        {
            get { return this._lastModified.GetValueOrDefault(); }
            set { this._lastModified = value; }
        }
        // Check to see if LastModified property is set
        internal bool IsSetLastModified()
        {
            return this._lastModified.HasValue; 
        }
        /// 
        /// Gets and sets the property Path. 
        /// 
        /// The full path to the affected object, including the name of the affected bucket and
        /// the object's name (key).
        /// 
        /// 
        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 PublicAccess. 
        /// 
        /// Specifies whether the object is publicly accessible due to the combination of permissions
        /// settings that apply to the object.
        /// 
        /// 
        public bool PublicAccess
        {
            get { return this._publicAccess.GetValueOrDefault(); }
            set { this._publicAccess = value; }
        }
        // Check to see if PublicAccess property is set
        internal bool IsSetPublicAccess()
        {
            return this._publicAccess.HasValue; 
        }
        /// 
        /// Gets and sets the property ServerSideEncryption. 
        /// 
        /// The type of server-side encryption that was used to encrypt the object.
        /// 
        /// 
        public ServerSideEncryption ServerSideEncryption
        {
            get { return this._serverSideEncryption; }
            set { this._serverSideEncryption = value; }
        }
        // Check to see if ServerSideEncryption property is set
        internal bool IsSetServerSideEncryption()
        {
            return this._serverSideEncryption != null;
        }
        /// 
        /// Gets and sets the property Size. 
        /// 
        /// The total storage size, in bytes, of the object.
        /// 
        /// 
        public long Size
        {
            get { return this._size.GetValueOrDefault(); }
            set { this._size = value; }
        }
        // Check to see if Size property is set
        internal bool IsSetSize()
        {
            return this._size.HasValue; 
        }
        /// 
        /// Gets and sets the property StorageClass. 
        /// 
        /// The storage class of the object.
        /// 
        /// 
        public StorageClass StorageClass
        {
            get { return this._storageClass; }
            set { this._storageClass = value; }
        }
        // Check to see if StorageClass property is set
        internal bool IsSetStorageClass()
        {
            return this._storageClass != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The tags that are associated with the object.
        /// 
        /// 
        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 VersionId. 
        /// 
        /// The identifier for the affected version of the object.
        /// 
        /// 
        public string VersionId
        {
            get { return this._versionId; }
            set { this._versionId = value; }
        }
        // Check to see if VersionId property is set
        internal bool IsSetVersionId()
        {
            return this._versionId != null;
        }
    }
}