/*
 * Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */
package com.amazonaws.services.simpleemailv2.model;

import java.io.Serializable;
import javax.annotation.Generated;
import com.amazonaws.protocol.StructuredPojo;
import com.amazonaws.protocol.ProtocolMarshaller;

/**
 * <p>
 * An object that contains information about the DKIM authentication status for an email identity.
 * </p>
 * <p>
 * Amazon SES determines the authentication status by searching for specific records in the DNS configuration for the
 * domain. If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
 * set up DKIM authentication, Amazon SES tries to find three unique CNAME records in the DNS configuration for your
 * domain. If you provided a public key to perform DKIM authentication, Amazon SES tries to find a TXT record that uses
 * the selector that you specified. The value of the TXT record must be a public key that's paired with the private key
 * that you specified in the process of creating the identity
 * </p>
 * 
 * @see <a href="http://docs.aws.amazon.com/goto/WebAPI/sesv2-2019-09-27/DkimAttributes" target="_top">AWS API
 *      Documentation</a>
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class DkimAttributes implements Serializable, Cloneable, StructuredPojo {

    /**
     * <p>
     * If the value is <code>true</code>, then the messages that you send from the identity are signed using DKIM. If
     * the value is <code>false</code>, then the messages that you send from the identity aren't DKIM-signed.
     * </p>
     */
    private Boolean signingEnabled;
    /**
     * <p>
     * Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the domain.
     * The status can be one of the following:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     * records in the DNS configuration for the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>SUCCESS</code> – The verification process completed successfully.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find the
     * DKIM records in the DNS configuration of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     * authentication status of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     * </p>
     * </li>
     * </ul>
     */
    private String status;
    /**
     * <p>
     * If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
     * configure DKIM authentication for the domain, then this object contains a set of unique strings that you use to
     * create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon SES detects
     * these records in the DNS configuration for your domain, the DKIM authentication process is complete.
     * </p>
     * <p>
     * If you configured DKIM authentication for the domain by providing your own public-private key pair, then this
     * object contains the selector for the public key.
     * </p>
     * <p>
     * Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in the DNS
     * configuration of the domain for up to 72 hours.
     * </p>
     */
    private java.util.List<String> tokens;
    /**
     * <p>
     * A string that indicates how DKIM was configured for the identity. These are the possible values:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     * href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     * (BYODKIM).
     * </p>
     * </li>
     * </ul>
     */
    private String signingAttributesOrigin;
    /**
     * <p>
     * [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.
     * </p>
     */
    private String nextSigningKeyLength;
    /**
     * <p>
     * [Easy DKIM] The key length of the DKIM key pair in use.
     * </p>
     */
    private String currentSigningKeyLength;
    /**
     * <p>
     * [Easy DKIM] The last time a key pair was generated for this identity.
     * </p>
     */
    private java.util.Date lastKeyGenerationTimestamp;

    /**
     * <p>
     * If the value is <code>true</code>, then the messages that you send from the identity are signed using DKIM. If
     * the value is <code>false</code>, then the messages that you send from the identity aren't DKIM-signed.
     * </p>
     * 
     * @param signingEnabled
     *        If the value is <code>true</code>, then the messages that you send from the identity are signed using
     *        DKIM. If the value is <code>false</code>, then the messages that you send from the identity aren't
     *        DKIM-signed.
     */

    public void setSigningEnabled(Boolean signingEnabled) {
        this.signingEnabled = signingEnabled;
    }

    /**
     * <p>
     * If the value is <code>true</code>, then the messages that you send from the identity are signed using DKIM. If
     * the value is <code>false</code>, then the messages that you send from the identity aren't DKIM-signed.
     * </p>
     * 
     * @return If the value is <code>true</code>, then the messages that you send from the identity are signed using
     *         DKIM. If the value is <code>false</code>, then the messages that you send from the identity aren't
     *         DKIM-signed.
     */

    public Boolean getSigningEnabled() {
        return this.signingEnabled;
    }

    /**
     * <p>
     * If the value is <code>true</code>, then the messages that you send from the identity are signed using DKIM. If
     * the value is <code>false</code>, then the messages that you send from the identity aren't DKIM-signed.
     * </p>
     * 
     * @param signingEnabled
     *        If the value is <code>true</code>, then the messages that you send from the identity are signed using
     *        DKIM. If the value is <code>false</code>, then the messages that you send from the identity aren't
     *        DKIM-signed.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DkimAttributes withSigningEnabled(Boolean signingEnabled) {
        setSigningEnabled(signingEnabled);
        return this;
    }

    /**
     * <p>
     * If the value is <code>true</code>, then the messages that you send from the identity are signed using DKIM. If
     * the value is <code>false</code>, then the messages that you send from the identity aren't DKIM-signed.
     * </p>
     * 
     * @return If the value is <code>true</code>, then the messages that you send from the identity are signed using
     *         DKIM. If the value is <code>false</code>, then the messages that you send from the identity aren't
     *         DKIM-signed.
     */

    public Boolean isSigningEnabled() {
        return this.signingEnabled;
    }

    /**
     * <p>
     * Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the domain.
     * The status can be one of the following:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     * records in the DNS configuration for the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>SUCCESS</code> – The verification process completed successfully.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find the
     * DKIM records in the DNS configuration of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     * authentication status of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     * </p>
     * </li>
     * </ul>
     * 
     * @param status
     *        Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the
     *        domain. The status can be one of the following:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     *        records in the DNS configuration for the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>SUCCESS</code> – The verification process completed successfully.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find
     *        the DKIM records in the DNS configuration of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     *        authentication status of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     *        </p>
     *        </li>
     * @see DkimStatus
     */

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

    /**
     * <p>
     * Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the domain.
     * The status can be one of the following:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     * records in the DNS configuration for the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>SUCCESS</code> – The verification process completed successfully.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find the
     * DKIM records in the DNS configuration of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     * authentication status of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     * </p>
     * </li>
     * </ul>
     * 
     * @return Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the
     *         domain. The status can be one of the following:</p>
     *         <ul>
     *         <li>
     *         <p>
     *         <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the
     *         DKIM records in the DNS configuration for the domain.
     *         </p>
     *         </li>
     *         <li>
     *         <p>
     *         <code>SUCCESS</code> – The verification process completed successfully.
     *         </p>
     *         </li>
     *         <li>
     *         <p>
     *         <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to
     *         find the DKIM records in the DNS configuration of the domain.
     *         </p>
     *         </li>
     *         <li>
     *         <p>
     *         <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     *         authentication status of the domain.
     *         </p>
     *         </li>
     *         <li>
     *         <p>
     *         <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     *         </p>
     *         </li>
     * @see DkimStatus
     */

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

    /**
     * <p>
     * Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the domain.
     * The status can be one of the following:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     * records in the DNS configuration for the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>SUCCESS</code> – The verification process completed successfully.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find the
     * DKIM records in the DNS configuration of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     * authentication status of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     * </p>
     * </li>
     * </ul>
     * 
     * @param status
     *        Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the
     *        domain. The status can be one of the following:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     *        records in the DNS configuration for the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>SUCCESS</code> – The verification process completed successfully.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find
     *        the DKIM records in the DNS configuration of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     *        authentication status of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     *        </p>
     *        </li>
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimStatus
     */

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

    /**
     * <p>
     * Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the domain.
     * The status can be one of the following:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     * records in the DNS configuration for the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>SUCCESS</code> – The verification process completed successfully.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find the
     * DKIM records in the DNS configuration of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     * authentication status of the domain.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     * </p>
     * </li>
     * </ul>
     * 
     * @param status
     *        Describes whether or not Amazon SES has successfully located the DKIM records in the DNS records for the
     *        domain. The status can be one of the following:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>PENDING</code> – The verification process was initiated, but Amazon SES hasn't yet detected the DKIM
     *        records in the DNS configuration for the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>SUCCESS</code> – The verification process completed successfully.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>FAILED</code> – The verification process failed. This typically occurs when Amazon SES fails to find
     *        the DKIM records in the DNS configuration of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>TEMPORARY_FAILURE</code> – A temporary issue is preventing Amazon SES from determining the DKIM
     *        authentication status of the domain.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>NOT_STARTED</code> – The DKIM verification process hasn't been initiated for the domain.
     *        </p>
     *        </li>
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimStatus
     */

    public DkimAttributes withStatus(DkimStatus status) {
        this.status = status.toString();
        return this;
    }

    /**
     * <p>
     * If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
     * configure DKIM authentication for the domain, then this object contains a set of unique strings that you use to
     * create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon SES detects
     * these records in the DNS configuration for your domain, the DKIM authentication process is complete.
     * </p>
     * <p>
     * If you configured DKIM authentication for the domain by providing your own public-private key pair, then this
     * object contains the selector for the public key.
     * </p>
     * <p>
     * Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in the DNS
     * configuration of the domain for up to 72 hours.
     * </p>
     * 
     * @return If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>
     *         to configure DKIM authentication for the domain, then this object contains a set of unique strings that
     *         you use to create a set of CNAME records that you add to the DNS configuration for your domain. When
     *         Amazon SES detects these records in the DNS configuration for your domain, the DKIM authentication
     *         process is complete.</p>
     *         <p>
     *         If you configured DKIM authentication for the domain by providing your own public-private key pair, then
     *         this object contains the selector for the public key.
     *         </p>
     *         <p>
     *         Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in
     *         the DNS configuration of the domain for up to 72 hours.
     */

    public java.util.List<String> getTokens() {
        return tokens;
    }

    /**
     * <p>
     * If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
     * configure DKIM authentication for the domain, then this object contains a set of unique strings that you use to
     * create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon SES detects
     * these records in the DNS configuration for your domain, the DKIM authentication process is complete.
     * </p>
     * <p>
     * If you configured DKIM authentication for the domain by providing your own public-private key pair, then this
     * object contains the selector for the public key.
     * </p>
     * <p>
     * Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in the DNS
     * configuration of the domain for up to 72 hours.
     * </p>
     * 
     * @param tokens
     *        If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>
     *        to configure DKIM authentication for the domain, then this object contains a set of unique strings that
     *        you use to create a set of CNAME records that you add to the DNS configuration for your domain. When
     *        Amazon SES detects these records in the DNS configuration for your domain, the DKIM authentication process
     *        is complete.</p>
     *        <p>
     *        If you configured DKIM authentication for the domain by providing your own public-private key pair, then
     *        this object contains the selector for the public key.
     *        </p>
     *        <p>
     *        Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in
     *        the DNS configuration of the domain for up to 72 hours.
     */

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

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

    /**
     * <p>
     * If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
     * configure DKIM authentication for the domain, then this object contains a set of unique strings that you use to
     * create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon SES detects
     * these records in the DNS configuration for your domain, the DKIM authentication process is complete.
     * </p>
     * <p>
     * If you configured DKIM authentication for the domain by providing your own public-private key pair, then this
     * object contains the selector for the public key.
     * </p>
     * <p>
     * Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in the DNS
     * configuration of the domain for up to 72 hours.
     * </p>
     * <p>
     * <b>NOTE:</b> This method appends the values to the existing list (if any). Use
     * {@link #setTokens(java.util.Collection)} or {@link #withTokens(java.util.Collection)} if you want to override the
     * existing values.
     * </p>
     * 
     * @param tokens
     *        If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>
     *        to configure DKIM authentication for the domain, then this object contains a set of unique strings that
     *        you use to create a set of CNAME records that you add to the DNS configuration for your domain. When
     *        Amazon SES detects these records in the DNS configuration for your domain, the DKIM authentication process
     *        is complete.</p>
     *        <p>
     *        If you configured DKIM authentication for the domain by providing your own public-private key pair, then
     *        this object contains the selector for the public key.
     *        </p>
     *        <p>
     *        Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in
     *        the DNS configuration of the domain for up to 72 hours.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DkimAttributes withTokens(String... tokens) {
        if (this.tokens == null) {
            setTokens(new java.util.ArrayList<String>(tokens.length));
        }
        for (String ele : tokens) {
            this.tokens.add(ele);
        }
        return this;
    }

    /**
     * <p>
     * If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a> to
     * configure DKIM authentication for the domain, then this object contains a set of unique strings that you use to
     * create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon SES detects
     * these records in the DNS configuration for your domain, the DKIM authentication process is complete.
     * </p>
     * <p>
     * If you configured DKIM authentication for the domain by providing your own public-private key pair, then this
     * object contains the selector for the public key.
     * </p>
     * <p>
     * Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in the DNS
     * configuration of the domain for up to 72 hours.
     * </p>
     * 
     * @param tokens
     *        If you used <a href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>
     *        to configure DKIM authentication for the domain, then this object contains a set of unique strings that
     *        you use to create a set of CNAME records that you add to the DNS configuration for your domain. When
     *        Amazon SES detects these records in the DNS configuration for your domain, the DKIM authentication process
     *        is complete.</p>
     *        <p>
     *        If you configured DKIM authentication for the domain by providing your own public-private key pair, then
     *        this object contains the selector for the public key.
     *        </p>
     *        <p>
     *        Regardless of the DKIM authentication method you use, Amazon SES searches for the appropriate records in
     *        the DNS configuration of the domain for up to 72 hours.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DkimAttributes withTokens(java.util.Collection<String> tokens) {
        setTokens(tokens);
        return this;
    }

    /**
     * <p>
     * A string that indicates how DKIM was configured for the identity. These are the possible values:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     * href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     * (BYODKIM).
     * </p>
     * </li>
     * </ul>
     * 
     * @param signingAttributesOrigin
     *        A string that indicates how DKIM was configured for the identity. These are the possible values:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     *        href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     *        (BYODKIM).
     *        </p>
     *        </li>
     * @see DkimSigningAttributesOrigin
     */

    public void setSigningAttributesOrigin(String signingAttributesOrigin) {
        this.signingAttributesOrigin = signingAttributesOrigin;
    }

    /**
     * <p>
     * A string that indicates how DKIM was configured for the identity. These are the possible values:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     * href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     * (BYODKIM).
     * </p>
     * </li>
     * </ul>
     * 
     * @return A string that indicates how DKIM was configured for the identity. These are the possible values:</p>
     *         <ul>
     *         <li>
     *         <p>
     *         <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     *         href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     *         </p>
     *         </li>
     *         <li>
     *         <p>
     *         <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     *         (BYODKIM).
     *         </p>
     *         </li>
     * @see DkimSigningAttributesOrigin
     */

    public String getSigningAttributesOrigin() {
        return this.signingAttributesOrigin;
    }

    /**
     * <p>
     * A string that indicates how DKIM was configured for the identity. These are the possible values:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     * href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     * (BYODKIM).
     * </p>
     * </li>
     * </ul>
     * 
     * @param signingAttributesOrigin
     *        A string that indicates how DKIM was configured for the identity. These are the possible values:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     *        href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     *        (BYODKIM).
     *        </p>
     *        </li>
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningAttributesOrigin
     */

    public DkimAttributes withSigningAttributesOrigin(String signingAttributesOrigin) {
        setSigningAttributesOrigin(signingAttributesOrigin);
        return this;
    }

    /**
     * <p>
     * A string that indicates how DKIM was configured for the identity. These are the possible values:
     * </p>
     * <ul>
     * <li>
     * <p>
     * <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     * href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     * </p>
     * </li>
     * <li>
     * <p>
     * <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     * (BYODKIM).
     * </p>
     * </li>
     * </ul>
     * 
     * @param signingAttributesOrigin
     *        A string that indicates how DKIM was configured for the identity. These are the possible values:</p>
     *        <ul>
     *        <li>
     *        <p>
     *        <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a
     *        href="https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html">Easy DKIM</a>.
     *        </p>
     *        </li>
     *        <li>
     *        <p>
     *        <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM
     *        (BYODKIM).
     *        </p>
     *        </li>
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningAttributesOrigin
     */

    public DkimAttributes withSigningAttributesOrigin(DkimSigningAttributesOrigin signingAttributesOrigin) {
        this.signingAttributesOrigin = signingAttributesOrigin.toString();
        return this;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.
     * </p>
     * 
     * @param nextSigningKeyLength
     *        [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once
     *        per day.
     * @see DkimSigningKeyLength
     */

    public void setNextSigningKeyLength(String nextSigningKeyLength) {
        this.nextSigningKeyLength = nextSigningKeyLength;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.
     * </p>
     * 
     * @return [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once
     *         per day.
     * @see DkimSigningKeyLength
     */

    public String getNextSigningKeyLength() {
        return this.nextSigningKeyLength;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.
     * </p>
     * 
     * @param nextSigningKeyLength
     *        [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once
     *        per day.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningKeyLength
     */

    public DkimAttributes withNextSigningKeyLength(String nextSigningKeyLength) {
        setNextSigningKeyLength(nextSigningKeyLength);
        return this;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.
     * </p>
     * 
     * @param nextSigningKeyLength
     *        [Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once
     *        per day.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningKeyLength
     */

    public DkimAttributes withNextSigningKeyLength(DkimSigningKeyLength nextSigningKeyLength) {
        this.nextSigningKeyLength = nextSigningKeyLength.toString();
        return this;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the DKIM key pair in use.
     * </p>
     * 
     * @param currentSigningKeyLength
     *        [Easy DKIM] The key length of the DKIM key pair in use.
     * @see DkimSigningKeyLength
     */

    public void setCurrentSigningKeyLength(String currentSigningKeyLength) {
        this.currentSigningKeyLength = currentSigningKeyLength;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the DKIM key pair in use.
     * </p>
     * 
     * @return [Easy DKIM] The key length of the DKIM key pair in use.
     * @see DkimSigningKeyLength
     */

    public String getCurrentSigningKeyLength() {
        return this.currentSigningKeyLength;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the DKIM key pair in use.
     * </p>
     * 
     * @param currentSigningKeyLength
     *        [Easy DKIM] The key length of the DKIM key pair in use.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningKeyLength
     */

    public DkimAttributes withCurrentSigningKeyLength(String currentSigningKeyLength) {
        setCurrentSigningKeyLength(currentSigningKeyLength);
        return this;
    }

    /**
     * <p>
     * [Easy DKIM] The key length of the DKIM key pair in use.
     * </p>
     * 
     * @param currentSigningKeyLength
     *        [Easy DKIM] The key length of the DKIM key pair in use.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see DkimSigningKeyLength
     */

    public DkimAttributes withCurrentSigningKeyLength(DkimSigningKeyLength currentSigningKeyLength) {
        this.currentSigningKeyLength = currentSigningKeyLength.toString();
        return this;
    }

    /**
     * <p>
     * [Easy DKIM] The last time a key pair was generated for this identity.
     * </p>
     * 
     * @param lastKeyGenerationTimestamp
     *        [Easy DKIM] The last time a key pair was generated for this identity.
     */

    public void setLastKeyGenerationTimestamp(java.util.Date lastKeyGenerationTimestamp) {
        this.lastKeyGenerationTimestamp = lastKeyGenerationTimestamp;
    }

    /**
     * <p>
     * [Easy DKIM] The last time a key pair was generated for this identity.
     * </p>
     * 
     * @return [Easy DKIM] The last time a key pair was generated for this identity.
     */

    public java.util.Date getLastKeyGenerationTimestamp() {
        return this.lastKeyGenerationTimestamp;
    }

    /**
     * <p>
     * [Easy DKIM] The last time a key pair was generated for this identity.
     * </p>
     * 
     * @param lastKeyGenerationTimestamp
     *        [Easy DKIM] The last time a key pair was generated for this identity.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DkimAttributes withLastKeyGenerationTimestamp(java.util.Date lastKeyGenerationTimestamp) {
        setLastKeyGenerationTimestamp(lastKeyGenerationTimestamp);
        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 (getSigningEnabled() != null)
            sb.append("SigningEnabled: ").append(getSigningEnabled()).append(",");
        if (getStatus() != null)
            sb.append("Status: ").append(getStatus()).append(",");
        if (getTokens() != null)
            sb.append("Tokens: ").append(getTokens()).append(",");
        if (getSigningAttributesOrigin() != null)
            sb.append("SigningAttributesOrigin: ").append(getSigningAttributesOrigin()).append(",");
        if (getNextSigningKeyLength() != null)
            sb.append("NextSigningKeyLength: ").append(getNextSigningKeyLength()).append(",");
        if (getCurrentSigningKeyLength() != null)
            sb.append("CurrentSigningKeyLength: ").append(getCurrentSigningKeyLength()).append(",");
        if (getLastKeyGenerationTimestamp() != null)
            sb.append("LastKeyGenerationTimestamp: ").append(getLastKeyGenerationTimestamp());
        sb.append("}");
        return sb.toString();
    }

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

        if (obj instanceof DkimAttributes == false)
            return false;
        DkimAttributes other = (DkimAttributes) obj;
        if (other.getSigningEnabled() == null ^ this.getSigningEnabled() == null)
            return false;
        if (other.getSigningEnabled() != null && other.getSigningEnabled().equals(this.getSigningEnabled()) == 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.getTokens() == null ^ this.getTokens() == null)
            return false;
        if (other.getTokens() != null && other.getTokens().equals(this.getTokens()) == false)
            return false;
        if (other.getSigningAttributesOrigin() == null ^ this.getSigningAttributesOrigin() == null)
            return false;
        if (other.getSigningAttributesOrigin() != null && other.getSigningAttributesOrigin().equals(this.getSigningAttributesOrigin()) == false)
            return false;
        if (other.getNextSigningKeyLength() == null ^ this.getNextSigningKeyLength() == null)
            return false;
        if (other.getNextSigningKeyLength() != null && other.getNextSigningKeyLength().equals(this.getNextSigningKeyLength()) == false)
            return false;
        if (other.getCurrentSigningKeyLength() == null ^ this.getCurrentSigningKeyLength() == null)
            return false;
        if (other.getCurrentSigningKeyLength() != null && other.getCurrentSigningKeyLength().equals(this.getCurrentSigningKeyLength()) == false)
            return false;
        if (other.getLastKeyGenerationTimestamp() == null ^ this.getLastKeyGenerationTimestamp() == null)
            return false;
        if (other.getLastKeyGenerationTimestamp() != null && other.getLastKeyGenerationTimestamp().equals(this.getLastKeyGenerationTimestamp()) == false)
            return false;
        return true;
    }

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

        hashCode = prime * hashCode + ((getSigningEnabled() == null) ? 0 : getSigningEnabled().hashCode());
        hashCode = prime * hashCode + ((getStatus() == null) ? 0 : getStatus().hashCode());
        hashCode = prime * hashCode + ((getTokens() == null) ? 0 : getTokens().hashCode());
        hashCode = prime * hashCode + ((getSigningAttributesOrigin() == null) ? 0 : getSigningAttributesOrigin().hashCode());
        hashCode = prime * hashCode + ((getNextSigningKeyLength() == null) ? 0 : getNextSigningKeyLength().hashCode());
        hashCode = prime * hashCode + ((getCurrentSigningKeyLength() == null) ? 0 : getCurrentSigningKeyLength().hashCode());
        hashCode = prime * hashCode + ((getLastKeyGenerationTimestamp() == null) ? 0 : getLastKeyGenerationTimestamp().hashCode());
        return hashCode;
    }

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

    @com.amazonaws.annotation.SdkInternalApi
    @Override
    public void marshall(ProtocolMarshaller protocolMarshaller) {
        com.amazonaws.services.simpleemailv2.model.transform.DkimAttributesMarshaller.getInstance().marshall(this, protocolMarshaller);
    }
}