/*
 * 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 macie2-2020-01-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.Macie2.Model
{
    /// 
    /// This is the response object from the DescribeClassificationJob operation.
    /// 
    public partial class DescribeClassificationJobResponse : AmazonWebServiceResponse
    {
        private List _allowListIds = new List();
        private string _clientToken;
        private DateTime? _createdAt;
        private List _customDataIdentifierIds = new List();
        private string _description;
        private bool? _initialRun;
        private string _jobArn;
        private string _jobId;
        private JobStatus _jobStatus;
        private JobType _jobType;
        private LastRunErrorStatus _lastRunErrorStatus;
        private DateTime? _lastRunTime;
        private List _managedDataIdentifierIds = new List();
        private ManagedDataIdentifierSelector _managedDataIdentifierSelector;
        private string _name;
        private S3JobDefinition _s3JobDefinition;
        private int? _samplingPercentage;
        private JobScheduleFrequency _scheduleFrequency;
        private Statistics _statistics;
        private Dictionary _tags = new Dictionary();
        private UserPausedDetails _userPausedDetails;
        /// 
        /// Gets and sets the property AllowListIds. 
        /// 
        /// An array of unique identifiers, one for each allow list that the job uses when it
        /// analyzes data.
        /// 
        /// 
        public List AllowListIds
        {
            get { return this._allowListIds; }
            set { this._allowListIds = value; }
        }
        // Check to see if AllowListIds property is set
        internal bool IsSetAllowListIds()
        {
            return this._allowListIds != null && this._allowListIds.Count > 0; 
        }
        /// 
        /// Gets and sets the property ClientToken. 
        /// 
        /// The token that was provided to ensure the idempotency of the request to create the
        /// job.
        /// 
        /// 
        public string ClientToken
        {
            get { return this._clientToken; }
            set { this._clientToken = value; }
        }
        // Check to see if ClientToken property is set
        internal bool IsSetClientToken()
        {
            return this._clientToken != null;
        }
        /// 
        /// Gets and sets the property CreatedAt. 
        /// 
        /// The date and time, in UTC and extended ISO 8601 format, when the job was created.
        /// 
        /// 
        public DateTime CreatedAt
        {
            get { return this._createdAt.GetValueOrDefault(); }
            set { this._createdAt = value; }
        }
        // Check to see if CreatedAt property is set
        internal bool IsSetCreatedAt()
        {
            return this._createdAt.HasValue; 
        }
        /// 
        /// Gets and sets the property CustomDataIdentifierIds. 
        /// 
        /// An array of unique identifiers, one for each custom data identifier that the job uses
        /// when it analyzes data. This value is null if the job uses only managed data identifiers
        /// to analyze data.
        /// 
        /// 
        public List CustomDataIdentifierIds
        {
            get { return this._customDataIdentifierIds; }
            set { this._customDataIdentifierIds = value; }
        }
        // Check to see if CustomDataIdentifierIds property is set
        internal bool IsSetCustomDataIdentifierIds()
        {
            return this._customDataIdentifierIds != null && this._customDataIdentifierIds.Count > 0; 
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// The custom description of the job.
        /// 
        /// 
        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 InitialRun. 
        /// 
        /// For a recurring job, specifies whether you configured the job to analyze all existing,
        /// eligible objects immediately after the job was created (true). If you configured the
        /// job to analyze only those objects that were created or changed after the job was created
        /// and before the job's first scheduled run, this value is false. This value is also
        /// false for a one-time job.
        /// 
        /// 
        public bool InitialRun
        {
            get { return this._initialRun.GetValueOrDefault(); }
            set { this._initialRun = value; }
        }
        // Check to see if InitialRun property is set
        internal bool IsSetInitialRun()
        {
            return this._initialRun.HasValue; 
        }
        /// 
        /// Gets and sets the property JobArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the job.
        /// 
        /// 
        public string JobArn
        {
            get { return this._jobArn; }
            set { this._jobArn = value; }
        }
        // Check to see if JobArn property is set
        internal bool IsSetJobArn()
        {
            return this._jobArn != null;
        }
        /// 
        /// Gets and sets the property JobId. 
        /// 
        /// The unique identifier for the job.
        /// 
        /// 
        public string JobId
        {
            get { return this._jobId; }
            set { this._jobId = value; }
        }
        // Check to see if JobId property is set
        internal bool IsSetJobId()
        {
            return this._jobId != null;
        }
        /// 
        /// Gets and sets the property JobStatus. 
        /// 
        /// The current status of the job. Possible values are:
        /// 
        ///  - 
        /// 
        /// CANCELLED - You cancelled the job or, if it's a one-time job, you paused the job and
        /// didn't resume it within 30 days.
        /// 
        /// 
- 
        /// 
        /// COMPLETE - For a one-time job, Amazon Macie finished processing the data specified
        /// for the job. This value doesn't apply to recurring jobs.
        /// 
        /// 
- 
        /// 
        /// IDLE - For a recurring job, the previous scheduled run is complete and the next scheduled
        /// run is pending. This value doesn't apply to one-time jobs.
        /// 
        /// 
- 
        /// 
        /// PAUSED - Macie started running the job but additional processing would exceed the
        /// monthly sensitive data discovery quota for your account or one or more member accounts
        /// that the job analyzes data for.
        /// 
        /// 
- 
        /// 
        /// RUNNING - For a one-time job, the job is in progress. For a recurring job, a scheduled
        /// run is in progress.
        /// 
        /// 
- 
        /// 
        /// USER_PAUSED - You paused the job. If you paused the job while it had a status of RUNNING
        /// and you don't resume it within 30 days of pausing it, the job or job run will expire
        /// and be cancelled, depending on the job's type. To check the expiration date, refer
        /// to the UserPausedDetails.jobExpiresAt property.
        /// 
        /// 
/// 
        public JobStatus JobStatus
        {
            get { return this._jobStatus; }
            set { this._jobStatus = value; }
        }
        // Check to see if JobStatus property is set
        internal bool IsSetJobStatus()
        {
            return this._jobStatus != null;
        }
        /// 
        /// Gets and sets the property JobType. 
        /// 
        /// The schedule for running the job. Possible values are:
        /// 
        ///- 
        /// 
        /// ONE_TIME - The job runs only once.
        /// 
        /// 
- 
        /// 
        /// SCHEDULED - The job runs on a daily, weekly, or monthly basis. The scheduleFrequency
        /// property indicates the recurrence pattern for the job.
        /// 
        /// 
/// 
        public JobType JobType
        {
            get { return this._jobType; }
            set { this._jobType = value; }
        }
        // Check to see if JobType property is set
        internal bool IsSetJobType()
        {
            return this._jobType != null;
        }
        /// 
        /// Gets and sets the property LastRunErrorStatus. 
        /// 
        /// Specifies whether any account- or bucket-level access errors occurred when the job
        /// ran. For a recurring job, this value indicates the error status of the job's most
        /// recent run.
        /// 
        /// 
        public LastRunErrorStatus LastRunErrorStatus
        {
            get { return this._lastRunErrorStatus; }
            set { this._lastRunErrorStatus = value; }
        }
        // Check to see if LastRunErrorStatus property is set
        internal bool IsSetLastRunErrorStatus()
        {
            return this._lastRunErrorStatus != null;
        }
        /// 
        /// Gets and sets the property LastRunTime. 
        /// 
        /// The date and time, in UTC and extended ISO 8601 format, when the job started. If the
        /// job is a recurring job, this value indicates when the most recent run started or,
        /// if the job hasn't run yet, when the job was created.
        /// 
        /// 
        public DateTime LastRunTime
        {
            get { return this._lastRunTime.GetValueOrDefault(); }
            set { this._lastRunTime = value; }
        }
        // Check to see if LastRunTime property is set
        internal bool IsSetLastRunTime()
        {
            return this._lastRunTime.HasValue; 
        }
        /// 
        /// Gets and sets the property ManagedDataIdentifierIds. 
        /// 
        /// An array of unique identifiers, one for each managed data identifier that the job
        /// is explicitly configured to include (use) or exclude (not use) when it analyzes data.
        /// Inclusion or exclusion depends on the managed data identifier selection type specified
        /// for the job (managedDataIdentifierSelector).
        /// 
        /// 
        /// 
        /// This value is null if the job's managed data identifier selection type is ALL, NONE,
        /// or RECOMMENDED.
        /// 
        /// 
        public List ManagedDataIdentifierIds
        {
            get { return this._managedDataIdentifierIds; }
            set { this._managedDataIdentifierIds = value; }
        }
        // Check to see if ManagedDataIdentifierIds property is set
        internal bool IsSetManagedDataIdentifierIds()
        {
            return this._managedDataIdentifierIds != null && this._managedDataIdentifierIds.Count > 0; 
        }
        /// 
        /// Gets and sets the property ManagedDataIdentifierSelector. 
        /// 
        /// The selection type that determines which managed data identifiers the job uses when
        /// it analyzes data. Possible values are:
        /// 
        ///- 
        /// 
        /// ALL (default) - Use all managed data identifiers.
        /// 
        /// 
- 
        /// 
        /// EXCLUDE - Use all managed data identifiers except the ones specified by the managedDataIdentifierIds
        /// property.
        /// 
        /// 
- 
        /// 
        /// INCLUDE - Use only the managed data identifiers specified by the managedDataIdentifierIds
        /// property.
        /// 
        /// 
- 
        /// 
        /// NONE - Don't use any managed data identifiers. Use only custom data identifiers (customDataIdentifierIds).
        /// 
        /// 
- 
        /// 
        /// RECOMMENDED - Use only the set of managed data identifiers that Amazon Web Services
        /// recommends for jobs.
        /// 
        /// 
/// 
        /// If this value is null, the job uses all managed data identifiers.
        /// 
        ///  
        /// 
        /// If the job is a recurring job and this value is null, ALL, or EXCLUDE, each job run
        /// automatically uses new managed data identifiers that are released after the job was
        /// created or the preceding run ended. If this value is RECOMMENDED for a recurring job,
        /// each job run uses all the managed data identifiers that are in the recommended set
        /// when the run starts.
        /// 
        ///  
        /// 
        /// For information about individual managed data identifiers or to determine which ones
        /// are in the recommended set, see Using
        /// managed data identifiers and Recommended
        /// managed data identifiers in the Amazon Macie User Guide.
        /// 
        /// 
        public ManagedDataIdentifierSelector ManagedDataIdentifierSelector
        {
            get { return this._managedDataIdentifierSelector; }
            set { this._managedDataIdentifierSelector = value; }
        }
        // Check to see if ManagedDataIdentifierSelector property is set
        internal bool IsSetManagedDataIdentifierSelector()
        {
            return this._managedDataIdentifierSelector != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The custom name of the job.
        /// 
        /// 
        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 S3JobDefinition. 
        /// 
        /// The S3 buckets that contain the objects to analyze, and the scope of that analysis.
        /// 
        /// 
        public S3JobDefinition S3JobDefinition
        {
            get { return this._s3JobDefinition; }
            set { this._s3JobDefinition = value; }
        }
        // Check to see if S3JobDefinition property is set
        internal bool IsSetS3JobDefinition()
        {
            return this._s3JobDefinition != null;
        }
        /// 
        /// Gets and sets the property SamplingPercentage. 
        /// 
        /// The sampling depth, as a percentage, that determines the percentage of eligible objects
        /// that the job analyzes.
        /// 
        /// 
        public int SamplingPercentage
        {
            get { return this._samplingPercentage.GetValueOrDefault(); }
            set { this._samplingPercentage = value; }
        }
        // Check to see if SamplingPercentage property is set
        internal bool IsSetSamplingPercentage()
        {
            return this._samplingPercentage.HasValue; 
        }
        /// 
        /// Gets and sets the property ScheduleFrequency. 
        /// 
        /// The recurrence pattern for running the job. This value is null if the job is configured
        /// to run only once.
        /// 
        /// 
        public JobScheduleFrequency ScheduleFrequency
        {
            get { return this._scheduleFrequency; }
            set { this._scheduleFrequency = value; }
        }
        // Check to see if ScheduleFrequency property is set
        internal bool IsSetScheduleFrequency()
        {
            return this._scheduleFrequency != null;
        }
        /// 
        /// Gets and sets the property Statistics. 
        /// 
        /// The number of times that the job has run and processing statistics for the job's current
        /// run.
        /// 
        /// 
        public Statistics Statistics
        {
            get { return this._statistics; }
            set { this._statistics = value; }
        }
        // Check to see if Statistics property is set
        internal bool IsSetStatistics()
        {
            return this._statistics != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// A map of key-value pairs that specifies which tags (keys and values) are associated
        /// with the classification job.
        /// 
        /// 
        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 UserPausedDetails. 
        /// 
        /// If the current status of the job is USER_PAUSED, specifies when the job was paused
        /// and when the job or job run will expire and be cancelled if it isn't resumed. This
        /// value is present only if the value for jobStatus is USER_PAUSED.
        /// 
        /// 
        public UserPausedDetails UserPausedDetails
        {
            get { return this._userPausedDetails; }
            set { this._userPausedDetails = value; }
        }
        // Check to see if UserPausedDetails property is set
        internal bool IsSetUserPausedDetails()
        {
            return this._userPausedDetails != null;
        }
    }
}