public class TLcdWMSModelProvider extends ALcdMultiDimensionalModelProvider
Default model provider implementation that delegates to the given ILcdModelDecoderFactory
.
This implementation
The getModelUpdateSequence
method implementation is based on the use of
System.currentTimeMillis()
. When a model gets decoded, it is assigned an update sequence, based on the
current time. When invalidate(String)
or invalidateAll()
is called, it will trigger the model
to be re-decoded, and the model update sequence will be updated. When the model changes in-memory (detected
using a model listener), the update sequence will be updated as well.
Constructor and Description |
---|
TLcdWMSModelProvider(ILcdOGCModelDecoderFactory aModelDecoderFactory)
Creates a model provider using the given
ILcdOGCModelDecoderFactory . |
TLcdWMSModelProvider(ILcdOGCModelDecoderFactory[] aModelDecoderFactories)
Creates a new model provider based on the given
ILcdOGCModelDecoderFactory array. |
Modifier and Type | Method and Description |
---|---|
void |
dispose()
Disposes of this object and allows it to release any system resources that it is holding.
|
ILcdModel |
getModel(String aSourceName,
ALcdRequestContext aRequestContext)
Returns the
ILcdModel corresponding to a source name. |
String |
getModelUpdateSequence(String aSourceName,
ALcdRequestContext aRequestContext)
Returns the update sequence value associated with the mode identified by the given source name.
|
void |
invalidate(String aSourceName)
Clears the model cache for the given source.
|
void |
invalidateAll()
Clears the entire model cache.
|
getDimensionExtent, getModel
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close
public TLcdWMSModelProvider(ILcdOGCModelDecoderFactory aModelDecoderFactory)
ILcdOGCModelDecoderFactory
.aModelDecoderFactory
- a model decoder factory.public TLcdWMSModelProvider(ILcdOGCModelDecoderFactory[] aModelDecoderFactories)
ILcdOGCModelDecoderFactory
array.aModelDecoderFactories
- a list model decoder factories.public ILcdModel getModel(String aSourceName, ALcdRequestContext aRequestContext) throws IOException
ALcdMultiDimensionalModelProvider
ILcdModel
corresponding to a source name.
This method is used for all ALcdWMSLayer
objects that don't
have any dimensions defined.
By default, an ILcdModelProvider
implementation is used that maintains
a cache for all decoded models. To prevent memory problems, it makes use of
Soft reference objects, which are cleared at the discretion of the garbage
collector in response to memory demand. Soft references are most often used
to implement memory-sensitive caches.getModel
in interface ILcdOGCModelProvider
getModel
in interface ILcdModelProvider
getModel
in class ALcdMultiDimensionalModelProvider
aSourceName
- the source name of the model.aRequestContext
- the request context, which is an instance of type TLcdWMSRequestContext
.
This can be null if the method is called by a process which is not handling a request.ILcdModel
corresponding to a source name.IOException
- if the model can not be returned (because decoding fails).public String getModelUpdateSequence(String aSourceName, ALcdRequestContext aRequestContext) throws IOException
ILcdModelProvider
Returns the update sequence value associated with the mode identified by the given source name. The update sequence identifies the state of the model.
The update sequence should comply with a number of conditions:
By default, this method always returns "0"
. This means that the default implementation assumes that
models never change. If models change, this method should be implemented differently.
One way to generate update sequences would be to use a (persistent) counter that gets incremented on every
(file system) change. Another way would be to use System.currentTimeMillis()
from a correct clock.
This method must be used by model provider implementations that contain a model cache. The result of this method must be used to invalidate this cache if needed.
Because of caching on the request/view level, it is possible that the getModel
method
is called infrequently. This method will need to be called at least once for each request though. This means
that for performance reasons, this method needs to have a fast implementation, ideally avoiding any I/O.
The ALcdWMSLayer
class has an update sequence concept as well. See
ALcdWMSLayer.getUpdateSequence()
for more information.
aSourceName
- the source name of the model.aRequestContext
- the request context, which is an instance of type TLcdWMSRequestContext
.
This can be null if the method is called by a process which is not handling a request.IOException
- if the update sequence can not be determinedpublic void invalidate(String aSourceName)
getModelUpdateSequence
to return a different value for new calls for the given source name.aSourceName
- the source name.public void invalidateAll()
getModelUpdateSequence
to return a different value for new calls for all models.public void dispose()
ILcdDisposable
Disposes of this object and allows it to release any system resources that it is holding.
The result of calling any other method (other than finalize
) on this object subsequent to a call to
this method is undefined.
dispose
in interface ILcdOGCModelProvider
dispose
in interface ILcdDisposable
dispose
in class ALcdMultiDimensionalModelProvider