/*
 * 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 glue-2017-03-31.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.Glue.Model
{
    /// 
    /// Specifies an Apache Parquet data store stored in Amazon S3.
    /// 
    public partial class S3ParquetSource
    {
        private S3DirectSourceAdditionalOptions _additionalOptions;
        private ParquetCompressionType _compressionType;
        private List _exclusions = new List();
        private string _groupFiles;
        private string _groupSize;
        private int? _maxBand;
        private int? _maxFilesInBand;
        private string _name;
        private List _outputSchemas = new List();
        private List _paths = new List();
        private bool? _recurse;
        /// 
        /// Gets and sets the property AdditionalOptions. 
        /// 
        /// Specifies additional connection options.
        /// 
        /// 
        public S3DirectSourceAdditionalOptions AdditionalOptions
        {
            get { return this._additionalOptions; }
            set { this._additionalOptions = value; }
        }
        // Check to see if AdditionalOptions property is set
        internal bool IsSetAdditionalOptions()
        {
            return this._additionalOptions != null;
        }
        /// 
        /// Gets and sets the property CompressionType. 
        /// 
        /// Specifies how the data is compressed. This is generally not necessary if the data
        /// has a standard file extension. Possible values are "gzip" and "bzip").
        /// 
        /// 
        public ParquetCompressionType CompressionType
        {
            get { return this._compressionType; }
            set { this._compressionType = value; }
        }
        // Check to see if CompressionType property is set
        internal bool IsSetCompressionType()
        {
            return this._compressionType != null;
        }
        /// 
        /// Gets and sets the property Exclusions. 
        /// 
        /// A string containing a JSON list of Unix-style glob patterns to exclude. For example,
        /// "[\"**.pdf\"]" excludes all PDF files. 
        /// 
        /// 
        public List Exclusions
        {
            get { return this._exclusions; }
            set { this._exclusions = value; }
        }
        // Check to see if Exclusions property is set
        internal bool IsSetExclusions()
        {
            return this._exclusions != null && this._exclusions.Count > 0; 
        }
        /// 
        /// Gets and sets the property GroupFiles. 
        /// 
        /// Grouping files is turned on by default when the input contains more than 50,000 files.
        /// To turn on grouping with fewer than 50,000 files, set this parameter to "inPartition".
        /// To disable grouping when there are more than 50,000 files, set this parameter to "none".
        /// 
        /// 
        public string GroupFiles
        {
            get { return this._groupFiles; }
            set { this._groupFiles = value; }
        }
        // Check to see if GroupFiles property is set
        internal bool IsSetGroupFiles()
        {
            return this._groupFiles != null;
        }
        /// 
        /// Gets and sets the property GroupSize. 
        /// 
        /// The target group size in bytes. The default is computed based on the input data size
        /// and the size of your cluster. When there are fewer than 50,000 input files, "groupFiles"
        /// must be set to "inPartition" for this to take effect.
        /// 
        /// 
        public string GroupSize
        {
            get { return this._groupSize; }
            set { this._groupSize = value; }
        }
        // Check to see if GroupSize property is set
        internal bool IsSetGroupSize()
        {
            return this._groupSize != null;
        }
        /// 
        /// Gets and sets the property MaxBand. 
        /// 
        /// This option controls the duration in milliseconds after which the s3 listing is likely
        /// to be consistent. Files with modification timestamps falling within the last maxBand
        /// milliseconds are tracked specially when using JobBookmarks to account for Amazon S3
        /// eventual consistency. Most users don't need to set this option. The default is 900000
        /// milliseconds, or 15 minutes.
        /// 
        /// 
        [AWSProperty(Min=0)]
        public int MaxBand
        {
            get { return this._maxBand.GetValueOrDefault(); }
            set { this._maxBand = value; }
        }
        // Check to see if MaxBand property is set
        internal bool IsSetMaxBand()
        {
            return this._maxBand.HasValue; 
        }
        /// 
        /// Gets and sets the property MaxFilesInBand. 
        /// 
        /// This option specifies the maximum number of files to save from the last maxBand seconds.
        /// If this number is exceeded, extra files are skipped and only processed in the next
        /// job run.
        /// 
        /// 
        [AWSProperty(Min=0)]
        public int MaxFilesInBand
        {
            get { return this._maxFilesInBand.GetValueOrDefault(); }
            set { this._maxFilesInBand = value; }
        }
        // Check to see if MaxFilesInBand property is set
        internal bool IsSetMaxFilesInBand()
        {
            return this._maxFilesInBand.HasValue; 
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The name of the data store.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property OutputSchemas. 
        /// 
        /// Specifies the data schema for the S3 Parquet source.
        /// 
        /// 
        public List OutputSchemas
        {
            get { return this._outputSchemas; }
            set { this._outputSchemas = value; }
        }
        // Check to see if OutputSchemas property is set
        internal bool IsSetOutputSchemas()
        {
            return this._outputSchemas != null && this._outputSchemas.Count > 0; 
        }
        /// 
        /// Gets and sets the property Paths. 
        /// 
        /// A list of the Amazon S3 paths to read from.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public List Paths
        {
            get { return this._paths; }
            set { this._paths = value; }
        }
        // Check to see if Paths property is set
        internal bool IsSetPaths()
        {
            return this._paths != null && this._paths.Count > 0; 
        }
        /// 
        /// Gets and sets the property Recurse. 
        /// 
        /// If set to true, recursively reads files in all subdirectories under the specified
        /// paths.
        /// 
        /// 
        public bool Recurse
        {
            get { return this._recurse.GetValueOrDefault(); }
            set { this._recurse = value; }
        }
        // Check to see if Recurse property is set
        internal bool IsSetRecurse()
        {
            return this._recurse.HasValue; 
        }
    }
}