/*
 * 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 kendra-2019-02-03.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.Kendra.Model
{
    /// 
    /// Container for the parameters to the UpdateAccessControlConfiguration operation.
    /// Updates an access control configuration for your documents in an index. This includes
    /// user and group access information for your documents. This is useful for user context
    /// filtering, where search results are filtered based on the user or their group access
    /// to documents.
    /// 
    ///  
    /// 
    /// You can update an access control configuration you created without indexing all of
    /// your documents again. For example, your index contains top-secret company documents
    /// that only certain employees or users should access. You created an 'allow' access
    /// control configuration for one user who recently joined the 'top-secret' team, switching
    /// from a team with 'deny' access to top-secret documents. However, the user suddenly
    /// returns to their previous team and should no longer have access to top secret documents.
    /// You can update the access control configuration to re-configure access control for
    /// your documents as circumstances change.
    /// 
    ///  
    /// 
    /// You call the BatchPutDocument
    /// API to apply the updated access control configuration, with the AccessControlConfigurationId
    /// included in the Document
    /// object. If you use an S3 bucket as a data source, you synchronize your data source
    /// to apply the AccessControlConfigurationId in the .metadata.json
    /// file. Amazon Kendra currently only supports access control configuration for S3 data
    /// sources and documents indexed using the BatchPutDocument API.
    /// 
    /// 
    public partial class UpdateAccessControlConfigurationRequest : AmazonKendraRequest
    {
        private List _accessControlList = new List();
        private string _description;
        private List _hierarchicalAccessControlList = new List();
        private string _id;
        private string _indexId;
        private string _name;
        /// 
        /// Gets and sets the property AccessControlList. 
        /// 
        /// Information you want to update on principals (users and/or groups) and which documents
        /// they should have access to. This is useful for user context filtering, where search
        /// results are filtered based on the user or their group access to documents.
        /// 
        /// 
        public List AccessControlList
        {
            get { return this._accessControlList; }
            set { this._accessControlList = value; }
        }
        // Check to see if AccessControlList property is set
        internal bool IsSetAccessControlList()
        {
            return this._accessControlList != null && this._accessControlList.Count > 0; 
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// A new description for the access control configuration.
        /// 
        /// 
        [AWSProperty(Min=0, 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 HierarchicalAccessControlList. 
        /// 
        /// The updated list of principal
        /// lists that define the hierarchy for which documents users should have access to.
        /// 
        /// 
        [AWSProperty(Min=1, Max=30)]
        public List HierarchicalAccessControlList
        {
            get { return this._hierarchicalAccessControlList; }
            set { this._hierarchicalAccessControlList = value; }
        }
        // Check to see if HierarchicalAccessControlList property is set
        internal bool IsSetHierarchicalAccessControlList()
        {
            return this._hierarchicalAccessControlList != null && this._hierarchicalAccessControlList.Count > 0; 
        }
        /// 
        /// Gets and sets the property Id. 
        /// 
        /// The identifier of the access control configuration you want to update.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=36)]
        public string Id
        {
            get { return this._id; }
            set { this._id = value; }
        }
        // Check to see if Id property is set
        internal bool IsSetId()
        {
            return this._id != null;
        }
        /// 
        /// Gets and sets the property IndexId. 
        /// 
        /// The identifier of the index for an access control configuration.
        /// 
        /// 
        [AWSProperty(Required=true, Min=36, Max=36)]
        public string IndexId
        {
            get { return this._indexId; }
            set { this._indexId = value; }
        }
        // Check to see if IndexId property is set
        internal bool IsSetIndexId()
        {
            return this._indexId != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// A new name for the access control configuration.
        /// 
        /// 
        [AWSProperty(Min=1, Max=200)]
        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;
        }
    }
}