com.amazon.carbonado.raw
Class GenericStorableCodec<S extends Storable>

java.lang.Object
  extended by com.amazon.carbonado.raw.GenericStorableCodec<S>
All Implemented Interfaces:
StorableCodec<S>

public class GenericStorableCodec<S extends Storable>
extends Object
implements StorableCodec<S>

Generic codec that supports any kind of storable by auto-generating and caching storable implementations.

Author:
Brian S O'Neill
See Also:
GenericStorableCodecFactory

Nested Class Summary
static interface GenericStorableCodec.Decoder<S extends Storable>
          Used for decoding different generations of Storable.
static interface GenericStorableCodec.SearchKeyFactory<S extends Storable>
          Creates custom raw search keys for Storable types.
 
Method Summary
 byte[] encodePrimaryKey(Object[] values)
          Encode a key by extracting all the primary key properties from the given storable.
 byte[] encodePrimaryKey(Object[] values, int rangeStart, int rangeEnd)
          Encode a key by extracting all the primary key properties from the given storable.
 byte[] encodePrimaryKey(S storable)
          Encode a key by extracting all the primary key properties from the given storable.
 byte[] encodePrimaryKey(S storable, int rangeStart, int rangeEnd)
          Encode a key by extracting all the primary key properties from the given storable.
 byte[] encodePrimaryKeyPrefix()
          Encode the primary key for when there are no values, but there may be a prefix.
 GenericStorableCodec.Decoder<S> getDecoder(int generation)
          Returns a data decoder for the given generation.
 StorableIndex<S> getPrimaryKeyIndex()
          Returns the sequence and directions of properties that make up the primary key.
 int getPrimaryKeyPrefixLength()
          Returns the number of prefix bytes in the primary key, which may be zero.
 GenericStorableCodec.SearchKeyFactory<S> getSearchKeyFactory(OrderedProperty<S>[] properties)
          Returns a search key factory, which is useful for implementing indexes and queries.
 Class<? extends S> getStorableClass()
          Returns a concrete Storable implementation, which is fully thread-safe.
 Class<S> getStorableType()
          Returns the type of Storable that code is generated for.
 RawSupport<S> getSupport()
          Returns the default RawSupport object that is supplied to Storable instances produced by this codec.
 S instantiate()
          Instantiate a Storable with no key or value defined yet.
 S instantiate(byte[] key, byte[] value)
          Instantiate a Storable with a specific key and value.
 S instantiate(RawSupport<S> support)
          Instantiate a Storable with no key or value defined yet.
 S instantiate(RawSupport<S> support, byte[] key, byte[] value)
          Instantiate a Storable with a specific key and value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getStorableType

public final Class<S> getStorableType()
Returns the type of Storable that code is generated for.

Specified by:
getStorableType in interface StorableCodec<S extends Storable>

instantiate

public S instantiate()
Instantiate a Storable with no key or value defined yet. The default RawSupport is supplied to the instance.

Specified by:
instantiate in interface StorableCodec<S extends Storable>
Throws:
IllegalStateException - if no default support exists
Since:
1.2

instantiate

public S instantiate(byte[] key,
                     byte[] value)
                               throws FetchException
Instantiate a Storable with a specific key and value. The default RawSupport is supplied to the instance.

Specified by:
instantiate in interface StorableCodec<S extends Storable>
Throws:
IllegalStateException - if no default support exists
FetchException
Since:
1.2

instantiate

public S instantiate(RawSupport<S> support)
Instantiate a Storable with no key or value defined yet. Any RawSupport can be supplied to the instance.

Specified by:
instantiate in interface StorableCodec<S extends Storable>
Parameters:
support - binds generated storable with a storage layer

instantiate

public S instantiate(RawSupport<S> support,
                     byte[] key,
                     byte[] value)
                               throws FetchException
Instantiate a Storable with a specific key and value. Any RawSupport can be supplied to the instance.

Specified by:
instantiate in interface StorableCodec<S extends Storable>
Parameters:
support - binds generated storable with a storage layer
Throws:
FetchException

