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

        if (obj instanceof SavingsPlan == false)
            return false;
        SavingsPlan other = (SavingsPlan) obj;
        if (other.getOfferingId() == null ^ this.getOfferingId() == null)
            return false;
        if (other.getOfferingId() != null && other.getOfferingId().equals(this.getOfferingId()) == false)
            return false;
        if (other.getSavingsPlanId() == null ^ this.getSavingsPlanId() == null)
            return false;
        if (other.getSavingsPlanId() != null && other.getSavingsPlanId().equals(this.getSavingsPlanId()) == false)
            return false;
        if (other.getSavingsPlanArn() == null ^ this.getSavingsPlanArn() == null)
            return false;
        if (other.getSavingsPlanArn() != null && other.getSavingsPlanArn().equals(this.getSavingsPlanArn()) == false)
            return false;
        if (other.getDescription() == null ^ this.getDescription() == null)
            return false;
        if (other.getDescription() != null && other.getDescription().equals(this.getDescription()) == false)
            return false;
        if (other.getStart() == null ^ this.getStart() == null)
            return false;
        if (other.getStart() != null && other.getStart().equals(this.getStart()) == false)
            return false;
        if (other.getEnd() == null ^ this.getEnd() == null)
            return false;
        if (other.getEnd() != null && other.getEnd().equals(this.getEnd()) == false)
            return false;
        if (other.getState() == null ^ this.getState() == null)
            return false;
        if (other.getState() != null && other.getState().equals(this.getState()) == false)
            return false;
        if (other.getRegion() == null ^ this.getRegion() == null)
            return false;
        if (other.getRegion() != null && other.getRegion().equals(this.getRegion()) == false)
            return false;
        if (other.getEc2InstanceFamily() == null ^ this.getEc2InstanceFamily() == null)
            return false;
        if (other.getEc2InstanceFamily() != null && other.getEc2InstanceFamily().equals(this.getEc2InstanceFamily()) == false)
            return false;
        if (other.getSavingsPlanType() == null ^ this.getSavingsPlanType() == null)
            return false;
        if (other.getSavingsPlanType() != null && other.getSavingsPlanType().equals(this.getSavingsPlanType()) == false)
            return false;
        if (other.getPaymentOption() == null ^ this.getPaymentOption() == null)
            return false;
        if (other.getPaymentOption() != null && other.getPaymentOption().equals(this.getPaymentOption()) == false)
            return false;
        if (other.getProductTypes() == null ^ this.getProductTypes() == null)
            return false;
        if (other.getProductTypes() != null && other.getProductTypes().equals(this.getProductTypes()) == false)
            return false;
        if (other.getCurrency() == null ^ this.getCurrency() == null)
            return false;
        if (other.getCurrency() != null && other.getCurrency().equals(this.getCurrency()) == false)
            return false;
        if (other.getCommitment() == null ^ this.getCommitment() == null)
            return false;
        if (other.getCommitment() != null && other.getCommitment().equals(this.getCommitment()) == false)
            return false;
        if (other.getUpfrontPaymentAmount() == null ^ this.getUpfrontPaymentAmount() == null)
            return false;
        if (other.getUpfrontPaymentAmount() != null && other.getUpfrontPaymentAmount().equals(this.getUpfrontPaymentAmount()) == false)
            return false;
        if (other.getRecurringPaymentAmount() == null ^ this.getRecurringPaymentAmount() == null)
            return false;
        if (other.getRecurringPaymentAmount() != null && other.getRecurringPaymentAmount().equals(this.getRecurringPaymentAmount()) == false)
            return false;
        if (other.getTermDurationInSeconds() == null ^ this.getTermDurationInSeconds() == null)
            return false;
        if (other.getTermDurationInSeconds() != null && other.getTermDurationInSeconds().equals(this.getTermDurationInSeconds()) == false)
            return false;
        if (other.getTags() == null ^ this.getTags() == null)
            return false;
        if (other.getTags() != null && other.getTags().equals(this.getTags()) == false)
            return false;
        if (other.getReturnableUntil() == null ^ this.getReturnableUntil() == null)
            return false;
        if (other.getReturnableUntil() != null && other.getReturnableUntil().equals(this.getReturnableUntil()) == false)
            return false;
        return true;
    }
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()
aws-java-sdk-savingsplans/src/main/java/com/amazonaws/services/savingsplans/model/SavingsPlan.java