Package org.apache.sis.storage
Class AbstractResource
java.lang.Object
org.apache.sis.storage.AbstractResource
- All Implemented Interfaces:
Resource
- Direct Known Subclasses:
AbstractFeatureSet
,AbstractGridCoverageResource
,BandGroup
,GroupAggregate
Default implementations of several methods for classes that want to implement the
Resource
interface.
This class provides a getMetadata()
method which extracts information from other methods.
Subclasses should override the following methods:
getIdentifier()
(strongly recommended)getEnvelope()
(recommended)createMetadata()
(optional)getSynchronizationLock()
(optional)
Thread safety
Default methods of this abstract class are thread-safe. Synchronization, when needed, usesgetSynchronizationLock()
.- Since:
- 1.2
- Version:
- 1.2
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final StoreListeners
The set of registeredStoreListener
s for this resources.private org.opengis.metadata.Metadata
A description of this resource as an unmodifiable metadata, ornull
if not yet computed. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractResource
(StoreListeners parentListeners, boolean hidden) Creates a new resource which can send notifications to the given set of listeners. -
Method Summary
Modifier and TypeMethodDescription<T extends StoreEvent>
voidaddListener
(Class<T> eventType, StoreListener<? super T> listener) Registers a listener to notify when the specified kind of event occurs in this resource or in children.protected void
Clears any cache in this resource, forcing the data to be recomputed when needed again.(package private) final String
createExceptionMessage
(String filename, org.opengis.geometry.Envelope request) Creates an exception message for a resource that cannot be read.protected org.opengis.metadata.Metadata
Invoked in a synchronized block the first time thatgetMetadata()
is invoked.Optional<org.opengis.geometry.Envelope>
Returns the spatiotemporal envelope of this resource.Optional<org.opengis.util.GenericName>
Returns the resource persistent identifier if available.final org.opengis.metadata.Metadata
Returns a description of this resource.protected Object
Returns the object on which to perform synchronizations for thread-safety.<T extends StoreEvent>
voidremoveListener
(Class<T> eventType, StoreListener<? super T> listener) Unregisters a listener previously added to this resource for the given type of events.
-
Field Details
-
listeners
The set of registeredStoreListener
s for this resources. ThisStoreListeners
hasDataStore.listeners
has a parent. -
metadata
private volatile org.opengis.metadata.Metadata metadataA description of this resource as an unmodifiable metadata, ornull
if not yet computed. If non-null, this metadata should contain at least the resource identifier. Those metadata are created bycreateMetadata()
when first needed.- See Also:
-
-
Constructor Details
-
AbstractResource
Creates a new resource which can send notifications to the given set of listeners. Ifhidden
isfalse
(the recommended value), then this resource will have its own set of listeners with this resource declared as the source of events. It will be possible to add and remove listeners independently from the set of parent listeners. Conversely ifhidden
istrue
, then the given listeners will be used directly and this resource will not appear as the source of any event.In any cases, the listeners of all parents (ultimately the data store that created this resource) will always be notified, either directly if
hidden
istrue
or indirectly ifhidden
isfalse
.- Parameters:
parentListeners
- listeners of the parent resource, ornull
if none. This is usually the listeners of theDataStore
that created this resource.hidden
-false
if this resource shall use its ownStoreListeners
with the specified parent, ortrue
for usingparentListeners
directly.
-
-
Method Details
-
getIdentifier
Returns the resource persistent identifier if available. The default implementation returns an empty value. Subclasses are strongly encouraged to override if they can provide a value.Implementation note: the default implementation ofcreateMetadata()
uses this identifier for initializing themetadata/identificationInfo/citation/title
property.- Specified by:
getIdentifier
in interfaceResource
- Returns:
- a persistent identifier unique within the data store, or absent if this resource has no such identifier.
- Throws:
DataStoreException
- if an error occurred while fetching the identifier.- See Also:
-
getEnvelope
Returns the spatiotemporal envelope of this resource. This information is part of API only in some kinds of resource such asFeatureSet
. But the method is provided in this base class for convenience. The default implementation gives an empty value.Implementation note: the default implementation ofcreateMetadata()
uses this identifier for initializing themetadata/identificationInfo/extent/geographicElement
property.- Returns:
- the spatiotemporal resource extent.
- Throws:
DataStoreException
- if an error occurred while reading or computing the envelope.
-
getMetadata
Returns a description of this resource. This method invokescreateMetadata()
in a synchronized block when first needed, then caches the result.- Specified by:
getMetadata
in interfaceResource
- Returns:
- information about this resource (never
null
). - Throws:
DataStoreException
- if an error occurred while reading or computing the metadata.- See Also:
-
createMetadata
Invoked in a synchronized block the first time thatgetMetadata()
is invoked. The default implementation populates metadata based on information provided bygetIdentifier()
andgetEnvelope()
. Subclasses should override if they can provide more information. The default value can be completed by casting toDefaultMetadata
.- Returns:
- the newly created metadata, or
null
if unknown. - Throws:
DataStoreException
- if an error occurred while reading metadata from this resource.
-
clearCache
protected void clearCache()Clears any cache in this resource, forcing the data to be recomputed when needed again. The default implementation clears the cached metadata object, which will causecreateMetadata()
to be invoked again when first needed. -
getSynchronizationLock
Returns the object on which to perform synchronizations for thread-safety. The default implementation returnsthis
. Subclasses can override for example for synchronizing everything on an enclosingDataStore
.- Returns:
- the synchronization lock.
-
addListener
public <T extends StoreEvent> void addListener(Class<T> eventType, StoreListener<? super T> listener) Registers a listener to notify when the specified kind of event occurs in this resource or in children. The default implementation forwards tolisteners.addListener(eventType, listener)
.- Specified by:
addListener
in interfaceResource
- Type Parameters:
T
- compile-time value of theeventType
argument.- Parameters:
listener
- listener to notify about events.eventType
- type ofStoreEvent
s to listen (cannot benull
).
-
removeListener
public <T extends StoreEvent> void removeListener(Class<T> eventType, StoreListener<? super T> listener) Unregisters a listener previously added to this resource for the given type of events. The default implementation forwards tolisteners.removeListener(eventType, listener)
- Specified by:
removeListener
in interfaceResource
- Type Parameters:
T
- compile-time value of theeventType
argument.- Parameters:
listener
- listener to stop notifying about events.eventType
- type ofStoreEvent
s which were listened (cannot benull
).
-
createExceptionMessage
Creates an exception message for a resource that cannot be read. If the error is potentially created by a request out of bounds, this method tries to build a message with the problematic coordinates.- Parameters:
filename
- some identification (typically a file name) of the data that cannot be read.request
- the requested domain, ornull
if the problem is not a request out of bounds.- Returns:
- the message to provide in an exception.
-