/*
 * 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.sagemaker.model;
import java.io.Serializable;
import javax.annotation.Generated;
/**
 * 
 * @see AWS API
 *      Documentation
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class DescribeFeatureGroupResult extends com.amazonaws.AmazonWebServiceResult 
     * The Amazon Resource Name (ARN) of the  
     * he name of the  
     * The name of the  
     * The name of the feature that stores the  
     * An  
     * A list of the  
     * A timestamp indicating when SageMaker created the  
     * A timestamp indicating when the feature group was last updated.
     *  
     * The configuration for the  
     * The configuration of the offline store. It includes the following configurations:
     *  
     * Amazon S3 location of the offline store.
     *  
     * Configuration of the Glue data catalog.
     *  
     * Table format of the offline store.
     *  
     * Option to disable the automatic creation of a Glue table for the offline store.
     *  
     * Encryption configuration.
     *  
     * The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an
     * OfflineStoreConfig is provided.
     *  
     * The status of the feature group.
     *  
     * The status of the  
     * A value indicating whether the update made to the feature group was successful.
     *  
     * The reason that the  
     * The  
     * The  
     * A free form description of the feature group.
     *  
     * A token to resume pagination of the list of  
     * The size of the  
     * The Amazon Resource Name (ARN) of the  
     * The Amazon Resource Name (ARN) of the  
     * The Amazon Resource Name (ARN) of the  
     * he name of the  
     * he name of the  
     * he name of the  
     * The name of the  
     * The name of the  
     * The name of the  
     * The name of the feature that stores the  
     * An FeatureGroup.
     * FeatureGroup.
     * Feature used for RecordIdentifier, whose value uniquely identifies a
     * record stored in the feature store.
     * EventTime of a Record in a FeatureGroup.
     * EventTime is a point in time when a new event occurs that corresponds to the creation or update
     * of a Record in a FeatureGroup. All Records in the
     * FeatureGroup have a corresponding EventTime.
     * Features in the FeatureGroup. Each feature is defined by a
     * FeatureName and FeatureType.
     * FeatureGroup.
     * OnlineStore.
     * 
     * 
     */
    private OfflineStoreConfig offlineStoreConfig;
    /**
     * OfflineStore. Notifies you if replicating data into the OfflineStore
     * has failed. Returns either: Active or Blocked
     * FeatureGroup failed to be replicated in the OfflineStore. This is
     * failure can occur because:
     * 
     * 
     */
    private String failureReason;
    /**
     * FeatureGroup could not be created in the OfflineStore.
     * FeatureGroup could not be deleted from the OfflineStore.
     * Features (FeatureDefinitions).
     * OnlineStore in bytes.
     * FeatureGroup.
     * FeatureGroup.
     */
    public void setFeatureGroupArn(String featureGroupArn) {
        this.featureGroupArn = featureGroupArn;
    }
    /**
     * FeatureGroup.
     * FeatureGroup.
     */
    public String getFeatureGroupArn() {
        return this.featureGroupArn;
    }
    /**
     * FeatureGroup.
     * FeatureGroup.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withFeatureGroupArn(String featureGroupArn) {
        setFeatureGroupArn(featureGroupArn);
        return this;
    }
    /**
     * FeatureGroup.
     * FeatureGroup.
     */
    public void setFeatureGroupName(String featureGroupName) {
        this.featureGroupName = featureGroupName;
    }
    /**
     * FeatureGroup.
     * FeatureGroup.
     */
    public String getFeatureGroupName() {
        return this.featureGroupName;
    }
    /**
     * FeatureGroup.
     * FeatureGroup.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withFeatureGroupName(String featureGroupName) {
        setFeatureGroupName(featureGroupName);
        return this;
    }
    /**
     * Feature used for RecordIdentifier, whose value uniquely identifies a
     * record stored in the feature store.
     * Feature used for RecordIdentifier, whose value uniquely
     *        identifies a record stored in the feature store.
     */
    public void setRecordIdentifierFeatureName(String recordIdentifierFeatureName) {
        this.recordIdentifierFeatureName = recordIdentifierFeatureName;
    }
    /**
     * Feature used for RecordIdentifier, whose value uniquely identifies a
     * record stored in the feature store.
     * Feature used for RecordIdentifier, whose value uniquely
     *         identifies a record stored in the feature store.
     */
    public String getRecordIdentifierFeatureName() {
        return this.recordIdentifierFeatureName;
    }
    /**
     * Feature used for RecordIdentifier, whose value uniquely identifies a
     * record stored in the feature store.
     * Feature used for RecordIdentifier, whose value uniquely
     *        identifies a record stored in the feature store.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withRecordIdentifierFeatureName(String recordIdentifierFeatureName) {
        setRecordIdentifierFeatureName(recordIdentifierFeatureName);
        return this;
    }
    /**
     * EventTime of a Record in a FeatureGroup.
     * EventTime is a point in time when a new event occurs that corresponds to the creation or update
     * of a Record in a FeatureGroup. All Records in the
     * FeatureGroup have a corresponding EventTime.
     * EventTime of a Record in a FeatureGroup
     *        .
     *        An EventTime is a point in time when a new event occurs that corresponds to the creation or
     *        update of a Record in a FeatureGroup. All Records in the
     *        FeatureGroup have a corresponding EventTime.
     */
    public void setEventTimeFeatureName(String eventTimeFeatureName) {
        this.eventTimeFeatureName = eventTimeFeatureName;
    }
    /**
     * 
     * The name of the feature that stores the EventTime of a Record in a FeatureGroup.
     * 
     * An EventTime is a point in time when a new event occurs that corresponds to the creation or update
     * of a Record in a FeatureGroup. All Records in the
     * FeatureGroup have a corresponding EventTime.
     * 
EventTime of a Record in a FeatureGroup
     *         .
     *         
     *         An EventTime is a point in time when a new event occurs that corresponds to the creation or
     *         update of a Record in a FeatureGroup. All Records in the
     *         FeatureGroup have a corresponding EventTime.
     */
    public String getEventTimeFeatureName() {
        return this.eventTimeFeatureName;
    }
    /**
     * 
     * The name of the feature that stores the EventTime of a Record in a FeatureGroup.
     * 
     * An EventTime is a point in time when a new event occurs that corresponds to the creation or update
     * of a Record in a FeatureGroup. All Records in the
     * FeatureGroup have a corresponding EventTime.
     * 
EventTime of a Record in a FeatureGroup
     *        .
     *        
     *        An EventTime is a point in time when a new event occurs that corresponds to the creation or
     *        update of a Record in a FeatureGroup. All Records in the
     *        FeatureGroup have a corresponding EventTime.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withEventTimeFeatureName(String eventTimeFeatureName) {
        setEventTimeFeatureName(eventTimeFeatureName);
        return this;
    }
    /**
     * 
     * A list of the Features in the FeatureGroup. Each feature is defined by a
     * FeatureName and FeatureType.
     * 
Features in the FeatureGroup. Each feature is defined by a
     *         FeatureName and FeatureType.
     */
    public java.util.List
     * A list of the Features in the FeatureGroup. Each feature is defined by a
     * FeatureName and FeatureType.
     * 
