uk.ac.starlink.table.storage
Class DiskRowStore

java.lang.Object
  |
  +--uk.ac.starlink.table.storage.DiskRowStore
All Implemented Interfaces:
RowStore, TableSink

public class DiskRowStore
extends Object
implements RowStore

Implementation of RowStore which stores data on disk. The temporary file is deleted by the finalizer (if it runs) or failing that at JVM exit. Since there's no guarantee when or if the finalizer will run even after this object is a candidate for garbage collection, this does raise the possibility that large numbers of potentially large temporary files will accumulate during JVM operation. It depends on your GC.

Since:
3 Aug 2004

Constructor Summary
DiskRowStore()
          Constructs a new DiskRowStore which uses a temporary file as backing store.
DiskRowStore(File file)
          Constructs a new DiskRowStore which uses the given file as a backing store.
 
Method Summary
 void acceptMetadata(StarTable meta)
          Takes delivery of a row-less StarTable object which defines the metadata of the table to be transmitted.
 void acceptRow(Object[] row)
          Takes delivery of one row of data.
 void endRows()
          Signals that there are no more rows to be transmitted.
 void finalize()
          Finalizer deletes the temporary file used to cache the table data.
 StarTable getStarTable()
          Obtains a StarTable which contains the data and metadata that have been written into this sink.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DiskRowStore

public DiskRowStore(File file)
             throws IOException
Constructs a new DiskRowStore which uses the given file as a backing store. Nothing is done to mark this file as temporary. Since the storage format is not public, specifying the file like this isn't very useful except for test purposes.

Parameters:
file - location of the backing file which will be used
Throws:
IOException - if there is some I/O-related problem with opening the file
SecurityException - if the current security context does not allow writing to a temporary file

DiskRowStore

public DiskRowStore()
             throws IOException
Constructs a new DiskRowStore which uses a temporary file as backing store. The temporary file will be written to the default temporary directory, given by the value of the java.io.tmpdir system property.

Throws:
IOException - if there is some I/O-related problem with opening the file
SecurityException - if the current security context does not allow writing to a temporary file
Method Detail

acceptMetadata

public void acceptMetadata(StarTable meta)
                    throws TableFormatException
Description copied from interface: TableSink
Takes delivery of a row-less StarTable object which defines the metadata of the table to be transmitted. If the number of rows that will be transmitted via subsequent calls to acceptRow is known, this value should be made available as the row count of meta (StarTable.getRowCount()); if it is not known, the row count should be -1. However, this object should not attempt to read any of meta's cell data.

The data to be transmitted in subsequent calls of acceptRow must match the metadata transmitted in this call in the same way that rows of a StarTable must match its own metadata (number and content clases of columns etc). If this sink cannot dispose of a table corresponding to meta then it may throw a TableFormatException - this may be the case if for instance meta has columns with types that this sink can't deal with.

Specified by:
acceptMetadata in interface TableSink
Parameters:
meta - table metadata object
Throws:
TableFormatException - if this sink cannot accept table rows matching the given metadata

acceptRow

public void acceptRow(Object[] row)
               throws IOException
Description copied from interface: TableSink
Takes delivery of one row of data. row is an array of objects comprising the contents of one row of the table being transmitted. The number and classes of the elements of row are described by the metadata object previously accepted.

Specified by:
acceptRow in interface TableSink
Parameters:
row - table data row
IOException

endRows

public void endRows()
             throws IOException
Description copied from interface: TableSink
Signals that there are no more rows to be transmitted.

Specified by:
endRows in interface TableSink
IOException

getStarTable

public StarTable getStarTable()
Description copied from interface: RowStore
Obtains a StarTable which contains the data and metadata that have been written into this sink. In general it is only legal to call this method following a call to TableSink.endRows(); failing to observe this sequence may earn you an IllegalStateException

Specified by:
getStarTable in interface RowStore
Returns:
a random-access StarTable containing the written rows

finalize

public void finalize()
              throws Throwable
Finalizer deletes the temporary file used to cache the table data.

Overrides:
finalize in class Object
Throwable

Copyright © 2004 CLRC: Central Laboratory of the Research Councils. All rights reserved.