com.amazonaws.services.dynamodbv2.model.TableDescription Maven / Gradle / Ivy
Show all versions of aws-java-sdk-osgi Show documentation
/*
 * Copyright 2010-2016 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.dynamodbv2.model;
import java.io.Serializable;
/**
 * 
 * Represents the properties of a table.
 * 
 */
public class TableDescription implements Serializable, Cloneable {
    /**
     * 
     * An array of AttributeDefinition objects. Each of these objects
     * describes one attribute in the table and index key schema.
     * 
     * 
     * Each AttributeDefinition object in this array is composed of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * AttributeType - The data type for the attribute.
     * 
     *  
     * 
     */
    private java.util.List attributeDefinitions;
    /**
     * 
     * The name of the table.
     * 
     */
    private String tableName;
    /**
     * 
     * The primary key structure for the table. Each KeySchemaElement
     * consists of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * KeyType - The role of the attribute:
     * 
     * 
     * - 
     * 
     * HASH - partition key
     * 
     *  
     * - 
     * 
     * RANGE - sort key
     * 
     *  
     * 
     * 
     * 
     * The partition key of an item is also known as its hash attribute.
     * The term "hash attribute" derives from DynamoDB' usage of an internal
     * hash function to evenly distribute data items across partitions, based on
     * their partition key values.
     * 
     * 
     * The sort key of an item is also known as its range attribute. The
     * term "range attribute" derives from the way DynamoDB stores items with
     * the same partition key physically close together, in sorted order by the
     * sort key value.
     * 
     *   
     * 
     * 
     * For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * 
     */
    private java.util.List keySchema;
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     */
    private String tableStatus;
    /**
     * 
     * The date and time when the table was created, in UNIX epoch time format.
     * 
     */
    private java.util.Date creationDateTime;
    /**
     * 
     * The provisioned throughput settings for the table, consisting of read and
     * write capacity units, along with data about increases and decreases.
     * 
     */
    private ProvisionedThroughputDescription provisionedThroughput;
    /**
     * 
     * The total size of the specified table, in bytes. DynamoDB updates this
     * value approximately every six hours. Recent changes might not be
     * reflected in this value.
     * 
     */
    private Long tableSizeBytes;
    /**
     * 
     * The number of items in the specified table. DynamoDB updates this value
     * approximately every six hours. Recent changes might not be reflected in
     * this value.
     * 
     */
    private Long itemCount;
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the table.
     * 
     */
    private String tableArn;
    /**
     * 
     * Represents one or more local secondary indexes on the table. Each index
     * is scoped to a given partition key value. Tables with one or more local
     * secondary indexes are subject to an item collection size limit, where the
     * amount of data within a given item collection cannot exceed 10 GB. Each
     * element is composed of:
     * 
     * 
     * - 
     * 
     * IndexName - The name of the local secondary index.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - Represents the total size of the index, in bytes.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * ItemCount - Represents the number of items in the index. DynamoDB
     * updates this value approximately every six hours. Recent changes might
     * not be reflected in this value.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     */
    private java.util.List localSecondaryIndexes;
    /**
     * 
     * The global secondary indexes, if any, on the table. Each index is scoped
     * to a given partition key value. Each element is composed of:
     * 
     * 
     * - 
     * 
     * Backfilling - If true, then the index is currently in the
     * backfilling phase. Backfilling occurs only when a new global secondary
     * index is added to the table; it is the process by which DynamoDB
     * populates the new index with data from the table. (This attribute does
     * not appear for indexes that were created during a CreateTable
     * operation.)
     * 
     *  
     * - 
     * 
     * IndexName - The name of the global secondary index.
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - The total size of the global secondary index, in
     * bytes. DynamoDB updates this value approximately every six hours. Recent
     * changes might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * IndexStatus - The current status of the global secondary index:
     * 
     * 
     * - 
     * 
     * CREATING - The index is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The index is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The index is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The index is ready for use.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ItemCount - The number of items in the global secondary index.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ProvisionedThroughput - The provisioned throughput settings for
     * the global secondary index, consisting of read and write capacity units,
     * along with data about increases and decreases.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     */
    private java.util.List globalSecondaryIndexes;
    /**
     * 
     * The current DynamoDB Streams configuration for the table.
     * 
     */
    private StreamSpecification streamSpecification;
    /**
     * 
     * A timestamp, in ISO 8601 format, for this stream.
     * 
     * 
     * Note that LatestStreamLabel is not a unique identifier for the
     * stream, because it is possible that a stream from another table might
     * have the same timestamp. However, the combination of the following three
     * elements is guaranteed to be unique:
     * 
     * 
     * - 
     * 
     * the AWS customer ID.
     * 
     *  
     * - 
     * 
     * the table name.
     * 
     *  
     * - 
     * 
     * the StreamLabel.
     * 
     *  
     * 
     */
    private String latestStreamLabel;
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the latest stream
     * for this table.
     * 
     */
    private String latestStreamArn;
    /**
     * 
     * An array of AttributeDefinition objects. Each of these objects
     * describes one attribute in the table and index key schema.
     * 
     * 
     * Each AttributeDefinition object in this array is composed of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * AttributeType - The data type for the attribute.
     * 
     *  
     * 
     * 
     * @return An array of AttributeDefinition objects. Each of these
     *         objects describes one attribute in the table and index key
     *         schema.
     *         
     *         Each AttributeDefinition object in this array is composed
     *         of:
     *         
     *         
     *         - 
     *         
     *         AttributeName - The name of the attribute.
     *         
     *          
     *         - 
     *         
     *         AttributeType - The data type for the attribute.
     *         
     *          
     */
    public java.util.List getAttributeDefinitions() {
        return attributeDefinitions;
    }
    /**
     * 
     * An array of AttributeDefinition objects. Each of these objects
     * describes one attribute in the table and index key schema.
     * 
     * 
     * Each AttributeDefinition object in this array is composed of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * AttributeType - The data type for the attribute.
     * 
     *  
     * 
     * 
     * @param attributeDefinitions
     *        An array of AttributeDefinition objects. Each of these
     *        objects describes one attribute in the table and index key
     *        schema.
     *        
     *        Each AttributeDefinition object in this array is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        AttributeType - The data type for the attribute.
     *        
     *         
     */
    public void setAttributeDefinitions(
            java.util.Collection attributeDefinitions) {
        if (attributeDefinitions == null) {
            this.attributeDefinitions = null;
            return;
        }
        this.attributeDefinitions = new java.util.ArrayList(
                attributeDefinitions);
    }
    /**
     * 
     * An array of AttributeDefinition objects. Each of these objects
     * describes one attribute in the table and index key schema.
     * 
     * 
     * Each AttributeDefinition object in this array is composed of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * AttributeType - The data type for the attribute.
     * 
     *  
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setAttributeDefinitions(java.util.Collection)} or
     * {@link #withAttributeDefinitions(java.util.Collection)} if you want to
     * override the existing values.
     * 
     * 
     * @param attributeDefinitions
     *        An array of AttributeDefinition objects. Each of these
     *        objects describes one attribute in the table and index key
     *        schema.
     *        
     *        Each AttributeDefinition object in this array is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        AttributeType - The data type for the attribute.
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withAttributeDefinitions(
            AttributeDefinition... attributeDefinitions) {
        if (this.attributeDefinitions == null) {
            setAttributeDefinitions(new java.util.ArrayList(
                    attributeDefinitions.length));
        }
        for (AttributeDefinition ele : attributeDefinitions) {
            this.attributeDefinitions.add(ele);
        }
        return this;
    }
    /**
     * 
     * An array of AttributeDefinition objects. Each of these objects
     * describes one attribute in the table and index key schema.
     * 
     * 
     * Each AttributeDefinition object in this array is composed of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * AttributeType - The data type for the attribute.
     * 
     *  
     * 
     * 
     * @param attributeDefinitions
     *        An array of AttributeDefinition objects. Each of these
     *        objects describes one attribute in the table and index key
     *        schema.
     *        
     *        Each AttributeDefinition object in this array is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        AttributeType - The data type for the attribute.
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withAttributeDefinitions(
            java.util.Collection attributeDefinitions) {
        setAttributeDefinitions(attributeDefinitions);
        return this;
    }
    /**
     * 
     * The name of the table.
     * 
     * 
     * @param tableName
     *        The name of the table.
     */
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }
    /**
     * 
     * The name of the table.
     * 
     * 
     * @return The name of the table.
     */
    public String getTableName() {
        return this.tableName;
    }
    /**
     * 
     * The name of the table.
     * 
     * 
     * @param tableName
     *        The name of the table.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withTableName(String tableName) {
        setTableName(tableName);
        return this;
    }
    /**
     * 
     * The primary key structure for the table. Each KeySchemaElement
     * consists of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * KeyType - The role of the attribute:
     * 
     * 
     * - 
     * 
     * HASH - partition key
     * 
     *  
     * - 
     * 
     * RANGE - sort key
     * 
     *  
     * 
     * 
     * 
     * The partition key of an item is also known as its hash attribute.
     * The term "hash attribute" derives from DynamoDB' usage of an internal
     * hash function to evenly distribute data items across partitions, based on
     * their partition key values.
     * 
     * 
     * The sort key of an item is also known as its range attribute. The
     * term "range attribute" derives from the way DynamoDB stores items with
     * the same partition key physically close together, in sorted order by the
     * sort key value.
     * 
     *   
     * 
     * 
     * For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * 
     * 
     * @return The primary key structure for the table. Each
     *         KeySchemaElement consists of:
     *         
     *         - 
     *         
     *         AttributeName - The name of the attribute.
     *         
     *          
     *         - 
     *         
     *         KeyType - The role of the attribute:
     *         
     *         
     *         - 
     *         
     *         HASH - partition key
     *         
     *          
     *         - 
     *         
     *         RANGE - sort key
     *         
     *          
     *         
     *         
     *         
     *         The partition key of an item is also known as its hash
     *         attribute. The term "hash attribute" derives from DynamoDB'
     *         usage of an internal hash function to evenly distribute data
     *         items across partitions, based on their partition key values.
     *         
     *         
     *         The sort key of an item is also known as its range
     *         attribute. The term "range attribute" derives from the way
     *         DynamoDB stores items with the same partition key physically
     *         close together, in sorted order by the sort key value.
     *         
     *           
     *         
     *         
     *         For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     */
    public java.util.List getKeySchema() {
        return keySchema;
    }
    /**
     * 
     * The primary key structure for the table. Each KeySchemaElement
     * consists of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * KeyType - The role of the attribute:
     * 
     * 
     * - 
     * 
     * HASH - partition key
     * 
     *  
     * - 
     * 
     * RANGE - sort key
     * 
     *  
     * 
     * 
     * 
     * The partition key of an item is also known as its hash attribute.
     * The term "hash attribute" derives from DynamoDB' usage of an internal
     * hash function to evenly distribute data items across partitions, based on
     * their partition key values.
     * 
     * 
     * The sort key of an item is also known as its range attribute. The
     * term "range attribute" derives from the way DynamoDB stores items with
     * the same partition key physically close together, in sorted order by the
     * sort key value.
     * 
     *   
     * 
     * 
     * For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * 
     * 
     * @param keySchema
     *        The primary key structure for the table. Each
     *        KeySchemaElement consists of: 
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        KeyType - The role of the attribute:
     *        
     *        
     *        - 
     *        
     *        HASH - partition key
     *        
     *         
     *        - 
     *        
     *        RANGE - sort key
     *        
     *         
     *        
     *        
     *        
     *        The partition key of an item is also known as its hash
     *        attribute. The term "hash attribute" derives from DynamoDB'
     *        usage of an internal hash function to evenly distribute data items
     *        across partitions, based on their partition key values.
     *        
     *        
     *        The sort key of an item is also known as its range
     *        attribute. The term "range attribute" derives from the way
     *        DynamoDB stores items with the same partition key physically close
     *        together, in sorted order by the sort key value.
     *        
     *          
     *        
     *        
     *        For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     */
    public void setKeySchema(java.util.Collection keySchema) {
        if (keySchema == null) {
            this.keySchema = null;
            return;
        }
        this.keySchema = new java.util.ArrayList(keySchema);
    }
    /**
     * 
     * The primary key structure for the table. Each KeySchemaElement
     * consists of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * KeyType - The role of the attribute:
     * 
     * 
     * - 
     * 
     * HASH - partition key
     * 
     *  
     * - 
     * 
     * RANGE - sort key
     * 
     *  
     * 
     * 
     * 
     * The partition key of an item is also known as its hash attribute.
     * The term "hash attribute" derives from DynamoDB' usage of an internal
     * hash function to evenly distribute data items across partitions, based on
     * their partition key values.
     * 
     * 
     * The sort key of an item is also known as its range attribute. The
     * term "range attribute" derives from the way DynamoDB stores items with
     * the same partition key physically close together, in sorted order by the
     * sort key value.
     * 
     *   
     * 
     * 
     * For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setKeySchema(java.util.Collection)} or
     * {@link #withKeySchema(java.util.Collection)} if you want to override the
     * existing values.
     * 
     * 
     * @param keySchema
     *        The primary key structure for the table. Each
     *        KeySchemaElement consists of:  
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        KeyType - The role of the attribute:
     *        
     *        
     *        - 
     *        
     *        HASH - partition key
     *        
     *         
     *        - 
     *        
     *        RANGE - sort key
     *        
     *         
     *        
     *        
     *        
     *        The partition key of an item is also known as its hash
     *        attribute. The term "hash attribute" derives from DynamoDB'
     *        usage of an internal hash function to evenly distribute data items
     *        across partitions, based on their partition key values.
     *        
     *        
     *        The sort key of an item is also known as its range
     *        attribute. The term "range attribute" derives from the way
     *        DynamoDB stores items with the same partition key physically close
     *        together, in sorted order by the sort key value.
     *        
     *          
     *        
     *        
     *        For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withKeySchema(KeySchemaElement... keySchema) {
        if (this.keySchema == null) {
            setKeySchema(new java.util.ArrayList(
                    keySchema.length));
        }
        for (KeySchemaElement ele : keySchema) {
            this.keySchema.add(ele);
        }
        return this;
    }
    /**
     * 
     * The primary key structure for the table. Each KeySchemaElement
     * consists of:
     * 
     * 
     * - 
     * 
     * AttributeName - The name of the attribute.
     * 
     *  
     * - 
     * 
     * KeyType - The role of the attribute:
     * 
     * 
     * - 
     * 
     * HASH - partition key
     * 
     *  
     * - 
     * 
     * RANGE - sort key
     * 
     *  
     * 
     * 
     * 
     * The partition key of an item is also known as its hash attribute.
     * The term "hash attribute" derives from DynamoDB' usage of an internal
     * hash function to evenly distribute data items across partitions, based on
     * their partition key values.
     * 
     * 
     * The sort key of an item is also known as its range attribute. The
     * term "range attribute" derives from the way DynamoDB stores items with
     * the same partition key physically close together, in sorted order by the
     * sort key value.
     * 
     *   
     * 
     * 
     * For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * 
     * 
     * @param keySchema
     *        The primary key structure for the table. Each
     *        KeySchemaElement consists of: 
     *        
     *        - 
     *        
     *        AttributeName - The name of the attribute.
     *        
     *         
     *        - 
     *        
     *        KeyType - The role of the attribute:
     *        
     *        
     *        - 
     *        
     *        HASH - partition key
     *        
     *         
     *        - 
     *        
     *        RANGE - sort key
     *        
     *         
     *        
     *        
     *        
     *        The partition key of an item is also known as its hash
     *        attribute. The term "hash attribute" derives from DynamoDB'
     *        usage of an internal hash function to evenly distribute data items
     *        across partitions, based on their partition key values.
     *        
     *        
     *        The sort key of an item is also known as its range
     *        attribute. The term "range attribute" derives from the way
     *        DynamoDB stores items with the same partition key physically close
     *        together, in sorted order by the sort key value.
     *        
     *          
     *        
     *        
     *        For more information about primary keys, see Primary Key in the Amazon DynamoDB Developer Guide.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withKeySchema(
            java.util.Collection keySchema) {
        setKeySchema(keySchema);
        return this;
    }
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     * 
     * @param tableStatus
     *        The current state of the table: 
     *        
     *        - 
     *        
     *        CREATING - The table is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The table is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The table is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The table is ready for use.
     *        
     *         
     * @see TableStatus
     */
    public void setTableStatus(String tableStatus) {
        this.tableStatus = tableStatus;
    }
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     * 
     * @return The current state of the table:
     *         
     *         - 
     *         
     *         CREATING - The table is being created.
     *         
     *          
     *         - 
     *         
     *         UPDATING - The table is being updated.
     *         
     *          
     *         - 
     *         
     *         DELETING - The table is being deleted.
     *         
     *          
     *         - 
     *         
     *         ACTIVE - The table is ready for use.
     *         
     *          
     * @see TableStatus
     */
    public String getTableStatus() {
        return this.tableStatus;
    }
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     * 
     * @param tableStatus
     *        The current state of the table:
     *        
     *        - 
     *        
     *        CREATING - The table is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The table is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The table is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The table is ready for use.
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see TableStatus
     */
    public TableDescription withTableStatus(String tableStatus) {
        setTableStatus(tableStatus);
        return this;
    }
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     * 
     * @param tableStatus
     *        The current state of the table:
     *        
     *        - 
     *        
     *        CREATING - The table is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The table is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The table is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The table is ready for use.
     *        
     *         
     * @see TableStatus
     */
    public void setTableStatus(TableStatus tableStatus) {
        this.tableStatus = tableStatus.toString();
    }
    /**
     * 
     * The current state of the table:
     * 
     * 
     * - 
     * 
     * CREATING - The table is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The table is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The table is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The table is ready for use.
     * 
     *  
     * 
     * 
     * @param tableStatus
     *        The current state of the table:
     *        
     *        - 
     *        
     *        CREATING - The table is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The table is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The table is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The table is ready for use.
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see TableStatus
     */
    public TableDescription withTableStatus(TableStatus tableStatus) {
        setTableStatus(tableStatus);
        return this;
    }
    /**
     * 
     * The date and time when the table was created, in UNIX epoch time format.
     * 
     * 
     * @param creationDateTime
     *        The date and time when the table was created, in UNIX epoch time format.
     */
    public void setCreationDateTime(java.util.Date creationDateTime) {
        this.creationDateTime = creationDateTime;
    }
    /**
     * 
     * The date and time when the table was created, in UNIX epoch time format.
     * 
     * 
     * @return The date and time when the table was created, in UNIX epoch time format.
     */
    public java.util.Date getCreationDateTime() {
        return this.creationDateTime;
    }
    /**
     * 
     * The date and time when the table was created, in UNIX epoch time format.
     * 
     * 
     * @param creationDateTime
     *        The date and time when the table was created, in UNIX epoch time format.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withCreationDateTime(java.util.Date creationDateTime) {
        setCreationDateTime(creationDateTime);
        return this;
    }
    /**
     * 
     * The provisioned throughput settings for the table, consisting of read and
     * write capacity units, along with data about increases and decreases.
     * 
     * 
     * @param provisionedThroughput
     *        The provisioned throughput settings for the table, consisting of
     *        read and write capacity units, along with data about increases and
     *        decreases.
     */
    public void setProvisionedThroughput(
            ProvisionedThroughputDescription provisionedThroughput) {
        this.provisionedThroughput = provisionedThroughput;
    }
    /**
     * 
     * The provisioned throughput settings for the table, consisting of read and
     * write capacity units, along with data about increases and decreases.
     * 
     * 
     * @return The provisioned throughput settings for the table, consisting of
     *         read and write capacity units, along with data about increases
     *         and decreases.
     */
    public ProvisionedThroughputDescription getProvisionedThroughput() {
        return this.provisionedThroughput;
    }
    /**
     * 
     * The provisioned throughput settings for the table, consisting of read and
     * write capacity units, along with data about increases and decreases.
     * 
     * 
     * @param provisionedThroughput
     *        The provisioned throughput settings for the table, consisting of
     *        read and write capacity units, along with data about increases and
     *        decreases.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withProvisionedThroughput(
            ProvisionedThroughputDescription provisionedThroughput) {
        setProvisionedThroughput(provisionedThroughput);
        return this;
    }
    /**
     * 
     * The total size of the specified table, in bytes. DynamoDB updates this
     * value approximately every six hours. Recent changes might not be
     * reflected in this value.
     * 
     * 
     * @param tableSizeBytes
     *        The total size of the specified table, in bytes. DynamoDB updates
     *        this value approximately every six hours. Recent changes might not
     *        be reflected in this value.
     */
    public void setTableSizeBytes(Long tableSizeBytes) {
        this.tableSizeBytes = tableSizeBytes;
    }
    /**
     * 
     * The total size of the specified table, in bytes. DynamoDB updates this
     * value approximately every six hours. Recent changes might not be
     * reflected in this value.
     * 
     * 
     * @return The total size of the specified table, in bytes. DynamoDB updates
     *         this value approximately every six hours. Recent changes might
     *         not be reflected in this value.
     */
    public Long getTableSizeBytes() {
        return this.tableSizeBytes;
    }
    /**
     * 
     * The total size of the specified table, in bytes. DynamoDB updates this
     * value approximately every six hours. Recent changes might not be
     * reflected in this value.
     * 
     * 
     * @param tableSizeBytes
     *        The total size of the specified table, in bytes. DynamoDB updates
     *        this value approximately every six hours. Recent changes might not
     *        be reflected in this value.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withTableSizeBytes(Long tableSizeBytes) {
        setTableSizeBytes(tableSizeBytes);
        return this;
    }
    /**
     * 
     * The number of items in the specified table. DynamoDB updates this value
     * approximately every six hours. Recent changes might not be reflected in
     * this value.
     * 
     * 
     * @param itemCount
     *        The number of items in the specified table. DynamoDB updates this
     *        value approximately every six hours. Recent changes might not be
     *        reflected in this value.
     */
    public void setItemCount(Long itemCount) {
        this.itemCount = itemCount;
    }
    /**
     * 
     * The number of items in the specified table. DynamoDB updates this value
     * approximately every six hours. Recent changes might not be reflected in
     * this value.
     * 
     * 
     * @return The number of items in the specified table. DynamoDB updates this
     *         value approximately every six hours. Recent changes might not be
     *         reflected in this value.
     */
    public Long getItemCount() {
        return this.itemCount;
    }
    /**
     * 
     * The number of items in the specified table. DynamoDB updates this value
     * approximately every six hours. Recent changes might not be reflected in
     * this value.
     * 
     * 
     * @param itemCount
     *        The number of items in the specified table. DynamoDB updates this
     *        value approximately every six hours. Recent changes might not be
     *        reflected in this value.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withItemCount(Long itemCount) {
        setItemCount(itemCount);
        return this;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the table.
     * 
     * 
     * @param tableArn
     *        The Amazon Resource Name (ARN) that uniquely identifies the table.
     */
    public void setTableArn(String tableArn) {
        this.tableArn = tableArn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the table.
     * 
     * 
     * @return The Amazon Resource Name (ARN) that uniquely identifies the
     *         table.
     */
    public String getTableArn() {
        return this.tableArn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the table.
     * 
     * 
     * @param tableArn
     *        The Amazon Resource Name (ARN) that uniquely identifies the table.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withTableArn(String tableArn) {
        setTableArn(tableArn);
        return this;
    }
    /**
     * 
     * Represents one or more local secondary indexes on the table. Each index
     * is scoped to a given partition key value. Tables with one or more local
     * secondary indexes are subject to an item collection size limit, where the
     * amount of data within a given item collection cannot exceed 10 GB. Each
     * element is composed of:
     * 
     * 
     * - 
     * 
     * IndexName - The name of the local secondary index.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - Represents the total size of the index, in bytes.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * ItemCount - Represents the number of items in the index. DynamoDB
     * updates this value approximately every six hours. Recent changes might
     * not be reflected in this value.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @return Represents one or more local secondary indexes on the table. Each
     *         index is scoped to a given partition key value. Tables with one
     *         or more local secondary indexes are subject to an item collection
     *         size limit, where the amount of data within a given item
     *         collection cannot exceed 10 GB. Each element is composed of:
     *         
     *         - 
     *         
     *         IndexName - The name of the local secondary index.
     *         
     *          
     *         - 
     *         
     *         KeySchema - Specifies the complete index key schema. The
     *         attribute names in the key schema must be between 1 and 255
     *         characters (inclusive). The key schema must begin with the same
     *         partition key as the table.
     *         
     *          
     *         - 
     *         
     *         Projection - Specifies attributes that are copied
     *         (projected) from the table into the index. These are in addition
     *         to the primary key attributes and index key attributes, which are
     *         automatically projected. Each attribute specification is composed
     *         of:
     *         
     *         
     *         - 
     *         
     *         ProjectionType - One of the following:
     *         
     *         
     *         - 
     *         
     *         KEYS_ONLY - Only the index and primary keys are
     *         projected into the index.
     *         
     *          
     *         - 
     *         
     *         INCLUDE - Only the specified table attributes are
     *         projected into the index. The list of projected attributes are in
     *         NonKeyAttributes.
     *         
     *          
     *         - 
     *         
     *         ALL - All of the table attributes are projected into
     *         the index.
     *         
     *          
     *         
     *          
     *         - 
     *         
     *         NonKeyAttributes - A list of one or more non-key attribute
     *         names that are projected into the secondary index. The total
     *         count of attributes provided in NonKeyAttributes, summed
     *         across all of the secondary indexes, must not exceed 20. If you
     *         project the same attribute into two different indexes, this
     *         counts as two distinct attributes when determining the total.
     *         
     *          
     *         
     *          
     *         - 
     *         
     *         IndexSizeBytes - Represents the total size of the index,
     *         in bytes. DynamoDB updates this value approximately every six
     *         hours. Recent changes might not be reflected in this value.
     *         
     *          
     *         - 
     *         
     *         ItemCount - Represents the number of items in the index.
     *         DynamoDB updates this value approximately every six hours. Recent
     *         changes might not be reflected in this value.
     *         
     *          
     *         
     *         
     *         If the table is in the DELETING state, no
     *         information about indexes will be returned.
     */
    public java.util.List getLocalSecondaryIndexes() {
        return localSecondaryIndexes;
    }
    /**
     * 
     * Represents one or more local secondary indexes on the table. Each index
     * is scoped to a given partition key value. Tables with one or more local
     * secondary indexes are subject to an item collection size limit, where the
     * amount of data within a given item collection cannot exceed 10 GB. Each
     * element is composed of:
     * 
     * 
     * - 
     * 
     * IndexName - The name of the local secondary index.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - Represents the total size of the index, in bytes.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * ItemCount - Represents the number of items in the index. DynamoDB
     * updates this value approximately every six hours. Recent changes might
     * not be reflected in this value.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @param localSecondaryIndexes
     *        Represents one or more local secondary indexes on the table. Each
     *        index is scoped to a given partition key value. Tables with one or
     *        more local secondary indexes are subject to an item collection
     *        size limit, where the amount of data within a given item
     *        collection cannot exceed 10 GB. Each element is composed of: 
     *        
     *        - 
     *        
     *        IndexName - The name of the local secondary index.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - Represents the total size of the index, in
     *        bytes. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        ItemCount - Represents the number of items in the index.
     *        DynamoDB updates this value approximately every six hours. Recent
     *        changes might not be reflected in this value.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     */
    public void setLocalSecondaryIndexes(
            java.util.Collection localSecondaryIndexes) {
        if (localSecondaryIndexes == null) {
            this.localSecondaryIndexes = null;
            return;
        }
        this.localSecondaryIndexes = new java.util.ArrayList(
                localSecondaryIndexes);
    }
    /**
     * 
     * Represents one or more local secondary indexes on the table. Each index
     * is scoped to a given partition key value. Tables with one or more local
     * secondary indexes are subject to an item collection size limit, where the
     * amount of data within a given item collection cannot exceed 10 GB. Each
     * element is composed of:
     * 
     * 
     * - 
     * 
     * IndexName - The name of the local secondary index.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - Represents the total size of the index, in bytes.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * ItemCount - Represents the number of items in the index. DynamoDB
     * updates this value approximately every six hours. Recent changes might
     * not be reflected in this value.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setLocalSecondaryIndexes(java.util.Collection)} or
     * {@link #withLocalSecondaryIndexes(java.util.Collection)} if you want to
     * override the existing values.
     * 
     * 
     * @param localSecondaryIndexes
     *        Represents one or more local secondary indexes on the table. Each
     *        index is scoped to a given partition key value. Tables with one or
     *        more local secondary indexes are subject to an item collection
     *        size limit, where the amount of data within a given item
     *        collection cannot exceed 10 GB. Each element is composed of:  
     *        
     *        - 
     *        
     *        IndexName - The name of the local secondary index.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - Represents the total size of the index, in
     *        bytes. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        ItemCount - Represents the number of items in the index.
     *        DynamoDB updates this value approximately every six hours. Recent
     *        changes might not be reflected in this value.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withLocalSecondaryIndexes(
            LocalSecondaryIndexDescription... localSecondaryIndexes) {
        if (this.localSecondaryIndexes == null) {
            setLocalSecondaryIndexes(new java.util.ArrayList(
                    localSecondaryIndexes.length));
        }
        for (LocalSecondaryIndexDescription ele : localSecondaryIndexes) {
            this.localSecondaryIndexes.add(ele);
        }
        return this;
    }
    /**
     * 
     * Represents one or more local secondary indexes on the table. Each index
     * is scoped to a given partition key value. Tables with one or more local
     * secondary indexes are subject to an item collection size limit, where the
     * amount of data within a given item collection cannot exceed 10 GB. Each
     * element is composed of:
     * 
     * 
     * - 
     * 
     * IndexName - The name of the local secondary index.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - Represents the total size of the index, in bytes.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * ItemCount - Represents the number of items in the index. DynamoDB
     * updates this value approximately every six hours. Recent changes might
     * not be reflected in this value.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @param localSecondaryIndexes
     *        Represents one or more local secondary indexes on the table. Each
     *        index is scoped to a given partition key value. Tables with one or
     *        more local secondary indexes are subject to an item collection
     *        size limit, where the amount of data within a given item
     *        collection cannot exceed 10 GB. Each element is composed of: 
     *        
     *        - 
     *        
     *        IndexName - The name of the local secondary index.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - Represents the total size of the index, in
     *        bytes. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        ItemCount - Represents the number of items in the index.
     *        DynamoDB updates this value approximately every six hours. Recent
     *        changes might not be reflected in this value.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withLocalSecondaryIndexes(
            java.util.Collection localSecondaryIndexes) {
        setLocalSecondaryIndexes(localSecondaryIndexes);
        return this;
    }
    /**
     * 
     * The global secondary indexes, if any, on the table. Each index is scoped
     * to a given partition key value. Each element is composed of:
     * 
     * 
     * - 
     * 
     * Backfilling - If true, then the index is currently in the
     * backfilling phase. Backfilling occurs only when a new global secondary
     * index is added to the table; it is the process by which DynamoDB
     * populates the new index with data from the table. (This attribute does
     * not appear for indexes that were created during a CreateTable
     * operation.)
     * 
     *  
     * - 
     * 
     * IndexName - The name of the global secondary index.
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - The total size of the global secondary index, in
     * bytes. DynamoDB updates this value approximately every six hours. Recent
     * changes might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * IndexStatus - The current status of the global secondary index:
     * 
     * 
     * - 
     * 
     * CREATING - The index is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The index is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The index is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The index is ready for use.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ItemCount - The number of items in the global secondary index.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ProvisionedThroughput - The provisioned throughput settings for
     * the global secondary index, consisting of read and write capacity units,
     * along with data about increases and decreases.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @return The global secondary indexes, if any, on the table. Each index is
     *         scoped to a given partition key value. Each element is composed
     *         of: 
     *         
     *         - 
     *         
     *         Backfilling - If true, then the index is currently in the
     *         backfilling phase. Backfilling occurs only when a new global
     *         secondary index is added to the table; it is the process by which
     *         DynamoDB populates the new index with data from the table. (This
     *         attribute does not appear for indexes that were created during a
     *         CreateTable operation.)
     *         
     *          
     *         - 
     *         
     *         IndexName - The name of the global secondary index.
     *         
     *          
     *         - 
     *         
     *         IndexSizeBytes - The total size of the global secondary
     *         index, in bytes. DynamoDB updates this value approximately every
     *         six hours. Recent changes might not be reflected in this value.
     *         
     *          
     *         - 
     *         
     *         IndexStatus - The current status of the global secondary
     *         index:
     *         
     *         
     *         - 
     *         
     *         CREATING - The index is being created.
     *         
     *          
     *         - 
     *         
     *         UPDATING - The index is being updated.
     *         
     *          
     *         - 
     *         
     *         DELETING - The index is being deleted.
     *         
     *          
     *         - 
     *         
     *         ACTIVE - The index is ready for use.
     *         
     *          
     *         
     *          
     *         - 
     *         
     *         ItemCount - The number of items in the global secondary
     *         index. DynamoDB updates this value approximately every six hours.
     *         Recent changes might not be reflected in this value.
     *         
     *          
     *         - 
     *         
     *         KeySchema - Specifies the complete index key schema. The
     *         attribute names in the key schema must be between 1 and 255
     *         characters (inclusive). The key schema must begin with the same
     *         partition key as the table.
     *         
     *          
     *         - 
     *         
     *         Projection - Specifies attributes that are copied
     *         (projected) from the table into the index. These are in addition
     *         to the primary key attributes and index key attributes, which are
     *         automatically projected. Each attribute specification is composed
     *         of:
     *         
     *         
     *         - 
     *         
     *         ProjectionType - One of the following:
     *         
     *         
     *         - 
     *         
     *         KEYS_ONLY - Only the index and primary keys are
     *         projected into the index.
     *         
     *          
     *         - 
     *         
     *         INCLUDE - Only the specified table attributes are
     *         projected into the index. The list of projected attributes are in
     *         NonKeyAttributes.
     *         
     *          
     *         - 
     *         
     *         ALL - All of the table attributes are projected into
     *         the index.
     *         
     *          
     *         
     *          
     *         - 
     *         
     *         NonKeyAttributes - A list of one or more non-key attribute
     *         names that are projected into the secondary index. The total
     *         count of attributes provided in NonKeyAttributes, summed
     *         across all of the secondary indexes, must not exceed 20. If you
     *         project the same attribute into two different indexes, this
     *         counts as two distinct attributes when determining the total.
     *         
     *          
     *         
     *          
     *         - 
     *         
     *         ProvisionedThroughput - The provisioned throughput
     *         settings for the global secondary index, consisting of read and
     *         write capacity units, along with data about increases and
     *         decreases.
     *         
     *          
     *         
     *         
     *         If the table is in the DELETING state, no
     *         information about indexes will be returned.
     */
    public java.util.List getGlobalSecondaryIndexes() {
        return globalSecondaryIndexes;
    }
    /**
     * 
     * The global secondary indexes, if any, on the table. Each index is scoped
     * to a given partition key value. Each element is composed of:
     * 
     * 
     * - 
     * 
     * Backfilling - If true, then the index is currently in the
     * backfilling phase. Backfilling occurs only when a new global secondary
     * index is added to the table; it is the process by which DynamoDB
     * populates the new index with data from the table. (This attribute does
     * not appear for indexes that were created during a CreateTable
     * operation.)
     * 
     *  
     * - 
     * 
     * IndexName - The name of the global secondary index.
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - The total size of the global secondary index, in
     * bytes. DynamoDB updates this value approximately every six hours. Recent
     * changes might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * IndexStatus - The current status of the global secondary index:
     * 
     * 
     * - 
     * 
     * CREATING - The index is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The index is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The index is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The index is ready for use.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ItemCount - The number of items in the global secondary index.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ProvisionedThroughput - The provisioned throughput settings for
     * the global secondary index, consisting of read and write capacity units,
     * along with data about increases and decreases.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @param globalSecondaryIndexes
     *        The global secondary indexes, if any, on the table. Each index is
     *        scoped to a given partition key value. Each element is composed
     *        of: 
     *        
     *        - 
     *        
     *        Backfilling - If true, then the index is currently in the
     *        backfilling phase. Backfilling occurs only when a new global
     *        secondary index is added to the table; it is the process by which
     *        DynamoDB populates the new index with data from the table. (This
     *        attribute does not appear for indexes that were created during a
     *        CreateTable operation.)
     *        
     *         
     *        - 
     *        
     *        IndexName - The name of the global secondary index.
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - The total size of the global secondary
     *        index, in bytes. DynamoDB updates this value approximately every
     *        six hours. Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        IndexStatus - The current status of the global secondary
     *        index:
     *        
     *        
     *        - 
     *        
     *        CREATING - The index is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The index is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The index is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The index is ready for use.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ItemCount - The number of items in the global secondary
     *        index. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ProvisionedThroughput - The provisioned throughput settings
     *        for the global secondary index, consisting of read and write
     *        capacity units, along with data about increases and decreases.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     */
    public void setGlobalSecondaryIndexes(
            java.util.Collection globalSecondaryIndexes) {
        if (globalSecondaryIndexes == null) {
            this.globalSecondaryIndexes = null;
            return;
        }
        this.globalSecondaryIndexes = new java.util.ArrayList(
                globalSecondaryIndexes);
    }
    /**
     * 
     * The global secondary indexes, if any, on the table. Each index is scoped
     * to a given partition key value. Each element is composed of:
     * 
     * 
     * - 
     * 
     * Backfilling - If true, then the index is currently in the
     * backfilling phase. Backfilling occurs only when a new global secondary
     * index is added to the table; it is the process by which DynamoDB
     * populates the new index with data from the table. (This attribute does
     * not appear for indexes that were created during a CreateTable
     * operation.)
     * 
     *  
     * - 
     * 
     * IndexName - The name of the global secondary index.
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - The total size of the global secondary index, in
     * bytes. DynamoDB updates this value approximately every six hours. Recent
     * changes might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * IndexStatus - The current status of the global secondary index:
     * 
     * 
     * - 
     * 
     * CREATING - The index is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The index is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The index is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The index is ready for use.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ItemCount - The number of items in the global secondary index.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ProvisionedThroughput - The provisioned throughput settings for
     * the global secondary index, consisting of read and write capacity units,
     * along with data about increases and decreases.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setGlobalSecondaryIndexes(java.util.Collection)} or
     * {@link #withGlobalSecondaryIndexes(java.util.Collection)} if you want to
     * override the existing values.
     * 
     * 
     * @param globalSecondaryIndexes
     *        The global secondary indexes, if any, on the table. Each index is
     *        scoped to a given partition key value. Each element is composed
     *        of:  
     *        
     *        - 
     *        
     *        Backfilling - If true, then the index is currently in the
     *        backfilling phase. Backfilling occurs only when a new global
     *        secondary index is added to the table; it is the process by which
     *        DynamoDB populates the new index with data from the table. (This
     *        attribute does not appear for indexes that were created during a
     *        CreateTable operation.)
     *        
     *         
     *        - 
     *        
     *        IndexName - The name of the global secondary index.
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - The total size of the global secondary
     *        index, in bytes. DynamoDB updates this value approximately every
     *        six hours. Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        IndexStatus - The current status of the global secondary
     *        index:
     *        
     *        
     *        - 
     *        
     *        CREATING - The index is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The index is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The index is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The index is ready for use.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ItemCount - The number of items in the global secondary
     *        index. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ProvisionedThroughput - The provisioned throughput settings
     *        for the global secondary index, consisting of read and write
     *        capacity units, along with data about increases and decreases.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withGlobalSecondaryIndexes(
            GlobalSecondaryIndexDescription... globalSecondaryIndexes) {
        if (this.globalSecondaryIndexes == null) {
            setGlobalSecondaryIndexes(new java.util.ArrayList(
                    globalSecondaryIndexes.length));
        }
        for (GlobalSecondaryIndexDescription ele : globalSecondaryIndexes) {
            this.globalSecondaryIndexes.add(ele);
        }
        return this;
    }
    /**
     * 
     * The global secondary indexes, if any, on the table. Each index is scoped
     * to a given partition key value. Each element is composed of:
     * 
     * 
     * - 
     * 
     * Backfilling - If true, then the index is currently in the
     * backfilling phase. Backfilling occurs only when a new global secondary
     * index is added to the table; it is the process by which DynamoDB
     * populates the new index with data from the table. (This attribute does
     * not appear for indexes that were created during a CreateTable
     * operation.)
     * 
     *  
     * - 
     * 
     * IndexName - The name of the global secondary index.
     * 
     *  
     * - 
     * 
     * IndexSizeBytes - The total size of the global secondary index, in
     * bytes. DynamoDB updates this value approximately every six hours. Recent
     * changes might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * IndexStatus - The current status of the global secondary index:
     * 
     * 
     * - 
     * 
     * CREATING - The index is being created.
     * 
     *  
     * - 
     * 
     * UPDATING - The index is being updated.
     * 
     *  
     * - 
     * 
     * DELETING - The index is being deleted.
     * 
     *  
     * - 
     * 
     * ACTIVE - The index is ready for use.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ItemCount - The number of items in the global secondary index.
     * DynamoDB updates this value approximately every six hours. Recent changes
     * might not be reflected in this value.
     * 
     *  
     * - 
     * 
     * KeySchema - Specifies the complete index key schema. The attribute
     * names in the key schema must be between 1 and 255 characters (inclusive).
     * The key schema must begin with the same partition key as the table.
     * 
     *  
     * - 
     * 
     * Projection - Specifies attributes that are copied (projected) from
     * the table into the index. These are in addition to the primary key
     * attributes and index key attributes, which are automatically projected.
     * Each attribute specification is composed of:
     * 
     * 
     * - 
     * 
     * ProjectionType - One of the following:
     * 
     * 
     * - 
     * 
     * KEYS_ONLY - Only the index and primary keys are projected
     * into the index.
     * 
     *  
     * - 
     * 
     * INCLUDE - Only the specified table attributes are projected
     * into the index. The list of projected attributes are in
     * NonKeyAttributes.
     * 
     *  
     * - 
     * 
     * ALL - All of the table attributes are projected into the
     * index.
     * 
     *  
     * 
     *  
     * - 
     * 
     * NonKeyAttributes - A list of one or more non-key attribute names
     * that are projected into the secondary index. The total count of
     * attributes provided in NonKeyAttributes, summed across all of the
     * secondary indexes, must not exceed 20. If you project the same attribute
     * into two different indexes, this counts as two distinct attributes when
     * determining the total.
     * 
     *  
     * 
     *  
     * - 
     * 
     * ProvisionedThroughput - The provisioned throughput settings for
     * the global secondary index, consisting of read and write capacity units,
     * along with data about increases and decreases.
     * 
     *  
     * 
     * 
     * If the table is in the DELETING state, no information about
     * indexes will be returned.
     * 
     * 
     * @param globalSecondaryIndexes
     *        The global secondary indexes, if any, on the table. Each index is
     *        scoped to a given partition key value. Each element is composed
     *        of: 
     *        
     *        - 
     *        
     *        Backfilling - If true, then the index is currently in the
     *        backfilling phase. Backfilling occurs only when a new global
     *        secondary index is added to the table; it is the process by which
     *        DynamoDB populates the new index with data from the table. (This
     *        attribute does not appear for indexes that were created during a
     *        CreateTable operation.)
     *        
     *         
     *        - 
     *        
     *        IndexName - The name of the global secondary index.
     *        
     *         
     *        - 
     *        
     *        IndexSizeBytes - The total size of the global secondary
     *        index, in bytes. DynamoDB updates this value approximately every
     *        six hours. Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        IndexStatus - The current status of the global secondary
     *        index:
     *        
     *        
     *        - 
     *        
     *        CREATING - The index is being created.
     *        
     *         
     *        - 
     *        
     *        UPDATING - The index is being updated.
     *        
     *         
     *        - 
     *        
     *        DELETING - The index is being deleted.
     *        
     *         
     *        - 
     *        
     *        ACTIVE - The index is ready for use.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ItemCount - The number of items in the global secondary
     *        index. DynamoDB updates this value approximately every six hours.
     *        Recent changes might not be reflected in this value.
     *        
     *         
     *        - 
     *        
     *        KeySchema - Specifies the complete index key schema. The
     *        attribute names in the key schema must be between 1 and 255
     *        characters (inclusive). The key schema must begin with the same
     *        partition key as the table.
     *        
     *         
     *        - 
     *        
     *        Projection - Specifies attributes that are copied
     *        (projected) from the table into the index. These are in addition
     *        to the primary key attributes and index key attributes, which are
     *        automatically projected. Each attribute specification is composed
     *        of:
     *        
     *        
     *        - 
     *        
     *        ProjectionType - One of the following:
     *        
     *        
     *        - 
     *        
     *        KEYS_ONLY - Only the index and primary keys are
     *        projected into the index.
     *        
     *         
     *        - 
     *        
     *        INCLUDE - Only the specified table attributes are
     *        projected into the index. The list of projected attributes are in
     *        NonKeyAttributes.
     *        
     *         
     *        - 
     *        
     *        ALL - All of the table attributes are projected into
     *        the index.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        NonKeyAttributes - A list of one or more non-key attribute
     *        names that are projected into the secondary index. The total count
     *        of attributes provided in NonKeyAttributes, summed across
     *        all of the secondary indexes, must not exceed 20. If you project
     *        the same attribute into two different indexes, this counts as two
     *        distinct attributes when determining the total.
     *        
     *         
     *        
     *         
     *        - 
     *        
     *        ProvisionedThroughput - The provisioned throughput settings
     *        for the global secondary index, consisting of read and write
     *        capacity units, along with data about increases and decreases.
     *        
     *         
     *        
     *        
     *        If the table is in the DELETING state, no information
     *        about indexes will be returned.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withGlobalSecondaryIndexes(
            java.util.Collection globalSecondaryIndexes) {
        setGlobalSecondaryIndexes(globalSecondaryIndexes);
        return this;
    }
    /**
     * 
     * The current DynamoDB Streams configuration for the table.
     * 
     * 
     * @param streamSpecification
     *        The current DynamoDB Streams configuration for the table.
     */
    public void setStreamSpecification(StreamSpecification streamSpecification) {
        this.streamSpecification = streamSpecification;
    }
    /**
     * 
     * The current DynamoDB Streams configuration for the table.
     * 
     * 
     * @return The current DynamoDB Streams configuration for the table.
     */
    public StreamSpecification getStreamSpecification() {
        return this.streamSpecification;
    }
    /**
     * 
     * The current DynamoDB Streams configuration for the table.
     * 
     * 
     * @param streamSpecification
     *        The current DynamoDB Streams configuration for the table.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withStreamSpecification(
            StreamSpecification streamSpecification) {
        setStreamSpecification(streamSpecification);
        return this;
    }
    /**
     * 
     * A timestamp, in ISO 8601 format, for this stream.
     * 
     * 
     * Note that LatestStreamLabel is not a unique identifier for the
     * stream, because it is possible that a stream from another table might
     * have the same timestamp. However, the combination of the following three
     * elements is guaranteed to be unique:
     * 
     * 
     * - 
     * 
     * the AWS customer ID.
     * 
     *  
     * - 
     * 
     * the table name.
     * 
     *  
     * - 
     * 
     * the StreamLabel.
     * 
     *  
     * 
     * 
     * @param latestStreamLabel
     *        A timestamp, in ISO 8601 format, for this stream. 
     *        
     *        Note that LatestStreamLabel is not a unique identifier for
     *        the stream, because it is possible that a stream from another
     *        table might have the same timestamp. However, the combination of
     *        the following three elements is guaranteed to be unique:
     *        
     *        
     *        - 
     *        
     *        the AWS customer ID.
     *        
     *         
     *        - 
     *        
     *        the table name.
     *        
     *         
     *        - 
     *        
     *        the StreamLabel.
     *        
     *         
     */
    public void setLatestStreamLabel(String latestStreamLabel) {
        this.latestStreamLabel = latestStreamLabel;
    }
    /**
     * 
     * A timestamp, in ISO 8601 format, for this stream.
     * 
     * 
     * Note that LatestStreamLabel is not a unique identifier for the
     * stream, because it is possible that a stream from another table might
     * have the same timestamp. However, the combination of the following three
     * elements is guaranteed to be unique:
     * 
     * 
     * - 
     * 
     * the AWS customer ID.
     * 
     *  
     * - 
     * 
     * the table name.
     * 
     *  
     * - 
     * 
     * the StreamLabel.
     * 
     *  
     * 
     * 
     * @return A timestamp, in ISO 8601 format, for this stream.
     *         
     *         Note that LatestStreamLabel is not a unique identifier for
     *         the stream, because it is possible that a stream from another
     *         table might have the same timestamp. However, the combination of
     *         the following three elements is guaranteed to be unique:
     *         
     *         
     *         - 
     *         
     *         the AWS customer ID.
     *         
     *          
     *         - 
     *         
     *         the table name.
     *         
     *          
     *         - 
     *         
     *         the StreamLabel.
     *         
     *          
     */
    public String getLatestStreamLabel() {
        return this.latestStreamLabel;
    }
    /**
     * 
     * A timestamp, in ISO 8601 format, for this stream.
     * 
     * 
     * Note that LatestStreamLabel is not a unique identifier for the
     * stream, because it is possible that a stream from another table might
     * have the same timestamp. However, the combination of the following three
     * elements is guaranteed to be unique:
     * 
     * 
     * - 
     * 
     * the AWS customer ID.
     * 
     *  
     * - 
     * 
     * the table name.
     * 
     *  
     * - 
     * 
     * the StreamLabel.
     * 
     *  
     * 
     * 
     * @param latestStreamLabel
     *        A timestamp, in ISO 8601 format, for this stream.
     *        
     *        Note that LatestStreamLabel is not a unique identifier for
     *        the stream, because it is possible that a stream from another
     *        table might have the same timestamp. However, the combination of
     *        the following three elements is guaranteed to be unique:
     *        
     *        
     *        - 
     *        
     *        the AWS customer ID.
     *        
     *         
     *        - 
     *        
     *        the table name.
     *        
     *         
     *        - 
     *        
     *        the StreamLabel.
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withLatestStreamLabel(String latestStreamLabel) {
        setLatestStreamLabel(latestStreamLabel);
        return this;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the latest stream
     * for this table.
     * 
     * 
     * @param latestStreamArn
     *        The Amazon Resource Name (ARN) that uniquely identifies the latest
     *        stream for this table.
     */
    public void setLatestStreamArn(String latestStreamArn) {
        this.latestStreamArn = latestStreamArn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the latest stream
     * for this table.
     * 
     * 
     * @return The Amazon Resource Name (ARN) that uniquely identifies the
     *         latest stream for this table.
     */
    public String getLatestStreamArn() {
        return this.latestStreamArn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) that uniquely identifies the latest stream
     * for this table.
     * 
     * 
     * @param latestStreamArn
     *        The Amazon Resource Name (ARN) that uniquely identifies the latest
     *        stream for this table.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public TableDescription withLatestStreamArn(String latestStreamArn) {
        setLatestStreamArn(latestStreamArn);
        return this;
    }
    /**
     * Returns a string representation of this object; useful for testing and
     * debugging.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getAttributeDefinitions() != null)
            sb.append("AttributeDefinitions: " + getAttributeDefinitions()
                    + ",");
        if (getTableName() != null)
            sb.append("TableName: " + getTableName() + ",");
        if (getKeySchema() != null)
            sb.append("KeySchema: " + getKeySchema() + ",");
        if (getTableStatus() != null)
            sb.append("TableStatus: " + getTableStatus() + ",");
        if (getCreationDateTime() != null)
            sb.append("CreationDateTime: " + getCreationDateTime() + ",");
        if (getProvisionedThroughput() != null)
            sb.append("ProvisionedThroughput: " + getProvisionedThroughput()
                    + ",");
        if (getTableSizeBytes() != null)
            sb.append("TableSizeBytes: " + getTableSizeBytes() + ",");
        if (getItemCount() != null)
            sb.append("ItemCount: " + getItemCount() + ",");
        if (getTableArn() != null)
            sb.append("TableArn: " + getTableArn() + ",");
        if (getLocalSecondaryIndexes() != null)
            sb.append("LocalSecondaryIndexes: " + getLocalSecondaryIndexes()
                    + ",");
        if (getGlobalSecondaryIndexes() != null)
            sb.append("GlobalSecondaryIndexes: " + getGlobalSecondaryIndexes()
                    + ",");
        if (getStreamSpecification() != null)
            sb.append("StreamSpecification: " + getStreamSpecification() + ",");
        if (getLatestStreamLabel() != null)
            sb.append("LatestStreamLabel: " + getLatestStreamLabel() + ",");
        if (getLatestStreamArn() != null)
            sb.append("LatestStreamArn: " + getLatestStreamArn());
        sb.append("}");
        return sb.toString();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj instanceof TableDescription == false)
            return false;
        TableDescription other = (TableDescription) obj;
        if (other.getAttributeDefinitions() == null
                ^ this.getAttributeDefinitions() == null)
            return false;
        if (other.getAttributeDefinitions() != null
                && other.getAttributeDefinitions().equals(
                        this.getAttributeDefinitions()) == false)
            return false;
        if (other.getTableName() == null ^ this.getTableName() == null)
            return false;
        if (other.getTableName() != null
                && other.getTableName().equals(this.getTableName()) == false)
            return false;
        if (other.getKeySchema() == null ^ this.getKeySchema() == null)
            return false;
        if (other.getKeySchema() != null
                && other.getKeySchema().equals(this.getKeySchema()) == false)
            return false;
        if (other.getTableStatus() == null ^ this.getTableStatus() == null)
            return false;
        if (other.getTableStatus() != null
                && other.getTableStatus().equals(this.getTableStatus()) == false)
            return false;
        if (other.getCreationDateTime() == null
                ^ this.getCreationDateTime() == null)
            return false;
        if (other.getCreationDateTime() != null
                && other.getCreationDateTime().equals(
                        this.getCreationDateTime()) == false)
            return false;
        if (other.getProvisionedThroughput() == null
                ^ this.getProvisionedThroughput() == null)
            return false;
        if (other.getProvisionedThroughput() != null
                && other.getProvisionedThroughput().equals(
                        this.getProvisionedThroughput()) == false)
            return false;
        if (other.getTableSizeBytes() == null
                ^ this.getTableSizeBytes() == null)
            return false;
        if (other.getTableSizeBytes() != null
                && other.getTableSizeBytes().equals(this.getTableSizeBytes()) == false)
            return false;
        if (other.getItemCount() == null ^ this.getItemCount() == null)
            return false;
        if (other.getItemCount() != null
                && other.getItemCount().equals(this.getItemCount()) == false)
            return false;
        if (other.getTableArn() == null ^ this.getTableArn() == null)
            return false;
        if (other.getTableArn() != null
                && other.getTableArn().equals(this.getTableArn()) == false)
            return false;
        if (other.getLocalSecondaryIndexes() == null
                ^ this.getLocalSecondaryIndexes() == null)
            return false;
        if (other.getLocalSecondaryIndexes() != null
                && other.getLocalSecondaryIndexes().equals(
                        this.getLocalSecondaryIndexes()) == false)
            return false;
        if (other.getGlobalSecondaryIndexes() == null
                ^ this.getGlobalSecondaryIndexes() == null)
            return false;
        if (other.getGlobalSecondaryIndexes() != null
                && other.getGlobalSecondaryIndexes().equals(
                        this.getGlobalSecondaryIndexes()) == false)
            return false;
        if (other.getStreamSpecification() == null
                ^ this.getStreamSpecification() == null)
            return false;
        if (other.getStreamSpecification() != null
                && other.getStreamSpecification().equals(
                        this.getStreamSpecification()) == false)
            return false;
        if (other.getLatestStreamLabel() == null
                ^ this.getLatestStreamLabel() == null)
            return false;
        if (other.getLatestStreamLabel() != null
                && other.getLatestStreamLabel().equals(
                        this.getLatestStreamLabel()) == false)
            return false;
        if (other.getLatestStreamArn() == null
                ^ this.getLatestStreamArn() == null)
            return false;
        if (other.getLatestStreamArn() != null
                && other.getLatestStreamArn().equals(this.getLatestStreamArn()) == false)
            return false;
        return true;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;
        hashCode = prime
                * hashCode
                + ((getAttributeDefinitions() == null) ? 0
                        : getAttributeDefinitions().hashCode());
        hashCode = prime * hashCode
                + ((getTableName() == null) ? 0 : getTableName().hashCode());
        hashCode = prime * hashCode
                + ((getKeySchema() == null) ? 0 : getKeySchema().hashCode());
        hashCode = prime
                * hashCode
                + ((getTableStatus() == null) ? 0 : getTableStatus().hashCode());
        hashCode = prime
                * hashCode
                + ((getCreationDateTime() == null) ? 0 : getCreationDateTime()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getProvisionedThroughput() == null) ? 0
                        : getProvisionedThroughput().hashCode());
        hashCode = prime
                * hashCode
                + ((getTableSizeBytes() == null) ? 0 : getTableSizeBytes()
                        .hashCode());
        hashCode = prime * hashCode
                + ((getItemCount() == null) ? 0 : getItemCount().hashCode());
        hashCode = prime * hashCode
                + ((getTableArn() == null) ? 0 : getTableArn().hashCode());
        hashCode = prime
                * hashCode
                + ((getLocalSecondaryIndexes() == null) ? 0
                        : getLocalSecondaryIndexes().hashCode());
        hashCode = prime
                * hashCode
                + ((getGlobalSecondaryIndexes() == null) ? 0
                        : getGlobalSecondaryIndexes().hashCode());
        hashCode = prime
                * hashCode
                + ((getStreamSpecification() == null) ? 0
                        : getStreamSpecification().hashCode());
        hashCode = prime
                * hashCode
                + ((getLatestStreamLabel() == null) ? 0
                        : getLatestStreamLabel().hashCode());
        hashCode = prime
                * hashCode
                + ((getLatestStreamArn() == null) ? 0 : getLatestStreamArn()
                        .hashCode());
        return hashCode;
    }
    @Override
    public TableDescription clone() {
        try {
            return (TableDescription) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException(
                    "Got a CloneNotSupportedException from Object.clone() "
                            + "even though we're Cloneable!", e);
        }
    }
}