text: ﻿/**
   * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   * SPDX-License-Identifier: Apache-2.0.
   */
  
  #pragma once
  #include <aws/ssm/SSM_EXPORTS.h>
  #include <aws/core/utils/memory/stl/AWSString.h>
  #include <aws/core/utils/memory/stl/AWSVector.h>
  #include <aws/core/utils/DateTime.h>
  #include <aws/ssm/model/AssociationOverview.h>
  #include <aws/ssm/model/Target.h>
  #include <utility>
  
  namespace Aws
  {
  namespace Utils
  {
  namespace Json
  {
    class JsonValue;
    class JsonView;
  } // namespace Json
  } // namespace Utils
  namespace SSM
  {
  namespace Model
  {
  
    /**
     * <p>Describes an association of a Amazon Web Services Systems Manager document
     * (SSM document) and an instance.</p><p><h3>See Also:</h3>   <a
     * href="http://docs.aws.amazon.com/goto/WebAPI/ssm-2014-11-06/Association">AWS API
     * Reference</a></p>
     */
    class AWS_SSM_API Association
    {
    public:
      Association();
      Association(Aws::Utils::Json::JsonView jsonValue);
      Association& operator=(Aws::Utils::Json::JsonView jsonValue);
      Aws::Utils::Json::JsonValue Jsonize() const;
  
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline const Aws::String& GetName() const{ return m_name; }
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline Association& WithName(const Aws::String& value) { SetName(value); return *this;}
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline Association& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
  
      /**
       * <p>The name of the SSM document.</p>
       */
      inline Association& WithName(const char* value) { SetName(value); return *this;}
  
  
      /**
       * <p>The instance ID.</p>
       */
      inline const Aws::String& GetInstanceId() const{ return m_instanceId; }
  
      /**
       * <p>The instance ID.</p>
       */
      inline bool InstanceIdHasBeenSet() const { return m_instanceIdHasBeenSet; }
  
      /**
       * <p>The instance ID.</p>
       */
      inline void SetInstanceId(const Aws::String& value) { m_instanceIdHasBeenSet = true; m_instanceId = value; }
  
      /**
       * <p>The instance ID.</p>
       */
      inline void SetInstanceId(Aws::String&& value) { m_instanceIdHasBeenSet = true; m_instanceId = std::move(value); }
  
      /**
       * <p>The instance ID.</p>
       */
      inline void SetInstanceId(const char* value) { m_instanceIdHasBeenSet = true; m_instanceId.assign(value); }
  
      /**
       * <p>The instance ID.</p>
       */
      inline Association& WithInstanceId(const Aws::String& value) { SetInstanceId(value); return *this;}
  
      /**
       * <p>The instance ID.</p>
       */
      inline Association& WithInstanceId(Aws::String&& value) { SetInstanceId(std::move(value)); return *this;}
  
      /**
       * <p>The instance ID.</p>
       */
      inline Association& WithInstanceId(const char* value) { SetInstanceId(value); return *this;}
  
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline const Aws::String& GetAssociationId() const{ return m_associationId; }
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline bool AssociationIdHasBeenSet() const { return m_associationIdHasBeenSet; }
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline void SetAssociationId(const Aws::String& value) { m_associationIdHasBeenSet = true; m_associationId = value; }
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline void SetAssociationId(Aws::String&& value) { m_associationIdHasBeenSet = true; m_associationId = std::move(value); }
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline void SetAssociationId(const char* value) { m_associationIdHasBeenSet = true; m_associationId.assign(value); }
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline Association& WithAssociationId(const Aws::String& value) { SetAssociationId(value); return *this;}
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline Association& WithAssociationId(Aws::String&& value) { SetAssociationId(std::move(value)); return *this;}
  
      /**
       * <p>The ID created by the system when you create an association. An association
       * is a binding between a document and a set of targets with a schedule.</p>
       */
      inline Association& WithAssociationId(const char* value) { SetAssociationId(value); return *this;}
  
  
      /**
       * <p>The association version.</p>
       */
      inline const Aws::String& GetAssociationVersion() const{ return m_associationVersion; }
  
      /**
       * <p>The association version.</p>
       */
      inline bool AssociationVersionHasBeenSet() const { return m_associationVersionHasBeenSet; }
  
      /**
       * <p>The association version.</p>
       */
      inline void SetAssociationVersion(const Aws::String& value) { m_associationVersionHasBeenSet = true; m_associationVersion = value; }
  
      /**
       * <p>The association version.</p>
       */
      inline void SetAssociationVersion(Aws::String&& value) { m_associationVersionHasBeenSet = true; m_associationVersion = std::move(value); }
  
      /**
       * <p>The association version.</p>
       */
      inline void SetAssociationVersion(const char* value) { m_associationVersionHasBeenSet = true; m_associationVersion.assign(value); }
  
      /**
       * <p>The association version.</p>
       */
      inline Association& WithAssociationVersion(const Aws::String& value) { SetAssociationVersion(value); return *this;}
  
      /**
       * <p>The association version.</p>
       */
      inline Association& WithAssociationVersion(Aws::String&& value) { SetAssociationVersion(std::move(value)); return *this;}
  
      /**
       * <p>The association version.</p>
       */
      inline Association& WithAssociationVersion(const char* value) { SetAssociationVersion(value); return *this;}
  
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline const Aws::String& GetDocumentVersion() const{ return m_documentVersion; }
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline bool DocumentVersionHasBeenSet() const { return m_documentVersionHasBeenSet; }
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline void SetDocumentVersion(const Aws::String& value) { m_documentVersionHasBeenSet = true; m_documentVersion = value; }
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline void SetDocumentVersion(Aws::String&& value) { m_documentVersionHasBeenSet = true; m_documentVersion = std::move(value); }
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline void SetDocumentVersion(const char* value) { m_documentVersionHasBeenSet = true; m_documentVersion.assign(value); }
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline Association& WithDocumentVersion(const Aws::String& value) { SetDocumentVersion(value); return *this;}
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline Association& WithDocumentVersion(Aws::String&& value) { SetDocumentVersion(std::move(value)); return *this;}
  
      /**
       * <p>The version of the document used in the association.</p>
       */
      inline Association& WithDocumentVersion(const char* value) { SetDocumentVersion(value); return *this;}
  
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline const Aws::Vector<Target>& GetTargets() const{ return m_targets; }
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline bool TargetsHasBeenSet() const { return m_targetsHasBeenSet; }
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline void SetTargets(const Aws::Vector<Target>& value) { m_targetsHasBeenSet = true; m_targets = value; }
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline void SetTargets(Aws::Vector<Target>&& value) { m_targetsHasBeenSet = true; m_targets = std::move(value); }
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline Association& WithTargets(const Aws::Vector<Target>& value) { SetTargets(value); return *this;}
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline Association& WithTargets(Aws::Vector<Target>&& value) { SetTargets(std::move(value)); return *this;}
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline Association& AddTargets(const Target& value) { m_targetsHasBeenSet = true; m_targets.push_back(value); return *this; }
  
      /**
       * <p>The instances targeted by the request to create an association. You can
       * target all instances in an Amazon Web Services account by specifying the
       * <code>InstanceIds</code> key with a value of <code>*</code>.</p>
       */
      inline Association& AddTargets(Target&& value) { m_targetsHasBeenSet = true; m_targets.push_back(std::move(value)); return *this; }
  
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline const Aws::Utils::DateTime& GetLastExecutionDate() const{ return m_lastExecutionDate; }
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline bool LastExecutionDateHasBeenSet() const { return m_lastExecutionDateHasBeenSet; }
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline void SetLastExecutionDate(const Aws::Utils::DateTime& value) { m_lastExecutionDateHasBeenSet = true; m_lastExecutionDate = value; }
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline void SetLastExecutionDate(Aws::Utils::DateTime&& value) { m_lastExecutionDateHasBeenSet = true; m_lastExecutionDate = std::move(value); }
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline Association& WithLastExecutionDate(const Aws::Utils::DateTime& value) { SetLastExecutionDate(value); return *this;}
  
      /**
       * <p>The date on which the association was last run.</p>
       */
      inline Association& WithLastExecutionDate(Aws::Utils::DateTime&& value) { SetLastExecutionDate(std::move(value)); return *this;}
  
  
      /**
       * <p>Information about the association.</p>
       */
      inline const AssociationOverview& GetOverview() const{ return m_overview; }
  
      /**
       * <p>Information about the association.</p>
       */
      inline bool OverviewHasBeenSet() const { return m_overviewHasBeenSet; }
  
      /**
       * <p>Information about the association.</p>
       */
      inline void SetOverview(const AssociationOverview& value) { m_overviewHasBeenSet = true; m_overview = value; }
  
      /**
       * <p>Information about the association.</p>
       */
      inline void SetOverview(AssociationOverview&& value) { m_overviewHasBeenSet = true; m_overview = std::move(value); }
  
      /**
       * <p>Information about the association.</p>
       */
      inline Association& WithOverview(const AssociationOverview& value) { SetOverview(value); return *this;}
  
      /**
       * <p>Information about the association.</p>
       */
      inline Association& WithOverview(AssociationOverview&& value) { SetOverview(std::move(value)); return *this;}
  
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline const Aws::String& GetScheduleExpression() const{ return m_scheduleExpression; }
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline bool ScheduleExpressionHasBeenSet() const { return m_scheduleExpressionHasBeenSet; }
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline void SetScheduleExpression(const Aws::String& value) { m_scheduleExpressionHasBeenSet = true; m_scheduleExpression = value; }
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline void SetScheduleExpression(Aws::String&& value) { m_scheduleExpressionHasBeenSet = true; m_scheduleExpression = std::move(value); }
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline void SetScheduleExpression(const char* value) { m_scheduleExpressionHasBeenSet = true; m_scheduleExpression.assign(value); }
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline Association& WithScheduleExpression(const Aws::String& value) { SetScheduleExpression(value); return *this;}
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline Association& WithScheduleExpression(Aws::String&& value) { SetScheduleExpression(std::move(value)); return *this;}
  
      /**
       * <p>A cron expression that specifies a schedule when the association runs. The
       * schedule runs in Coordinated Universal Time (UTC).</p>
       */
      inline Association& WithScheduleExpression(const char* value) { SetScheduleExpression(value); return *this;}
  
  
      /**
       * <p>The association name.</p>
       */
      inline const Aws::String& GetAssociationName() const{ return m_associationName; }
  
      /**
       * <p>The association name.</p>
       */
      inline bool AssociationNameHasBeenSet() const { return m_associationNameHasBeenSet; }
  
      /**
       * <p>The association name.</p>
       */
      inline void SetAssociationName(const Aws::String& value) { m_associationNameHasBeenSet = true; m_associationName = value; }
  
      /**
       * <p>The association name.</p>
       */
      inline void SetAssociationName(Aws::String&& value) { m_associationNameHasBeenSet = true; m_associationName = std::move(value); }
  
      /**
       * <p>The association name.</p>
       */
      inline void SetAssociationName(const char* value) { m_associationNameHasBeenSet = true; m_associationName.assign(value); }
  
      /**
       * <p>The association name.</p>
       */
      inline Association& WithAssociationName(const Aws::String& value) { SetAssociationName(value); return *this;}
  
      /**
       * <p>The association name.</p>
       */
      inline Association& WithAssociationName(Aws::String&& value) { SetAssociationName(std::move(value)); return *this;}
  
      /**
       * <p>The association name.</p>
       */
      inline Association& WithAssociationName(const char* value) { SetAssociationName(value); return *this;}
  
    private:
  
      Aws::String m_name;
      bool m_nameHasBeenSet;
  
      Aws::String m_instanceId;
      bool m_instanceIdHasBeenSet;
  
      Aws::String m_associationId;
      bool m_associationIdHasBeenSet;
  
      Aws::String m_associationVersion;
      bool m_associationVersionHasBeenSet;
  
      Aws::String m_documentVersion;
      bool m_documentVersionHasBeenSet;
  
      Aws::Vector<Target> m_targets;
      bool m_targetsHasBeenSet;
  
      Aws::Utils::DateTime m_lastExecutionDate;
      bool m_lastExecutionDateHasBeenSet;
  
      AssociationOverview m_overview;
      bool m_overviewHasBeenSet;
  
      Aws::String m_scheduleExpression;
      bool m_scheduleExpressionHasBeenSet;
  
      Aws::String m_associationName;
      bool m_associationNameHasBeenSet;
    };
  
  } // namespace Model
  } // namespace SSM
  } // namespace Aws
  