/*
 * 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 glacier-2012-06-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.Glacier.Model
{
    /// <summary>
    /// Container for the parameters to the InitiateVaultLock operation.
    /// This operation initiates the vault locking process by doing the following:
    /// 
    ///  <ul> <li> 
    /// <para>
    /// Installing a vault lock policy on the specified vault.
    /// </para>
    ///  </li> <li> 
    /// <para>
    /// Setting the lock state of vault lock to <code>InProgress</code>.
    /// </para>
    ///  </li> <li> 
    /// <para>
    /// Returning a lock ID, which is used to complete the vault locking process.
    /// </para>
    ///  </li> </ul> 
    /// <para>
    /// You can set one vault lock policy for each vault and this policy can be up to 20 KB
    /// in size. For more information about vault lock policies, see <a href="https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html">Amazon
    /// Glacier Access Control with Vault Lock Policies</a>. 
    /// </para>
    ///  
    /// <para>
    /// You must complete the vault locking process within 24 hours after the vault lock enters
    /// the <code>InProgress</code> state. After the 24 hour window ends, the lock ID expires,
    /// the vault automatically exits the <code>InProgress</code> state, and the vault lock
    /// policy is removed from the vault. You call <a>CompleteVaultLock</a> to complete the
    /// vault locking process by setting the state of the vault lock to <code>Locked</code>.
    /// 
    /// </para>
    ///  
    /// <para>
    /// After a vault lock is in the <code>Locked</code> state, you cannot initiate a new
    /// vault lock for the vault.
    /// </para>
    ///  
    /// <para>
    /// You can abort the vault locking process by calling <a>AbortVaultLock</a>. You can
    /// get the state of the vault lock by calling <a>GetVaultLock</a>. For more information
    /// about the vault locking process, <a href="https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock.html">Amazon
    /// Glacier Vault Lock</a>.
    /// </para>
    ///  
    /// <para>
    /// If this operation is called when the vault lock is in the <code>InProgress</code>
    /// state, the operation returns an <code>AccessDeniedException</code> error. When the
    /// vault lock is in the <code>InProgress</code> state you must call <a>AbortVaultLock</a>
    /// before you can initiate a new vault lock policy. 
    /// </para>
    /// </summary>
    public partial class InitiateVaultLockRequest : AmazonGlacierRequest
    {
        private string _accountId;
        private VaultLockPolicy _policy;
        private string _vaultName;

        /// <summary>
        /// Gets and sets the property AccountId. 
        /// <para>
        /// The <code>AccountId</code> value is the AWS account ID. This value must match the
        /// AWS account ID associated with the credentials used to sign the request. You can either
        /// specify an AWS account ID or optionally a single '<code>-</code>' (hyphen), in which
        /// case Amazon Glacier uses the AWS account ID associated with the credentials used to
        /// sign the request. If you specify your account ID, do not include any hyphens ('-')
        /// in the ID.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true)]
        public string AccountId
        {
            get { return this._accountId; }
            set { this._accountId = value; }
        }

        // Check to see if AccountId property is set
        internal bool IsSetAccountId()
        {
            return this._accountId != null;
        }

        /// <summary>
        /// Gets and sets the property Policy. 
        /// <para>
        /// The vault lock policy as a JSON string, which uses "\" as an escape character.
        /// </para>
        /// </summary>
        public VaultLockPolicy Policy
        {
            get { return this._policy; }
            set { this._policy = value; }
        }

        // Check to see if Policy property is set
        internal bool IsSetPolicy()
        {
            return this._policy != null;
        }

        /// <summary>
        /// Gets and sets the property VaultName. 
        /// <para>
        /// The name of the vault.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true)]
        public string VaultName
        {
            get { return this._vaultName; }
            set { this._vaultName = value; }
        }

        // Check to see if VaultName property is set
        internal bool IsSetVaultName()
        {
            return this._vaultName != null;
        }

    }
}