Class ImageCache
- java.lang.Object
-
- org.apache.xmlgraphics.image.loader.cache.ImageCache
-
public class ImageCache extends java.lang.Object
This class provides a cache for images. The main key into the images is the original URI the image was accessed with.Don't use one ImageCache instance in the context of multiple base URIs because relative URIs would not work correctly anymore.
By default, the URIs of inaccessible images are remembered but these entries are discarded after 60 seconds (which causes a retry next time the same URI is requested). This allows to counteract performance loss when accessing invalid or temporarily unavailable images over slow connections.
-
-
Field Summary
Fields Modifier and Type Field Description private ImageCacheListener
cacheListener
private SoftMapCache
imageInfos
private SoftMapCache
images
private ExpirationPolicy
invalidURIExpirationPolicy
private java.util.Map
invalidURIs
private long
lastHouseKeeping
protected static org.apache.commons.logging.Log
log
loggerprivate static long
ONE_HOUR
private TimeStampProvider
timeStampProvider
-
Constructor Summary
Constructors Constructor Description ImageCache()
Default constructor with default settings.ImageCache(TimeStampProvider timeStampProvider, ExpirationPolicy invalidURIExpirationPolicy)
Constructor for customized behaviour and testing.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearCache()
Clears the image cache (all ImageInfo and Image objects).private void
considerHouseKeeping()
void
doHouseKeeping()
Triggers some house-keeping, i.e.private void
doInvalidURIHouseKeeping()
Image
getImage(java.lang.String uri, ImageFlavor flavor)
Returns an image from the cache or null if it wasn't found.Image
getImage(ImageInfo info, ImageFlavor flavor)
Returns an image from the cache or null if it wasn't found.protected ImageInfo
getImageInfo(java.lang.String uri)
Returns an ImageInfo instance from the cache or null if none is found.boolean
isInvalidURI(java.lang.String uri)
Indicates whether a URI has previously been identified as an invalid URI.ImageInfo
needImageInfo(java.lang.String uri, ImageSessionContext session, ImageManager manager)
Returns an ImageInfo instance for a given URI.void
putImage(Image img)
Registers an image with the cache.protected void
putImageInfo(ImageInfo info)
Registers an ImageInfo instance with the cache.(package private) void
registerInvalidURI(java.lang.String uri)
Registers a URI as invalid so getImageInfo can indicate that quickly with no I/O access.private boolean
removeInvalidURIIfExpired(java.lang.String uri)
void
setCacheListener(ImageCacheListener listener)
Sets an ImageCacheListener instance so the events in the image cache can be observed.
-
-
-
Field Detail
-
log
protected static final org.apache.commons.logging.Log log
logger
-
invalidURIs
private java.util.Map invalidURIs
-
invalidURIExpirationPolicy
private ExpirationPolicy invalidURIExpirationPolicy
-
imageInfos
private SoftMapCache imageInfos
-
images
private SoftMapCache images
-
cacheListener
private ImageCacheListener cacheListener
-
timeStampProvider
private TimeStampProvider timeStampProvider
-
lastHouseKeeping
private long lastHouseKeeping
-
ONE_HOUR
private static final long ONE_HOUR
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
ImageCache
public ImageCache()
Default constructor with default settings.
-
ImageCache
public ImageCache(TimeStampProvider timeStampProvider, ExpirationPolicy invalidURIExpirationPolicy)
Constructor for customized behaviour and testing.- Parameters:
timeStampProvider
- the time stamp provider to useinvalidURIExpirationPolicy
- the expiration policy for invalid URIs
-
-
Method Detail
-
setCacheListener
public void setCacheListener(ImageCacheListener listener)
Sets an ImageCacheListener instance so the events in the image cache can be observed.- Parameters:
listener
- the listener instance
-
needImageInfo
public ImageInfo needImageInfo(java.lang.String uri, ImageSessionContext session, ImageManager manager) throws ImageException, java.io.IOException
Returns an ImageInfo instance for a given URI.- Parameters:
uri
- the image's URIsession
- the session contextmanager
- the ImageManager handling the images- Returns:
- the ImageInfo instance
- Throws:
ImageException
- if an error occurs while parsing image datajava.io.IOException
- if an I/O error occurs while loading image data
-
isInvalidURI
public boolean isInvalidURI(java.lang.String uri)
Indicates whether a URI has previously been identified as an invalid URI.- Parameters:
uri
- the image's URI- Returns:
- true if the URI is invalid
-
removeInvalidURIIfExpired
private boolean removeInvalidURIIfExpired(java.lang.String uri)
-
getImageInfo
protected ImageInfo getImageInfo(java.lang.String uri)
Returns an ImageInfo instance from the cache or null if none is found.- Parameters:
uri
- the image's URI- Returns:
- the ImageInfo instance or null if the requested information is not in the cache
-
putImageInfo
protected void putImageInfo(ImageInfo info)
Registers an ImageInfo instance with the cache.- Parameters:
info
- the ImageInfo instance
-
registerInvalidURI
void registerInvalidURI(java.lang.String uri)
Registers a URI as invalid so getImageInfo can indicate that quickly with no I/O access.- Parameters:
uri
- the URI of the invalid image
-
getImage
public Image getImage(ImageInfo info, ImageFlavor flavor)
Returns an image from the cache or null if it wasn't found.- Parameters:
info
- the ImageInfo instance representing the imageflavor
- the requested ImageFlavor for the image- Returns:
- the requested image or null if the image is not in the cache
-
getImage
public Image getImage(java.lang.String uri, ImageFlavor flavor)
Returns an image from the cache or null if it wasn't found.- Parameters:
uri
- the image's URIflavor
- the requested ImageFlavor for the image- Returns:
- the requested image or null if the image is not in the cache
-
putImage
public void putImage(Image img)
Registers an image with the cache.- Parameters:
img
- the image
-
clearCache
public void clearCache()
Clears the image cache (all ImageInfo and Image objects).
-
considerHouseKeeping
private void considerHouseKeeping()
-
doHouseKeeping
public void doHouseKeeping()
Triggers some house-keeping, i.e. removes stale entries.
-
doInvalidURIHouseKeeping
private void doInvalidURIHouseKeeping()
-
-