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 StoreListenersThe set of registeredStoreListeners for this resources.private org.opengis.metadata.MetadataA description of this resource as an unmodifiable metadata, ornullif not yet computed. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractResource(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 voidClears any cache in this resource, forcing the data to be recomputed when needed again.(package private) final StringcreateExceptionMessage(String filename, org.opengis.geometry.Envelope request) Creates an exception message for a resource that cannot be read.protected org.opengis.metadata.MetadataInvoked 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.MetadataReturns a description of this resource.protected ObjectReturns 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 registeredStoreListeners for this resources. ThisStoreListenershasDataStore.listenershas a parent. -
metadata
private volatile org.opengis.metadata.Metadata metadataA description of this resource as an unmodifiable metadata, ornullif 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. Ifhiddenisfalse(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 ifhiddenistrue, 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
hiddenistrueor indirectly ifhiddenisfalse.- Parameters:
parentListeners- listeners of the parent resource, ornullif none. This is usually the listeners of theDataStorethat created this resource.hidden-falseif this resource shall use its ownStoreListenerswith the specified parent, ortruefor usingparentListenersdirectly.
-
-
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/titleproperty.- Specified by:
getIdentifierin 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/geographicElementproperty.- 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:
getMetadatain 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
nullif 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:
addListenerin interfaceResource- Type Parameters:
T- compile-time value of theeventTypeargument.- Parameters:
listener- listener to notify about events.eventType- type ofStoreEvents 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:
removeListenerin interfaceResource- Type Parameters:
T- compile-time value of theeventTypeargument.- Parameters:
listener- listener to stop notifying about events.eventType- type ofStoreEvents 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, ornullif the problem is not a request out of bounds.- Returns:
- the message to provide in an exception.
-