/**
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met :
*
* . Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* . Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* . The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $Id$
*/
package palmed.io;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
/**
* This class implements a record factory based on a record store.
*
* @author Mathieu Champlon
* @version $Revision$ $Date$
*/
public final class RecordFactory implements IRecordFactory
{
/**
* The record store.
*/
private final RecordStore store_;
/**
* The record store name.
*/
private final String name_;
/**
* Create a record factory.
*
* @param name the record store name
*/
public RecordFactory( final String name )
{
try
{
store_ = RecordStore.openRecordStore( name, true );
}
catch( RecordStoreException e )
{
throw new RecordException( e );
}
name_ = name;
}
/**
* {@inheritDoc}
*/
public IRecord createRecord( final ISerializable serializable )
{
return new Record( store_, serializable );
}
/**
* {@inheritDoc}
*/
public IRecord getIndex( final ISerializable serializable )
{
try
{
final RecordEnumeration records = store_.enumerateRecords( null, null, false );
if( records.hasNextElement() )
return new Record( store_, serializable, records.nextRecordId() );
final Record record = new Record( store_, serializable );
record.persist();
return record;
}
catch( RecordStoreException e )
{
throw new RecordException( e );
}
}
/**
* {@inheritDoc}
*/
public void purge()
{
try
{
store_.closeRecordStore();
RecordStore.deleteRecordStore( name_ );
}
catch( RecordStoreException e )
{
throw new RecordException( e );
}
}
}