com.google.appengine.api.datastore

## Class PropertyContainer

- java.lang.Object
- - com.google.appengine.api.datastore.PropertyContainer

- All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable
  Direct Known Subclasses:
    EmbeddedEntity, Entity

      public abstract class PropertyContainer
      extends java.lang.Object
      implements java.io.Serializable, java.lang.Cloneable

  A mutable property container.
  See Also:
    Serialized Form

- - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.Map<java.lang.String,java.lang.Object>` | `getProperties()` Gets all of the properties belonging to this container.
    `java.lang.Object` | `getProperty(java.lang.String propertyName)` Gets the property with the specified name.
    `boolean` | `hasProperty(java.lang.String propertyName)` Returns true if a property has been set.
    `boolean` | `isUnindexedProperty(java.lang.String propertyName)` Returns true if `propertyName` has a value that will not be indexed.
    `void` | `removeProperty(java.lang.String propertyName)` Removes any property with the specified name.
    `void` | `setIndexedProperty(java.lang.String propertyName, java.lang.Object value)` Like {link #setProperty}, but requires that the value is indexable or a collection of indexable values.
    `void` | `setPropertiesFrom(PropertyContainer src)` A convenience method that populates properties from those in the given container.
    `void` | `setProperty(java.lang.String propertyName, java.lang.Object value)` Sets the property named, `propertyName`, to `value`.
    `void` | `setUnindexedProperty(java.lang.String propertyName, java.lang.Object value)` Like `#setProperty`, but doesn't index the property in the built-in single property indexes or the user-defined composite indexes.

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### getProperty

          public java.lang.Object getProperty(java.lang.String propertyName)

      Gets the property with the specified name. The value returned may not be the same type as originally set via `setProperty(java.lang.String, java.lang.Object)`.
      Returns:
        the property corresponding to `propertyName`.

    - #### getProperties

          public java.util.Map<java.lang.String,java.lang.Object> getProperties()

      Gets all of the properties belonging to this container.
      Returns:
        an unmodifiable `Map` of properties.

    - #### hasProperty

          public boolean hasProperty(java.lang.String propertyName)

      Returns true if a property has been set. If a property has been explicitly set to `null`, this function will return true.
      Returns:
        true iff the property named `propertyName` exists.

    - #### removeProperty

          public void removeProperty(java.lang.String propertyName)

      Removes any property with the specified name. If there is no property with this name set, simply does nothing.
      Throws:
        `java.lang.NullPointerException` - If `propertyName` is null.

    - #### setProperty

          public void setProperty(java.lang.String propertyName,
                                  java.lang.Object value)

      Sets the property named, `propertyName`, to `value`.

      As the value is stored in the datastore, it is converted to the datastore's native type. This may include widening, such as converting a `Short` to a `Long`.

      If value is a `Collection`, the values will be stored in the datastore with the collection's iteration order with one caveat: all indexed values will come before all unindexed values (this can occur if the `Collection` contains both values that are normally indexed like strings, and values that are never indexed like `Blob`, `Text` and `EmbeddedEntity`).

      Overrides any existing value for this property, whether indexed or unindexed.

      Note that `Blob`, `Text` and `EmbeddedEntity` property values are never indexed. To store other types without being indexed, use `setUnindexedProperty(java.lang.String, java.lang.Object)`.

      Parameters:
        `value` - may be one of the supported datatypes or a heterogeneous `Collection` of one of the supported datatypes.
      Throws:
        `java.lang.IllegalArgumentException` - If the value is not of a type that the data store supports.
      See Also:
        `setUnindexedProperty(java.lang.String, java.lang.Object)`

    - #### setIndexedProperty

          public void setIndexedProperty(java.lang.String propertyName,
                                         java.lang.Object value)

      Like {link #setProperty}, but requires that the value is indexable or a collection of indexable values.

    - #### setUnindexedProperty

          public void setUnindexedProperty(java.lang.String propertyName,
                                           java.lang.Object value)

      Like `#setProperty`, but doesn't index the property in the built-in single property indexes or the user-defined composite indexes.
      Parameters:
        `value` - may be one of the supported datatypes, or a heterogeneous `Collection` of one of the supported datatypes.

        Overrides any existing value for this property, whether indexed or unindexed.

      Throws:
        `java.lang.IllegalArgumentException` - If the value is not of a type that the data store supports.
      See Also:
        `setProperty(java.lang.String, java.lang.Object)`

    - #### isUnindexedProperty

          public boolean isUnindexedProperty(java.lang.String propertyName)

      Returns true if `propertyName` has a value that will not be indexed. This includes `Text`, `Blob`, and any property added using `setUnindexedProperty(java.lang.String, java.lang.Object)`.

      Note: The behavior of this method is not well defined in case of an indexed property whose value is a list that contains unindexable values.

    - #### setPropertiesFrom

          public void setPropertiesFrom(PropertyContainer src)

      A convenience method that populates properties from those in the given container.

      This method transfers information about unindexed properties and clones any mutable values.

      Parameters:
        `src` - The container from which we will populate ourself.