/*
 * 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 ssm-2014-11-06.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.SimpleSystemsManagement.Model
{
    /// 
    /// Describes an Amazon Web Services Systems Manager document (SSM document).
    /// 
    public partial class DocumentDescription
    {
        private string _approvedVersion;
        private List _attachmentsInformation = new List();
        private string _author;
        private List _category = new List();
        private List _categoryEnum = new List();
        private DateTime? _createdDate;
        private string _defaultVersion;
        private string _description;
        private string _displayName;
        private DocumentFormat _documentFormat;
        private DocumentType _documentType;
        private string _documentVersion;
        private string _hash;
        private DocumentHashType _hashType;
        private string _latestVersion;
        private string _name;
        private string _owner;
        private List _parameters = new List();
        private string _pendingReviewVersion;
        private List _platformTypes = new List();
        private List _requires = new List();
        private List _reviewInformation = new List();
        private ReviewStatus _reviewStatus;
        private string _schemaVersion;
        private string _sha1;
        private DocumentStatus _status;
        private string _statusInformation;
        private List _tags = new List();
        private string _targetType;
        private string _versionName;
        /// 
        /// Gets and sets the property ApprovedVersion. 
        /// 
        /// The version of the document currently approved for use in the organization.
        /// 
        /// 
        public string ApprovedVersion
        {
            get { return this._approvedVersion; }
            set { this._approvedVersion = value; }
        }
        // Check to see if ApprovedVersion property is set
        internal bool IsSetApprovedVersion()
        {
            return this._approvedVersion != null;
        }
        /// 
        /// Gets and sets the property AttachmentsInformation. 
        /// 
        /// Details about the document attachments, including names, locations, sizes, and so
        /// on.
        /// 
        /// 
        public List AttachmentsInformation
        {
            get { return this._attachmentsInformation; }
            set { this._attachmentsInformation = value; }
        }
        // Check to see if AttachmentsInformation property is set
        internal bool IsSetAttachmentsInformation()
        {
            return this._attachmentsInformation != null && this._attachmentsInformation.Count > 0; 
        }
        /// 
        /// Gets and sets the property Author. 
        /// 
        /// The user in your organization who created the document.
        /// 
        /// 
        public string Author
        {
            get { return this._author; }
            set { this._author = value; }
        }
        // Check to see if Author property is set
        internal bool IsSetAuthor()
        {
            return this._author != null;
        }
        /// 
        /// Gets and sets the property Category. 
        /// 
        /// The classification of a document to help you identify and categorize its use.
        /// 
        /// 
        [AWSProperty(Min=0, Max=3)]
        public List Category
        {
            get { return this._category; }
            set { this._category = value; }
        }
        // Check to see if Category property is set
        internal bool IsSetCategory()
        {
            return this._category != null && this._category.Count > 0; 
        }
        /// 
        /// Gets and sets the property CategoryEnum. 
        /// 
        /// The value that identifies a document's category.
        /// 
        /// 
        [AWSProperty(Min=0, Max=3)]
        public List CategoryEnum
        {
            get { return this._categoryEnum; }
            set { this._categoryEnum = value; }
        }
        // Check to see if CategoryEnum property is set
        internal bool IsSetCategoryEnum()
        {
            return this._categoryEnum != null && this._categoryEnum.Count > 0; 
        }
        /// 
        /// Gets and sets the property CreatedDate. 
        /// 
        /// The date when the document was created.
        /// 
        /// 
        public DateTime CreatedDate
        {
            get { return this._createdDate.GetValueOrDefault(); }
            set { this._createdDate = value; }
        }
        // Check to see if CreatedDate property is set
        internal bool IsSetCreatedDate()
        {
            return this._createdDate.HasValue; 
        }
        /// 
        /// Gets and sets the property DefaultVersion. 
        /// 
        /// The default version.
        /// 
        /// 
        public string DefaultVersion
        {
            get { return this._defaultVersion; }
            set { this._defaultVersion = value; }
        }
        // Check to see if DefaultVersion property is set
        internal bool IsSetDefaultVersion()
        {
            return this._defaultVersion != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// A description of the document. 
        /// 
        /// 
        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 friendly name of the SSM document. This value can differ for each version of the
        /// document. If you want to update this value, see UpdateDocument.
        /// 
        /// 
        [AWSProperty(Max=1024)]
        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 DocumentFormat. 
        /// 
        /// The document format, either JSON or YAML.
        /// 
        /// 
        public DocumentFormat DocumentFormat
        {
            get { return this._documentFormat; }
            set { this._documentFormat = value; }
        }
        // Check to see if DocumentFormat property is set
        internal bool IsSetDocumentFormat()
        {
            return this._documentFormat != null;
        }
        /// 
        /// Gets and sets the property DocumentType. 
        /// 
        /// The type of document.
        /// 
        /// 
        public DocumentType DocumentType
        {
            get { return this._documentType; }
            set { this._documentType = value; }
        }
        // Check to see if DocumentType property is set
        internal bool IsSetDocumentType()
        {
            return this._documentType != null;
        }
        /// 
        /// Gets and sets the property DocumentVersion. 
        /// 
        /// The document version.
        /// 
        /// 
        public string DocumentVersion
        {
            get { return this._documentVersion; }
            set { this._documentVersion = value; }
        }
        // Check to see if DocumentVersion property is set
        internal bool IsSetDocumentVersion()
        {
            return this._documentVersion != null;
        }
        /// 
        /// Gets and sets the property Hash. 
        /// 
        /// The Sha256 or Sha1 hash created by the system when the document was created. 
        /// 
        ///   
        /// 
        /// Sha1 hashes have been deprecated.
        /// 
        ///  
        /// 
        [AWSProperty(Max=256)]
        public string Hash
        {
            get { return this._hash; }
            set { this._hash = value; }
        }
        // Check to see if Hash property is set
        internal bool IsSetHash()
        {
            return this._hash != null;
        }
        /// 
        /// Gets and sets the property HashType. 
        /// 
        /// The hash type of the document. Valid values include Sha256 or Sha1.
        /// 
        ///   
        /// 
        /// Sha1 hashes have been deprecated.
        /// 
        ///  
        /// 
        public DocumentHashType HashType
        {
            get { return this._hashType; }
            set { this._hashType = value; }
        }
        // Check to see if HashType property is set
        internal bool IsSetHashType()
        {
            return this._hashType != null;
        }
        /// 
        /// Gets and sets the property LatestVersion. 
        /// 
        /// The latest version of the document.
        /// 
        /// 
        public string LatestVersion
        {
            get { return this._latestVersion; }
            set { this._latestVersion = value; }
        }
        // Check to see if LatestVersion property is set
        internal bool IsSetLatestVersion()
        {
            return this._latestVersion != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The name of the SSM document.
        /// 
        /// 
        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 Owner. 
        /// 
        /// The Amazon Web Services user that created the document.
        /// 
        /// 
        public string Owner
        {
            get { return this._owner; }
            set { this._owner = value; }
        }
        // Check to see if Owner property is set
        internal bool IsSetOwner()
        {
            return this._owner != null;
        }
        /// 
        /// Gets and sets the property Parameters. 
        /// 
        /// A description of the parameters for a document.
        /// 
        /// 
        public List Parameters
        {
            get { return this._parameters; }
            set { this._parameters = value; }
        }
        // Check to see if Parameters property is set
        internal bool IsSetParameters()
        {
            return this._parameters != null && this._parameters.Count > 0; 
        }
        /// 
        /// Gets and sets the property PendingReviewVersion. 
        /// 
        /// The version of the document that is currently under review.
        /// 
        /// 
        public string PendingReviewVersion
        {
            get { return this._pendingReviewVersion; }
            set { this._pendingReviewVersion = value; }
        }
        // Check to see if PendingReviewVersion property is set
        internal bool IsSetPendingReviewVersion()
        {
            return this._pendingReviewVersion != null;
        }
        /// 
        /// Gets and sets the property PlatformTypes. 
        /// 
        /// The list of operating system (OS) platforms compatible with this SSM document. 
        /// 
        /// 
        public List PlatformTypes
        {
            get { return this._platformTypes; }
            set { this._platformTypes = value; }
        }
        // Check to see if PlatformTypes property is set
        internal bool IsSetPlatformTypes()
        {
            return this._platformTypes != null && this._platformTypes.Count > 0; 
        }
        /// 
        /// Gets and sets the property Requires. 
        /// 
        /// A list of SSM documents required by a document. For example, an ApplicationConfiguration
        /// document requires an ApplicationConfigurationSchema document.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public List Requires
        {
            get { return this._requires; }
            set { this._requires = value; }
        }
        // Check to see if Requires property is set
        internal bool IsSetRequires()
        {
            return this._requires != null && this._requires.Count > 0; 
        }
        /// 
        /// Gets and sets the property ReviewInformation. 
        /// 
        /// Details about the review of a document.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public List ReviewInformation
        {
            get { return this._reviewInformation; }
            set { this._reviewInformation = value; }
        }
        // Check to see if ReviewInformation property is set
        internal bool IsSetReviewInformation()
        {
            return this._reviewInformation != null && this._reviewInformation.Count > 0; 
        }
        /// 
        /// Gets and sets the property ReviewStatus. 
        /// 
        /// The current status of the review.
        /// 
        /// 
        public ReviewStatus ReviewStatus
        {
            get { return this._reviewStatus; }
            set { this._reviewStatus = value; }
        }
        // Check to see if ReviewStatus property is set
        internal bool IsSetReviewStatus()
        {
            return this._reviewStatus != null;
        }
        /// 
        /// Gets and sets the property SchemaVersion. 
        /// 
        /// The schema version.
        /// 
        /// 
        public string SchemaVersion
        {
            get { return this._schemaVersion; }
            set { this._schemaVersion = value; }
        }
        // Check to see if SchemaVersion property is set
        internal bool IsSetSchemaVersion()
        {
            return this._schemaVersion != null;
        }
        /// 
        /// Gets and sets the property Sha1. 
        /// 
        /// The SHA1 hash of the document, which you can use for verification.
        /// 
        /// 
        public string Sha1
        {
            get { return this._sha1; }
            set { this._sha1 = value; }
        }
        // Check to see if Sha1 property is set
        internal bool IsSetSha1()
        {
            return this._sha1 != null;
        }
        /// 
        /// Gets and sets the property Status. 
        /// 
        /// The status of the SSM document.
        /// 
        /// 
        public DocumentStatus Status
        {
            get { return this._status; }
            set { this._status = value; }
        }
        // Check to see if Status property is set
        internal bool IsSetStatus()
        {
            return this._status != null;
        }
        /// 
        /// Gets and sets the property StatusInformation. 
        /// 
        /// A message returned by Amazon Web Services Systems Manager that explains the Status
        /// value. For example, a Failed status might be explained by the StatusInformation
        /// message, "The specified S3 bucket doesn't exist. Verify that the URL of the S3 bucket
        /// is correct."
        /// 
        /// 
        public string StatusInformation
        {
            get { return this._statusInformation; }
            set { this._statusInformation = value; }
        }
        // Check to see if StatusInformation property is set
        internal bool IsSetStatusInformation()
        {
            return this._statusInformation != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The tags, or metadata, that have been applied to the document.
        /// 
        /// 
        [AWSProperty(Max=1000)]
        public List 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 TargetType. 
        /// 
        /// The target type which defines the kinds of resources the document can run on. For
        /// example, /AWS::EC2::Instance. For a list of valid resource types, see
        /// Amazon
        /// Web Services resource and property types reference in the CloudFormation User
        /// Guide. 
        /// 
        /// 
        [AWSProperty(Max=200)]
        public string TargetType
        {
            get { return this._targetType; }
            set { this._targetType = value; }
        }
        // Check to see if TargetType property is set
        internal bool IsSetTargetType()
        {
            return this._targetType != null;
        }
        /// 
        /// Gets and sets the property VersionName. 
        /// 
        /// The version of the artifact associated with the document.
        /// 
        /// 
        public string VersionName
        {
            get { return this._versionName; }
            set { this._versionName = value; }
        }
        // Check to see if VersionName property is set
        internal bool IsSetVersionName()
        {
            return this._versionName != null;
        }
    }
}