com.revusky.niggle.data.inmemory
Class InMemoryRecordSet

java.lang.Object
  |
  +--com.revusky.niggle.data.AbstractDataSource
        |
        +--com.revusky.niggle.data.AbstractMutableDataSource
              |
              +--com.revusky.niggle.data.inmemory.InMemoryRecordSet
All Implemented Interfaces:
DataSource, MutableDataSource, java.rmi.Remote

public class InMemoryRecordSet
extends AbstractMutableDataSource

A simple implementation of the com.revusky.niggle.data.MutableDataSource interface. All records are kept in an flat array all in RAM and persisted to a flat-file.

Author:
Jonathan Revusky

Constructor Summary
InMemoryRecordSet()
           
 
Method Summary
 void close()
          A method that should be called to free any resources associated with the data source.
 void delete(Record record)
          Delete a record given its primary lookup key.
 Record get(java.lang.String type, java.lang.Object key)
           
 void init(java.util.Properties props)
          TODO
 void insert(Record record)
          Adds a new record to the managed pool.
 java.util.List keys(java.lang.String type)
           
 void loadRecords(java.io.ObjectInput input)
          Slurp the records into this InMemoryRecordSet object with a stream-based idiom.
protected  void loadRecordsFromFlatFile(java.lang.String filename)
          Wrapper around loadRecords() to read records from a flat file.
protected  java.lang.Object nextKey()
          Returns the next available primary key, assuming that it is an integer.
 java.util.List select(java.lang.String type, RecordFilter filter)
          Fetches a list of records matching filter.
 void update(Record oldRec, Record newRec)
          Replaces an existing version of a record with a new updated version.
 
Methods inherited from class com.revusky.niggle.data.AbstractMutableDataSource
addDataListener, fireDataEvent, freeze, getRecords, markStale, normalizeKey, removeDataListener, select, wipeCache
 
Methods inherited from class com.revusky.niggle.data.AbstractDataSource
get, getName, keys
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.revusky.niggle.data.DataSource
get, getName, keys
 

Constructor Detail

InMemoryRecordSet

public InMemoryRecordSet()
                  throws java.io.IOException
Method Detail

loadRecords

public void loadRecords(java.io.ObjectInput input)
                 throws java.io.IOException
Slurp the records into this InMemoryRecordSet object with a stream-based idiom. Subclasses of DataException will be caught and logged. Core Java IOExceptions will bubble up. NB: This method is meant to be called at initialization. The loading of the records does not go through the DataListener mechanism.

update

public void update(Record oldRec,
                   Record newRec)
            throws java.io.IOException
Description copied from interface: MutableDataSource
Replaces an existing version of a record with a new updated version. Automatically replaces the previous version if it has not been modified since the object was taken from the data source. A ModifiedRecordException is thrown otherwise.

Not all underlying storage mediums will be able to support these semantics. Check your implementation carefully.

Following copied from interface: com.revusky.niggle.data.MutableDataSource
Parameters:
oldRec - the record to replace.
newRec - the new record.
Throws:
ModifiedRecordException - thrown if the record was modified by another process since rec was requested from a data source.
java.io.IOException - thrown in case of any other database or communication error.

insert

public void insert(Record record)
            throws java.io.IOException
Description copied from interface: MutableDataSource
Adds a new record to the managed pool.
Following copied from interface: com.revusky.niggle.data.MutableDataSource
Parameters:
rec - the record to add
Throws:
DuplicateRecordException - if another record already exists with same primary key as 'rec'.
java.io.IOException - if the record cannot be initialized (i.e. has missing fields or invalid field values, etc.), or in case of a low-level error.

select

public java.util.List select(java.lang.String type,
                             RecordFilter filter)
                      throws java.io.IOException
Description copied from interface: MutableDataSource
Fetches a list of records matching filter. If filter is null, returns all the records of the given type in the container.
Following copied from interface: com.revusky.niggle.data.MutableDataSource
Parameters:
the - type of record we are interested in, possibly null
filter - the record filter, or null.
Returns:
a List of all the records that are an instance of a given class. If no records match the filter, an empty List.

get

public Record get(java.lang.String type,
                  java.lang.Object key)
           throws java.io.IOException
Following copied from interface: com.revusky.niggle.data.DataSource
Parameters:
type - the type of the record, if this is null, then any type will do.
key - the lookup key
Returns:
a Record of the given type, with the given lookup key. If the data source allows multiple records, only returns the first one found. Use getRecords() in that situation. returns null if none is found.

init

public void init(java.util.Properties props)
          throws java.io.IOException
Description copied from class: AbstractMutableDataSource
TODO
Overrides:
init in class AbstractMutableDataSource

keys

public java.util.List keys(java.lang.String type)
                    throws java.io.IOException
Following copied from interface: com.revusky.niggle.data.DataSource
Parameters:
type - the record type we are interested, under some circumstances, this may be null.
Returns:
a list of all valid lookup keys that correspond to a given record type.

delete

public void delete(Record record)
            throws java.io.IOException
Description copied from interface: MutableDataSource
Delete a record given its primary lookup key.
Following copied from interface: com.revusky.niggle.data.MutableDataSource
Parameters:
the - record to delete.

close

public void close()
           throws java.io.IOException
Description copied from interface: DataSource
A method that should be called to free any resources associated with the data source. Note that no other methods should be called on this object after this one. (In many implementations, this method will likely do nothing.)
Overrides:
close in class AbstractMutableDataSource

nextKey

protected java.lang.Object nextKey()
Returns the next available primary key, assuming that it is an integer.

loadRecordsFromFlatFile

protected void loadRecordsFromFlatFile(java.lang.String filename)
                                throws java.io.IOException
Wrapper around loadRecords() to read records from a flat file. Creates a DefaultRecordInputStream and invokes the record manager's loadRecords() method. Will try to pick it up from the .### temp file if that is available and filename is not. NB: This method is meant to be called at initialization. The loading of the records does not go through the DataListener mechanism.