/*
 * 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 storagegateway-2013-06-30.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.StorageGateway.Model
{
    /// <summary>
    /// An automatic tape creation policy consists of automatic tape creation rules where
    /// each rule defines when and how to create new tapes. For more information about automatic
    /// tape creation, see <a href="https://docs.aws.amazon.com/storagegateway/latest/userguide/GettingStartedCreateTapes.html#CreateTapesAutomatically">Creating
    /// Tapes Automatically</a>.
    /// </summary>
    public partial class AutomaticTapeCreationRule
    {
        private int? _minimumNumTapes;
        private string _poolId;
        private string _tapeBarcodePrefix;
        private long? _tapeSizeInBytes;
        private bool? _worm;

        /// <summary>
        /// Gets and sets the property MinimumNumTapes. 
        /// <para>
        /// The minimum number of available virtual tapes that the gateway maintains at all times.
        /// If the number of tapes on the gateway goes below this value, the gateway creates as
        /// many new tapes as are needed to have <code>MinimumNumTapes</code> on the gateway.
        /// For more information about automatic tape creation, see <a href="https://docs.aws.amazon.com/storagegateway/latest/userguide/GettingStartedCreateTapes.html#CreateTapesAutomatically">Creating
        /// Tapes Automatically</a>.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true, Min=1, Max=10)]
        public int MinimumNumTapes
        {
            get { return this._minimumNumTapes.GetValueOrDefault(); }
            set { this._minimumNumTapes = value; }
        }

        // Check to see if MinimumNumTapes property is set
        internal bool IsSetMinimumNumTapes()
        {
            return this._minimumNumTapes.HasValue; 
        }

        /// <summary>
        /// Gets and sets the property PoolId. 
        /// <para>
        /// The ID of the pool that you want to add your tape to for archiving. The tape in this
        /// pool is archived in the Amazon S3 storage class that is associated with the pool.
        /// When you use your backup application to eject the tape, the tape is archived directly
        /// into the storage class (S3 Glacier or S3 Glacier Deep Archive) that corresponds to
        /// the pool.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true, Min=1, Max=100)]
        public string PoolId
        {
            get { return this._poolId; }
            set { this._poolId = value; }
        }

        // Check to see if PoolId property is set
        internal bool IsSetPoolId()
        {
            return this._poolId != null;
        }

        /// <summary>
        /// Gets and sets the property TapeBarcodePrefix. 
        /// <para>
        /// A prefix that you append to the barcode of the virtual tape that you are creating.
        /// This prefix makes the barcode unique.
        /// </para>
        ///  <note> 
        /// <para>
        /// The prefix must be 1-4 characters in length and must be one of the uppercase letters
        /// from A to Z.
        /// </para>
        ///  </note>
        /// </summary>
        [AWSProperty(Required=true, Min=1, Max=4)]
        public string TapeBarcodePrefix
        {
            get { return this._tapeBarcodePrefix; }
            set { this._tapeBarcodePrefix = value; }
        }

        // Check to see if TapeBarcodePrefix property is set
        internal bool IsSetTapeBarcodePrefix()
        {
            return this._tapeBarcodePrefix != null;
        }

        /// <summary>
        /// Gets and sets the property TapeSizeInBytes. 
        /// <para>
        /// The size, in bytes, of the virtual tape capacity.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true)]
        public long TapeSizeInBytes
        {
            get { return this._tapeSizeInBytes.GetValueOrDefault(); }
            set { this._tapeSizeInBytes = value; }
        }

        // Check to see if TapeSizeInBytes property is set
        internal bool IsSetTapeSizeInBytes()
        {
            return this._tapeSizeInBytes.HasValue; 
        }

        /// <summary>
        /// Gets and sets the property Worm. 
        /// <para>
        /// Set to <code>true</code> to indicate that tapes are to be archived as write-once-read-many
        /// (WORM). Set to <code>false</code> when WORM is not enabled for tapes.
        /// </para>
        /// </summary>
        public bool Worm
        {
            get { return this._worm.GetValueOrDefault(); }
            set { this._worm = value; }
        }

        // Check to see if Worm property is set
        internal bool IsSetWorm()
        {
            return this._worm.HasValue; 
        }

    }
}