Class CachedDataRaster

  • All Implemented Interfaces:
    AVList, DataRaster, Disposable

    public class CachedDataRaster
    extends AVListImpl
    implements DataRaster
    The CachedDataRaster is used to hold data raster's source and metadata, while the actual data raster may not be loaded in to the memory. This is mostly used together with a memory caches. CachedDataRaster actually implements all interfaces of the DataRaster, and acts as a proxy, that loads a real data raster only when it is actually needed.
    • Field Detail

      • dataSource

        protected java.lang.Object dataSource
      • rasterUsageLock

        protected final java.lang.Object rasterUsageLock
      • rasterRetrievalLock

        protected final java.lang.Object rasterRetrievalLock
      • requiredKeys

        protected java.lang.String[] requiredKeys
    • Constructor Detail

      • CachedDataRaster

        public CachedDataRaster​(java.lang.Object source,
                                AVList params,
                                DataRasterReader reader,
                                MemoryCache cache)
                         throws java.io.IOException,
                                java.lang.IllegalArgumentException
        Create a cached data raster.
        Parameters:
        source - the location of the local file, expressed as either a String path, a File, or a file URL.
        params - metadata as AVList, it is expected to next parameters: AVKey.WIDTH, AVKey.HEIGHT, AVKey.SECTOR, AVKey.PIXEL_FORMAT.

        If any of these keys is missing, there will be an attempt made to retrieve missign metadata from the source using the reader.

        reader - A reference to a DataRasterReader instance
        cache - A reference to a MemoryCache instance
        Throws:
        java.io.IOException - thrown if there is an error to read metadata from the source
        java.lang.IllegalArgumentException - thrown when a source or a reader are null
    • Method Detail

      • assembleMetadata

        protected void assembleMetadata​(java.lang.Object source,
                                        AVList params,
                                        DataRasterReader reader)
                                 throws java.io.IOException,
                                        java.lang.IllegalArgumentException
        Throws:
        java.io.IOException
        java.lang.IllegalArgumentException
      • getRequiredKeysList

        protected java.lang.String[] getRequiredKeysList()
      • hasRequiredMetadata

        protected boolean hasRequiredMetadata​(AVList params,
                                              CachedDataRaster.ErrorHandlerMode throwException)
                                       throws java.lang.IllegalArgumentException
        Validates if params (AVList) has all required keys.
        Parameters:
        params - AVList of key/value pairs
        throwException - specifies weather to throw exception when a key/value is missing, or just return false.
        Returns:
        TRUE, if all required keys are present in the params list, or both params and required keys are empty, otherwise returns FALSE (if throwException is false)
        Throws:
        java.lang.IllegalArgumentException - If a key/value is missing and throwException is set to TRUE
      • getWidth

        public int getWidth()
        Description copied from interface: DataRaster
        Returns the raster's width in raster units.
        Specified by:
        getWidth in interface DataRaster
        Returns:
        the raster's width in raster units.
      • getHeight

        public int getHeight()
        Description copied from interface: DataRaster
        Returns the raster's height in raster units.
        Specified by:
        getHeight in interface DataRaster
        Returns:
        the raster's height in raster units.
      • getSector

        public Sector getSector()
        Description copied from interface: DataRaster
        Returns the region covered be the data.
        Specified by:
        getSector in interface DataRaster
        Returns:
        a sector indicating the region covered by the raster.
      • getDataSource

        public java.lang.Object getDataSource()
      • getParams

        public AVList getParams()
      • getMetadata

        public AVList getMetadata()
      • dispose

        public void dispose()
        Description copied from interface: Disposable
        Disposes of any internal resources allocated by the object.
        Specified by:
        dispose in interface Disposable
      • drawOnTo

        public void drawOnTo​(DataRaster canvas)
        Description copied from interface: DataRaster
        Copies this raster into a specified raster.
        Specified by:
        drawOnTo in interface DataRaster
        Parameters:
        canvas - - the raster to copy into.
      • getSubRaster

        public DataRaster getSubRaster​(AVList params)
        Description copied from interface: DataRaster
        Returns a portion of this raster as another raster. Input values are the desired width and height of the return sub-raster, and the sector to copy from this raster to the sub-raster. The returned raster conforms to EPSG:4326 even if this raster does not.
        Specified by:
        getSubRaster in interface DataRaster
        Parameters:
        params - a list of parameters that specify the width, height and sector of the region to return. Specify these values using AVKey.WIDTH, AVKey.HEIGHT and AVKey.SECTOR.
        Returns:
        the requested raster, or null if the raster could not be created.
      • getSubRaster

        public DataRaster getSubRaster​(int width,
                                       int height,
                                       Sector sector,
                                       AVList params)
        Description copied from interface: DataRaster
        Returns a portion of this raster as another raster. The returned raster conforms to EPSG:4326 even if this raster does not.
        Specified by:
        getSubRaster in interface DataRaster
        Parameters:
        width - the width to make the returned sub-raster.
        height - the height to make the returned sub-raster.
        sector - the sector to copy.
        params - a list of parameters that specify the width, height and sector of the region to return. Specify these values using AVKey.WIDTH, AVKey.HEIGHT and AVKey.SECTOR.
        Returns:
        the requested raster, or null if the raster could not be created.
      • releaseMemory

        protected void releaseMemory()
      • composeExceptionReason

        protected java.lang.String composeExceptionReason​(java.lang.Throwable t)
      • getSizeInBytes

        protected long getSizeInBytes​(DataRaster[] rasters)
      • disposeRasters

        protected static void disposeRasters​(DataRaster[] rasters)
      • getTotalUsedMemory

        protected static long getTotalUsedMemory()