/*
 * 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 serverlessrepo-2017-09-08.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.ServerlessApplicationRepository.Model
{
    /// 
    /// Container for the parameters to the CreateCloudFormationChangeSet operation.
    /// Creates an AWS CloudFormation change set for the given application.
    /// 
    public partial class CreateCloudFormationChangeSetRequest : AmazonServerlessApplicationRepositoryRequest
    {
        private string _applicationId;
        private List _capabilities = new List();
        private string _changeSetName;
        private string _clientToken;
        private string _description;
        private List _notificationArns = new List();
        private List _parameterOverrides = new List();
        private List _resourceTypes = new List();
        private RollbackConfiguration _rollbackConfiguration;
        private string _semanticVersion;
        private string _stackName;
        private List _tags = new List();
        private string _templateId;
        /// 
        /// Gets and sets the property ApplicationId. 
        /// 
        /// The Amazon Resource Name (ARN) of the application.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string ApplicationId
        {
            get { return this._applicationId; }
            set { this._applicationId = value; }
        }
        // Check to see if ApplicationId property is set
        internal bool IsSetApplicationId()
        {
            return this._applicationId != null;
        }
        /// 
        /// Gets and sets the property Capabilities. 
        /// 
        /// A list of values that you must specify before you can deploy certain applications.
        /// Some applications might include resources that can affect permissions in your AWS
        /// account, for example, by creating new AWS Identity and Access Management (IAM) users.
        /// For those applications, you must explicitly acknowledge their capabilities by specifying
        /// this parameter.
        /// 
        /// 
        /// 
        /// The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM, CAPABILITY_RESOURCE_POLICY,
        /// and CAPABILITY_AUTO_EXPAND.
        /// 
        /// 
        /// 
        /// The following resources require you to specify CAPABILITY_IAM or CAPABILITY_NAMED_IAM:
        /// AWS::IAM::Group,
        /// AWS::IAM::InstanceProfile,
        /// AWS::IAM::Policy,
        /// and AWS::IAM::Role.
        /// If the application contains IAM resources, you can specify either CAPABILITY_IAM or
        /// CAPABILITY_NAMED_IAM. If the application contains IAM resources with custom names,
        /// you must specify CAPABILITY_NAMED_IAM.
        /// 
        /// 
        /// 
        /// The following resources require you to specify CAPABILITY_RESOURCE_POLICY: AWS::Lambda::Permission,
        /// AWS::IAM:Policy,
        /// AWS::ApplicationAutoScaling::ScalingPolicy,
        /// AWS::S3::BucketPolicy,
        /// AWS::SQS::QueuePolicy,
        /// and AWS::SNS:TopicPolicy.
        /// 
        /// 
        /// 
        /// Applications that contain one or more nested applications require you to specify CAPABILITY_AUTO_EXPAND.
        /// 
        /// 
        /// 
        /// If your application template contains any of the above resources, we recommend that
        /// you review all permissions associated with the application before deploying. If you
        /// don't specify this parameter for an application that requires capabilities, the call
        /// will fail.
        /// 
        /// 
        public List Capabilities
        {
            get { return this._capabilities; }
            set { this._capabilities = value; }
        }
        // Check to see if Capabilities property is set
        internal bool IsSetCapabilities()
        {
            return this._capabilities != null && this._capabilities.Count > 0; 
        }
        /// 
        /// Gets and sets the property ChangeSetName. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public string ChangeSetName
        {
            get { return this._changeSetName; }
            set { this._changeSetName = value; }
        }
        // Check to see if ChangeSetName property is set
        internal bool IsSetChangeSetName()
        {
            return this._changeSetName != null;
        }
        /// 
        /// Gets and sets the property ClientToken. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public string ClientToken
        {
            get { return this._clientToken; }
            set { this._clientToken = value; }
        }
        // Check to see if ClientToken property is set
        internal bool IsSetClientToken()
        {
            return this._clientToken != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property NotificationArns. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public List NotificationArns
        {
            get { return this._notificationArns; }
            set { this._notificationArns = value; }
        }
        // Check to see if NotificationArns property is set
        internal bool IsSetNotificationArns()
        {
            return this._notificationArns != null && this._notificationArns.Count > 0; 
        }
        /// 
        /// Gets and sets the property ParameterOverrides. 
        /// 
        /// A list of parameter values for the parameters of the application.
        /// 
        /// 
        public List ParameterOverrides
        {
            get { return this._parameterOverrides; }
            set { this._parameterOverrides = value; }
        }
        // Check to see if ParameterOverrides property is set
        internal bool IsSetParameterOverrides()
        {
            return this._parameterOverrides != null && this._parameterOverrides.Count > 0; 
        }
        /// 
        /// Gets and sets the property ResourceTypes. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public List ResourceTypes
        {
            get { return this._resourceTypes; }
            set { this._resourceTypes = value; }
        }
        // Check to see if ResourceTypes property is set
        internal bool IsSetResourceTypes()
        {
            return this._resourceTypes != null && this._resourceTypes.Count > 0; 
        }
        /// 
        /// Gets and sets the property RollbackConfiguration. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public RollbackConfiguration RollbackConfiguration
        {
            get { return this._rollbackConfiguration; }
            set { this._rollbackConfiguration = value; }
        }
        // Check to see if RollbackConfiguration property is set
        internal bool IsSetRollbackConfiguration()
        {
            return this._rollbackConfiguration != null;
        }
        /// 
        /// Gets and sets the property SemanticVersion. 
        /// 
        /// The semantic version of the application:
        /// 
        /// 
        /// 
        ///  https://semver.org/ 
        /// 
        /// 
        public string SemanticVersion
        {
            get { return this._semanticVersion; }
            set { this._semanticVersion = value; }
        }
        // Check to see if SemanticVersion property is set
        internal bool IsSetSemanticVersion()
        {
            return this._semanticVersion != null;
        }
        /// 
        /// Gets and sets the property StackName. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string StackName
        {
            get { return this._stackName; }
            set { this._stackName = value; }
        }
        // Check to see if StackName property is set
        internal bool IsSetStackName()
        {
            return this._stackName != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation
        /// CreateChangeSet
        ///  API.
        /// 
        /// 
        public List 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; 
        }
        /// 
        /// Gets and sets the property TemplateId. 
        /// 
        /// The UUID returned by CreateCloudFormationTemplate.
        /// 
        /// 
        /// 
        /// Pattern: [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}
        /// 
        /// 
        public string TemplateId
        {
            get { return this._templateId; }
            set { this._templateId = value; }
        }
        // Check to see if TemplateId property is set
        internal bool IsSetTemplateId()
        {
            return this._templateId != null;
        }
    }
}