/*
 * 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 iotanalytics-2017-11-27.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.IoTAnalytics.Model
{
    /// <summary>
    /// Container for the parameters to the CreateDatastore operation.
    /// Creates a data store, which is a repository for messages.
    /// </summary>
    public partial class CreateDatastoreRequest : AmazonIoTAnalyticsRequest
    {
        private string _datastoreName;
        private DatastorePartitions _datastorePartitions;
        private DatastoreStorage _datastoreStorage;
        private FileFormatConfiguration _fileFormatConfiguration;
        private RetentionPeriod _retentionPeriod;
        private List<Tag> _tags = new List<Tag>();

        /// <summary>
        /// Gets and sets the property DatastoreName. 
        /// <para>
        /// The name of the data store.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true, Min=1, Max=128)]
        public string DatastoreName
        {
            get { return this._datastoreName; }
            set { this._datastoreName = value; }
        }

        // Check to see if DatastoreName property is set
        internal bool IsSetDatastoreName()
        {
            return this._datastoreName != null;
        }

        /// <summary>
        /// Gets and sets the property DatastorePartitions. 
        /// <para>
        ///  Contains information about the partition dimensions in a data store. 
        /// </para>
        /// </summary>
        public DatastorePartitions DatastorePartitions
        {
            get { return this._datastorePartitions; }
            set { this._datastorePartitions = value; }
        }

        // Check to see if DatastorePartitions property is set
        internal bool IsSetDatastorePartitions()
        {
            return this._datastorePartitions != null;
        }

        /// <summary>
        /// Gets and sets the property DatastoreStorage. 
        /// <para>
        /// Where data in a data store is stored.. You can choose <code>serviceManagedS3</code>
        /// storage, <code>customerManagedS3</code> storage, or <code>iotSiteWiseMultiLayerStorage</code>
        /// storage. The default is <code>serviceManagedS3</code>. You can't change the choice
        /// of Amazon S3 storage after your data store is created. 
        /// </para>
        /// </summary>
        public DatastoreStorage DatastoreStorage
        {
            get { return this._datastoreStorage; }
            set { this._datastoreStorage = value; }
        }

        // Check to see if DatastoreStorage property is set
        internal bool IsSetDatastoreStorage()
        {
            return this._datastoreStorage != null;
        }

        /// <summary>
        /// Gets and sets the property FileFormatConfiguration. 
        /// <para>
        /// Contains the configuration information of file formats. IoT Analytics data stores
        /// support JSON and <a href="https://parquet.apache.org/">Parquet</a>.
        /// </para>
        ///  
        /// <para>
        /// The default file format is JSON. You can specify only one format.
        /// </para>
        ///  
        /// <para>
        /// You can't change the file format after you create the data store.
        /// </para>
        /// </summary>
        public FileFormatConfiguration FileFormatConfiguration
        {
            get { return this._fileFormatConfiguration; }
            set { this._fileFormatConfiguration = value; }
        }

        // Check to see if FileFormatConfiguration property is set
        internal bool IsSetFileFormatConfiguration()
        {
            return this._fileFormatConfiguration != null;
        }

        /// <summary>
        /// Gets and sets the property RetentionPeriod. 
        /// <para>
        /// How long, in days, message data is kept for the data store. When <code>customerManagedS3</code>
        /// storage is selected, this parameter is ignored.
        /// </para>
        /// </summary>
        public RetentionPeriod RetentionPeriod
        {
            get { return this._retentionPeriod; }
            set { this._retentionPeriod = value; }
        }

        // Check to see if RetentionPeriod property is set
        internal bool IsSetRetentionPeriod()
        {
            return this._retentionPeriod != null;
        }

        /// <summary>
        /// Gets and sets the property Tags. 
        /// <para>
        /// Metadata which can be used to manage the data store.
        /// </para>
        /// </summary>
        [AWSProperty(Min=1, Max=50)]
        public List<Tag> 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; 
        }

    }
}