Class WrapperDataStoreFactory
- All Implemented Interfaces:
DataStoreFactory
The implementation is fairly ticklish, since various of the objects
that we want to wrap have not only to behave (mostly) like the unwrapped
objects to which they delegate, but also to be equal to them
(Equality
).
It works by wrapping each DataSpec in a custom wrapper object any time
it is presented to the underlying base DataStoreFactory,
either by the methods of this DataStoreFactory implementation
or by methods invoked on DataStore objects it dispenses.
These wrapper objects obey the equality constraints.
- Since:
- 8 Nov 2013
- Author:
- Mark Taylor
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
WrapperDataStoreFactory
(DataStoreFactory baseFact) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract uk.ac.starlink.table.RowAccess
createRowAccess
(uk.ac.starlink.table.StarTable table) Creates a row access from a given table.protected abstract uk.ac.starlink.table.RowSequence
createRowSequence
(uk.ac.starlink.table.StarTable table) Creates a row sequence from a given table.protected abstract uk.ac.starlink.table.RowSplittable
createRowSplittable
(uk.ac.starlink.table.StarTable table) Creates a row splittable from a given table.readDataStore
(DataSpec[] dataSpecs, DataStore prevStore) Generates a DataStore capable of supplying the data for a given list of DataSpec objects.
-
Constructor Details
-
WrapperDataStoreFactory
Constructor.- Parameters:
baseFact
- base implementation that actually acquires the data
-
-
Method Details
-
readDataStore
public DataStore readDataStore(DataSpec[] dataSpecs, DataStore prevStore) throws IOException, InterruptedException Description copied from interface:DataStoreFactory
Generates a DataStore capable of supplying the data for a given list of DataSpec objects. TheprevStore
argument may optionally supply the result of a previous invocation of this method. The implementation may choose to make use of the internal state of such an instance for efficiency, for instance by re-using data that has already been read.Since the bulk data is managed by the DataStore object, care should be taken about what happens to the DataStore objects supplied to and returned from this method. In particular, code both invoking and implementing this method should usually make sure not to keep a reference to the
prevStore
argument.This method may perform the actual reading, and therefore take time. It is not intended to be invoked on the event dispatch thread.
- Specified by:
readDataStore
in interfaceDataStoreFactory
- Parameters:
dataSpecs
- data specifications; some elements may be nullprevStore
- previously obtained DataStore, or null- Returns:
- new data store
- Throws:
IOException
InterruptedException
-
createRowSequence
protected abstract uk.ac.starlink.table.RowSequence createRowSequence(uk.ac.starlink.table.StarTable table) throws IOException Creates a row sequence from a given table.The obvious implementation is
table.getRowSequence()
, but implementations may decorate that instance to provide useful functionality.- Parameters:
table
- table providing data- Returns:
- row sequence which will be used to acquire table data
- Throws:
IOException
-
createRowAccess
protected abstract uk.ac.starlink.table.RowAccess createRowAccess(uk.ac.starlink.table.StarTable table) throws IOException Creates a row access from a given table.The obvious implementation is
table.getRowAccess()
, but implementations may decorate that instance to provide useful functionality.- Parameters:
table
- table providing data- Returns:
- row access which will be used to acquire table data
- Throws:
IOException
-
createRowSplittable
protected abstract uk.ac.starlink.table.RowSplittable createRowSplittable(uk.ac.starlink.table.StarTable table) throws IOException Creates a row splittable from a given table.The obvious implementation is
table.getRowSplittable()
, but implementations may decorate that instance to provide useful functionality.- Parameters:
table
- table providing data- Returns:
- row splittable which will be used to acquire table data
- Throws:
IOException
-