/*
 * 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 kafka-2018-11-14.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.Kafka.Model
{
    /// 
    /// Container for the parameters to the CreateCluster operation.
    /// Creates a new MSK cluster.
    /// 
    public partial class CreateClusterRequest : AmazonKafkaRequest
    {
        private BrokerNodeGroupInfo _brokerNodeGroupInfo;
        private ClientAuthentication _clientAuthentication;
        private string _clusterName;
        private ConfigurationInfo _configurationInfo;
        private EncryptionInfo _encryptionInfo;
        private EnhancedMonitoring _enhancedMonitoring;
        private string _kafkaVersion;
        private LoggingInfo _loggingInfo;
        private int? _numberOfBrokerNodes;
        private OpenMonitoringInfo _openMonitoring;
        private StorageMode _storageMode;
        private Dictionary _tags = new Dictionary();
        /// 
        /// Gets and sets the property BrokerNodeGroupInfo.             
        /// 
        /// Information about the broker nodes in the cluster.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public BrokerNodeGroupInfo BrokerNodeGroupInfo
        {
            get { return this._brokerNodeGroupInfo; }
            set { this._brokerNodeGroupInfo = value; }
        }
        // Check to see if BrokerNodeGroupInfo property is set
        internal bool IsSetBrokerNodeGroupInfo()
        {
            return this._brokerNodeGroupInfo != null;
        }
        /// 
        /// Gets and sets the property ClientAuthentication.             
        /// 
        /// Includes all client authentication related information.
        /// 
        /// 
        public ClientAuthentication ClientAuthentication
        {
            get { return this._clientAuthentication; }
            set { this._clientAuthentication = value; }
        }
        // Check to see if ClientAuthentication property is set
        internal bool IsSetClientAuthentication()
        {
            return this._clientAuthentication != null;
        }
        /// 
        /// Gets and sets the property ClusterName.             
        /// 
        /// The name of the cluster.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=64)]
        public string ClusterName
        {
            get { return this._clusterName; }
            set { this._clusterName = value; }
        }
        // Check to see if ClusterName property is set
        internal bool IsSetClusterName()
        {
            return this._clusterName != null;
        }
        /// 
        /// Gets and sets the property ConfigurationInfo.             
        /// 
        /// Represents the configuration that you want MSK to use for the brokers in a cluster.
        /// 
        /// 
        public ConfigurationInfo ConfigurationInfo
        {
            get { return this._configurationInfo; }
            set { this._configurationInfo = value; }
        }
        // Check to see if ConfigurationInfo property is set
        internal bool IsSetConfigurationInfo()
        {
            return this._configurationInfo != null;
        }
        /// 
        /// Gets and sets the property EncryptionInfo.             
        /// 
        /// Includes all encryption-related information.
        /// 
        /// 
        public EncryptionInfo EncryptionInfo
        {
            get { return this._encryptionInfo; }
            set { this._encryptionInfo = value; }
        }
        // Check to see if EncryptionInfo property is set
        internal bool IsSetEncryptionInfo()
        {
            return this._encryptionInfo != null;
        }
        /// 
        /// Gets and sets the property EnhancedMonitoring.             
        /// 
        /// Specifies the level of monitoring for the MSK cluster. The possible values are DEFAULT,
        /// PER_BROKER, PER_TOPIC_PER_BROKER, and PER_TOPIC_PER_PARTITION.
        /// 
        /// 
        public EnhancedMonitoring EnhancedMonitoring
        {
            get { return this._enhancedMonitoring; }
            set { this._enhancedMonitoring = value; }
        }
        // Check to see if EnhancedMonitoring property is set
        internal bool IsSetEnhancedMonitoring()
        {
            return this._enhancedMonitoring != null;
        }
        /// 
        /// Gets and sets the property KafkaVersion.             
        /// 
        /// The version of Apache Kafka.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=128)]
        public string KafkaVersion
        {
            get { return this._kafkaVersion; }
            set { this._kafkaVersion = value; }
        }
        // Check to see if KafkaVersion property is set
        internal bool IsSetKafkaVersion()
        {
            return this._kafkaVersion != null;
        }
        /// 
        /// Gets and sets the property LoggingInfo.
        /// 
        public LoggingInfo LoggingInfo
        {
            get { return this._loggingInfo; }
            set { this._loggingInfo = value; }
        }
        // Check to see if LoggingInfo property is set
        internal bool IsSetLoggingInfo()
        {
            return this._loggingInfo != null;
        }
        /// 
        /// Gets and sets the property NumberOfBrokerNodes.             
        /// 
        /// The number of broker nodes in the cluster.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=15)]
        public int NumberOfBrokerNodes
        {
            get { return this._numberOfBrokerNodes.GetValueOrDefault(); }
            set { this._numberOfBrokerNodes = value; }
        }
        // Check to see if NumberOfBrokerNodes property is set
        internal bool IsSetNumberOfBrokerNodes()
        {
            return this._numberOfBrokerNodes.HasValue; 
        }
        /// 
        /// Gets and sets the property OpenMonitoring.             
        /// 
        /// The settings for open monitoring.
        /// 
        /// 
        public OpenMonitoringInfo OpenMonitoring
        {
            get { return this._openMonitoring; }
            set { this._openMonitoring = value; }
        }
        // Check to see if OpenMonitoring property is set
        internal bool IsSetOpenMonitoring()
        {
            return this._openMonitoring != null;
        }
        /// 
        /// Gets and sets the property StorageMode.             
        /// 
        /// This controls storage mode for supported storage tiers.
        /// 
        /// 
        public StorageMode StorageMode
        {
            get { return this._storageMode; }
            set { this._storageMode = value; }
        }
        // Check to see if StorageMode property is set
        internal bool IsSetStorageMode()
        {
            return this._storageMode != null;
        }
        /// 
        /// Gets and sets the property Tags.             
        /// 
        /// Create tags when creating the cluster.
        /// 
        /// 
        public Dictionary 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; 
        }
    }
}