Object
AbstractResource
- All Implemented Interfaces:
Resource
- Direct Known Subclasses:
AbstractFeatureSet
,AbstractGridCoverageResource
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
-
Field Summary
Modifier and TypeFieldDescriptionprotected final StoreListeners
The set of registeredStoreListener
s for this resources. -
Constructor Summary
ModifierConstructorDescriptionprotected
AbstractResource
(StoreListeners parentListeners, boolean hidden) Creates a new resource which can send notifications to the given set of listeners.protected
AbstractResource
(Resource parent) Creates a new resource, potentially as a child of another resource. -
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.protected Metadata
Invoked in a synchronized block the first time thatgetMetadata()
is invoked.Returns the spatiotemporal envelope of this resource.Returns the resource persistent identifier if available.final 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.
-
-
Constructor Details
-
AbstractResource
Creates a new resource, potentially as a child of another resource. The parent resource is typically, but not necessarily, anAggregate
.- Parameters:
parent
- the parent resource, ornull
if none.- Since:
- 1.4
-
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.Relationship with metadata
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:
eventType
- type ofStoreEvent
s to listen (cannot benull
).listener
- listener to notify about events.
-
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:
eventType
- type ofStoreEvent
s which were listened (cannot benull
).listener
- listener to stop notifying about events.
-