Class DataStoreProvider
- Object
-
- DataStoreProvider
-
- Direct Known Subclasses:
GeoTiffStoreProvider,LandsatStoreProvider,NetcdfStoreProvider,SQLStoreProvider
public abstract class DataStoreProvider extends Object
Provides information about a specificDataStoreimplementation. There is typically oneDataStoreProviderinstance for each format supported by a library. EachDataStoreProviderinstances provides the following services:- Provide generic information about the storage (name, etc.).
- Create instances of the
DataStoreimplementation described by this provider. - Test if a
DataStoreinstance created by this provider would have reasonable chances to open a givenStorageConnector.
Packaging data storesJAR files that provide implementations of this class shall contain an entry with exactly the following path:
The above entry shall contain one line for eachMETA-INF/services/org.apache.sis.storage.DataStoreProvider
DataStoreProviderimplementation provided in the JAR file, where each line is the fully qualified name of the implementation class. SeeServiceLoaderfor more general discussion about this lookup mechanism.Thread safetyAllDataStoreProviderimplementations shall be thread-safe. However theDataStoreinstances created by the providers do not need to be thread-safe.- Since:
- 0.3
Defined in the
sis-storagemodule
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedDataStoreProvider()Creates a new provider.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description FormatgetFormat()Returns a description of the data format.LoggergetLogger()Returns the logger where to report warnings.abstract ParameterDescriptorGroupgetOpenParameters()Returns a description of all parameters accepted by this provider for opening a data store.abstract StringgetShortName()Returns a short name or abbreviation for the data format.Range<Version>getSupportedVersions()Returns the range of versions supported by the data store, ornullif unspecified.abstract DataStoreopen(StorageConnector connector)Returns a data store implementation associated with this provider.DataStoreopen(ParameterValueGroup parameters)Returns a data store implementation associated with this provider for the given parameters.abstract ProbeResultprobeContent(StorageConnector connector)Indicates if the given storage appears to be supported by theDataStores created by this provider.
-
-
-
Field Detail
-
LOCATION
public static final String LOCATION
Name of the parameter that specifies the data store location. A parameter named "location" should be included in the group of parameters returned bygetOpenParameters(). The parameter value is often aURIor aPath, but other types are allowed.Implementers are encouraged to define a parameter with this name to ensure a common and consistent definition among providers. The parameter should be defined as mandatory and typed with a well-known Java class such as
URI,Path, JDBC DataSource, etc. The type should have a compact textual representation, for serialization in XML or configuration files. ConsequentlyInputStreamandChannelshould be avoided.- See Also:
CREATE,getOpenParameters(), Constant Field Values
-
CREATE
public static final String CREATE
Name of the parameter that specifies whether to allow creation of a newDataStoreif none exist at the given location. A parameter named "create" may be included in the group of parameters returned bygetOpenParameters()if the data store supports write operations. The parameter value is often aBooleanand the default value should beBoolean.FALSEor equivalent.Implementers are encouraged to define an optional parameter with this name in complement to the "location" parameter only if write operations are supported. If this parameter value is not set or is set to
false, then theopen(ParameterValueGroup)method should fail if no file or database exists at the URL or path given by the "location" parameter. Otherwise if this parameter is set totrue, then theopen(…)method may create files, a directory or a database at the given location.Relationship with standard file open optionsFor data stores on file systems, a
"create" = trueparameter value is equivalent to opening a file withStandardOpenOption.CREATEandAPPEND. The other file standard options likeCREATE_NEWandTRUNCATE_EXISTINGshould not be accessible through this "create" parameter. The reason is thatParameterValueGroupmay be used for storing parameters permanently (for example in a configuration file or in a database) for reopening the sameDataStoremany times. File options designed for being used only once likeCREATE_NEWandTRUNCATE_EXISTINGare incompatible with this usage.- See Also:
LOCATION,getOpenParameters(), Constant Field Values
-
-
Method Detail
-
getShortName
public abstract String getShortName()
Returns a short name or abbreviation for the data format. This name is used in some warnings or exception messages. It may contain any characters, including white spaces (i.e. this short name is not a format identifier).Examples:For a more comprehensive format name, see"CSV","GeoTIFF","GML","GPX","JPEG","JPEG 2000","NetCDF","PNG","Shapefile".getFormat().- Returns:
- a short name or abbreviation for the data format.
- Since:
- 0.8
- See Also:
getFormat()
-
getFormat
public Format getFormat()
Returns a description of the data format. The description should contain (if available):- A reference to the format specification citation, including:
- a format specification title (example: “PNG (Portable Network Graphics) Specification”),
- the format short name as a citation alternate title (example: “PNG”),
- the format version as the citation edition,
- link to an online version of the specification.
- The title of the file decompression technique used for reading the data.
getShortName(). Subclasses are encouraged to override this method for providing a more complete description, if available.- Returns:
- a description of the data format.
- Since:
- 0.8
- See Also:
getShortName(),DefaultFormat
- A reference to the format specification citation, including:
-
getSupportedVersions
public Range<Version> getSupportedVersions()
Returns the range of versions supported by the data store, ornullif unspecified.- Returns:
- the range of supported versions, or
nullif unspecified. - Since:
- 0.8
-
getOpenParameters
public abstract ParameterDescriptorGroup getOpenParameters()
Returns a description of all parameters accepted by this provider for opening a data store. Those parameters provide an alternative toStorageConnectorfor opening aDataStorefrom a path or URL, together with additional information like character encoding.Implementers are responsible for declaring all parameters and whether they are mandatory or optional. It is recommended to define at least a parameter named "location", completed by "create" if the data store supports write operations. Those parameters will be recognized by the default
DataStoreProvidermethods and used whenever aStorageConnectoris required.Alternative: the main differences between the use ofStorageConnectorand parameters are:StorageConnectoris designed for use with file or stream of unknown format; the format is automatically detected. By contrast, the use of parameters require to determine the format first (i.e. select aDataStoreProvider).- Parameters can be used to dynamically generate user configuration interfaces and provide fine grain control over the store general behavior such as caching, time-outs, encoding, etc.
- Parameters can more easily be serialized in XML or configuration files.
- Returns:
- description of the parameters required or accepted for opening a
DataStore. - Since:
- 0.8
- See Also:
LOCATION,CREATE,open(ParameterValueGroup),DataStore.getOpenParameters()
-
probeContent
public abstract ProbeResult probeContent(StorageConnector connector) throws DataStoreException
Indicates if the given storage appears to be supported by theDataStores created by this provider. The most typical return values are:ProbeResult.SUPPORTEDif theDataStores created by this provider can open the given storage.ProbeResult.UNSUPPORTED_STORAGEif the given storage does not appear to be in a format supported by thisDataStoreProvider.
SUPPORTEDvalue does not guarantee that reading or writing will succeed, only that there appears to be a reasonable chance of success based on a brief inspection of the storage object or contents.Implementers are responsible for restoring the input to its original stream position on return of this method. Implementers can use a mark/reset pair for this purpose. Marks are available as
ByteBuffer.mark(),InputStream.mark(int)andImageInputStream.mark().Implementation example
Implementations will typically check the first bytes of the stream for a "magic number" associated with the format, as in the following example:public ProbeResult probeContent(StorageConnector storage) throws DataStoreException { final ByteBuffer buffer = storage.getStorageAs(ByteBuffer.class); if (buffer == null) { // If StorageConnector can not provide a ByteBuffer, then the storage is // probably not a File, URL, URI, InputStream neither a ReadableChannel. return ProbeResult.UNSUPPORTED_STORAGE; } if (buffer.remaining() < Integer.BYTES) { // If the buffer does not contain enough bytes for the integer type, this is not // necessarily because the file is truncated. It may be because the data were not // yet available at the time this method has been invoked. return ProbeResult.INSUFFICIENT_BYTES; } if (buffer.getInt(buffer.position()) != MAGIC_NUMBER) { // We used ByteBuffer.getInt(int) instead than ByteBuffer.getInt() above // in order to keep the buffer position unchanged after this method call. return ProbeResult.UNSUPPORTED_STORAGE; } return ProbeResult.SUPPORTED; }- Parameters:
connector- information about the storage (URL, stream, JDBC connection, etc).- Returns:
ProbeResult.SUPPORTEDif the given storage seems to be readable by theDataStoreinstances created by this provider.- Throws:
DataStoreException- if an I/O or SQL error occurred. The error shall be unrelated to the logical structure of the storage.
-
open
public abstract DataStore open(StorageConnector connector) throws DataStoreException
Returns a data store implementation associated with this provider. This method is typically invoked when the format is not known in advance (theprobeContent(StorageConnector)method can be tested on many providers) or when the input is not a type accepted byopen(ParameterValueGroup)(for example anInputStream).Implementation noteImplementers shall invokeStorageConnector.closeAllExcept(Object)afterDataStorecreation, keeping open only the needed resource.- Parameters:
connector- information about the storage (URL, stream, JDBC connection, etc).- Returns:
- a data store implementation associated with this provider for the given storage.
- Throws:
DataStoreException- if an error occurred while creating the data store instance.- See Also:
DataStores.open(Object)
-
open
public DataStore open(ParameterValueGroup parameters) throws DataStoreException
Returns a data store implementation associated with this provider for the given parameters. TheDataStoreProviderinstance needs to be known before parameters are initialized, since the parameters are implementation-dependent. Example:DataStoreProvider provider = ...; ParameterValueGroup pg = provider.getOpenParameters().createValue(); pg.parameter(DataStoreProvider.LOCATION, myURL); // Set any other parameters if desired. try (DataStore ds = provider.open(pg)) { // Use the data store. }Implementation noteThe default implementation gets the value of a parameter named "location". That value (typically a path or URL) is given toStorageConnectorconstructor, which is then passed toopen(StorageConnector).- Parameters:
parameters- opening parameters as defined bygetOpenParameters().- Returns:
- a data store implementation associated with this provider for the given parameters.
- Throws:
DataStoreException- if an error occurred while creating the data store instance.- Since:
- 0.8
- See Also:
LOCATION,CREATE,getOpenParameters()
-
getLogger
public Logger getLogger()
Returns the logger where to report warnings. This logger is used only if noStoreListenerhas been registered forWarningEvent.The default implementation returns a logger with the same name as the package name of the subclass of this
DataStoreProviderinstance. Subclasses should override this method if they can provide a more specific logger.- Returns:
- the logger to use as a fallback (when there is no listeners) for warning messages.
- Since:
- 1.0
-
-