/*
 * 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
{
    /// 
    /// Container for the parameters to the ListClosedWorkflowExecutions operation.
    /// Returns a list of closed workflow executions in the specified domain that meet the
    /// filtering criteria. The results may be split into multiple pages. To retrieve subsequent
    /// pages, make the call again using the nextPageToken returned by the initial call.
    /// 
    ///   
    /// 
    /// This operation is eventually consistent. The results are best effort and may not exactly
    /// reflect recent updates and changes.
    /// 
    ///   
    /// 
    ///  Access Control 
    /// 
    ///  
    /// 
    /// You can use IAM policies to control this action'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.
    /// 
    /// -  
    /// 
    ///  tagFilter.tag: String constraint. The key isswf:tagFilter.tag.
    /// 
    ///
-  
    /// 
    ///  typeFilter.name: String constraint. The key isswf:typeFilter.name.
    /// 
    ///
-  
    /// 
    ///  typeFilter.version: String constraint. The key isswf:typeFilter.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 ListClosedWorkflowExecutionsRequest : AmazonSimpleWorkflowRequest
    {
        private CloseStatusFilter _closeStatusFilter;
        private ExecutionTimeFilter _closeTimeFilter;
        private string _domain;
        private WorkflowExecutionFilter _executionFilter;
        private int? _maximumPageSize;
        private string _nextPageToken;
        private bool? _reverseOrder;
        private ExecutionTimeFilter _startTimeFilter;
        private TagFilter _tagFilter;
        private WorkflowTypeFilter _typeFilter;
        /// 
        /// Gets and sets the property CloseStatusFilter. 
        /// 
        /// If specified, only workflow executions that match this close status are listed.
        /// For example, if TERMINATED is specified, then only TERMINATED workflow executions
        /// are listed.
        /// 
        ///   
        /// 
        ///  closeStatusFilter, executionFilter, typeFilter
        /// and tagFilter are mutually exclusive. You can specify at most one of
        /// these in a request.
        /// 
        ///  
        /// 
        public CloseStatusFilter CloseStatusFilter
        {
            get { return this._closeStatusFilter; }
            set { this._closeStatusFilter = value; }
        }
        // Check to see if CloseStatusFilter property is set
        internal bool IsSetCloseStatusFilter()
        {
            return this._closeStatusFilter != null;
        }
        /// 
        /// Gets and sets the property CloseTimeFilter. 
        /// 
        /// If specified, the workflow executions are included in the returned results based on
        /// whether their close times are within the range specified by this filter. Also, if
        /// this parameter is specified, the returned results are ordered by their close times.
        /// 
        ///   
        /// 
        ///  startTimeFilter and closeTimeFilter are mutually exclusive.
        /// You must specify one of these in a request but not both.
        /// 
        ///  
        /// 
        public ExecutionTimeFilter CloseTimeFilter
        {
            get { return this._closeTimeFilter; }
            set { this._closeTimeFilter = value; }
        }
        // Check to see if CloseTimeFilter property is set
        internal bool IsSetCloseTimeFilter()
        {
            return this._closeTimeFilter != null;
        }
        /// 
        /// Gets and sets the property Domain. 
        /// 
        /// The name of the domain that contains the workflow executions to list.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=256)]
        public string Domain
        {
            get { return this._domain; }
            set { this._domain = value; }
        }
        // Check to see if Domain property is set
        internal bool IsSetDomain()
        {
            return this._domain != null;
        }
        /// 
        /// Gets and sets the property ExecutionFilter. 
        /// 
        /// If specified, only workflow executions matching the workflow ID specified in the filter
        /// are returned.
        /// 
        ///   
        /// 
        ///  closeStatusFilter, executionFilter, typeFilter
        /// and tagFilter are mutually exclusive. You can specify at most one of
        /// these in a request.
        /// 
        ///  
        /// 
        public WorkflowExecutionFilter ExecutionFilter
        {
            get { return this._executionFilter; }
            set { this._executionFilter = value; }
        }
        // Check to see if ExecutionFilter property is set
        internal bool IsSetExecutionFilter()
        {
            return this._executionFilter != null;
        }
        /// 
        /// Gets and sets the property MaximumPageSize. 
        /// 
        /// The maximum number of results that are returned per call. Use nextPageToken
        /// to obtain further pages of results. 
        /// 
        /// 
        [AWSProperty(Min=0, Max=1000)]
        public int MaximumPageSize
        {
            get { return this._maximumPageSize.GetValueOrDefault(); }
            set { this._maximumPageSize = value; }
        }
        // Check to see if MaximumPageSize property is set
        internal bool IsSetMaximumPageSize()
        {
            return this._maximumPageSize.HasValue; 
        }
        /// 
        /// Gets and sets the property NextPageToken. 
        /// 
        /// If NextPageToken is returned there are more results available. The value
        /// of NextPageToken is a unique pagination token for each page. Make the
        /// call again using the returned token to retrieve the next page. Keep all other arguments
        /// unchanged. Each pagination token expires after 24 hours. Using an expired pagination
        /// token will return a 400 error: "Specified token has exceeded its
        /// maximum lifetime". 
        /// 
        ///  
        /// 
        /// The configured maximumPageSize determines how many results can be returned
        /// in a single call. 
        /// 
        /// 
        [AWSProperty(Max=2048)]
        public string NextPageToken
        {
            get { return this._nextPageToken; }
            set { this._nextPageToken = value; }
        }
        // Check to see if NextPageToken property is set
        internal bool IsSetNextPageToken()
        {
            return this._nextPageToken != null;
        }
        /// 
        /// Gets and sets the property ReverseOrder. 
        /// 
        /// When set to true, returns the results in reverse order. By default the
        /// results are returned in descending order of the start or the close time of the executions.
        /// 
        /// 
        public bool ReverseOrder
        {
            get { return this._reverseOrder.GetValueOrDefault(); }
            set { this._reverseOrder = value; }
        }
        // Check to see if ReverseOrder property is set
        internal bool IsSetReverseOrder()
        {
            return this._reverseOrder.HasValue; 
        }
        /// 
        /// Gets and sets the property StartTimeFilter. 
        /// 
        /// If specified, the workflow executions are included in the returned results based on
        /// whether their start times are within the range specified by this filter. Also, if
        /// this parameter is specified, the returned results are ordered by their start times.
        /// 
        ///   
        /// 
        ///  startTimeFilter and closeTimeFilter are mutually exclusive.
        /// You must specify one of these in a request but not both.
        /// 
        ///  
        /// 
        public ExecutionTimeFilter StartTimeFilter
        {
            get { return this._startTimeFilter; }
            set { this._startTimeFilter = value; }
        }
        // Check to see if StartTimeFilter property is set
        internal bool IsSetStartTimeFilter()
        {
            return this._startTimeFilter != null;
        }
        /// 
        /// Gets and sets the property TagFilter. 
        /// 
        /// If specified, only executions that have the matching tag are listed.
        /// 
        ///   
        /// 
        ///  closeStatusFilter, executionFilter, typeFilter
        /// and tagFilter are mutually exclusive. You can specify at most one of
        /// these in a request.
        /// 
        ///  
        /// 
        public TagFilter TagFilter
        {
            get { return this._tagFilter; }
            set { this._tagFilter = value; }
        }
        // Check to see if TagFilter property is set
        internal bool IsSetTagFilter()
        {
            return this._tagFilter != null;
        }
        /// 
        /// Gets and sets the property TypeFilter. 
        /// 
        /// If specified, only executions of the type specified in the filter are returned.
        /// 
        ///   
        /// 
        ///  closeStatusFilter, executionFilter, typeFilter
        /// and tagFilter are mutually exclusive. You can specify at most one of
        /// these in a request.
        /// 
        ///  
        /// 
        public WorkflowTypeFilter TypeFilter
        {
            get { return this._typeFilter; }
            set { this._typeFilter = value; }
        }
        // Check to see if TypeFilter property is set
        internal bool IsSetTypeFilter()
        {
            return this._typeFilter != null;
        }
    }
}