/*
 * 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 autoscaling-2011-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.AutoScaling.Model
{
    /// 
    /// Describes a scaling policy.
    /// 
    public partial class ScalingPolicy
    {
        private string _adjustmentType;
        private List _alarms = new List();
        private string _autoScalingGroupName;
        private int? _cooldown;
        private bool? _enabled;
        private int? _estimatedInstanceWarmup;
        private string _metricAggregationType;
        private int? _minAdjustmentMagnitude;
        private int? _minAdjustmentStep;
        private string _policyARN;
        private string _policyName;
        private string _policyType;
        private PredictiveScalingConfiguration _predictiveScalingConfiguration;
        private int? _scalingAdjustment;
        private List _stepAdjustments = new List();
        private TargetTrackingConfiguration _targetTrackingConfiguration;
        /// 
        /// Gets and sets the property AdjustmentType. 
        /// 
        /// Specifies how the scaling adjustment is interpreted (for example, an absolute number
        /// or a percentage). The valid values are ChangeInCapacity, ExactCapacity,
        /// and PercentChangeInCapacity.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string AdjustmentType
        {
            get { return this._adjustmentType; }
            set { this._adjustmentType = value; }
        }
        // Check to see if AdjustmentType property is set
        internal bool IsSetAdjustmentType()
        {
            return this._adjustmentType != null;
        }
        /// 
        /// Gets and sets the property Alarms. 
        /// 
        /// The CloudWatch alarms related to the policy.
        /// 
        /// 
        public List Alarms
        {
            get { return this._alarms; }
            set { this._alarms = value; }
        }
        // Check to see if Alarms property is set
        internal bool IsSetAlarms()
        {
            return this._alarms != null && this._alarms.Count > 0; 
        }
        /// 
        /// Gets and sets the property AutoScalingGroupName. 
        /// 
        /// The name of the Auto Scaling group.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string AutoScalingGroupName
        {
            get { return this._autoScalingGroupName; }
            set { this._autoScalingGroupName = value; }
        }
        // Check to see if AutoScalingGroupName property is set
        internal bool IsSetAutoScalingGroupName()
        {
            return this._autoScalingGroupName != null;
        }
        /// 
        /// Gets and sets the property Cooldown. 
        /// 
        /// The duration of the policy's cooldown period, in seconds.
        /// 
        /// 
        public int Cooldown
        {
            get { return this._cooldown.GetValueOrDefault(); }
            set { this._cooldown = value; }
        }
        // Check to see if Cooldown property is set
        internal bool IsSetCooldown()
        {
            return this._cooldown.HasValue; 
        }
        /// 
        /// Gets and sets the property Enabled. 
        /// 
        /// Indicates whether the policy is enabled (true) or disabled (false).
        /// 
        /// 
        public bool Enabled
        {
            get { return this._enabled.GetValueOrDefault(); }
            set { this._enabled = value; }
        }
        // Check to see if Enabled property is set
        internal bool IsSetEnabled()
        {
            return this._enabled.HasValue; 
        }
        /// 
        /// Gets and sets the property EstimatedInstanceWarmup. 
        /// 
        /// The estimated time, in seconds, until a newly launched instance can contribute to
        /// the CloudWatch metrics.
        /// 
        /// 
        public int EstimatedInstanceWarmup
        {
            get { return this._estimatedInstanceWarmup.GetValueOrDefault(); }
            set { this._estimatedInstanceWarmup = value; }
        }
        // Check to see if EstimatedInstanceWarmup property is set
        internal bool IsSetEstimatedInstanceWarmup()
        {
            return this._estimatedInstanceWarmup.HasValue; 
        }
        /// 
        /// Gets and sets the property MetricAggregationType. 
        /// 
        /// The aggregation type for the CloudWatch metrics. The valid values are Minimum,
        /// Maximum, and Average.
        /// 
        /// 
        [AWSProperty(Min=1, Max=32)]
        public string MetricAggregationType
        {
            get { return this._metricAggregationType; }
            set { this._metricAggregationType = value; }
        }
        // Check to see if MetricAggregationType property is set
        internal bool IsSetMetricAggregationType()
        {
            return this._metricAggregationType != null;
        }
        /// 
        /// Gets and sets the property MinAdjustmentMagnitude. 
        /// 
        /// The minimum value to scale by when the adjustment type is PercentChangeInCapacity.
        /// 
        /// 
        /// 
        public int MinAdjustmentMagnitude
        {
            get { return this._minAdjustmentMagnitude.GetValueOrDefault(); }
            set { this._minAdjustmentMagnitude = value; }
        }
        // Check to see if MinAdjustmentMagnitude property is set
        internal bool IsSetMinAdjustmentMagnitude()
        {
            return this._minAdjustmentMagnitude.HasValue; 
        }
        /// 
        /// Gets and sets the property MinAdjustmentStep. 
        /// 
        /// Available for backward compatibility. Use MinAdjustmentMagnitude instead.
        /// 
        /// 
        public int MinAdjustmentStep
        {
            get { return this._minAdjustmentStep.GetValueOrDefault(); }
            set { this._minAdjustmentStep = value; }
        }
        // Check to see if MinAdjustmentStep property is set
        internal bool IsSetMinAdjustmentStep()
        {
            return this._minAdjustmentStep.HasValue; 
        }
        /// 
        /// Gets and sets the property PolicyARN. 
        /// 
        /// The Amazon Resource Name (ARN) of the policy.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1600)]
        public string PolicyARN
        {
            get { return this._policyARN; }
            set { this._policyARN = value; }
        }
        // Check to see if PolicyARN property is set
        internal bool IsSetPolicyARN()
        {
            return this._policyARN != null;
        }
        /// 
        /// Gets and sets the property PolicyName. 
        /// 
        /// The name of the scaling policy.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string PolicyName
        {
            get { return this._policyName; }
            set { this._policyName = value; }
        }
        // Check to see if PolicyName property is set
        internal bool IsSetPolicyName()
        {
            return this._policyName != null;
        }
        /// 
        /// Gets and sets the property PolicyType. 
        /// 
        /// One of the following policy types: 
        /// 
        ///   -  
        /// 
        ///  
TargetTrackingScaling 
        /// 
        ///    -  
        /// 
        ///  
StepScaling 
        /// 
        ///    -  
        /// 
        ///  
SimpleScaling (default)
        /// 
        ///    -  
        /// 
        ///  
PredictiveScaling 
        /// 
        ///    
 
        /// 
        /// For more information, see Target
        /// tracking scaling policies and Step
        /// and simple scaling policies in the Amazon EC2 Auto Scaling User Guide.
        /// 
        /// 
        [AWSProperty(Min=1, Max=64)]
        public string PolicyType
        {
            get { return this._policyType; }
            set { this._policyType = value; }
        }
        // Check to see if PolicyType property is set
        internal bool IsSetPolicyType()
        {
            return this._policyType != null;
        }
        /// 
        /// Gets and sets the property PredictiveScalingConfiguration. 
        /// 
        /// A predictive scaling policy.
        /// 
        /// 
        public PredictiveScalingConfiguration PredictiveScalingConfiguration
        {
            get { return this._predictiveScalingConfiguration; }
            set { this._predictiveScalingConfiguration = value; }
        }
        // Check to see if PredictiveScalingConfiguration property is set
        internal bool IsSetPredictiveScalingConfiguration()
        {
            return this._predictiveScalingConfiguration != null;
        }
        /// 
        /// Gets and sets the property ScalingAdjustment. 
        /// 
        /// The amount by which to scale, based on the specified adjustment type. A positive value
        /// adds to the current capacity while a negative number removes from the current capacity.
        /// 
        /// 
        public int ScalingAdjustment
        {
            get { return this._scalingAdjustment.GetValueOrDefault(); }
            set { this._scalingAdjustment = value; }
        }
        // Check to see if ScalingAdjustment property is set
        internal bool IsSetScalingAdjustment()
        {
            return this._scalingAdjustment.HasValue; 
        }
        /// 
        /// Gets and sets the property StepAdjustments. 
        /// 
        /// A set of adjustments that enable you to scale based on the size of the alarm breach.
        /// 
        /// 
        public List StepAdjustments
        {
            get { return this._stepAdjustments; }
            set { this._stepAdjustments = value; }
        }
        // Check to see if StepAdjustments property is set
        internal bool IsSetStepAdjustments()
        {
            return this._stepAdjustments != null && this._stepAdjustments.Count > 0; 
        }
        /// 
        /// Gets and sets the property TargetTrackingConfiguration. 
        /// 
        /// A target tracking scaling policy.
        /// 
        /// 
        public TargetTrackingConfiguration TargetTrackingConfiguration
        {
            get { return this._targetTrackingConfiguration; }
            set { this._targetTrackingConfiguration = value; }
        }
        // Check to see if TargetTrackingConfiguration property is set
        internal bool IsSetTargetTrackingConfiguration()
        {
            return this._targetTrackingConfiguration != null;
        }
    }
}