/*
 * 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 dms-2016-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.DatabaseMigrationService.Model
{
    /// 
    /// Provides information that defines a MongoDB endpoint.
    /// 
    public partial class MongoDbSettings
    {
        private AuthMechanismValue _authMechanism;
        private string _authSource;
        private AuthTypeValue _authType;
        private string _databaseName;
        private string _docsToInvestigate;
        private string _extractDocId;
        private string _kmsKeyId;
        private NestingLevelValue _nestingLevel;
        private string _password;
        private int? _port;
        private bool? _replicateShardCollections;
        private string _secretsManagerAccessRoleArn;
        private string _secretsManagerSecretId;
        private string _serverName;
        private string _username;
        private bool? _useUpdateLookUp;
        /// 
        /// Gets and sets the property AuthMechanism. 
        /// 
        ///  The authentication mechanism you use to access the MongoDB source endpoint.
        /// 
        ///  
        /// 
        /// For the default value, in MongoDB version 2.x, "default" is "mongodb_cr".
        /// For MongoDB version 3.x or later, "default" is "scram_sha_1".
        /// This setting isn't used when AuthType is set to "no".
        /// 
        /// 
        public AuthMechanismValue AuthMechanism
        {
            get { return this._authMechanism; }
            set { this._authMechanism = value; }
        }
        // Check to see if AuthMechanism property is set
        internal bool IsSetAuthMechanism()
        {
            return this._authMechanism != null;
        }
        /// 
        /// Gets and sets the property AuthSource. 
        /// 
        ///  The MongoDB database name. This setting isn't used when AuthType is
        /// set to "no". 
        /// 
        ///  
        /// 
        /// The default is "admin".
        /// 
        /// 
        public string AuthSource
        {
            get { return this._authSource; }
            set { this._authSource = value; }
        }
        // Check to see if AuthSource property is set
        internal bool IsSetAuthSource()
        {
            return this._authSource != null;
        }
        /// 
        /// Gets and sets the property AuthType. 
        /// 
        ///  The authentication type you use to access the MongoDB source endpoint.
        /// 
        ///  
        /// 
        /// When when set to "no", user name and password parameters are not used
        /// and can be empty. 
        /// 
        /// 
        public AuthTypeValue AuthType
        {
            get { return this._authType; }
            set { this._authType = value; }
        }
        // Check to see if AuthType property is set
        internal bool IsSetAuthType()
        {
            return this._authType != null;
        }
        /// 
        /// Gets and sets the property DatabaseName. 
        /// 
        ///  The database name on the MongoDB source endpoint. 
        /// 
        /// 
        public string DatabaseName
        {
            get { return this._databaseName; }
            set { this._databaseName = value; }
        }
        // Check to see if DatabaseName property is set
        internal bool IsSetDatabaseName()
        {
            return this._databaseName != null;
        }
        /// 
        /// Gets and sets the property DocsToInvestigate. 
        /// 
        ///  Indicates the number of documents to preview to determine the document organization.
        /// Use this setting when NestingLevel is set to "one". 
        /// 
        ///  
        /// 
        /// Must be a positive value greater than 0. Default value is 1000.
        /// 
        /// 
        public string DocsToInvestigate
        {
            get { return this._docsToInvestigate; }
            set { this._docsToInvestigate = value; }
        }
        // Check to see if DocsToInvestigate property is set
        internal bool IsSetDocsToInvestigate()
        {
            return this._docsToInvestigate != null;
        }
        /// 
        /// Gets and sets the property ExtractDocId. 
        /// 
        ///  Specifies the document ID. Use this setting when NestingLevel is set
        /// to "none". 
        /// 
        ///  
        /// 
        /// Default value is "false". 
        /// 
        /// 
        public string ExtractDocId
        {
            get { return this._extractDocId; }
            set { this._extractDocId = value; }
        }
        // Check to see if ExtractDocId property is set
        internal bool IsSetExtractDocId()
        {
            return this._extractDocId != null;
        }
        /// 
        /// Gets and sets the property KmsKeyId. 
        /// 
        /// The KMS key identifier that is used to encrypt the content on the replication instance.
        /// If you don't specify a value for the KmsKeyId parameter, then DMS uses
        /// your default encryption key. KMS creates the default encryption key for your Amazon
        /// Web Services account. Your Amazon Web Services account has a different default encryption
        /// key for each Amazon Web Services Region.
        /// 
        /// 
        public string KmsKeyId
        {
            get { return this._kmsKeyId; }
            set { this._kmsKeyId = value; }
        }
        // Check to see if KmsKeyId property is set
        internal bool IsSetKmsKeyId()
        {
            return this._kmsKeyId != null;
        }
        /// 
        /// Gets and sets the property NestingLevel. 
        /// 
        ///  Specifies either document or table mode. 
        /// 
        ///  
        /// 
        /// Default value is "none". Specify "none" to use document
        /// mode. Specify "one" to use table mode.
        /// 
        /// 
        public NestingLevelValue NestingLevel
        {
            get { return this._nestingLevel; }
            set { this._nestingLevel = value; }
        }
        // Check to see if NestingLevel property is set
        internal bool IsSetNestingLevel()
        {
            return this._nestingLevel != null;
        }
        /// 
        /// Gets and sets the property Password. 
        /// 
        ///  The password for the user account you use to access the MongoDB source endpoint.
        /// 
        /// 
        /// 
        [AWSProperty(Sensitive=true)]
        public string Password
        {
            get { return this._password; }
            set { this._password = value; }
        }
        // Check to see if Password property is set
        internal bool IsSetPassword()
        {
            return this._password != null;
        }
        /// 
        /// Gets and sets the property Port. 
        /// 
        ///  The port value for the MongoDB source endpoint. 
        /// 
        /// 
        public int Port
        {
            get { return this._port.GetValueOrDefault(); }
            set { this._port = value; }
        }
        // Check to see if Port property is set
        internal bool IsSetPort()
        {
            return this._port.HasValue; 
        }
        /// 
        /// Gets and sets the property ReplicateShardCollections. 
        /// 
        /// If true, DMS replicates data to shard collections. DMS only uses this
        /// setting if the target endpoint is a DocumentDB elastic cluster.
        /// 
        ///  
        /// 
        /// When this setting is true, note the following:
        /// 
        ///   -  
        /// 
        /// You must set 
TargetTablePrepMode to nothing.
        /// 
        ///    -  
        /// 
        /// DMS automatically sets 
useUpdateLookup to false.
        /// 
        ///    
        /// 
        public bool ReplicateShardCollections
        {
            get { return this._replicateShardCollections.GetValueOrDefault(); }
            set { this._replicateShardCollections = value; }
        }
        // Check to see if ReplicateShardCollections property is set
        internal bool IsSetReplicateShardCollections()
        {
            return this._replicateShardCollections.HasValue; 
        }
        /// 
        /// Gets and sets the property SecretsManagerAccessRoleArn. 
        /// 
        /// The full Amazon Resource Name (ARN) of the IAM role that specifies DMS as the trusted
        /// entity and grants the required permissions to access the value in SecretsManagerSecret.
        /// The role must allow the iam:PassRole action. SecretsManagerSecret
        /// has the value of the Amazon Web Services Secrets Manager secret that allows access
        /// to the MongoDB endpoint.
        /// 
        ///   
        /// 
        /// You can specify one of two sets of values for these permissions. You can specify the
        /// values for this setting and SecretsManagerSecretId. Or you can specify
        /// clear-text values for UserName, Password, ServerName,
        /// and Port. You can't specify both. For more information on creating this
        /// SecretsManagerSecret and the SecretsManagerAccessRoleArn
        /// and SecretsManagerSecretId required to access it, see Using
        /// secrets to access Database Migration Service resources in the Database Migration
        /// Service User Guide.
        /// 
        ///  
        /// 
        public string SecretsManagerAccessRoleArn
        {
            get { return this._secretsManagerAccessRoleArn; }
            set { this._secretsManagerAccessRoleArn = value; }
        }
        // Check to see if SecretsManagerAccessRoleArn property is set
        internal bool IsSetSecretsManagerAccessRoleArn()
        {
            return this._secretsManagerAccessRoleArn != null;
        }
        /// 
        /// Gets and sets the property SecretsManagerSecretId. 
        /// 
        /// The full ARN, partial ARN, or friendly name of the SecretsManagerSecret
        /// that contains the MongoDB endpoint connection details.
        /// 
        /// 
        public string SecretsManagerSecretId
        {
            get { return this._secretsManagerSecretId; }
            set { this._secretsManagerSecretId = value; }
        }
        // Check to see if SecretsManagerSecretId property is set
        internal bool IsSetSecretsManagerSecretId()
        {
            return this._secretsManagerSecretId != null;
        }
        /// 
        /// Gets and sets the property ServerName. 
        /// 
        ///  The name of the server on the MongoDB source endpoint. 
        /// 
        /// 
        public string ServerName
        {
            get { return this._serverName; }
            set { this._serverName = value; }
        }
        // Check to see if ServerName property is set
        internal bool IsSetServerName()
        {
            return this._serverName != null;
        }
        /// 
        /// Gets and sets the property Username. 
        /// 
        /// The user name you use to access the MongoDB source endpoint. 
        /// 
        /// 
        public string Username
        {
            get { return this._username; }
            set { this._username = value; }
        }
        // Check to see if Username property is set
        internal bool IsSetUsername()
        {
            return this._username != null;
        }
        /// 
        /// Gets and sets the property UseUpdateLookUp. 
        /// 
        /// If true, DMS retrieves the entire document from the MongoDB source during
        /// migration. This may cause a migration failure if the server response exceeds bandwidth
        /// limits. To fetch only updates and deletes during migration, set this parameter to
        /// false.
        /// 
        /// 
        public bool UseUpdateLookUp
        {
            get { return this._useUpdateLookUp.GetValueOrDefault(); }
            set { this._useUpdateLookUp = value; }
        }
        // Check to see if UseUpdateLookUp property is set
        internal bool IsSetUseUpdateLookUp()
        {
            return this._useUpdateLookUp.HasValue; 
        }
    }
}