/*
 * 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 appstream-2016-12-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.AppStream.Model
{
    /// 
    /// Container for the parameters to the CreateImageBuilder operation.
    /// Creates an image builder. An image builder is a virtual machine that is used to create
    /// an image.
    /// 
    ///  
    /// 
    /// The initial state of the builder is PENDING. When it is ready, the state
    /// is RUNNING.
    /// 
    /// 
    public partial class CreateImageBuilderRequest : AmazonAppStreamRequest
    {
        private List _accessEndpoints = new List();
        private string _appstreamAgentVersion;
        private string _description;
        private string _displayName;
        private DomainJoinInfo _domainJoinInfo;
        private bool? _enableDefaultInternetAccess;
        private string _iamRoleArn;
        private string _imageArn;
        private string _imageName;
        private string _instanceType;
        private string _name;
        private Dictionary _tags = new Dictionary();
        private VpcConfig _vpcConfig;
        /// 
        /// Gets and sets the property AccessEndpoints. 
        /// 
        /// The list of interface VPC endpoint (interface endpoint) objects. Administrators can
        /// connect to the image builder only through the specified endpoints.
        /// 
        /// 
        [AWSProperty(Min=1, Max=4)]
        public List AccessEndpoints
        {
            get { return this._accessEndpoints; }
            set { this._accessEndpoints = value; }
        }
        // Check to see if AccessEndpoints property is set
        internal bool IsSetAccessEndpoints()
        {
            return this._accessEndpoints != null && this._accessEndpoints.Count > 0; 
        }
        /// 
        /// Gets and sets the property AppstreamAgentVersion. 
        /// 
        /// The version of the AppStream 2.0 agent to use for this image builder. To use the latest
        /// version of the AppStream 2.0 agent, specify [LATEST]. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=100)]
        public string AppstreamAgentVersion
        {
            get { return this._appstreamAgentVersion; }
            set { this._appstreamAgentVersion = value; }
        }
        // Check to see if AppstreamAgentVersion property is set
        internal bool IsSetAppstreamAgentVersion()
        {
            return this._appstreamAgentVersion != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// The description to display.
        /// 
        /// 
        [AWSProperty(Max=256)]
        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 DisplayName. 
        /// 
        /// The image builder name to display.
        /// 
        /// 
        [AWSProperty(Max=100)]
        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 DomainJoinInfo. 
        /// 
        /// The name of the directory and organizational unit (OU) to use to join the image builder
        /// to a Microsoft Active Directory domain. 
        /// 
        /// 
        public DomainJoinInfo DomainJoinInfo
        {
            get { return this._domainJoinInfo; }
            set { this._domainJoinInfo = value; }
        }
        // Check to see if DomainJoinInfo property is set
        internal bool IsSetDomainJoinInfo()
        {
            return this._domainJoinInfo != null;
        }
        /// 
        /// Gets and sets the property EnableDefaultInternetAccess. 
        /// 
        /// Enables or disables default internet access for the image builder.
        /// 
        /// 
        public bool EnableDefaultInternetAccess
        {
            get { return this._enableDefaultInternetAccess.GetValueOrDefault(); }
            set { this._enableDefaultInternetAccess = value; }
        }
        // Check to see if EnableDefaultInternetAccess property is set
        internal bool IsSetEnableDefaultInternetAccess()
        {
            return this._enableDefaultInternetAccess.HasValue; 
        }
        /// 
        /// Gets and sets the property IamRoleArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the IAM role to apply to the image builder. To assume
        /// a role, the image builder calls the AWS Security Token Service (STS) AssumeRole
        /// API operation and passes the ARN of the role to use. The operation creates a new session
        /// with temporary credentials. AppStream 2.0 retrieves the temporary credentials and
        /// creates the appstream_machine_role credential profile on the instance.
        /// 
        ///  
        /// 
        /// For more information, see Using
        /// an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream
        /// 2.0 Streaming Instances in the Amazon AppStream 2.0 Administration Guide.
        /// 
        /// 
        public string IamRoleArn
        {
            get { return this._iamRoleArn; }
            set { this._iamRoleArn = value; }
        }
        // Check to see if IamRoleArn property is set
        internal bool IsSetIamRoleArn()
        {
            return this._iamRoleArn != null;
        }
        /// 
        /// Gets and sets the property ImageArn. 
        /// 
        /// The ARN of the public, private, or shared image to use.
        /// 
        /// 
        public string ImageArn
        {
            get { return this._imageArn; }
            set { this._imageArn = value; }
        }
        // Check to see if ImageArn property is set
        internal bool IsSetImageArn()
        {
            return this._imageArn != null;
        }
        /// 
        /// Gets and sets the property ImageName. 
        /// 
        /// The name of the image used to create the image builder.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public string ImageName
        {
            get { return this._imageName; }
            set { this._imageName = value; }
        }
        // Check to see if ImageName property is set
        internal bool IsSetImageName()
        {
            return this._imageName != null;
        }
        /// 
        /// Gets and sets the property InstanceType. 
        /// 
        /// The instance type to use when launching the image builder. The following instance
        /// types are available:
        /// 
        ///   -  
        /// 
        /// stream.standard.small
        /// 
        ///  
-  
        /// 
        /// stream.standard.medium
        /// 
        ///  
-  
        /// 
        /// stream.standard.large
        /// 
        ///  
-  
        /// 
        /// stream.compute.large
        /// 
        ///  
-  
        /// 
        /// stream.compute.xlarge
        /// 
        ///  
-  
        /// 
        /// stream.compute.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.compute.4xlarge
        /// 
        ///  
-  
        /// 
        /// stream.compute.8xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.large
        /// 
        ///  
-  
        /// 
        /// stream.memory.xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.4xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.8xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.large
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.3xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.6xlarge
        /// 
        ///  
-  
        /// 
        /// stream.memory.z1d.12xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-design.large
        /// 
        ///  
-  
        /// 
        /// stream.graphics-design.xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-design.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-design.4xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-desktop.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.2xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.4xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.8xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.12xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics.g4dn.16xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-pro.4xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-pro.8xlarge
        /// 
        ///  
-  
        /// 
        /// stream.graphics-pro.16xlarge
        /// 
        ///  
/// 
        [AWSProperty(Required=true, Min=1)]
        public string InstanceType
        {
            get { return this._instanceType; }
            set { this._instanceType = value; }
        }
        // Check to see if InstanceType property is set
        internal bool IsSetInstanceType()
        {
            return this._instanceType != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// A unique name for the image builder.
        /// 
        /// 
        [AWSProperty(Required=true)]
        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 Tags. 
        /// 
        /// The tags to associate with the image builder. A tag is a key-value pair, and the value
        /// is optional. For example, Environment=Test. If you do not specify a value, Environment=.
        /// 
        /// 
        ///  
        /// 
        /// Generally allowed characters are: letters, numbers, and spaces representable in UTF-8,
        /// and the following special characters: 
        /// 
        ///  
        /// 
        /// _ . : / = + \ - @
        /// 
        ///  
        /// 
        /// If you do not specify a value, the value is set to an empty string.
        /// 
        ///  
        /// 
        /// For more information about tags, see Tagging
        /// Your Resources in the Amazon AppStream 2.0 Administration Guide.
        /// 
        /// 
        [AWSProperty(Min=1, 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 VpcConfig. 
        /// 
        /// The VPC configuration for the image builder. You can specify only one subnet.
        /// 
        /// 
        public VpcConfig VpcConfig
        {
            get { return this._vpcConfig; }
            set { this._vpcConfig = value; }
        }
        // Check to see if VpcConfig property is set
        internal bool IsSetVpcConfig()
        {
            return this._vpcConfig != null;
        }
    }
}