Features in the FeatureGroup. Each feature is defined by a
     *        FeatureName and FeatureType.
     */
    public void setFeatureDefinitions(java.util.Collection
     * A list of the Features in the FeatureGroup. Each feature is defined by a
     * FeatureName and FeatureType.
     * 
* NOTE: This method appends the values to the existing list (if any). Use * {@link #setFeatureDefinitions(java.util.Collection)} or {@link #withFeatureDefinitions(java.util.Collection)} if * you want to override the existing values. *
* * @param featureDefinitions * A list of theFeatures in the FeatureGroup. Each feature is defined by a
     *        FeatureName and FeatureType.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withFeatureDefinitions(FeatureDefinition... featureDefinitions) {
        if (this.featureDefinitions == null) {
            setFeatureDefinitions(new java.util.ArrayList
     * A list of the Features in the FeatureGroup. Each feature is defined by a
     * FeatureName and FeatureType.
     * 
Features in the FeatureGroup. Each feature is defined by a
     *        FeatureName and FeatureType.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withFeatureDefinitions(java.util.Collection
     * A timestamp indicating when SageMaker created the FeatureGroup.
     * 
FeatureGroup.
     */
    public void setCreationTime(java.util.Date creationTime) {
        this.creationTime = creationTime;
    }
    /**
     * 
     * A timestamp indicating when SageMaker created the FeatureGroup.
     * 
FeatureGroup.
     */
    public java.util.Date getCreationTime() {
        return this.creationTime;
    }
    /**
     * 
     * A timestamp indicating when SageMaker created the FeatureGroup.
     * 
FeatureGroup.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withCreationTime(java.util.Date creationTime) {
        setCreationTime(creationTime);
        return this;
    }
    /**
     * * A timestamp indicating when the feature group was last updated. *
* * @param lastModifiedTime * A timestamp indicating when the feature group was last updated. */ public void setLastModifiedTime(java.util.Date lastModifiedTime) { this.lastModifiedTime = lastModifiedTime; } /** ** A timestamp indicating when the feature group was last updated. *
* * @return A timestamp indicating when the feature group was last updated. */ public java.util.Date getLastModifiedTime() { return this.lastModifiedTime; } /** ** A timestamp indicating when the feature group was last updated. *
* * @param lastModifiedTime * A timestamp indicating when the feature group was last updated. * @return Returns a reference to this object so that method calls can be chained together. */ public DescribeFeatureGroupResult withLastModifiedTime(java.util.Date lastModifiedTime) { setLastModifiedTime(lastModifiedTime); return this; } /** *
     * The configuration for the OnlineStore.
     * 
OnlineStore.
     */
    public void setOnlineStoreConfig(OnlineStoreConfig onlineStoreConfig) {
        this.onlineStoreConfig = onlineStoreConfig;
    }
    /**
     * 
     * The configuration for the OnlineStore.
     * 
OnlineStore.
     */
    public OnlineStoreConfig getOnlineStoreConfig() {
        return this.onlineStoreConfig;
    }
    /**
     * 
     * The configuration for the OnlineStore.
     * 
OnlineStore.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withOnlineStoreConfig(OnlineStoreConfig onlineStoreConfig) {
        setOnlineStoreConfig(onlineStoreConfig);
        return this;
    }
    /**
     * * The configuration of the offline store. It includes the following configurations: *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** The configuration of the offline store. It includes the following configurations: *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** The configuration of the offline store. It includes the following configurations: *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** Amazon S3 location of the offline store. *
** Configuration of the Glue data catalog. *
** Table format of the offline store. *
** Option to disable the automatic creation of a Glue table for the offline store. *
** Encryption configuration. *
** The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. *
* * @param roleArn * The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. */ public void setRoleArn(String roleArn) { this.roleArn = roleArn; } /** ** The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. *
* * @return The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. */ public String getRoleArn() { return this.roleArn; } /** ** The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. *
* * @param roleArn * The Amazon Resource Name (ARN) of the IAM execution role used to persist data into the OfflineStore if an * OfflineStoreConfig is provided. * @return Returns a reference to this object so that method calls can be chained together. */ public DescribeFeatureGroupResult withRoleArn(String roleArn) { setRoleArn(roleArn); return this; } /** ** The status of the feature group. *
* * @param featureGroupStatus * The status of the feature group. * @see FeatureGroupStatus */ public void setFeatureGroupStatus(String featureGroupStatus) { this.featureGroupStatus = featureGroupStatus; } /** ** The status of the feature group. *
* * @return The status of the feature group. * @see FeatureGroupStatus */ public String getFeatureGroupStatus() { return this.featureGroupStatus; } /** ** The status of the feature group. *
* * @param featureGroupStatus * The status of the feature group. * @return Returns a reference to this object so that method calls can be chained together. * @see FeatureGroupStatus */ public DescribeFeatureGroupResult withFeatureGroupStatus(String featureGroupStatus) { setFeatureGroupStatus(featureGroupStatus); return this; } /** ** The status of the feature group. *
* * @param featureGroupStatus * The status of the feature group. * @return Returns a reference to this object so that method calls can be chained together. * @see FeatureGroupStatus */ public DescribeFeatureGroupResult withFeatureGroupStatus(FeatureGroupStatus featureGroupStatus) { this.featureGroupStatus = featureGroupStatus.toString(); return this; } /** *
     * The status of the OfflineStore. Notifies you if replicating data into the OfflineStore
     * has failed. Returns either: Active or Blocked
     * 
OfflineStore. Notifies you if replicating data into the
     *        OfflineStore has failed. Returns either: Active or Blocked
     */
    public void setOfflineStoreStatus(OfflineStoreStatus offlineStoreStatus) {
        this.offlineStoreStatus = offlineStoreStatus;
    }
    /**
     * 
     * The status of the OfflineStore. Notifies you if replicating data into the OfflineStore
     * has failed. Returns either: Active or Blocked
     * 
OfflineStore. Notifies you if replicating data into the
     *         OfflineStore has failed. Returns either: Active or Blocked
     */
    public OfflineStoreStatus getOfflineStoreStatus() {
        return this.offlineStoreStatus;
    }
    /**
     * 
     * The status of the OfflineStore. Notifies you if replicating data into the OfflineStore
     * has failed. Returns either: Active or Blocked
     * 
OfflineStore. Notifies you if replicating data into the
     *        OfflineStore has failed. Returns either: Active or Blocked
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withOfflineStoreStatus(OfflineStoreStatus offlineStoreStatus) {
        setOfflineStoreStatus(offlineStoreStatus);
        return this;
    }
    /**
     * * A value indicating whether the update made to the feature group was successful. *
* * @param lastUpdateStatus * A value indicating whether the update made to the feature group was successful. */ public void setLastUpdateStatus(LastUpdateStatus lastUpdateStatus) { this.lastUpdateStatus = lastUpdateStatus; } /** ** A value indicating whether the update made to the feature group was successful. *
* * @return A value indicating whether the update made to the feature group was successful. */ public LastUpdateStatus getLastUpdateStatus() { return this.lastUpdateStatus; } /** ** A value indicating whether the update made to the feature group was successful. *
* * @param lastUpdateStatus * A value indicating whether the update made to the feature group was successful. * @return Returns a reference to this object so that method calls can be chained together. */ public DescribeFeatureGroupResult withLastUpdateStatus(LastUpdateStatus lastUpdateStatus) { setLastUpdateStatus(lastUpdateStatus); return this; } /** *
     * The reason that the FeatureGroup failed to be replicated in the OfflineStore. This is
     * failure can occur because:
     * 
     * The FeatureGroup could not be created in the OfflineStore.
     * 
     * The FeatureGroup could not be deleted from the OfflineStore.
     * 
FeatureGroup failed to be replicated in the OfflineStore.
     *        This is failure can occur because:
     *        
     *        The FeatureGroup could not be created in the OfflineStore.
     *        
     *        The FeatureGroup could not be deleted from the OfflineStore.
     *        
     * The reason that the FeatureGroup failed to be replicated in the OfflineStore. This is
     * failure can occur because:
     * 
     * The FeatureGroup could not be created in the OfflineStore.
     * 
     * The FeatureGroup could not be deleted from the OfflineStore.
     * 
FeatureGroup failed to be replicated in the OfflineStore.
     *         This is failure can occur because:
     *         
     *         The FeatureGroup could not be created in the OfflineStore.
     *         
     *         The FeatureGroup could not be deleted from the OfflineStore.
     *         
     * The reason that the FeatureGroup failed to be replicated in the OfflineStore. This is
     * failure can occur because:
     * 
     * The FeatureGroup could not be created in the OfflineStore.
     * 
     * The FeatureGroup could not be deleted from the OfflineStore.
     * 
FeatureGroup failed to be replicated in the OfflineStore.
     *        This is failure can occur because:
     *        
     *        The FeatureGroup could not be created in the OfflineStore.
     *        
     *        The FeatureGroup could not be deleted from the OfflineStore.
     *        
* A free form description of the feature group. *
* * @param description * A free form description of the feature group. */ public void setDescription(String description) { this.description = description; } /** ** A free form description of the feature group. *
* * @return A free form description of the feature group. */ public String getDescription() { return this.description; } /** ** A free form description of the feature group. *
* * @param description * A free form description of the feature group. * @return Returns a reference to this object so that method calls can be chained together. */ public DescribeFeatureGroupResult withDescription(String description) { setDescription(description); return this; } /** *
     * A token to resume pagination of the list of Features (FeatureDefinitions).
     * 
Features (FeatureDefinitions).
     */
    public void setNextToken(String nextToken) {
        this.nextToken = nextToken;
    }
    /**
     * 
     * A token to resume pagination of the list of Features (FeatureDefinitions).
     * 
Features (FeatureDefinitions).
     */
    public String getNextToken() {
        return this.nextToken;
    }
    /**
     * 
     * A token to resume pagination of the list of Features (FeatureDefinitions).
     * 
Features (FeatureDefinitions).
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withNextToken(String nextToken) {
        setNextToken(nextToken);
        return this;
    }
    /**
     * 
     * The size of the OnlineStore in bytes.
     * 
OnlineStore in bytes.
     */
    public void setOnlineStoreTotalSizeBytes(Long onlineStoreTotalSizeBytes) {
        this.onlineStoreTotalSizeBytes = onlineStoreTotalSizeBytes;
    }
    /**
     * 
     * The size of the OnlineStore in bytes.
     * 
OnlineStore in bytes.
     */
    public Long getOnlineStoreTotalSizeBytes() {
        return this.onlineStoreTotalSizeBytes;
    }
    /**
     * 
     * The size of the OnlineStore in bytes.
     * 
OnlineStore in bytes.
     * @return Returns a reference to this object so that method calls can be chained together.
     */
    public DescribeFeatureGroupResult withOnlineStoreTotalSizeBytes(Long onlineStoreTotalSizeBytes) {
        setOnlineStoreTotalSizeBytes(onlineStoreTotalSizeBytes);
        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 (getFeatureGroupArn() != null)
            sb.append("FeatureGroupArn: ").append(getFeatureGroupArn()).append(",");
        if (getFeatureGroupName() != null)
            sb.append("FeatureGroupName: ").append(getFeatureGroupName()).append(",");
        if (getRecordIdentifierFeatureName() != null)
            sb.append("RecordIdentifierFeatureName: ").append(getRecordIdentifierFeatureName()).append(",");
        if (getEventTimeFeatureName() != null)
            sb.append("EventTimeFeatureName: ").append(getEventTimeFeatureName()).append(",");
        if (getFeatureDefinitions() != null)
            sb.append("FeatureDefinitions: ").append(getFeatureDefinitions()).append(",");
        if (getCreationTime() != null)
            sb.append("CreationTime: ").append(getCreationTime()).append(",");
        if (getLastModifiedTime() != null)
            sb.append("LastModifiedTime: ").append(getLastModifiedTime()).append(",");
        if (getOnlineStoreConfig() != null)
            sb.append("OnlineStoreConfig: ").append(getOnlineStoreConfig()).append(",");
        if (getOfflineStoreConfig() != null)
            sb.append("OfflineStoreConfig: ").append(getOfflineStoreConfig()).append(",");
        if (getRoleArn() != null)
            sb.append("RoleArn: ").append(getRoleArn()).append(",");
        if (getFeatureGroupStatus() != null)
            sb.append("FeatureGroupStatus: ").append(getFeatureGroupStatus()).append(",");
        if (getOfflineStoreStatus() != null)
            sb.append("OfflineStoreStatus: ").append(getOfflineStoreStatus()).append(",");
        if (getLastUpdateStatus() != null)
            sb.append("LastUpdateStatus: ").append(getLastUpdateStatus()).append(",");
        if (getFailureReason() != null)
            sb.append("FailureReason: ").append(getFailureReason()).append(",");
        if (getDescription() != null)
            sb.append("Description: ").append(getDescription()).append(",");
        if (getNextToken() != null)
            sb.append("NextToken: ").append(getNextToken()).append(",");
        if (getOnlineStoreTotalSizeBytes() != null)
            sb.append("OnlineStoreTotalSizeBytes: ").append(getOnlineStoreTotalSizeBytes());
        sb.append("}");
        return sb.toString();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj instanceof DescribeFeatureGroupResult == false)
            return false;
        DescribeFeatureGroupResult other = (DescribeFeatureGroupResult) obj;
        if (other.getFeatureGroupArn() == null ^ this.getFeatureGroupArn() == null)
            return false;
        if (other.getFeatureGroupArn() != null && other.getFeatureGroupArn().equals(this.getFeatureGroupArn()) == false)
            return false;
        if (other.getFeatureGroupName() == null ^ this.getFeatureGroupName() == null)
            return false;
        if (other.getFeatureGroupName() != null && other.getFeatureGroupName().equals(this.getFeatureGroupName()) == false)
            return false;
        if (other.getRecordIdentifierFeatureName() == null ^ this.getRecordIdentifierFeatureName() == null)
            return false;
        if (other.getRecordIdentifierFeatureName() != null && other.getRecordIdentifierFeatureName().equals(this.getRecordIdentifierFeatureName()) == false)
            return false;
        if (other.getEventTimeFeatureName() == null ^ this.getEventTimeFeatureName() == null)
            return false;
        if (other.getEventTimeFeatureName() != null && other.getEventTimeFeatureName().equals(this.getEventTimeFeatureName()) == false)
            return false;
        if (other.getFeatureDefinitions() == null ^ this.getFeatureDefinitions() == null)
            return false;
        if (other.getFeatureDefinitions() != null && other.getFeatureDefinitions().equals(this.getFeatureDefinitions()) == false)
            return false;
        if (other.getCreationTime() == null ^ this.getCreationTime() == null)
            return false;
        if (other.getCreationTime() != null && other.getCreationTime().equals(this.getCreationTime()) == false)
            return false;
        if (other.getLastModifiedTime() == null ^ this.getLastModifiedTime() == null)
            return false;
        if (other.getLastModifiedTime() != null && other.getLastModifiedTime().equals(this.getLastModifiedTime()) == false)
            return false;
        if (other.getOnlineStoreConfig() == null ^ this.getOnlineStoreConfig() == null)
            return false;
        if (other.getOnlineStoreConfig() != null && other.getOnlineStoreConfig().equals(this.getOnlineStoreConfig()) == false)
            return false;
        if (other.getOfflineStoreConfig() == null ^ this.getOfflineStoreConfig() == null)
            return false;
        if (other.getOfflineStoreConfig() != null && other.getOfflineStoreConfig().equals(this.getOfflineStoreConfig()) == false)
            return false;
        if (other.getRoleArn() == null ^ this.getRoleArn() == null)
            return false;
        if (other.getRoleArn() != null && other.getRoleArn().equals(this.getRoleArn()) == false)
            return false;
        if (other.getFeatureGroupStatus() == null ^ this.getFeatureGroupStatus() == null)
            return false;
        if (other.getFeatureGroupStatus() != null && other.getFeatureGroupStatus().equals(this.getFeatureGroupStatus()) == false)
            return false;
        if (other.getOfflineStoreStatus() == null ^ this.getOfflineStoreStatus() == null)
            return false;
        if (other.getOfflineStoreStatus() != null && other.getOfflineStoreStatus().equals(this.getOfflineStoreStatus()) == false)
            return false;
        if (other.getLastUpdateStatus() == null ^ this.getLastUpdateStatus() == null)
            return false;
        if (other.getLastUpdateStatus() != null && other.getLastUpdateStatus().equals(this.getLastUpdateStatus()) == false)
            return false;
        if (other.getFailureReason() == null ^ this.getFailureReason() == null)
            return false;
        if (other.getFailureReason() != null && other.getFailureReason().equals(this.getFailureReason()) == 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.getNextToken() == null ^ this.getNextToken() == null)
            return false;
        if (other.getNextToken() != null && other.getNextToken().equals(this.getNextToken()) == false)
            return false;
        if (other.getOnlineStoreTotalSizeBytes() == null ^ this.getOnlineStoreTotalSizeBytes() == null)
            return false;
        if (other.getOnlineStoreTotalSizeBytes() != null && other.getOnlineStoreTotalSizeBytes().equals(this.getOnlineStoreTotalSizeBytes()) == false)
            return false;
        return true;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;
        hashCode = prime * hashCode + ((getFeatureGroupArn() == null) ? 0 : getFeatureGroupArn().hashCode());
        hashCode = prime * hashCode + ((getFeatureGroupName() == null) ? 0 : getFeatureGroupName().hashCode());
        hashCode = prime * hashCode + ((getRecordIdentifierFeatureName() == null) ? 0 : getRecordIdentifierFeatureName().hashCode());
        hashCode = prime * hashCode + ((getEventTimeFeatureName() == null) ? 0 : getEventTimeFeatureName().hashCode());
        hashCode = prime * hashCode + ((getFeatureDefinitions() == null) ? 0 : getFeatureDefinitions().hashCode());
        hashCode = prime * hashCode + ((getCreationTime() == null) ? 0 : getCreationTime().hashCode());
        hashCode = prime * hashCode + ((getLastModifiedTime() == null) ? 0 : getLastModifiedTime().hashCode());
        hashCode = prime * hashCode + ((getOnlineStoreConfig() == null) ? 0 : getOnlineStoreConfig().hashCode());
        hashCode = prime * hashCode + ((getOfflineStoreConfig() == null) ? 0 : getOfflineStoreConfig().hashCode());
        hashCode = prime * hashCode + ((getRoleArn() == null) ? 0 : getRoleArn().hashCode());
        hashCode = prime * hashCode + ((getFeatureGroupStatus() == null) ? 0 : getFeatureGroupStatus().hashCode());
        hashCode = prime * hashCode + ((getOfflineStoreStatus() == null) ? 0 : getOfflineStoreStatus().hashCode());
        hashCode = prime * hashCode + ((getLastUpdateStatus() == null) ? 0 : getLastUpdateStatus().hashCode());
        hashCode = prime * hashCode + ((getFailureReason() == null) ? 0 : getFailureReason().hashCode());
        hashCode = prime * hashCode + ((getDescription() == null) ? 0 : getDescription().hashCode());
        hashCode = prime * hashCode + ((getNextToken() == null) ? 0 : getNextToken().hashCode());
        hashCode = prime * hashCode + ((getOnlineStoreTotalSizeBytes() == null) ? 0 : getOnlineStoreTotalSizeBytes().hashCode());
        return hashCode;
    }
    @Override
    public DescribeFeatureGroupResult clone() {
        try {
            return (DescribeFeatureGroupResult) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException("Got a CloneNotSupportedException from Object.clone() " + "even though we're Cloneable!", e);
        }
    }
}