getPrimaryKeyIndex

public StorableIndex<S> getPrimaryKeyIndex()
Description copied from interface: StorableCodec
Returns the sequence and directions of properties that make up the primary key.

Specified by:
getPrimaryKeyIndex in interface StorableCodec<S extends Storable>

getPrimaryKeyPrefixLength

public int getPrimaryKeyPrefixLength()
Description copied from interface: StorableCodec
Returns the number of prefix bytes in the primary key, which may be zero.

Specified by:
getPrimaryKeyPrefixLength in interface StorableCodec<S extends Storable>

encodePrimaryKey

public byte[] encodePrimaryKey(S storable)
Description copied from interface: StorableCodec
Encode a key by extracting all the primary key properties from the given storable.

Specified by:
encodePrimaryKey in interface StorableCodec<S extends Storable>
Parameters:
storable - extract primary key properties from this instance
Returns:
raw search key

encodePrimaryKey

public byte[] encodePrimaryKey(S storable,
                               int rangeStart,
                               int rangeEnd)
Description copied from interface: StorableCodec
Encode a key by extracting all the primary key properties from the given storable.

Specified by:
encodePrimaryKey in interface StorableCodec<S extends Storable>
Parameters:
storable - extract primary key properties from this instance
rangeStart - index of first property to use. Its value must be less than the count of primary key properties.
rangeEnd - index of last property to use, exlusive. Its value must be less than or equal to the count of primary key properties.
Returns:
raw search key

encodePrimaryKey

public byte[] encodePrimaryKey(Object[] values)
Description copied from interface: StorableCodec
Encode a key by extracting all the primary key properties from the given storable.

Specified by:
encodePrimaryKey in interface StorableCodec<S extends Storable>
Parameters:
values - values to build into a key. It must be long enough to accommodate all primary key properties.
Returns:
raw search key

encodePrimaryKey

public byte[] encodePrimaryKey(Object[] values,
                               int rangeStart,
                               int rangeEnd)
Description copied from interface: StorableCodec
Encode a key by extracting all the primary key properties from the given storable.

Specified by:
encodePrimaryKey in interface StorableCodec<S extends Storable>
Parameters:
values - values to build into a key. The length may be less than the amount of primary key properties used by this factory. It must not be less than the difference between rangeStart and rangeEnd.
rangeStart - index of first property to use. Its value must be less than the count of primary key properties.
rangeEnd - index of last property to use, exlusive. Its value must be less than or equal to the count of primary key properties.
Returns:
raw search key

encodePrimaryKeyPrefix

public byte[] encodePrimaryKeyPrefix()
Description copied from interface: StorableCodec
Encode the primary key for when there are no values, but there may be a prefix. Returned value may be null if no prefix is defined.

Specified by:
encodePrimaryKeyPrefix in interface StorableCodec<S extends Storable>

getSupport

public RawSupport<S> getSupport()
Description copied from interface: StorableCodec
Returns the default RawSupport object that is supplied to Storable instances produced by this codec.

Specified by:
getSupport in interface StorableCodec<S extends Storable>
Since:
1.2

getStorableClass

public Class<? extends S> getStorableClass()
Returns a concrete Storable implementation, which is fully thread-safe. It has two constructors defined:
 public <init>(Storage, RawSupport);

 public <init>(Storage, RawSupport, byte[] key, byte[] value);
 
Convenience methods are provided in this class to instantiate the generated Storable.


getSearchKeyFactory

public GenericStorableCodec.SearchKeyFactory<S> getSearchKeyFactory(OrderedProperty<S>[] properties)
Returns a search key factory, which is useful for implementing indexes and queries.

Parameters:
properties - properties to build the search key from

getDecoder

public GenericStorableCodec.Decoder<S> getDecoder(int generation)
                                                            throws FetchNoneException,
                                                                   FetchException
Returns a data decoder for the given generation.

Throws:
FetchNoneException - if generation is unknown
FetchException


Copyright © 2006-2008 Amazon Technologies, Inc.. All Rights Reserved.