/*
 * 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 swf-2012-01-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.SimpleWorkflow.Model
{
    /// 
    /// Provides the details of the StartChildWorkflowExecution decision.
    /// 
    ///  
    /// 
    ///  Access Control 
    /// 
    ///  
    /// 
    /// You can use IAM policies to control this decision's access to Amazon SWF resources
    /// as follows:
    /// 
    ///   -  
    /// 
    /// Use a Resourceelement with the domain name to limit the action to only
    /// specified domains.
    /// 
    ///
-  
    /// 
    /// Use an Actionelement to allow or deny permission to call this action.
    /// 
    ///
-  
    /// 
    /// Constrain the following parameters by using a Conditionelement with
    /// the appropriate keys.
    /// 
    /// -  
    /// 
    ///  tagList.member.N– The key is "swf:tagList.N" where N is the tag number
    /// from 0 to 4, inclusive.
    /// 
    ///
-  
    /// 
    ///  taskList– String constraint. The key isswf:taskList.name.
    /// 
    ///
-  
    /// 
    ///  workflowType.name– String constraint. The key isswf:workflowType.name.
    /// 
    ///
-  
    /// 
    ///  workflowType.version– String constraint. The key isswf:workflowType.version.
    /// 
    ///
 
/// 
    /// If the caller doesn't have sufficient permissions to invoke the action, or the parameter
    /// values fall outside the specified constraints, the action fails. The associated event
    /// attribute'scause parameter is set to OPERATION_NOT_PERMITTED.
    /// For details and example IAM policies, see Using
    /// IAM to Manage Access to Amazon SWF Workflows in the Amazon SWF Developer Guide.
    /// 
    /// 
    public partial class StartChildWorkflowExecutionDecisionAttributes
    {
        private ChildPolicy _childPolicy;
        private string _control;
        private string _executionStartToCloseTimeout;
        private string _input;
        private string _lambdaRole;
        private List _tagList = new List();
        private TaskList _taskList;
        private string _taskPriority;
        private string _taskStartToCloseTimeout;
        private string _workflowId;
        private WorkflowType _workflowType;
        /// 
        /// Gets and sets the property ChildPolicy. 
        /// 
        ///  If set, specifies the policy to use for the child workflow executions if the workflow
        /// execution being started is terminated by calling the TerminateWorkflowExecution
        /// action explicitly or due to an expired timeout. This policy overrides the default
        /// child policy specified when registering the workflow type using RegisterWorkflowType.
        /// 
        ///  
        /// 
        /// The supported child policies are:
        /// 
        ///   -  
        /// 
        ///  TERMINATE– The child executions are terminated.
        /// 
        ///
-  
        /// 
        ///  REQUEST_CANCEL– A request to cancel is attempted for each child execution
        /// by recording aWorkflowExecutionCancelRequestedevent in its history.
        /// It is up to the decider to take appropriate actions when it receives an execution
        /// history with this event.
        /// 
        ///
-  
        /// 
        ///  ABANDON– No action is taken. The child executions continue to run.
        /// 
        ///
/// 
        /// A child policy for this workflow execution must be specified either as a default for
        /// the workflow type or through this parameter. If neither this parameter is set nor
        /// a default child policy was specified at registration time then a fault is returned.
        /// 
        ///  
        /// 
        public ChildPolicy ChildPolicy
        {
            get { return this._childPolicy; }
            set { this._childPolicy = value; }
        }
        // Check to see if ChildPolicy property is set
        internal bool IsSetChildPolicy()
        {
            return this._childPolicy != null;
        }
        /// 
        /// Gets and sets the property Control. 
        /// 
        /// The data attached to the event that can be used by the decider in subsequent workflow
        /// tasks. This data isn't sent to the child workflow execution.
        /// 
        /// 
        [AWSProperty(Max=32768)]
        public string Control
        {
            get { return this._control; }
            set { this._control = value; }
        }
        // Check to see if Control property is set
        internal bool IsSetControl()
        {
            return this._control != null;
        }
        /// 
        /// Gets and sets the property ExecutionStartToCloseTimeout. 
        /// 
        /// The total duration for this workflow execution. This overrides the defaultExecutionStartToCloseTimeout
        /// specified when registering the workflow type.
        /// 
        ///  
        /// 
        /// The duration is specified in seconds, an integer greater than or equal to0.
        /// You can use NONE to specify unlimited duration.
        /// 
        ///   
        /// 
        /// An execution start-to-close timeout for this workflow execution must be specified
        /// either as a default for the workflow type or through this parameter. If neither this
        /// parameter is set nor a default execution start-to-close timeout was specified at registration
        /// time then a fault is returned.
        /// 
        ///  
        /// 
        [AWSProperty(Max=8)]
        public string ExecutionStartToCloseTimeout
        {
            get { return this._executionStartToCloseTimeout; }
            set { this._executionStartToCloseTimeout = value; }
        }
        // Check to see if ExecutionStartToCloseTimeout property is set
        internal bool IsSetExecutionStartToCloseTimeout()
        {
            return this._executionStartToCloseTimeout != null;
        }
        /// 
        /// Gets and sets the property Input. 
        /// 
        /// The input to be provided to the workflow execution.
        /// 
        /// 
        [AWSProperty(Max=32768)]
        public string Input
        {
            get { return this._input; }
            set { this._input = value; }
        }
        // Check to see if Input property is set
        internal bool IsSetInput()
        {
            return this._input != null;
        }
        /// 
        /// Gets and sets the property LambdaRole. 
        /// 
        /// The IAM role attached to the child workflow execution.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1600)]
        public string LambdaRole
        {
            get { return this._lambdaRole; }
            set { this._lambdaRole = value; }
        }
        // Check to see if LambdaRole property is set
        internal bool IsSetLambdaRole()
        {
            return this._lambdaRole != null;
        }
        /// 
        /// Gets and sets the property TagList. 
        /// 
        /// The list of tags to associate with the child workflow execution. A maximum of 5 tags
        /// can be specified. You can list workflow executions with a specific tag by calling
        /// ListOpenWorkflowExecutions or ListClosedWorkflowExecutions and specifying
        /// a TagFilter.
        /// 
        /// 
        [AWSProperty(Max=5)]
        public List TagList
        {
            get { return this._tagList; }
            set { this._tagList = value; }
        }
        // Check to see if TagList property is set
        internal bool IsSetTagList()
        {
            return this._tagList != null && this._tagList.Count > 0; 
        }
        /// 
        /// Gets and sets the property TaskList. 
        /// 
        /// The name of the task list to be used for decision tasks of the child workflow execution.
        /// 
        ///   
        /// 
        /// A task list for this workflow execution must be specified either as a default for
        /// the workflow type or through this parameter. If neither this parameter is set nor
        /// a default task list was specified at registration time then a fault is returned.
        /// 
        ///   
        /// 
        /// The specified string must not start or end with whitespace. It must not contain a
        /// : (colon), / (slash), | (vertical bar), or
        /// any control characters (\u0000-\u001f | \u007f-\u009f).
        /// Also, it must not be the literal string arn.
        /// 
        /// 
        public TaskList TaskList
        {
            get { return this._taskList; }
            set { this._taskList = value; }
        }
        // Check to see if TaskList property is set
        internal bool IsSetTaskList()
        {
            return this._taskList != null;
        }
        /// 
        /// Gets and sets the property TaskPriority. 
        /// 
        ///  A task priority that, if set, specifies the priority for a decision task of this
        /// workflow execution. This overrides the defaultTaskPriority specified when registering
        /// the workflow type. Valid values are integers that range from Java's Integer.MIN_VALUE
        /// (-2147483648) to Integer.MAX_VALUE (2147483647). Higher numbers indicate
        /// higher priority.
        /// 
        ///  
        /// 
        /// For more information about setting task priority, see Setting
        /// Task Priority in the Amazon SWF Developer Guide.
        /// 
        /// 
        public string TaskPriority
        {
            get { return this._taskPriority; }
            set { this._taskPriority = value; }
        }
        // Check to see if TaskPriority property is set
        internal bool IsSetTaskPriority()
        {
            return this._taskPriority != null;
        }
        /// 
        /// Gets and sets the property TaskStartToCloseTimeout. 
        /// 
        /// Specifies the maximum duration of decision tasks for this workflow execution. This
        /// parameter overrides the defaultTaskStartToCloseTimout specified when
        /// registering the workflow type using RegisterWorkflowType.
        /// 
        ///  
        /// 
        /// The duration is specified in seconds, an integer greater than or equal to 0.
        /// You can use NONE to specify unlimited duration.
        /// 
        ///   
        /// 
        /// A task start-to-close timeout for this workflow execution must be specified either
        /// as a default for the workflow type or through this parameter. If neither this parameter
        /// is set nor a default task start-to-close timeout was specified at registration time
        /// then a fault is returned.
        /// 
        ///  
        /// 
        [AWSProperty(Max=8)]
        public string TaskStartToCloseTimeout
        {
            get { return this._taskStartToCloseTimeout; }
            set { this._taskStartToCloseTimeout = value; }
        }
        // Check to see if TaskStartToCloseTimeout property is set
        internal bool IsSetTaskStartToCloseTimeout()
        {
            return this._taskStartToCloseTimeout != null;
        }
        /// 
        /// Gets and sets the property WorkflowId. 
        /// 
        ///  The workflowId of the workflow execution.
        /// 
        ///  
        /// 
        /// The specified string must not contain a : (colon), / (slash),
        /// | (vertical bar), or any control characters (\u0000-\u001f
        /// | \u007f-\u009f). Also, it must not be the literal string arn.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=256)]
        public string WorkflowId
        {
            get { return this._workflowId; }
            set { this._workflowId = value; }
        }
        // Check to see if WorkflowId property is set
        internal bool IsSetWorkflowId()
        {
            return this._workflowId != null;
        }
        /// 
        /// Gets and sets the property WorkflowType. 
        /// 
        ///  The type of the workflow execution to be started.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public WorkflowType WorkflowType
        {
            get { return this._workflowType; }
            set { this._workflowType = value; }
        }
        // Check to see if WorkflowType property is set
        internal bool IsSetWorkflowType()
        {
            return this._workflowType != null;
        }
    }
}