text:
package com.amazonaws.services.neptune.model;

import java.io.Serializable;
import javax.annotation.Generated;

/**
 *

 * Contains the details of an Amazon Neptune DB cluster.
 *

 *

 * This data type is used as a response element in the DescribeDBClusters action.
 *

 *
 * @see AWS API
 *      Documentation
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class DBCluster implements Serializable, Cloneable {

    /**
     *

     * AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but instead
     * automatically adjusts as needed.
     *

     */
    private Integer allocatedStorage;
    /**
     *

     * Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     *

     */
    private java.util.List<String> availabilityZones;
    /**
     *

     * Specifies the number of days for which automatic DB snapshots are retained.
     *

     */
    private Integer backupRetentionPeriod;
    /**
     *

     * Not supported by Neptune.
     *

     */
    private String characterSetName;
    /**
     *

     * Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     * specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     *

     */
    private String databaseName;
    /**
     *

     * Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster.
     *

     */
    private String dBClusterIdentifier;
    /**
     *

     * Specifies the name of the DB cluster parameter group for the DB cluster.
     *

     */
    private String dBClusterParameterGroup;
    /**
     *

     * Specifies information on the subnet group associated with the DB cluster, including the name, description, and
     * subnets in the subnet group.
     *

     */
    private String dBSubnetGroup;
    /**
     *

     * Specifies the current state of this DB cluster.
     *

     */
    private String status;
    /**
     *

     * Specifies the progress of the operation as a percentage.
     *

     */
    private String percentProgress;
    /**
     *

     * Specifies the earliest time to which a database can be restored with point-in-time restore.
     *

     */
    private java.util.Date earliestRestorableTime;
    /**
     *

     * Specifies the connection endpoint for the primary instance of the DB cluster.
     *

     */
    private String endpoint;
    /**
     *

     * The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections across the
     * Read Replicas that are available in a DB cluster. As clients request new connections to the reader endpoint,
     * Neptune distributes the connection requests among the Read Replicas in the DB cluster. This functionality can
     * help balance your read workload across multiple Read Replicas in your DB cluster.
     *

     *

     * If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary instance, your
     * connection is dropped. To continue sending your read workload to other Read Replicas in the cluster, you can then
     * reconnect to the reader endpoint.
     *

     */
    private String readerEndpoint;
    /**
     *

     * Specifies whether the DB cluster has instances in multiple Availability Zones.
     *

     */
    private Boolean multiAZ;
    /**
     *

     * Provides the name of the database engine to be used for this DB cluster.
     *

     */
    private String engine;
    /**
     *

     * Indicates the database engine version.
     *

     */
    private String engineVersion;
    /**
     *

     * Specifies the latest time to which a database can be restored with point-in-time restore.
     *

     */
    private java.util.Date latestRestorableTime;
    /**
     *

     * Specifies the port that the database engine is listening on.
     *

     */
    private Integer port;
    /**
     *

     * Not supported by Neptune.
     *

     */
    private String masterUsername;
    /**
     *

     * Not supported by Neptune.
     *

     */
    private java.util.List<DBClusterOptionGroupStatus> dBClusterOptionGroupMemberships;
    /**
     *

     * Specifies the daily time range during which automated backups are created if automated backups are enabled, as
     * determined by the BackupRetentionPeriod.
     *

     */
    private String preferredBackupWindow;
    /**
     *

     * Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
     *

     */
    private String preferredMaintenanceWindow;
    /**
     *

     * Not supported by Neptune.
     *

     */
    private String replicationSourceIdentifier;
    /**
     *

     * Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     *

     */
    private java.util.List<String> readReplicaIdentifiers;
    /**
     *

     * Provides the list of instances that make up the DB cluster.
     *

     */
    private java.util.List<DBClusterMember> dBClusterMembers;
    /**
     *

     * Provides a list of VPC security groups that the DB cluster belongs to.
     *

     */
    private java.util.List<VpcSecurityGroupMembership> vpcSecurityGroups;
    /**
     *

     * Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     *

     */
    private String hostedZoneId;
    /**
     *

     * Specifies whether the DB cluster is encrypted.
     *

     */
    private Boolean storageEncrypted;
    /**
     *

     * If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     *

     */
    private String kmsKeyId;
    /**
     *

     * The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon CloudTrail
     * log entries whenever the Amazon KMS key for the DB cluster is accessed.
     *

     */
    private String dbClusterResourceId;
    /**
     *

     * The Amazon Resource Name (ARN) for the DB cluster.
     *

     */
    private String dBClusterArn;
    /**
     *

     * Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB cluster.
     * IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other Amazon
     * services on your behalf.
     *

     */
    private java.util.List<DBClusterRole> associatedRoles;
    /**
     *

     * True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and
     * otherwise false.
     *

     */
    private Boolean iAMDatabaseAuthenticationEnabled;
    /**
     *

     * Identifies the clone group to which the DB cluster is associated.
     *

     */
    private String cloneGroupId;
    /**
     *

     * Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     *

     */
    private java.util.Date clusterCreateTime;
    /**
     *

     * If set to true, tags are copied to any snapshot of the DB cluster that is created.
     *

     */
    private Boolean copyTagsToSnapshot;
    /**
     *

     * A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     *

     */
    private java.util.List<String> enabledCloudwatchLogsExports;
    /**
     *

     * Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when
     * deletion protection is enabled.
     *

     */
    private Boolean deletionProtection;
    /**
     *

     * If set to true, the DB cluster can be cloned across accounts.
     *

     */
    private Boolean crossAccountClone;
    /**
     *

     * Time at which the DB cluster will be automatically restarted.
     *

     */
    private java.util.Date automaticRestartTime;

    private ServerlessV2ScalingConfigurationInfo serverlessV2ScalingConfiguration;

    /**
     *

     * AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but instead
     * automatically adjusts as needed.
     *

     *
     * @param allocatedStorage
     *        AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but
     *        instead automatically adjusts as needed.
     */

    public void setAllocatedStorage(Integer allocatedStorage) {
        this.allocatedStorage = allocatedStorage;
    }

    /**
     *

     * AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but instead
     * automatically adjusts as needed.
     *

     *
     * @return AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but
     *         instead automatically adjusts as needed.
     */

    public Integer getAllocatedStorage() {
        return this.allocatedStorage;
    }

    /**
     *

     * AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but instead
     * automatically adjusts as needed.
     *

     *
     * @param allocatedStorage
     *        AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but
     *        instead automatically adjusts as needed.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAllocatedStorage(Integer allocatedStorage) {
        setAllocatedStorage(allocatedStorage);
        return this;
    }

    /**
     *

     * Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     *

     *
     * @return Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     */

    public java.util.List<String> getAvailabilityZones() {
        return availabilityZones;
    }

    /**
     *

     * Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     *

     *
     * @param availabilityZones
     *        Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     */

    public void setAvailabilityZones(java.util.Collection<String> availabilityZones) {
        if (availabilityZones == null) {
            this.availabilityZones = null;
            return;
        }

        this.availabilityZones = new java.util.ArrayList<String>(availabilityZones);
    }

    /**
     *

     * Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setAvailabilityZones(java.util.Collection)} or {@link #withAvailabilityZones(java.util.Collection)} if
     * you want to override the existing values.
     *

     *
     * @param availabilityZones
     *        Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAvailabilityZones(String... availabilityZones) {
        if (this.availabilityZones == null) {
            setAvailabilityZones(new java.util.ArrayList<String>(availabilityZones.length));
        }
        for (String ele : availabilityZones) {
            this.availabilityZones.add(ele);
        }
        return this;
    }

    /**
     *

     * Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     *

     *
     * @param availabilityZones
     *        Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAvailabilityZones(java.util.Collection<String> availabilityZones) {
        setAvailabilityZones(availabilityZones);
        return this;
    }

    /**
     *

     * Specifies the number of days for which automatic DB snapshots are retained.
     *

     *
     * @param backupRetentionPeriod
     *        Specifies the number of days for which automatic DB snapshots are retained.
     */

    public void setBackupRetentionPeriod(Integer backupRetentionPeriod) {
        this.backupRetentionPeriod = backupRetentionPeriod;
    }

    /**
     *

     * Specifies the number of days for which automatic DB snapshots are retained.
     *

     *
     * @return Specifies the number of days for which automatic DB snapshots are retained.
     */

    public Integer getBackupRetentionPeriod() {
        return this.backupRetentionPeriod;
    }

    /**
     *

     * Specifies the number of days for which automatic DB snapshots are retained.
     *

     *
     * @param backupRetentionPeriod
     *        Specifies the number of days for which automatic DB snapshots are retained.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withBackupRetentionPeriod(Integer backupRetentionPeriod) {
        setBackupRetentionPeriod(backupRetentionPeriod);
        return this;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param characterSetName
     *        Not supported by Neptune.
     */

    public void setCharacterSetName(String characterSetName) {
        this.characterSetName = characterSetName;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @return Not supported by Neptune.
     */

    public String getCharacterSetName() {
        return this.characterSetName;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param characterSetName
     *        Not supported by Neptune.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withCharacterSetName(String characterSetName) {
        setCharacterSetName(characterSetName);
        return this;
    }

    /**
     *

     * Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     * specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     *

     *
     * @param databaseName
     *        Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     *        specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     */

    public void setDatabaseName(String databaseName) {
        this.databaseName = databaseName;
    }

    /**
     *

     * Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     * specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     *

     *
     * @return Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     *         specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     */

    public String getDatabaseName() {
        return this.databaseName;
    }

    /**
     *

     * Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     * specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     *

     *
     * @param databaseName
     *        Contains the name of the initial database of this DB cluster that was provided at create time, if one was
     *        specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDatabaseName(String databaseName) {
        setDatabaseName(databaseName);
        return this;
    }

    /**
     *

     * Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster.
     *

     *
     * @param dBClusterIdentifier
     *        Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB
     *        cluster.
     */

    public void setDBClusterIdentifier(String dBClusterIdentifier) {
        this.dBClusterIdentifier = dBClusterIdentifier;
    }

    /**
     *

     * Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster.
     *

     *
     * @return Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB
     *         cluster.
     */

    public String getDBClusterIdentifier() {
        return this.dBClusterIdentifier;
    }

    /**
     *

     * Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster.
     *

     *
     * @param dBClusterIdentifier
     *        Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB
     *        cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterIdentifier(String dBClusterIdentifier) {
        setDBClusterIdentifier(dBClusterIdentifier);
        return this;
    }

    /**
     *

     * Specifies the name of the DB cluster parameter group for the DB cluster.
     *

     *
     * @param dBClusterParameterGroup
     *        Specifies the name of the DB cluster parameter group for the DB cluster.
     */

    public void setDBClusterParameterGroup(String dBClusterParameterGroup) {
        this.dBClusterParameterGroup = dBClusterParameterGroup;
    }

    /**
     *

     * Specifies the name of the DB cluster parameter group for the DB cluster.
     *

     *
     * @return Specifies the name of the DB cluster parameter group for the DB cluster.
     */

    public String getDBClusterParameterGroup() {
        return this.dBClusterParameterGroup;
    }

    /**
     *

     * Specifies the name of the DB cluster parameter group for the DB cluster.
     *

     *
     * @param dBClusterParameterGroup
     *        Specifies the name of the DB cluster parameter group for the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterParameterGroup(String dBClusterParameterGroup) {
        setDBClusterParameterGroup(dBClusterParameterGroup);
        return this;
    }

    /**
     *

     * Specifies information on the subnet group associated with the DB cluster, including the name, description, and
     * subnets in the subnet group.
     *

     *
     * @param dBSubnetGroup
     *        Specifies information on the subnet group associated with the DB cluster, including the name, description,
     *        and subnets in the subnet group.
     */

    public void setDBSubnetGroup(String dBSubnetGroup) {
        this.dBSubnetGroup = dBSubnetGroup;
    }

    /**
     *

     * Specifies information on the subnet group associated with the DB cluster, including the name, description, and
     * subnets in the subnet group.
     *

     *
     * @return Specifies information on the subnet group associated with the DB cluster, including the name,
     *         description, and subnets in the subnet group.
     */

    public String getDBSubnetGroup() {
        return this.dBSubnetGroup;
    }

    /**
     *

     * Specifies information on the subnet group associated with the DB cluster, including the name, description, and
     * subnets in the subnet group.
     *

     *
     * @param dBSubnetGroup
     *        Specifies information on the subnet group associated with the DB cluster, including the name, description,
     *        and subnets in the subnet group.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBSubnetGroup(String dBSubnetGroup) {
        setDBSubnetGroup(dBSubnetGroup);
        return this;
    }

    /**
     *

     * Specifies the current state of this DB cluster.
     *

     *
     * @param status
     *        Specifies the current state of this DB cluster.
     */

    public void setStatus(String status) {
        this.status = status;
    }

    /**
     *

     * Specifies the current state of this DB cluster.
     *

     *
     * @return Specifies the current state of this DB cluster.
     */

    public String getStatus() {
        return this.status;
    }

    /**
     *

     * Specifies the current state of this DB cluster.
     *

     *
     * @param status
     *        Specifies the current state of this DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withStatus(String status) {
        setStatus(status);
        return this;
    }

    /**
     *

     * Specifies the progress of the operation as a percentage.
     *

     *
     * @param percentProgress
     *        Specifies the progress of the operation as a percentage.
     */

    public void setPercentProgress(String percentProgress) {
        this.percentProgress = percentProgress;
    }

    /**
     *

     * Specifies the progress of the operation as a percentage.
     *

     *
     * @return Specifies the progress of the operation as a percentage.
     */

    public String getPercentProgress() {
        return this.percentProgress;
    }

    /**
     *

     * Specifies the progress of the operation as a percentage.
     *

     *
     * @param percentProgress
     *        Specifies the progress of the operation as a percentage.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withPercentProgress(String percentProgress) {
        setPercentProgress(percentProgress);
        return this;
    }

    /**
     *

     * Specifies the earliest time to which a database can be restored with point-in-time restore.
     *

     *
     * @param earliestRestorableTime
     *        Specifies the earliest time to which a database can be restored with point-in-time restore.
     */

    public void setEarliestRestorableTime(java.util.Date earliestRestorableTime) {
        this.earliestRestorableTime = earliestRestorableTime;
    }

    /**
     *

     * Specifies the earliest time to which a database can be restored with point-in-time restore.
     *

     *
     * @return Specifies the earliest time to which a database can be restored with point-in-time restore.
     */

    public java.util.Date getEarliestRestorableTime() {
        return this.earliestRestorableTime;
    }

    /**
     *

     * Specifies the earliest time to which a database can be restored with point-in-time restore.
     *

     *
     * @param earliestRestorableTime
     *        Specifies the earliest time to which a database can be restored with point-in-time restore.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEarliestRestorableTime(java.util.Date earliestRestorableTime) {
        setEarliestRestorableTime(earliestRestorableTime);
        return this;
    }

    /**
     *

     * Specifies the connection endpoint for the primary instance of the DB cluster.
     *

     *
     * @param endpoint
     *        Specifies the connection endpoint for the primary instance of the DB cluster.
     */

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    /**
     *

     * Specifies the connection endpoint for the primary instance of the DB cluster.
     *

     *
     * @return Specifies the connection endpoint for the primary instance of the DB cluster.
     */

    public String getEndpoint() {
        return this.endpoint;
    }

    /**
     *

     * Specifies the connection endpoint for the primary instance of the DB cluster.
     *

     *
     * @param endpoint
     *        Specifies the connection endpoint for the primary instance of the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEndpoint(String endpoint) {
        setEndpoint(endpoint);
        return this;
    }

    /**
     *

     * The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections across the
     * Read Replicas that are available in a DB cluster. As clients request new connections to the reader endpoint,
     * Neptune distributes the connection requests among the Read Replicas in the DB cluster. This functionality can
     * help balance your read workload across multiple Read Replicas in your DB cluster.
     *

     *

     * If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary instance, your
     * connection is dropped. To continue sending your read workload to other Read Replicas in the cluster, you can then
     * reconnect to the reader endpoint.
     *

     *
     * @param readerEndpoint
     *        The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections
     *        across the Read Replicas that are available in a DB cluster. As clients request new connections to the
     *        reader endpoint, Neptune distributes the connection requests among the Read Replicas in the DB cluster.
     *        This functionality can help balance your read workload across multiple Read Replicas in your DB
     *        cluster.

     *

     *        If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary
     *        instance, your connection is dropped. To continue sending your read workload to other Read Replicas in the
     *        cluster, you can then reconnect to the reader endpoint.
     */

    public void setReaderEndpoint(String readerEndpoint) {
        this.readerEndpoint = readerEndpoint;
    }

    /**
     *

     * The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections across the
     * Read Replicas that are available in a DB cluster. As clients request new connections to the reader endpoint,
     * Neptune distributes the connection requests among the Read Replicas in the DB cluster. This functionality can
     * help balance your read workload across multiple Read Replicas in your DB cluster.
     *

     *

     * If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary instance, your
     * connection is dropped. To continue sending your read workload to other Read Replicas in the cluster, you can then
     * reconnect to the reader endpoint.
     *

     *
     * @return The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections
     *         across the Read Replicas that are available in a DB cluster. As clients request new connections to the
     *         reader endpoint, Neptune distributes the connection requests among the Read Replicas in the DB cluster.
     *         This functionality can help balance your read workload across multiple Read Replicas in your DB
     *         cluster.

     *

     *         If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary
     *         instance, your connection is dropped. To continue sending your read workload to other Read Replicas in
     *         the cluster, you can then reconnect to the reader endpoint.
     */

    public String getReaderEndpoint() {
        return this.readerEndpoint;
    }

    /**
     *

     * The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections across the
     * Read Replicas that are available in a DB cluster. As clients request new connections to the reader endpoint,
     * Neptune distributes the connection requests among the Read Replicas in the DB cluster. This functionality can
     * help balance your read workload across multiple Read Replicas in your DB cluster.
     *

     *

     * If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary instance, your
     * connection is dropped. To continue sending your read workload to other Read Replicas in the cluster, you can then
     * reconnect to the reader endpoint.
     *

     *
     * @param readerEndpoint
     *        The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections
     *        across the Read Replicas that are available in a DB cluster. As clients request new connections to the
     *        reader endpoint, Neptune distributes the connection requests among the Read Replicas in the DB cluster.
     *        This functionality can help balance your read workload across multiple Read Replicas in your DB
     *        cluster.

     *

     *        If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary
     *        instance, your connection is dropped. To continue sending your read workload to other Read Replicas in the
     *        cluster, you can then reconnect to the reader endpoint.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withReaderEndpoint(String readerEndpoint) {
        setReaderEndpoint(readerEndpoint);
        return this;
    }

    /**
     *

     * Specifies whether the DB cluster has instances in multiple Availability Zones.
     *

     *
     * @param multiAZ
     *        Specifies whether the DB cluster has instances in multiple Availability Zones.
     */

    public void setMultiAZ(Boolean multiAZ) {
        this.multiAZ = multiAZ;
    }

    /**
     *

     * Specifies whether the DB cluster has instances in multiple Availability Zones.
     *

     *
     * @return Specifies whether the DB cluster has instances in multiple Availability Zones.
     */

    public Boolean getMultiAZ() {
        return this.multiAZ;
    }

    /**
     *

     * Specifies whether the DB cluster has instances in multiple Availability Zones.
     *

     *
     * @param multiAZ
     *        Specifies whether the DB cluster has instances in multiple Availability Zones.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withMultiAZ(Boolean multiAZ) {
        setMultiAZ(multiAZ);
        return this;
    }

    /**
     *

     * Specifies whether the DB cluster has instances in multiple Availability Zones.
     *

     *
     * @return Specifies whether the DB cluster has instances in multiple Availability Zones.
     */

    public Boolean isMultiAZ() {
        return this.multiAZ;
    }

    /**
     *

     * Provides the name of the database engine to be used for this DB cluster.
     *

     *
     * @param engine
     *        Provides the name of the database engine to be used for this DB cluster.
     */

    public void setEngine(String engine) {
        this.engine = engine;
    }

    /**
     *

     * Provides the name of the database engine to be used for this DB cluster.
     *

     *
     * @return Provides the name of the database engine to be used for this DB cluster.
     */

    public String getEngine() {
        return this.engine;
    }

    /**
     *

     * Provides the name of the database engine to be used for this DB cluster.
     *

     *
     * @param engine
     *        Provides the name of the database engine to be used for this DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEngine(String engine) {
        setEngine(engine);
        return this;
    }

    /**
     *

     * Indicates the database engine version.
     *

     *
     * @param engineVersion
     *        Indicates the database engine version.
     */

    public void setEngineVersion(String engineVersion) {
        this.engineVersion = engineVersion;
    }

    /**
     *

     * Indicates the database engine version.
     *

     *
     * @return Indicates the database engine version.
     */

    public String getEngineVersion() {
        return this.engineVersion;
    }

    /**
     *

     * Indicates the database engine version.
     *

     *
     * @param engineVersion
     *        Indicates the database engine version.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEngineVersion(String engineVersion) {
        setEngineVersion(engineVersion);
        return this;
    }

    /**
     *

     * Specifies the latest time to which a database can be restored with point-in-time restore.
     *

     *
     * @param latestRestorableTime
     *        Specifies the latest time to which a database can be restored with point-in-time restore.
     */

    public void setLatestRestorableTime(java.util.Date latestRestorableTime) {
        this.latestRestorableTime = latestRestorableTime;
    }

    /**
     *

     * Specifies the latest time to which a database can be restored with point-in-time restore.
     *

     *
     * @return Specifies the latest time to which a database can be restored with point-in-time restore.
     */

    public java.util.Date getLatestRestorableTime() {
        return this.latestRestorableTime;
    }

    /**
     *

     * Specifies the latest time to which a database can be restored with point-in-time restore.
     *

     *
     * @param latestRestorableTime
     *        Specifies the latest time to which a database can be restored with point-in-time restore.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withLatestRestorableTime(java.util.Date latestRestorableTime) {
        setLatestRestorableTime(latestRestorableTime);
        return this;
    }

    /**
     *

     * Specifies the port that the database engine is listening on.
     *

     *
     * @param port
     *        Specifies the port that the database engine is listening on.
     */

    public void setPort(Integer port) {
        this.port = port;
    }

    /**
     *

     * Specifies the port that the database engine is listening on.
     *

     *
     * @return Specifies the port that the database engine is listening on.
     */

    public Integer getPort() {
        return this.port;
    }

    /**
     *

     * Specifies the port that the database engine is listening on.
     *

     *
     * @param port
     *        Specifies the port that the database engine is listening on.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withPort(Integer port) {
        setPort(port);
        return this;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param masterUsername
     *        Not supported by Neptune.
     */

    public void setMasterUsername(String masterUsername) {
        this.masterUsername = masterUsername;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @return Not supported by Neptune.
     */

    public String getMasterUsername() {
        return this.masterUsername;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param masterUsername
     *        Not supported by Neptune.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withMasterUsername(String masterUsername) {
        setMasterUsername(masterUsername);
        return this;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @return Not supported by Neptune.
     */

    public java.util.List<DBClusterOptionGroupStatus> getDBClusterOptionGroupMemberships() {
        return dBClusterOptionGroupMemberships;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param dBClusterOptionGroupMemberships
     *        Not supported by Neptune.
     */

    public void setDBClusterOptionGroupMemberships(java.util.Collection<DBClusterOptionGroupStatus> dBClusterOptionGroupMemberships) {
        if (dBClusterOptionGroupMemberships == null) {
            this.dBClusterOptionGroupMemberships = null;
            return;
        }

        this.dBClusterOptionGroupMemberships = new java.util.ArrayList<DBClusterOptionGroupStatus>(dBClusterOptionGroupMemberships);
    }

    /**
     *

     * Not supported by Neptune.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setDBClusterOptionGroupMemberships(java.util.Collection)} or
     * {@link #withDBClusterOptionGroupMemberships(java.util.Collection)} if you want to override the existing values.
     *

     *
     * @param dBClusterOptionGroupMemberships
     *        Not supported by Neptune.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterOptionGroupMemberships(DBClusterOptionGroupStatus... dBClusterOptionGroupMemberships) {
        if (this.dBClusterOptionGroupMemberships == null) {
            setDBClusterOptionGroupMemberships(new java.util.ArrayList<DBClusterOptionGroupStatus>(dBClusterOptionGroupMemberships.length));
        }
        for (DBClusterOptionGroupStatus ele : dBClusterOptionGroupMemberships) {
            this.dBClusterOptionGroupMemberships.add(ele);
        }
        return this;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param dBClusterOptionGroupMemberships
     *        Not supported by Neptune.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterOptionGroupMemberships(java.util.Collection<DBClusterOptionGroupStatus> dBClusterOptionGroupMemberships) {
        setDBClusterOptionGroupMemberships(dBClusterOptionGroupMemberships);
        return this;
    }

    /**
     *

     * Specifies the daily time range during which automated backups are created if automated backups are enabled, as
     * determined by the BackupRetentionPeriod.
     *

     *
     * @param preferredBackupWindow
     *        Specifies the daily time range during which automated backups are created if automated backups are
     *        enabled, as determined by the BackupRetentionPeriod.
     */

    public void setPreferredBackupWindow(String preferredBackupWindow) {
        this.preferredBackupWindow = preferredBackupWindow;
    }

    /**
     *

     * Specifies the daily time range during which automated backups are created if automated backups are enabled, as
     * determined by the BackupRetentionPeriod.
     *

     *
     * @return Specifies the daily time range during which automated backups are created if automated backups are
     *         enabled, as determined by the BackupRetentionPeriod.
     */

    public String getPreferredBackupWindow() {
        return this.preferredBackupWindow;
    }

    /**
     *

     * Specifies the daily time range during which automated backups are created if automated backups are enabled, as
     * determined by the BackupRetentionPeriod.
     *

     *
     * @param preferredBackupWindow
     *        Specifies the daily time range during which automated backups are created if automated backups are
     *        enabled, as determined by the BackupRetentionPeriod.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withPreferredBackupWindow(String preferredBackupWindow) {
        setPreferredBackupWindow(preferredBackupWindow);
        return this;
    }

    /**
     *

     * Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
     *

     *
     * @param preferredMaintenanceWindow
     *        Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time
     *        (UTC).
     */

    public void setPreferredMaintenanceWindow(String preferredMaintenanceWindow) {
        this.preferredMaintenanceWindow = preferredMaintenanceWindow;
    }

    /**
     *

     * Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
     *

     *
     * @return Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time
     *         (UTC).
     */

    public String getPreferredMaintenanceWindow() {
        return this.preferredMaintenanceWindow;
    }

    /**
     *

     * Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
     *

     *
     * @param preferredMaintenanceWindow
     *        Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time
     *        (UTC).
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withPreferredMaintenanceWindow(String preferredMaintenanceWindow) {
        setPreferredMaintenanceWindow(preferredMaintenanceWindow);
        return this;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param replicationSourceIdentifier
     *        Not supported by Neptune.
     */

    public void setReplicationSourceIdentifier(String replicationSourceIdentifier) {
        this.replicationSourceIdentifier = replicationSourceIdentifier;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @return Not supported by Neptune.
     */

    public String getReplicationSourceIdentifier() {
        return this.replicationSourceIdentifier;
    }

    /**
     *

     * Not supported by Neptune.
     *

     *
     * @param replicationSourceIdentifier
     *        Not supported by Neptune.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withReplicationSourceIdentifier(String replicationSourceIdentifier) {
        setReplicationSourceIdentifier(replicationSourceIdentifier);
        return this;
    }

    /**
     *

     * Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     *

     *
     * @return Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     */

    public java.util.List<String> getReadReplicaIdentifiers() {
        return readReplicaIdentifiers;
    }

    /**
     *

     * Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     *

     *
     * @param readReplicaIdentifiers
     *        Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     */

    public void setReadReplicaIdentifiers(java.util.Collection<String> readReplicaIdentifiers) {
        if (readReplicaIdentifiers == null) {
            this.readReplicaIdentifiers = null;
            return;
        }

        this.readReplicaIdentifiers = new java.util.ArrayList<String>(readReplicaIdentifiers);
    }

    /**
     *

     * Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setReadReplicaIdentifiers(java.util.Collection)} or
     * {@link #withReadReplicaIdentifiers(java.util.Collection)} if you want to override the existing values.
     *

     *
     * @param readReplicaIdentifiers
     *        Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withReadReplicaIdentifiers(String... readReplicaIdentifiers) {
        if (this.readReplicaIdentifiers == null) {
            setReadReplicaIdentifiers(new java.util.ArrayList<String>(readReplicaIdentifiers.length));
        }
        for (String ele : readReplicaIdentifiers) {
            this.readReplicaIdentifiers.add(ele);
        }
        return this;
    }

    /**
     *

     * Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     *

     *
     * @param readReplicaIdentifiers
     *        Contains one or more identifiers of the Read Replicas associated with this DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withReadReplicaIdentifiers(java.util.Collection<String> readReplicaIdentifiers) {
        setReadReplicaIdentifiers(readReplicaIdentifiers);
        return this;
    }

    /**
     *

     * Provides the list of instances that make up the DB cluster.
     *

     *
     * @return Provides the list of instances that make up the DB cluster.
     */

    public java.util.List<DBClusterMember> getDBClusterMembers() {
        return dBClusterMembers;
    }

    /**
     *

     * Provides the list of instances that make up the DB cluster.
     *

     *
     * @param dBClusterMembers
     *        Provides the list of instances that make up the DB cluster.
     */

    public void setDBClusterMembers(java.util.Collection<DBClusterMember> dBClusterMembers) {
        if (dBClusterMembers == null) {
            this.dBClusterMembers = null;
            return;
        }

        this.dBClusterMembers = new java.util.ArrayList<DBClusterMember>(dBClusterMembers);
    }

    /**
     *

     * Provides the list of instances that make up the DB cluster.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setDBClusterMembers(java.util.Collection)} or {@link #withDBClusterMembers(java.util.Collection)} if you
     * want to override the existing values.
     *

     *
     * @param dBClusterMembers
     *        Provides the list of instances that make up the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterMembers(DBClusterMember... dBClusterMembers) {
        if (this.dBClusterMembers == null) {
            setDBClusterMembers(new java.util.ArrayList<DBClusterMember>(dBClusterMembers.length));
        }
        for (DBClusterMember ele : dBClusterMembers) {
            this.dBClusterMembers.add(ele);
        }
        return this;
    }

    /**
     *

     * Provides the list of instances that make up the DB cluster.
     *

     *
     * @param dBClusterMembers
     *        Provides the list of instances that make up the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterMembers(java.util.Collection<DBClusterMember> dBClusterMembers) {
        setDBClusterMembers(dBClusterMembers);
        return this;
    }

    /**
     *

     * Provides a list of VPC security groups that the DB cluster belongs to.
     *

     *
     * @return Provides a list of VPC security groups that the DB cluster belongs to.
     */

    public java.util.List<VpcSecurityGroupMembership> getVpcSecurityGroups() {
        return vpcSecurityGroups;
    }

    /**
     *

     * Provides a list of VPC security groups that the DB cluster belongs to.
     *

     *
     * @param vpcSecurityGroups
     *        Provides a list of VPC security groups that the DB cluster belongs to.
     */

    public void setVpcSecurityGroups(java.util.Collection<VpcSecurityGroupMembership> vpcSecurityGroups) {
        if (vpcSecurityGroups == null) {
            this.vpcSecurityGroups = null;
            return;
        }

        this.vpcSecurityGroups = new java.util.ArrayList<VpcSecurityGroupMembership>(vpcSecurityGroups);
    }

    /**
     *

     * Provides a list of VPC security groups that the DB cluster belongs to.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setVpcSecurityGroups(java.util.Collection)} or {@link #withVpcSecurityGroups(java.util.Collection)} if
     * you want to override the existing values.
     *

     *
     * @param vpcSecurityGroups
     *        Provides a list of VPC security groups that the DB cluster belongs to.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withVpcSecurityGroups(VpcSecurityGroupMembership... vpcSecurityGroups) {
        if (this.vpcSecurityGroups == null) {
            setVpcSecurityGroups(new java.util.ArrayList<VpcSecurityGroupMembership>(vpcSecurityGroups.length));
        }
        for (VpcSecurityGroupMembership ele : vpcSecurityGroups) {
            this.vpcSecurityGroups.add(ele);
        }
        return this;
    }

    /**
     *

     * Provides a list of VPC security groups that the DB cluster belongs to.
     *

     *
     * @param vpcSecurityGroups
     *        Provides a list of VPC security groups that the DB cluster belongs to.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withVpcSecurityGroups(java.util.Collection<VpcSecurityGroupMembership> vpcSecurityGroups) {
        setVpcSecurityGroups(vpcSecurityGroups);
        return this;
    }

    /**
     *

     * Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     *

     *
     * @param hostedZoneId
     *        Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     */

    public void setHostedZoneId(String hostedZoneId) {
        this.hostedZoneId = hostedZoneId;
    }

    /**
     *

     * Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     *

     *
     * @return Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     */

    public String getHostedZoneId() {
        return this.hostedZoneId;
    }

    /**
     *

     * Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     *

     *
     * @param hostedZoneId
     *        Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withHostedZoneId(String hostedZoneId) {
        setHostedZoneId(hostedZoneId);
        return this;
    }

    /**
     *

     * Specifies whether the DB cluster is encrypted.
     *

     *
     * @param storageEncrypted
     *        Specifies whether the DB cluster is encrypted.
     */

    public void setStorageEncrypted(Boolean storageEncrypted) {
        this.storageEncrypted = storageEncrypted;
    }

    /**
     *

     * Specifies whether the DB cluster is encrypted.
     *

     *
     * @return Specifies whether the DB cluster is encrypted.
     */

    public Boolean getStorageEncrypted() {
        return this.storageEncrypted;
    }

    /**
     *

     * Specifies whether the DB cluster is encrypted.
     *

     *
     * @param storageEncrypted
     *        Specifies whether the DB cluster is encrypted.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withStorageEncrypted(Boolean storageEncrypted) {
        setStorageEncrypted(storageEncrypted);
        return this;
    }

    /**
     *

     * Specifies whether the DB cluster is encrypted.
     *

     *
     * @return Specifies whether the DB cluster is encrypted.
     */

    public Boolean isStorageEncrypted() {
        return this.storageEncrypted;
    }

    /**
     *

     * If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     *

     *
     * @param kmsKeyId
     *        If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     */

    public void setKmsKeyId(String kmsKeyId) {
        this.kmsKeyId = kmsKeyId;
    }

    /**
     *

     * If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     *

     *
     * @return If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     */

    public String getKmsKeyId() {
        return this.kmsKeyId;
    }

    /**
     *

     * If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     *

     *
     * @param kmsKeyId
     *        If StorageEncrypted is true, the Amazon KMS key identifier for the encrypted DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withKmsKeyId(String kmsKeyId) {
        setKmsKeyId(kmsKeyId);
        return this;
    }

    /**
     *

     * The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon CloudTrail
     * log entries whenever the Amazon KMS key for the DB cluster is accessed.
     *

     *
     * @param dbClusterResourceId
     *        The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon
     *        CloudTrail log entries whenever the Amazon KMS key for the DB cluster is accessed.
     */

    public void setDbClusterResourceId(String dbClusterResourceId) {
        this.dbClusterResourceId = dbClusterResourceId;
    }

    /**
     *

     * The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon CloudTrail
     * log entries whenever the Amazon KMS key for the DB cluster is accessed.
     *

     *
     * @return The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon
     *         CloudTrail log entries whenever the Amazon KMS key for the DB cluster is accessed.
     */

    public String getDbClusterResourceId() {
        return this.dbClusterResourceId;
    }

    /**
     *

     * The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon CloudTrail
     * log entries whenever the Amazon KMS key for the DB cluster is accessed.
     *

     *
     * @param dbClusterResourceId
     *        The Amazon Region-unique, immutable identifier for the DB cluster. This identifier is found in Amazon
     *        CloudTrail log entries whenever the Amazon KMS key for the DB cluster is accessed.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDbClusterResourceId(String dbClusterResourceId) {
        setDbClusterResourceId(dbClusterResourceId);
        return this;
    }

    /**
     *

     * The Amazon Resource Name (ARN) for the DB cluster.
     *

     *
     * @param dBClusterArn
     *        The Amazon Resource Name (ARN) for the DB cluster.
     */

    public void setDBClusterArn(String dBClusterArn) {
        this.dBClusterArn = dBClusterArn;
    }

    /**
     *

     * The Amazon Resource Name (ARN) for the DB cluster.
     *

     *
     * @return The Amazon Resource Name (ARN) for the DB cluster.
     */

    public String getDBClusterArn() {
        return this.dBClusterArn;
    }

    /**
     *

     * The Amazon Resource Name (ARN) for the DB cluster.
     *

     *
     * @param dBClusterArn
     *        The Amazon Resource Name (ARN) for the DB cluster.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDBClusterArn(String dBClusterArn) {
        setDBClusterArn(dBClusterArn);
        return this;
    }

    /**
     *

     * Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB cluster.
     * IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other Amazon
     * services on your behalf.
     *

     *
     * @return Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB
     *         cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access
     *         other Amazon services on your behalf.
     */

    public java.util.List<DBClusterRole> getAssociatedRoles() {
        return associatedRoles;
    }

    /**
     *

     * Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB cluster.
     * IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other Amazon
     * services on your behalf.
     *

     *
     * @param associatedRoles
     *        Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB
     *        cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access
     *        other Amazon services on your behalf.
     */

    public void setAssociatedRoles(java.util.Collection<DBClusterRole> associatedRoles) {
        if (associatedRoles == null) {
            this.associatedRoles = null;
            return;
        }

        this.associatedRoles = new java.util.ArrayList<DBClusterRole>(associatedRoles);
    }

    /**
     *

     * Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB cluster.
     * IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other Amazon
     * services on your behalf.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setAssociatedRoles(java.util.Collection)} or {@link #withAssociatedRoles(java.util.Collection)} if you
     * want to override the existing values.
     *

     *
     * @param associatedRoles
     *        Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB
     *        cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access
     *        other Amazon services on your behalf.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAssociatedRoles(DBClusterRole... associatedRoles) {
        if (this.associatedRoles == null) {
            setAssociatedRoles(new java.util.ArrayList<DBClusterRole>(associatedRoles.length));
        }
        for (DBClusterRole ele : associatedRoles) {
            this.associatedRoles.add(ele);
        }
        return this;
    }

    /**
     *

     * Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB cluster.
     * IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other Amazon
     * services on your behalf.
     *

     *
     * @param associatedRoles
     *        Provides a list of the Amazon Identity and Access Management (IAM) roles that are associated with the DB
     *        cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access
     *        other Amazon services on your behalf.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAssociatedRoles(java.util.Collection<DBClusterRole> associatedRoles) {
        setAssociatedRoles(associatedRoles);
        return this;
    }

    /**
     *

     * True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and
     * otherwise false.
     *

     *
     * @param iAMDatabaseAuthenticationEnabled
     *        True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled,
     *        and otherwise false.
     */

    public void setIAMDatabaseAuthenticationEnabled(Boolean iAMDatabaseAuthenticationEnabled) {
        this.iAMDatabaseAuthenticationEnabled = iAMDatabaseAuthenticationEnabled;
    }

    /**
     *

     * True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and
     * otherwise false.
     *

     *
     * @return True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled,
     *         and otherwise false.
     */

    public Boolean getIAMDatabaseAuthenticationEnabled() {
        return this.iAMDatabaseAuthenticationEnabled;
    }

    /**
     *

     * True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and
     * otherwise false.
     *

     *
     * @param iAMDatabaseAuthenticationEnabled
     *        True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled,
     *        and otherwise false.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withIAMDatabaseAuthenticationEnabled(Boolean iAMDatabaseAuthenticationEnabled) {
        setIAMDatabaseAuthenticationEnabled(iAMDatabaseAuthenticationEnabled);
        return this;
    }

    /**
     *

     * True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and
     * otherwise false.
     *

     *
     * @return True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled,
     *         and otherwise false.
     */

    public Boolean isIAMDatabaseAuthenticationEnabled() {
        return this.iAMDatabaseAuthenticationEnabled;
    }

    /**
     *

     * Identifies the clone group to which the DB cluster is associated.
     *

     *
     * @param cloneGroupId
     *        Identifies the clone group to which the DB cluster is associated.
     */

    public void setCloneGroupId(String cloneGroupId) {
        this.cloneGroupId = cloneGroupId;
    }

    /**
     *

     * Identifies the clone group to which the DB cluster is associated.
     *

     *
     * @return Identifies the clone group to which the DB cluster is associated.
     */

    public String getCloneGroupId() {
        return this.cloneGroupId;
    }

    /**
     *

     * Identifies the clone group to which the DB cluster is associated.
     *

     *
     * @param cloneGroupId
     *        Identifies the clone group to which the DB cluster is associated.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withCloneGroupId(String cloneGroupId) {
        setCloneGroupId(cloneGroupId);
        return this;
    }

    /**
     *

     * Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     *

     *
     * @param clusterCreateTime
     *        Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     */

    public void setClusterCreateTime(java.util.Date clusterCreateTime) {
        this.clusterCreateTime = clusterCreateTime;
    }

    /**
     *

     * Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     *

     *
     * @return Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     */

    public java.util.Date getClusterCreateTime() {
        return this.clusterCreateTime;
    }

    /**
     *

     * Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     *

     *
     * @param clusterCreateTime
     *        Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withClusterCreateTime(java.util.Date clusterCreateTime) {
        setClusterCreateTime(clusterCreateTime);
        return this;
    }

    /**
     *

     * If set to true, tags are copied to any snapshot of the DB cluster that is created.
     *

     *
     * @param copyTagsToSnapshot
     *        If set to true, tags are copied to any snapshot of the DB cluster that is created.
     */

    public void setCopyTagsToSnapshot(Boolean copyTagsToSnapshot) {
        this.copyTagsToSnapshot = copyTagsToSnapshot;
    }

    /**
     *

     * If set to true, tags are copied to any snapshot of the DB cluster that is created.
     *

     *
     * @return If set to true, tags are copied to any snapshot of the DB cluster that is created.
     */

    public Boolean getCopyTagsToSnapshot() {
        return this.copyTagsToSnapshot;
    }

    /**
     *

     * If set to true, tags are copied to any snapshot of the DB cluster that is created.
     *

     *
     * @param copyTagsToSnapshot
     *        If set to true, tags are copied to any snapshot of the DB cluster that is created.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withCopyTagsToSnapshot(Boolean copyTagsToSnapshot) {
        setCopyTagsToSnapshot(copyTagsToSnapshot);
        return this;
    }

    /**
     *

     * If set to true, tags are copied to any snapshot of the DB cluster that is created.
     *

     *
     * @return If set to true, tags are copied to any snapshot of the DB cluster that is created.
     */

    public Boolean isCopyTagsToSnapshot() {
        return this.copyTagsToSnapshot;
    }

    /**
     *

     * A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     *

     *
     * @return A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     */

    public java.util.List<String> getEnabledCloudwatchLogsExports() {
        return enabledCloudwatchLogsExports;
    }

    /**
     *

     * A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     *

     *
     * @param enabledCloudwatchLogsExports
     *        A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     */

    public void setEnabledCloudwatchLogsExports(java.util.Collection<String> enabledCloudwatchLogsExports) {
        if (enabledCloudwatchLogsExports == null) {
            this.enabledCloudwatchLogsExports = null;
            return;
        }

        this.enabledCloudwatchLogsExports = new java.util.ArrayList<String>(enabledCloudwatchLogsExports);
    }

    /**
     *

     * A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     *

     *

     * NOTE: This method appends the values to the existing list (if any). Use
     * {@link #setEnabledCloudwatchLogsExports(java.util.Collection)} or
     * {@link #withEnabledCloudwatchLogsExports(java.util.Collection)} if you want to override the existing values.
     *

     *
     * @param enabledCloudwatchLogsExports
     *        A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEnabledCloudwatchLogsExports(String... enabledCloudwatchLogsExports) {
        if (this.enabledCloudwatchLogsExports == null) {
            setEnabledCloudwatchLogsExports(new java.util.ArrayList<String>(enabledCloudwatchLogsExports.length));
        }
        for (String ele : enabledCloudwatchLogsExports) {
            this.enabledCloudwatchLogsExports.add(ele);
        }
        return this;
    }

    /**
     *

     * A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     *

     *
     * @param enabledCloudwatchLogsExports
     *        A list of log types that this DB cluster is configured to export to CloudWatch Logs.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withEnabledCloudwatchLogsExports(java.util.Collection<String> enabledCloudwatchLogsExports) {
        setEnabledCloudwatchLogsExports(enabledCloudwatchLogsExports);
        return this;
    }

    /**
     *

     * Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when
     * deletion protection is enabled.
     *

     *
     * @param deletionProtection
     *        Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted
     *        when deletion protection is enabled.
     */

    public void setDeletionProtection(Boolean deletionProtection) {
        this.deletionProtection = deletionProtection;
    }

    /**
     *

     * Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when
     * deletion protection is enabled.
     *

     *
     * @return Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted
     *         when deletion protection is enabled.
     */

    public Boolean getDeletionProtection() {
        return this.deletionProtection;
    }

    /**
     *

     * Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when
     * deletion protection is enabled.
     *

     *
     * @param deletionProtection
     *        Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted
     *        when deletion protection is enabled.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withDeletionProtection(Boolean deletionProtection) {
        setDeletionProtection(deletionProtection);
        return this;
    }

    /**
     *

     * Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when
     * deletion protection is enabled.
     *

     *
     * @return Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted
     *         when deletion protection is enabled.
     */

    public Boolean isDeletionProtection() {
        return this.deletionProtection;
    }

    /**
     *

     * If set to true, the DB cluster can be cloned across accounts.
     *

     *
     * @param crossAccountClone
     *        If set to true, the DB cluster can be cloned across accounts.
     */

    public void setCrossAccountClone(Boolean crossAccountClone) {
        this.crossAccountClone = crossAccountClone;
    }

    /**
     *

     * If set to true, the DB cluster can be cloned across accounts.
     *

     *
     * @return If set to true, the DB cluster can be cloned across accounts.
     */

    public Boolean getCrossAccountClone() {
        return this.crossAccountClone;
    }

    /**
     *

     * If set to true, the DB cluster can be cloned across accounts.
     *

     *
     * @param crossAccountClone
     *        If set to true, the DB cluster can be cloned across accounts.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withCrossAccountClone(Boolean crossAccountClone) {
        setCrossAccountClone(crossAccountClone);
        return this;
    }

    /**
     *

     * If set to true, the DB cluster can be cloned across accounts.
     *

     *
     * @return If set to true, the DB cluster can be cloned across accounts.
     */

    public Boolean isCrossAccountClone() {
        return this.crossAccountClone;
    }

    /**
     *

     * Time at which the DB cluster will be automatically restarted.
     *

     *
     * @param automaticRestartTime
     *        Time at which the DB cluster will be automatically restarted.
     */

    public void setAutomaticRestartTime(java.util.Date automaticRestartTime) {
        this.automaticRestartTime = automaticRestartTime;
    }

    /**
     *

     * Time at which the DB cluster will be automatically restarted.
     *

     *
     * @return Time at which the DB cluster will be automatically restarted.
     */

    public java.util.Date getAutomaticRestartTime() {
        return this.automaticRestartTime;
    }

    /**
     *

     * Time at which the DB cluster will be automatically restarted.
     *

     *
     * @param automaticRestartTime
     *        Time at which the DB cluster will be automatically restarted.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withAutomaticRestartTime(java.util.Date automaticRestartTime) {
        setAutomaticRestartTime(automaticRestartTime);
        return this;
    }

    /**
     * @param serverlessV2ScalingConfiguration
     */

    public void setServerlessV2ScalingConfiguration(ServerlessV2ScalingConfigurationInfo serverlessV2ScalingConfiguration) {
        this.serverlessV2ScalingConfiguration = serverlessV2ScalingConfiguration;
    }

    /**
     * @return
     */

    public ServerlessV2ScalingConfigurationInfo getServerlessV2ScalingConfiguration() {
        return this.serverlessV2ScalingConfiguration;
    }

    /**
     * @param serverlessV2ScalingConfiguration
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DBCluster withServerlessV2ScalingConfiguration(ServerlessV2ScalingConfigurationInfo serverlessV2ScalingConfiguration) {
        setServerlessV2ScalingConfiguration(serverlessV2ScalingConfiguration);
        return this;
    }

    /**
     * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
     * redacted from this string using a placeholder value.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getAllocatedStorage() != null)
            sb.append("AllocatedStorage: ").append(getAllocatedStorage()).append(",");
        if (getAvailabilityZones() != null)
            sb.append("AvailabilityZones: ").append(getAvailabilityZones()).append(",");
        if (getBackupRetentionPeriod() != null)
            sb.append("BackupRetentionPeriod: ").append(getBackupRetentionPeriod()).append(",");
        if (getCharacterSetName() != null)
            sb.append("CharacterSetName: ").append(getCharacterSetName()).append(",");
        if (getDatabaseName() != null)
            sb.append("DatabaseName: ").append(getDatabaseName()).append(",");
        if (getDBClusterIdentifier() != null)
            sb.append("DBClusterIdentifier: ").append(getDBClusterIdentifier()).append(",");
        if (getDBClusterParameterGroup() != null)
            sb.append("DBClusterParameterGroup: ").append(getDBClusterParameterGroup()).append(",");
        if (getDBSubnetGroup() != null)
            sb.append("DBSubnetGroup: ").append(getDBSubnetGroup()).append(",");
        if (getStatus() != null)
            sb.append("Status: ").append(getStatus()).append(",");
        if (getPercentProgress() != null)
            sb.append("PercentProgress: ").append(getPercentProgress()).append(",");
        if (getEarliestRestorableTime() != null)
            sb.append("EarliestRestorableTime: ").append(getEarliestRestorableTime()).append(",");
        if (getEndpoint() != null)
            sb.append("Endpoint: ").append(getEndpoint()).append(",");
        if (getReaderEndpoint() != null)
            sb.append("ReaderEndpoint: ").append(getReaderEndpoint()).append(",");
        if (getMultiAZ() != null)
            sb.append("MultiAZ: ").append(getMultiAZ()).append(",");
        if (getEngine() != null)
            sb.append("Engine: ").append(getEngine()).append(",");
        if (getEngineVersion() != null)
            sb.append("EngineVersion: ").append(getEngineVersion()).append(",");
        if (getLatestRestorableTime() != null)
            sb.append("LatestRestorableTime: ").append(getLatestRestorableTime()).append(",");
        if (getPort() != null)
            sb.append("Port: ").append(getPort()).append(",");
        if (getMasterUsername() != null)
            sb.append("MasterUsername: ").append(getMasterUsername()).append(",");
        if (getDBClusterOptionGroupMemberships() != null)
            sb.append("DBClusterOptionGroupMemberships: ").append(getDBClusterOptionGroupMemberships()).append(",");
        if (getPreferredBackupWindow() != null)
            sb.append("PreferredBackupWindow: ").append(getPreferredBackupWindow()).append(",");
        if (getPreferredMaintenanceWindow() != null)
            sb.append("PreferredMaintenanceWindow: ").append(getPreferredMaintenanceWindow()).append(",");
        if (getReplicationSourceIdentifier() != null)
            sb.append("ReplicationSourceIdentifier: ").append(getReplicationSourceIdentifier()).append(",");
        if (getReadReplicaIdentifiers() != null)
            sb.append("ReadReplicaIdentifiers: ").append(getReadReplicaIdentifiers()).append(",");
        if (getDBClusterMembers() != null)
            sb.append("DBClusterMembers: ").append(getDBClusterMembers()).append(",");
        if (getVpcSecurityGroups() != null)
            sb.append("VpcSecurityGroups: ").append(getVpcSecurityGroups()).append(",");
        if (getHostedZoneId() != null)
            sb.append("HostedZoneId: ").append(getHostedZoneId()).append(",");
        if (getStorageEncrypted() != null)
            sb.append("StorageEncrypted: ").append(getStorageEncrypted()).append(",");
        if (getKmsKeyId() != null)
            sb.append("KmsKeyId: ").append(getKmsKeyId()).append(",");
        if (getDbClusterResourceId() != null)
            sb.append("DbClusterResourceId: ").append(getDbClusterResourceId()).append(",");
        if (getDBClusterArn() != null)
            sb.append("DBClusterArn: ").append(getDBClusterArn()).append(",");
        if (getAssociatedRoles() != null)
            sb.append("AssociatedRoles: ").append(getAssociatedRoles()).append(",");
        if (getIAMDatabaseAuthenticationEnabled() != null)
            sb.append("IAMDatabaseAuthenticationEnabled: ").append(getIAMDatabaseAuthenticationEnabled()).append(",");
        if (getCloneGroupId() != null)
            sb.append("CloneGroupId: ").append(getCloneGroupId()).append(",");
        if (getClusterCreateTime() != null)
            sb.append("ClusterCreateTime: ").append(getClusterCreateTime()).append(",");
        if (getCopyTagsToSnapshot() != null)
            sb.append("CopyTagsToSnapshot: ").append(getCopyTagsToSnapshot()).append(",");
        if (getEnabledCloudwatchLogsExports() != null)
            sb.append("EnabledCloudwatchLogsExports: ").append(getEnabledCloudwatchLogsExports()).append(",");
        if (getDeletionProtection() != null)
            sb.append("DeletionProtection: ").append(getDeletionProtection()).append(",");
        if (getCrossAccountClone() != null)
            sb.append("CrossAccountClone: ").append(getCrossAccountClone()).append(",");
        if (getAutomaticRestartTime() != null)
            sb.append("AutomaticRestartTime: ").append(getAutomaticRestartTime()).append(",");
        if (getServerlessV2ScalingConfiguration() != null)
            sb.append("ServerlessV2ScalingConfiguration: ").append(getServerlessV2ScalingConfiguration());
        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof DBCluster == false)
            return false;
        DBCluster other = (DBCluster) obj;
        if (other.getAllocatedStorage() == null ^ this.getAllocatedStorage() == null)
            return false;
        if (other.getAllocatedStorage() != null && other.getAllocatedStorage().equals(this.getAllocatedStorage()) == false)
            return false;
        if (other.getAvailabilityZones() == null ^ this.getAvailabilityZones() == null)
            return false;
        if (other.getAvailabilityZones() != null && other.getAvailabilityZones().equals(this.getAvailabilityZones()) == false)
            return false;
        if (other.getBackupRetentionPeriod() == null ^ this.getBackupRetentionPeriod() == null)
            return false;
        if (other.getBackupRetentionPeriod() != null && other.getBackupRetentionPeriod().equals(this.getBackupRetentionPeriod()) == false)
            return false;
        if (other.getCharacterSetName() == null ^ this.getCharacterSetName() == null)
            return false;
        if (other.getCharacterSetName() != null && other.getCharacterSetName().equals(this.getCharacterSetName()) == false)
            return false;
        if (other.getDatabaseName() == null ^ this.getDatabaseName() == null)
            return false;
        if (other.getDatabaseName() != null && other.getDatabaseName().equals(this.getDatabaseName()) == false)
            return false;
        if (other.getDBClusterIdentifier() == null ^ this.getDBClusterIdentifier() == null)
            return false;
        if (other.getDBClusterIdentifier() != null && other.getDBClusterIdentifier().equals(this.getDBClusterIdentifier()) == false)
            return false;
        if (other.getDBClusterParameterGroup() == null ^ this.getDBClusterParameterGroup() == null)
            return false;
        if (other.getDBClusterParameterGroup() != null && other.getDBClusterParameterGroup().equals(this.getDBClusterParameterGroup()) == false)
            return false;
        if (other.getDBSubnetGroup() == null ^ this.getDBSubnetGroup() == null)
            return false;
        if (other.getDBSubnetGroup() != null && other.getDBSubnetGroup().equals(this.getDBSubnetGroup()) == false)
            return false;
        if (other.getStatus() == null ^ this.getStatus() == null)
            return false;
        if (other.getStatus() != null && other.getStatus().equals(this.getStatus()) == false)
            return false;
        if (other.getPercentProgress() == null ^ this.getPercentProgress() == null)
            return false;
        if (other.getPercentProgress() != null && other.getPercentProgress().equals(this.getPercentProgress()) == false)
            return false;
        if (other.getEarliestRestorableTime() == null ^ this.getEarliestRestorableTime() == null)
            return false;
        if (other.getEarliestRestorableTime() != null && other.getEarliestRestorableTime().equals(this.getEarliestRestorableTime()) == false)
            return false;
        if (other.getEndpoint() == null ^ this.getEndpoint() == null)
            return false;
        if (other.getEndpoint() != null && other.getEndpoint().equals(this.getEndpoint()) == false)
            return false;
        if (other.getReaderEndpoint() == null ^ this.getReaderEndpoint() == null)
            return false;
        if (other.getReaderEndpoint() != null && other.getReaderEndpoint().equals(this.getReaderEndpoint()) == false)
            return false;
        if (other.getMultiAZ() == null ^ this.getMultiAZ() == null)
            return false;
        if (other.getMultiAZ() != null && other.getMultiAZ().equals(this.getMultiAZ()) == false)
            return false;
        if (other.getEngine() == null ^ this.getEngine() == null)
            return false;
        if (other.getEngine() != null && other.getEngine().equals(this.getEngine()) == false)
            return false;
        if (other.getEngineVersion() == null ^ this.getEngineVersion() == null)
            return false;
        if (other.getEngineVersion() != null && other.getEngineVersion().equals(this.getEngineVersion()) == false)
            return false;
        if (other.getLatestRestorableTime() == null ^ this.getLatestRestorableTime() == null)
            return false;
        if (other.getLatestRestorableTime() != null && other.getLatestRestorableTime().equals(this.getLatestRestorableTime()) == false)
            return false;
        if (other.getPort() == null ^ this.getPort() == null)
            return false;
        if (other.getPort() != null && other.getPort().equals(this.getPort()) == false)
            return false;
        if (other.getMasterUsername() == null ^ this.getMasterUsername() == null)
            return false;
        if (other.getMasterUsername() != null && other.getMasterUsername().equals(this.getMasterUsername()) == false)
            return false;
        if (other.getDBClusterOptionGroupMemberships() == null ^ this.getDBClusterOptionGroupMemberships() == null)
            return false;
        if (other.getDBClusterOptionGroupMemberships() != null
                && other.getDBClusterOptionGroupMemberships().equals(this.getDBClusterOptionGroupMemberships()) == false)
            return false;
        if (other.getPreferredBackupWindow() == null ^ this.getPreferredBackupWindow() == null)
            return false;
        if (other.getPreferredBackupWindow() != null && other.getPreferredBackupWindow().equals(this.getPreferredBackupWindow()) == false)
            return false;
        if (other.getPreferredMaintenanceWindow() == null ^ this.getPreferredMaintenanceWindow() == null)
            return false;
        if (other.getPreferredMaintenanceWindow() != null && other.getPreferredMaintenanceWindow().equals(this.getPreferredMaintenanceWindow()) == false)
            return false;
        if (other.getReplicationSourceIdentifier() == null ^ this.getReplicationSourceIdentifier() == null)
            return false;
        if (other.getReplicationSourceIdentifier() != null && other.getReplicationSourceIdentifier().equals(this.getReplicationSourceIdentifier()) == false)
            return false;
        if (other.getReadReplicaIdentifiers() == null ^ this.getReadReplicaIdentifiers() == null)
            return false;
        if (other.getReadReplicaIdentifiers() != null && other.getReadReplicaIdentifiers().equals(this.getReadReplicaIdentifiers()) == false)
            return false;
        if (other.getDBClusterMembers() == null ^ this.getDBClusterMembers() == null)
            return false;
        if (other.getDBClusterMembers() != null && other.getDBClusterMembers().equals(this.getDBClusterMembers()) == false)
            return false;
        if (other.getVpcSecurityGroups() == null ^ this.getVpcSecurityGroups() == null)
            return false;
        if (other.getVpcSecurityGroups() != null && other.getVpcSecurityGroups().equals(this.getVpcSecurityGroups()) == false)
            return false;
        if (other.getHostedZoneId() == null ^ this.getHostedZoneId() == null)
            return false;
        if (other.getHostedZoneId() != null && other.getHostedZoneId().equals(this.getHostedZoneId()) == false)
            return false;
        if (other.getStorageEncrypted() == null ^ this.getStorageEncrypted() == null)
            return false;
        if (other.getStorageEncrypted() != null && other.getStorageEncrypted().equals(this.getStorageEncrypted()) == false)
            return false;
        if (other.getKmsKeyId() == null ^ this.getKmsKeyId() == null)
            return false;
        if (other.getKmsKeyId() != null && other.getKmsKeyId().equals(this.getKmsKeyId()) == false)
            return false;
        if (other.getDbClusterResourceId() == null ^ this.getDbClusterResourceId() == null)
            return false;
        if (other.getDbClusterResourceId() != null && other.getDbClusterResourceId().equals(this.getDbClusterResourceId()) == false)
            return false;
        if (other.getDBClusterArn() == null ^ this.getDBClusterArn() == null)
            return false;
        if (other.getDBClusterArn() != null && other.getDBClusterArn().equals(this.getDBClusterArn()) == false)
            return false;
        if (other.getAssociatedRoles() == null ^ this.getAssociatedRoles() == null)
            return false;
        if (other.getAssociatedRoles() != null && other.getAssociatedRoles().equals(this.getAssociatedRoles()) == false)
            return false;
        if (other.getIAMDatabaseAuthenticationEnabled() == null ^ this.getIAMDatabaseAuthenticationEnabled() == null)
            return false;
        if (other.getIAMDatabaseAuthenticationEnabled() != null
                && other.getIAMDatabaseAuthenticationEnabled().equals(this.getIAMDatabaseAuthenticationEnabled()) == false)
            return false;
        if (other.getCloneGroupId() == null ^ this.getCloneGroupId() == null)
            return false;
        if (other.getCloneGroupId() != null && other.getCloneGroupId().equals(this.getCloneGroupId()) == false)
            return false;
        if (other.getClusterCreateTime() == null ^ this.getClusterCreateTime() == null)
            return false;
        if (other.getClusterCreateTime() != null && other.getClusterCreateTime().equals(this.getClusterCreateTime()) == false)
            return false;
        if (other.getCopyTagsToSnapshot() == null ^ this.getCopyTagsToSnapshot() == null)
            return false;
        if (other.getCopyTagsToSnapshot() != null && other.getCopyTagsToSnapshot().equals(this.getCopyTagsToSnapshot()) == false)
            return false;
        if (other.getEnabledCloudwatchLogsExports() == null ^ this.getEnabledCloudwatchLogsExports() == null)
            return false;
        if (other.getEnabledCloudwatchLogsExports() != null && other.getEnabledCloudwatchLogsExports().equals(this.getEnabledCloudwatchLogsExports()) == false)
            return false;
        if (other.getDeletionProtection() == null ^ this.getDeletionProtection() == null)
            return false;
        if (other.getDeletionProtection() != null && other.getDeletionProtection().equals(this.getDeletionProtection()) == false)
            return false;
        if (other.getCrossAccountClone() == null ^ this.getCrossAccountClone() == null)
            return false;
        if (other.getCrossAccountClone() != null && other.getCrossAccountClone().equals(this.getCrossAccountClone()) == false)
            return false;
        if (other.getAutomaticRestartTime() == null ^ this.getAutomaticRestartTime() == null)
            return false;
        if (other.getAutomaticRestartTime() != null && other.getAutomaticRestartTime().equals(this.getAutomaticRestartTime()) == false)
            return false;
        if (other.getServerlessV2ScalingConfiguration() == null ^ this.getServerlessV2ScalingConfiguration() == null)
            return false;
        if (other.getServerlessV2ScalingConfiguration() != null
                && other.getServerlessV2ScalingConfiguration().equals(this.getServerlessV2ScalingConfiguration()) == false)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;

        hashCode = prime * hashCode + ((getAllocatedStorage() == null) ? 0 : getAllocatedStorage().hashCode());
        hashCode = prime * hashCode + ((getAvailabilityZones() == null) ? 0 : getAvailabilityZones().hashCode());
        hashCode = prime * hashCode + ((getBackupRetentionPeriod() == null) ? 0 : getBackupRetentionPeriod().hashCode());
        hashCode = prime * hashCode + ((getCharacterSetName() == null) ? 0 : getCharacterSetName().hashCode());
        hashCode = prime * hashCode + ((getDatabaseName() == null) ? 0 : getDatabaseName().hashCode());
        hashCode = prime * hashCode + ((getDBClusterIdentifier() == null) ? 0 : getDBClusterIdentifier().hashCode());
        hashCode = prime * hashCode + ((getDBClusterParameterGroup() == null) ? 0 : getDBClusterParameterGroup().hashCode());
        hashCode = prime * hashCode + ((getDBSubnetGroup() == null) ? 0 : getDBSubnetGroup().hashCode());
        hashCode = prime * hashCode + ((getStatus() == null) ? 0 : getStatus().hashCode());
        hashCode = prime * hashCode + ((getPercentProgress() == null) ? 0 : getPercentProgress().hashCode());
        hashCode = prime * hashCode + ((getEarliestRestorableTime() == null) ? 0 : getEarliestRestorableTime().hashCode());
        hashCode = prime * hashCode + ((getEndpoint() == null) ? 0 : getEndpoint().hashCode());
        hashCode = prime * hashCode + ((getReaderEndpoint() == null) ? 0 : getReaderEndpoint().hashCode());
        hashCode = prime * hashCode + ((getMultiAZ() == null) ? 0 : getMultiAZ().hashCode());
        hashCode = prime * hashCode + ((getEngine() == null) ? 0 : getEngine().hashCode());
        hashCode = prime * hashCode + ((getEngineVersion() == null) ? 0 : getEngineVersion().hashCode());
        hashCode = prime * hashCode + ((getLatestRestorableTime() == null) ? 0 : getLatestRestorableTime().hashCode());
        hashCode = prime * hashCode + ((getPort() == null) ? 0 : getPort().hashCode());
        hashCode = prime * hashCode + ((getMasterUsername() == null) ? 0 : getMasterUsername().hashCode());
        hashCode = prime * hashCode + ((getDBClusterOptionGroupMemberships() == null) ? 0 : getDBClusterOptionGroupMemberships().hashCode());
        hashCode = prime * hashCode + ((getPreferredBackupWindow() == null) ? 0 : getPreferredBackupWindow().hashCode());
        hashCode = prime * hashCode + ((getPreferredMaintenanceWindow() == null) ? 0 : getPreferredMaintenanceWindow().hashCode());
        hashCode = prime * hashCode + ((getReplicationSourceIdentifier() == null) ? 0 : getReplicationSourceIdentifier().hashCode());
        hashCode = prime * hashCode + ((getReadReplicaIdentifiers() == null) ? 0 : getReadReplicaIdentifiers().hashCode());
        hashCode = prime * hashCode + ((getDBClusterMembers() == null) ? 0 : getDBClusterMembers().hashCode());
        hashCode = prime * hashCode + ((getVpcSecurityGroups() == null) ? 0 : getVpcSecurityGroups().hashCode());
        hashCode = prime * hashCode + ((getHostedZoneId() == null) ? 0 : getHostedZoneId().hashCode());
        hashCode = prime * hashCode + ((getStorageEncrypted() == null) ? 0 : getStorageEncrypted().hashCode());
        hashCode = prime * hashCode + ((getKmsKeyId() == null) ? 0 : getKmsKeyId().hashCode());
        hashCode = prime * hashCode + ((getDbClusterResourceId() == null) ? 0 : getDbClusterResourceId().hashCode());
        hashCode = prime * hashCode + ((getDBClusterArn() == null) ? 0 : getDBClusterArn().hashCode());
        hashCode = prime * hashCode + ((getAssociatedRoles() == null) ? 0 : getAssociatedRoles().hashCode());
        hashCode = prime * hashCode + ((getIAMDatabaseAuthenticationEnabled() == null) ? 0 : getIAMDatabaseAuthenticationEnabled().hashCode());
        hashCode = prime * hashCode + ((getCloneGroupId() == null) ? 0 : getCloneGroupId().hashCode());
        hashCode = prime * hashCode + ((getClusterCreateTime() == null) ? 0 : getClusterCreateTime().hashCode());
        hashCode = prime * hashCode + ((getCopyTagsToSnapshot() == null) ? 0 : getCopyTagsToSnapshot().hashCode());
        hashCode = prime * hashCode + ((getEnabledCloudwatchLogsExports() == null) ? 0 : getEnabledCloudwatchLogsExports().hashCode());
        hashCode = prime * hashCode + ((getDeletionProtection() == null) ? 0 : getDeletionProtection().hashCode());
        hashCode = prime * hashCode + ((getCrossAccountClone() == null) ? 0 : getCrossAccountClone().hashCode());
        hashCode = prime * hashCode + ((getAutomaticRestartTime() == null) ? 0 : getAutomaticRestartTime().hashCode());
        hashCode = prime * hashCode + ((getServerlessV2ScalingConfiguration() == null) ? 0 : getServerlessV2ScalingConfiguration().hashCode());
        return hashCode;
    }

    @Override
    public DBCluster clone() {
        try {
            return (DBCluster) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException("Got a CloneNotSupportedException from Object.clone() " + "even though we're Cloneable!", e);
        }
    }

}


text:
require 'rails_helper'

describe PubmedHelper do
  let(:document) { SolrDocument.new }
  let(:valid_pubmed_url) { 'http://www.ncbi.nlm.nih.gov/pubmed/23089997?otool=idktudlib' }

  describe '#render_link_to_pubmed?' do
    subject { render_link_to_pubmed?(document) }
    context 'when document has pubmed source' do
      before do
        document['source_ss'] = ['pubmed']
        document['backlink_ss'] = [ backlink ]
      end

      context 'when document has pubmed url' do
        let(:backlink) { valid_pubmed_url }
        it { should be true }
      end

      context 'when document has no pubmed url' do
        let(:backlink) { 'someotherlink.com' }
        it { should be false }
      end
    end

    context 'when document has no pubmed source' do
      it { should be false }
    end
  end

  describe '#link_to_pubmed' do
    subject {  link_to_pubmed(document) }
    context 'when document has pubmed source' do
      before do
        document['source_ss'] = ['pubmed']
        document['backlink_ss'] = [ backlink ]
      end

      context 'when document has pubmed url' do
        let(:backlink) { valid_pubmed_url }
        it 'renders the pubmed link' do
          expect(subject).to have_css('.pubmed-backlink')
        end
      end

      context 'when document has no pubmed url' do
        let(:backlink) { 'someotherlink.com' }
        it 'does not render the pubmed link' do
          expect(subject).to_not have_css('.pubmed-backlink')
        end
      end
    end

    context 'when document has no pubmed source' do
      it 'does not render the pubmed link' do
        expect(subject).to_not have_css('.pubmed-backlink')
      end
    end
  end

end

redpajama_set_name: RedPajamaGithub