/*
*
*
* Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package com.sun.midp.rms;
import java.io.IOException;
/**
* A RecordStoreFile is a file abstraction layer between a
* a RecordStore and an underlying persistent storage mechanism.
* The underlying storage methods are provided by the
* RandomAccessStream and File classes.
*
* RecordStoreFile confines the namespace of a record store to
* the scope of the MIDlet suite of its creating application.
* It also ensures unicode recordstore names are ascii filesystem safe.
*
* The RecordStoreImpl class can be implemented directly using the
* RandomAccessStream and File classes. However,
* RecordStoreFile served as the java/native code boundary for
* RMS in the MIDP 1.0 release. It exists now for
* backwards compatibility with older ports.
*/
interface AbstractRecordStoreFile {
/** extension for RecordStore database files */
static final int DB_EXTENSION = 0;
/** extension for RecordStore database files */
static final int IDX_EXTENSION = 1;
/**
* Approximation of remaining space in storage.
*
* Usage Warning: This may be a slow operation if
* the platform has to look at the size of each file
* stored in the MIDP memory space and include its size
* in the total.
*
* @param suiteId ID of the MIDlet suite that owns the record store
* can be null
*
* @return the approximate space available to grow the
* record store in bytes.
*/
int spaceAvailable(int suiteId);
/**
* Sets the position within <code>recordStream</code> to
* <code>pos</code>. This will implicitly grow
* the underlying stream if <code>pos</code> is made greater
* than the current length of the storage stream.
*
* @param pos position within the file to move the current_pos
* pointer to.
*
* @exception IOException if there is a problem with the seek.
*/
void seek(int pos) throws IOException;
/**
* Write all of <code>buf</code> to <code>recordStream</code>.
*
* @param buf buffer to read out of.
*
* @exception IOException if a write error occurs.
*/
void write(byte[] buf) throws IOException;
/**
* Write <code>buf</code> to <code>recordStream</code>, starting
* at <code>offset</code> and continuing for <code>numBytes</code>
* bytes.
*
* @param buf buffer to read out of.
* @param offset starting point write offset, from beginning of buffer.
* @param numBytes the number of bytes to write.
*
* @exception IOException if a write error occurs.
*/
void write(byte[] buf, int offset, int numBytes) throws IOException;
/**
* Commit pending writes
*
* @exception IOException if an error occurs while flushing
* <code>recordStream</code>.
*/
void commitWrite() throws IOException;
/**
* Read up to <code>buf.length</code> into <code>buf</code>.
*
* @param buf buffer to read in to.
*
* @return the number of bytes read.
*
* @exception IOException if a read error occurs.
*/
int read(byte[] buf) throws IOException;
/**
* Read up to <code>buf.length</code> into <code>buf</code>
* starting at offset <code>offset</code> in <code>recordStream
* </code> and continuing for up to <code>numBytes</code> bytes.
*
* @param buf buffer to read in to.
* @param offset starting point read offset, from beginning of buffer.
* @param numBytes the number of bytes to read.
*
* @return the number of bytes read.
*
* @exception IOException if a read error occurs.
*/
int read(byte[] buf, int offset, int numBytes) throws IOException;
/**
* Disconnect from <code>recordStream</code> if it is
* non null. May be called more than once without error.
*
* @exception IOException if an error occurs closing
* <code>recordStream</code>.
*/
void close() throws IOException;
/**
* Sets the length of this <code>RecordStoreFile</code>
* <code>size</code> bytes. If this file was previously
* larger than <code>size</code> the extra data is lost.
*
* <code>size</code> must be <= the current length of
* <code>recordStream</code>
*
* @param size new size for this file.
*
* @exception IOException if an error occurs, or if
* <code>size</code> is less than zero.
*/
void truncate(int size) throws IOException;
}