/*
 * 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 amplify-2017-07-25.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.Amplify.Model
{
    /// 
    /// Container for the parameters to the UpdateApp operation.
    /// Updates an existing Amplify app.
    /// 
    public partial class UpdateAppRequest : AmazonAmplifyRequest
    {
        private string _accessToken;
        private string _appId;
        private AutoBranchCreationConfig _autoBranchCreationConfig;
        private List _autoBranchCreationPatterns = new List();
        private string _basicAuthCredentials;
        private string _buildSpec;
        private string _customHeaders;
        private List _customRules = new List();
        private string _description;
        private bool? _enableAutoBranchCreation;
        private bool? _enableBasicAuth;
        private bool? _enableBranchAutoBuild;
        private bool? _enableBranchAutoDeletion;
        private Dictionary _environmentVariables = new Dictionary();
        private string _iamServiceRoleArn;
        private string _name;
        private string _oauthToken;
        private Platform _platform;
        private string _repository;
        /// 
        /// Gets and sets the property AccessToken. 
        /// 
        /// The personal access token for a GitHub repository for an Amplify app. The personal
        /// access token is used to authorize access to a GitHub repository using the Amplify
        /// GitHub App. The token is not stored.
        /// 
        ///  
        /// 
        /// Use accessToken for GitHub repositories only. To authorize access to
        /// a repository provider such as Bitbucket or CodeCommit, use oauthToken.
        /// 
        ///  
        /// 
        /// You must specify either accessToken or oauthToken when you
        /// update an app.
        /// 
        ///  
        /// 
        /// Existing Amplify apps deployed from a GitHub repository using OAuth continue to work
        /// with CI/CD. However, we strongly recommend that you migrate these apps to use the
        /// GitHub App. For more information, see Migrating
        /// an existing OAuth app to the Amplify GitHub App in the Amplify User Guide
        /// .
        /// 
        /// 
        [AWSProperty(Sensitive=true, Min=1, Max=255)]
        public string AccessToken
        {
            get { return this._accessToken; }
            set { this._accessToken = value; }
        }
        // Check to see if AccessToken property is set
        internal bool IsSetAccessToken()
        {
            return this._accessToken != null;
        }
        /// 
        /// Gets and sets the property AppId. 
        /// 
        ///  The unique ID for an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=20)]
        public string AppId
        {
            get { return this._appId; }
            set { this._appId = value; }
        }
        // Check to see if AppId property is set
        internal bool IsSetAppId()
        {
            return this._appId != null;
        }
        /// 
        /// Gets and sets the property AutoBranchCreationConfig. 
        /// 
        ///  The automated branch creation configuration for an Amplify app. 
        /// 
        /// 
        public AutoBranchCreationConfig AutoBranchCreationConfig
        {
            get { return this._autoBranchCreationConfig; }
            set { this._autoBranchCreationConfig = value; }
        }
        // Check to see if AutoBranchCreationConfig property is set
        internal bool IsSetAutoBranchCreationConfig()
        {
            return this._autoBranchCreationConfig != null;
        }
        /// 
        /// Gets and sets the property AutoBranchCreationPatterns. 
        /// 
        ///  Describes the automated branch creation glob patterns for an Amplify app. 
        /// 
        /// 
        public List AutoBranchCreationPatterns
        {
            get { return this._autoBranchCreationPatterns; }
            set { this._autoBranchCreationPatterns = value; }
        }
        // Check to see if AutoBranchCreationPatterns property is set
        internal bool IsSetAutoBranchCreationPatterns()
        {
            return this._autoBranchCreationPatterns != null && this._autoBranchCreationPatterns.Count > 0; 
        }
        /// 
        /// Gets and sets the property BasicAuthCredentials. 
        /// 
        ///  The basic authorization credentials for an Amplify app. You must base64-encode the
        /// authorization credentials and provide them in the format user:password.
        /// 
        /// 
        [AWSProperty(Sensitive=true, Max=2000)]
        public string BasicAuthCredentials
        {
            get { return this._basicAuthCredentials; }
            set { this._basicAuthCredentials = value; }
        }
        // Check to see if BasicAuthCredentials property is set
        internal bool IsSetBasicAuthCredentials()
        {
            return this._basicAuthCredentials != null;
        }
        /// 
        /// Gets and sets the property BuildSpec. 
        /// 
        ///  The build specification (build spec) for an Amplify app. 
        /// 
        /// 
        [AWSProperty(Sensitive=true, Min=1, Max=25000)]
        public string BuildSpec
        {
            get { return this._buildSpec; }
            set { this._buildSpec = value; }
        }
        // Check to see if BuildSpec property is set
        internal bool IsSetBuildSpec()
        {
            return this._buildSpec != null;
        }
        /// 
        /// Gets and sets the property CustomHeaders. 
        /// 
        /// The custom HTTP headers for an Amplify app.
        /// 
        /// 
        [AWSProperty(Min=0, Max=25000)]
        public string CustomHeaders
        {
            get { return this._customHeaders; }
            set { this._customHeaders = value; }
        }
        // Check to see if CustomHeaders property is set
        internal bool IsSetCustomHeaders()
        {
            return this._customHeaders != null;
        }
        /// 
        /// Gets and sets the property CustomRules. 
        /// 
        ///  The custom redirect and rewrite rules for an Amplify app. 
        /// 
        /// 
        public List CustomRules
        {
            get { return this._customRules; }
            set { this._customRules = value; }
        }
        // Check to see if CustomRules property is set
        internal bool IsSetCustomRules()
        {
            return this._customRules != null && this._customRules.Count > 0; 
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        ///  The description for an Amplify app. 
        /// 
        /// 
        [AWSProperty(Max=1000)]
        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 EnableAutoBranchCreation. 
        /// 
        ///  Enables automated branch creation for an Amplify app. 
        /// 
        /// 
        public bool EnableAutoBranchCreation
        {
            get { return this._enableAutoBranchCreation.GetValueOrDefault(); }
            set { this._enableAutoBranchCreation = value; }
        }
        // Check to see if EnableAutoBranchCreation property is set
        internal bool IsSetEnableAutoBranchCreation()
        {
            return this._enableAutoBranchCreation.HasValue; 
        }
        /// 
        /// Gets and sets the property EnableBasicAuth. 
        /// 
        ///  Enables basic authorization for an Amplify app. 
        /// 
        /// 
        public bool EnableBasicAuth
        {
            get { return this._enableBasicAuth.GetValueOrDefault(); }
            set { this._enableBasicAuth = value; }
        }
        // Check to see if EnableBasicAuth property is set
        internal bool IsSetEnableBasicAuth()
        {
            return this._enableBasicAuth.HasValue; 
        }
        /// 
        /// Gets and sets the property EnableBranchAutoBuild. 
        /// 
        ///  Enables branch auto-building for an Amplify app. 
        /// 
        /// 
        public bool EnableBranchAutoBuild
        {
            get { return this._enableBranchAutoBuild.GetValueOrDefault(); }
            set { this._enableBranchAutoBuild = value; }
        }
        // Check to see if EnableBranchAutoBuild property is set
        internal bool IsSetEnableBranchAutoBuild()
        {
            return this._enableBranchAutoBuild.HasValue; 
        }
        /// 
        /// Gets and sets the property EnableBranchAutoDeletion. 
        /// 
        ///  Automatically disconnects a branch in the Amplify Console when you delete a branch
        /// from your Git repository. 
        /// 
        /// 
        public bool EnableBranchAutoDeletion
        {
            get { return this._enableBranchAutoDeletion.GetValueOrDefault(); }
            set { this._enableBranchAutoDeletion = value; }
        }
        // Check to see if EnableBranchAutoDeletion property is set
        internal bool IsSetEnableBranchAutoDeletion()
        {
            return this._enableBranchAutoDeletion.HasValue; 
        }
        /// 
        /// Gets and sets the property EnvironmentVariables. 
        /// 
        ///  The environment variables for an Amplify app. 
        /// 
        /// 
        public Dictionary EnvironmentVariables
        {
            get { return this._environmentVariables; }
            set { this._environmentVariables = value; }
        }
        // Check to see if EnvironmentVariables property is set
        internal bool IsSetEnvironmentVariables()
        {
            return this._environmentVariables != null && this._environmentVariables.Count > 0; 
        }
        /// 
        /// Gets and sets the property IamServiceRoleArn. 
        /// 
        ///  The AWS Identity and Access Management (IAM) service role for an Amplify app. 
        /// 
        /// 
        [AWSProperty(Min=0, Max=1000)]
        public string IamServiceRoleArn
        {
            get { return this._iamServiceRoleArn; }
            set { this._iamServiceRoleArn = value; }
        }
        // Check to see if IamServiceRoleArn property is set
        internal bool IsSetIamServiceRoleArn()
        {
            return this._iamServiceRoleArn != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        ///  The name for an Amplify app. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property OauthToken. 
        /// 
        /// The OAuth token for a third-party source control system for an Amplify app. The OAuth
        /// token is used to create a webhook and a read-only deploy key using SSH cloning. The
        /// OAuth token is not stored.
        /// 
        ///  
        /// 
        /// Use oauthToken for repository providers other than GitHub, such as Bitbucket
        /// or CodeCommit.
        /// 
        ///  
        /// 
        /// To authorize access to GitHub as your repository provider, use accessToken.
        /// 
        ///  
        /// 
        /// You must specify either oauthToken or accessToken when you
        /// update an app.
        /// 
        ///  
        /// 
        /// Existing Amplify apps deployed from a GitHub repository using OAuth continue to work
        /// with CI/CD. However, we strongly recommend that you migrate these apps to use the
        /// GitHub App. For more information, see Migrating
        /// an existing OAuth app to the Amplify GitHub App in the Amplify User Guide
        /// .
        /// 
        /// 
        [AWSProperty(Sensitive=true, Max=1000)]
        public string OauthToken
        {
            get { return this._oauthToken; }
            set { this._oauthToken = value; }
        }
        // Check to see if OauthToken property is set
        internal bool IsSetOauthToken()
        {
            return this._oauthToken != null;
        }
        /// 
        /// Gets and sets the property Platform. 
        /// 
        ///  The platform for the Amplify app. For a static app, set the platform type to WEB.
        /// For a dynamic server-side rendered (SSR) app, set the platform type to WEB_COMPUTE.
        /// For an app requiring Amplify Hosting's original SSR support only, set the platform
        /// type to WEB_DYNAMIC.
        /// 
        /// 
        public Platform Platform
        {
            get { return this._platform; }
            set { this._platform = value; }
        }
        // Check to see if Platform property is set
        internal bool IsSetPlatform()
        {
            return this._platform != null;
        }
        /// 
        /// Gets and sets the property Repository. 
        /// 
        ///  The name of the repository for an Amplify app 
        /// 
        /// 
        [AWSProperty(Max=1000)]
        public string Repository
        {
            get { return this._repository; }
            set { this._repository = value; }
        }
        // Check to see if Repository property is set
        internal bool IsSetRepository()
        {
            return this._repository != null;
        }
    }
}