/*
 * 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 iotthingsgraph-2018-09-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.IoTThingsGraph.Model
{
    /// 
    /// An object that contains a system instance definition and summary information.
    /// 
    public partial class SystemInstanceDescription
    {
        private DefinitionDocument _definition;
        private string _flowActionsRoleArn;
        private MetricsConfiguration _metricsConfiguration;
        private string _s3BucketName;
        private SystemInstanceSummary _summary;
        private List _validatedDependencyRevisions = new List();
        private long? _validatedNamespaceVersion;
        /// 
        /// Gets and sets the property Definition.
        /// 
        public DefinitionDocument Definition
        {
            get { return this._definition; }
            set { this._definition = value; }
        }
        // Check to see if Definition property is set
        internal bool IsSetDefinition()
        {
            return this._definition != null;
        }
        /// 
        /// Gets and sets the property FlowActionsRoleArn. 
        /// 
        /// The AWS Identity and Access Management (IAM) role that AWS IoT Things Graph assumes
        /// during flow execution in a cloud deployment. This role must have read and write permissionss
        /// to AWS Lambda and AWS IoT and to any other AWS services that the flow uses.
        /// 
        /// 
        [AWSProperty(Min=20, Max=2048)]
        public string FlowActionsRoleArn
        {
            get { return this._flowActionsRoleArn; }
            set { this._flowActionsRoleArn = value; }
        }
        // Check to see if FlowActionsRoleArn property is set
        internal bool IsSetFlowActionsRoleArn()
        {
            return this._flowActionsRoleArn != null;
        }
        /// 
        /// Gets and sets the property MetricsConfiguration.
        /// 
        public MetricsConfiguration MetricsConfiguration
        {
            get { return this._metricsConfiguration; }
            set { this._metricsConfiguration = value; }
        }
        // Check to see if MetricsConfiguration property is set
        internal bool IsSetMetricsConfiguration()
        {
            return this._metricsConfiguration != null;
        }
        /// 
        /// Gets and sets the property S3BucketName. 
        /// 
        /// The Amazon Simple Storage Service bucket where information about a system instance
        /// is stored.
        /// 
        /// 
        public string S3BucketName
        {
            get { return this._s3BucketName; }
            set { this._s3BucketName = value; }
        }
        // Check to see if S3BucketName property is set
        internal bool IsSetS3BucketName()
        {
            return this._s3BucketName != null;
        }
        /// 
        /// Gets and sets the property Summary. 
        /// 
        /// An object that contains summary information about a system instance.
        /// 
        /// 
        public SystemInstanceSummary Summary
        {
            get { return this._summary; }
            set { this._summary = value; }
        }
        // Check to see if Summary property is set
        internal bool IsSetSummary()
        {
            return this._summary != null;
        }
        /// 
        /// Gets and sets the property ValidatedDependencyRevisions. 
        /// 
        /// A list of objects that contain all of the IDs and revision numbers of workflows and
        /// systems that are used in a system instance.
        /// 
        /// 
        public List ValidatedDependencyRevisions
        {
            get { return this._validatedDependencyRevisions; }
            set { this._validatedDependencyRevisions = value; }
        }
        // Check to see if ValidatedDependencyRevisions property is set
        internal bool IsSetValidatedDependencyRevisions()
        {
            return this._validatedDependencyRevisions != null && this._validatedDependencyRevisions.Count > 0; 
        }
        /// 
        /// Gets and sets the property ValidatedNamespaceVersion. 
        /// 
        /// The version of the user's namespace against which the system instance was validated.
        /// 
        /// 
        public long ValidatedNamespaceVersion
        {
            get { return this._validatedNamespaceVersion.GetValueOrDefault(); }
            set { this._validatedNamespaceVersion = value; }
        }
        // Check to see if ValidatedNamespaceVersion property is set
        internal bool IsSetValidatedNamespaceVersion()
        {
            return this._validatedNamespaceVersion.HasValue; 
        }
    }
}