/*
 * 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
{
    /// 
    /// The branch for an Amplify app, which maps to a third-party repository branch.
    /// 
    public partial class Branch
    {
        private string _activeJobId;
        private List _associatedResources = new List();
        private string _backendEnvironmentArn;
        private string _basicAuthCredentials;
        private string _branchArn;
        private string _branchName;
        private string _buildSpec;
        private DateTime? _createTime;
        private List _customDomains = new List();
        private string _description;
        private string _destinationBranch;
        private string _displayName;
        private bool? _enableAutoBuild;
        private bool? _enableBasicAuth;
        private bool? _enableNotification;
        private bool? _enablePerformanceMode;
        private bool? _enablePullRequestPreview;
        private Dictionary _environmentVariables = new Dictionary();
        private string _framework;
        private string _pullRequestEnvironmentName;
        private string _sourceBranch;
        private Stage _stage;
        private Dictionary _tags = new Dictionary();
        private string _thumbnailUrl;
        private string _totalNumberOfJobs;
        private string _ttl;
        private DateTime? _updateTime;
        /// 
        /// Gets and sets the property ActiveJobId. 
        /// 
        ///  The ID of the active job for a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=1000)]
        public string ActiveJobId
        {
            get { return this._activeJobId; }
            set { this._activeJobId = value; }
        }
        // Check to see if ActiveJobId property is set
        internal bool IsSetActiveJobId()
        {
            return this._activeJobId != null;
        }
        /// 
        /// Gets and sets the property AssociatedResources. 
        /// 
        ///  A list of custom resources that are linked to this branch. 
        /// 
        /// 
        public List AssociatedResources
        {
            get { return this._associatedResources; }
            set { this._associatedResources = value; }
        }
        // Check to see if AssociatedResources property is set
        internal bool IsSetAssociatedResources()
        {
            return this._associatedResources != null && this._associatedResources.Count > 0; 
        }
        /// 
        /// Gets and sets the property BackendEnvironmentArn. 
        /// 
        ///  The Amazon Resource Name (ARN) for a backend environment that is part of an Amplify
        /// app. 
        /// 
        /// 
        [AWSProperty(Min=0, Max=1000)]
        public string BackendEnvironmentArn
        {
            get { return this._backendEnvironmentArn; }
            set { this._backendEnvironmentArn = value; }
        }
        // Check to see if BackendEnvironmentArn property is set
        internal bool IsSetBackendEnvironmentArn()
        {
            return this._backendEnvironmentArn != null;
        }
        /// 
        /// Gets and sets the property BasicAuthCredentials. 
        /// 
        ///  The basic authorization credentials for a branch of 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 BranchArn. 
        /// 
        ///  The Amazon Resource Name (ARN) for a branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=1000)]
        public string BranchArn
        {
            get { return this._branchArn; }
            set { this._branchArn = value; }
        }
        // Check to see if BranchArn property is set
        internal bool IsSetBranchArn()
        {
            return this._branchArn != null;
        }
        /// 
        /// Gets and sets the property BranchName. 
        /// 
        ///  The name for the branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=255)]
        public string BranchName
        {
            get { return this._branchName; }
            set { this._branchName = value; }
        }
        // Check to see if BranchName property is set
        internal bool IsSetBranchName()
        {
            return this._branchName != null;
        }
        /// 
        /// Gets and sets the property BuildSpec. 
        /// 
        ///  The build specification (build spec) content for the branch of 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 CreateTime. 
        /// 
        ///  The creation date and time for a branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public DateTime CreateTime
        {
            get { return this._createTime.GetValueOrDefault(); }
            set { this._createTime = value; }
        }
        // Check to see if CreateTime property is set
        internal bool IsSetCreateTime()
        {
            return this._createTime.HasValue; 
        }
        /// 
        /// Gets and sets the property CustomDomains. 
        /// 
        ///  The custom domains for a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=255)]
        public List CustomDomains
        {
            get { return this._customDomains; }
            set { this._customDomains = value; }
        }
        // Check to see if CustomDomains property is set
        internal bool IsSetCustomDomains()
        {
            return this._customDomains != null && this._customDomains.Count > 0; 
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        ///  The description for the branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, 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 DestinationBranch. 
        /// 
        ///  The destination branch if the branch is a pull request branch. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string DestinationBranch
        {
            get { return this._destinationBranch; }
            set { this._destinationBranch = value; }
        }
        // Check to see if DestinationBranch property is set
        internal bool IsSetDestinationBranch()
        {
            return this._destinationBranch != null;
        }
        /// 
        /// Gets and sets the property DisplayName. 
        /// 
        ///  The display name for the branch. This is used as the default domain prefix. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=255)]
        public string DisplayName
        {
            get { return this._displayName; }
            set { this._displayName = value; }
        }
        // Check to see if DisplayName property is set
        internal bool IsSetDisplayName()
        {
            return this._displayName != null;
        }
        /// 
        /// Gets and sets the property EnableAutoBuild. 
        /// 
        ///  Enables auto-building on push for a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public bool EnableAutoBuild
        {
            get { return this._enableAutoBuild.GetValueOrDefault(); }
            set { this._enableAutoBuild = value; }
        }
        // Check to see if EnableAutoBuild property is set
        internal bool IsSetEnableAutoBuild()
        {
            return this._enableAutoBuild.HasValue; 
        }
        /// 
        /// Gets and sets the property EnableBasicAuth. 
        /// 
        ///  Enables basic authorization for a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        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 EnableNotification. 
        /// 
        ///  Enables notifications for a branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public bool EnableNotification
        {
            get { return this._enableNotification.GetValueOrDefault(); }
            set { this._enableNotification = value; }
        }
        // Check to see if EnableNotification property is set
        internal bool IsSetEnableNotification()
        {
            return this._enableNotification.HasValue; 
        }
        /// 
        /// Gets and sets the property EnablePerformanceMode. 
        /// 
        /// Enables performance mode for the branch.
        /// 
        ///  
        /// 
        /// Performance mode optimizes for faster hosting performance by keeping content cached
        /// at the edge for a longer interval. When performance mode is enabled, hosting configuration
        /// or code changes can take up to 10 minutes to roll out. 
        /// 
        /// 
        public bool EnablePerformanceMode
        {
            get { return this._enablePerformanceMode.GetValueOrDefault(); }
            set { this._enablePerformanceMode = value; }
        }
        // Check to see if EnablePerformanceMode property is set
        internal bool IsSetEnablePerformanceMode()
        {
            return this._enablePerformanceMode.HasValue; 
        }
        /// 
        /// Gets and sets the property EnablePullRequestPreview. 
        /// 
        ///  Enables pull request previews for the branch. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public bool EnablePullRequestPreview
        {
            get { return this._enablePullRequestPreview.GetValueOrDefault(); }
            set { this._enablePullRequestPreview = value; }
        }
        // Check to see if EnablePullRequestPreview property is set
        internal bool IsSetEnablePullRequestPreview()
        {
            return this._enablePullRequestPreview.HasValue; 
        }
        /// 
        /// Gets and sets the property EnvironmentVariables. 
        /// 
        ///  The environment variables specific to a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        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 Framework. 
        /// 
        ///  The framework for a branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=255)]
        public string Framework
        {
            get { return this._framework; }
            set { this._framework = value; }
        }
        // Check to see if Framework property is set
        internal bool IsSetFramework()
        {
            return this._framework != null;
        }
        /// 
        /// Gets and sets the property PullRequestEnvironmentName. 
        /// 
        ///  The Amplify environment name for the pull request. 
        /// 
        /// 
        [AWSProperty(Max=20)]
        public string PullRequestEnvironmentName
        {
            get { return this._pullRequestEnvironmentName; }
            set { this._pullRequestEnvironmentName = value; }
        }
        // Check to see if PullRequestEnvironmentName property is set
        internal bool IsSetPullRequestEnvironmentName()
        {
            return this._pullRequestEnvironmentName != null;
        }
        /// 
        /// Gets and sets the property SourceBranch. 
        /// 
        ///  The source branch if the branch is a pull request branch. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string SourceBranch
        {
            get { return this._sourceBranch; }
            set { this._sourceBranch = value; }
        }
        // Check to see if SourceBranch property is set
        internal bool IsSetSourceBranch()
        {
            return this._sourceBranch != null;
        }
        /// 
        /// Gets and sets the property Stage. 
        /// 
        ///  The current stage for the branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public Stage Stage
        {
            get { return this._stage; }
            set { this._stage = value; }
        }
        // Check to see if Stage property is set
        internal bool IsSetStage()
        {
            return this._stage != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        ///  The tag for the branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Min=0, Max=50)]
        public Dictionary 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 ThumbnailUrl. 
        /// 
        ///  The thumbnail URL for the branch of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=2000)]
        public string ThumbnailUrl
        {
            get { return this._thumbnailUrl; }
            set { this._thumbnailUrl = value; }
        }
        // Check to see if ThumbnailUrl property is set
        internal bool IsSetThumbnailUrl()
        {
            return this._thumbnailUrl != null;
        }
        /// 
        /// Gets and sets the property TotalNumberOfJobs. 
        /// 
        ///  The total number of jobs that are part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true, Max=1000)]
        public string TotalNumberOfJobs
        {
            get { return this._totalNumberOfJobs; }
            set { this._totalNumberOfJobs = value; }
        }
        // Check to see if TotalNumberOfJobs property is set
        internal bool IsSetTotalNumberOfJobs()
        {
            return this._totalNumberOfJobs != null;
        }
        /// 
        /// Gets and sets the property Ttl. 
        /// 
        ///  The content Time to Live (TTL) for the website in seconds. 
        /// 
        /// 
        [AWSProperty(Required=true, Min=0, Max=32)]
        public string Ttl
        {
            get { return this._ttl; }
            set { this._ttl = value; }
        }
        // Check to see if Ttl property is set
        internal bool IsSetTtl()
        {
            return this._ttl != null;
        }
        /// 
        /// Gets and sets the property UpdateTime. 
        /// 
        ///  The last updated date and time for a branch that is part of an Amplify app. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public DateTime UpdateTime
        {
            get { return this._updateTime.GetValueOrDefault(); }
            set { this._updateTime = value; }
        }
        // Check to see if UpdateTime property is set
        internal bool IsSetUpdateTime()
        {
            return this._updateTime.HasValue; 
        }
    }
}