netx.jnlp.cache
Class ResourceTracker
java.lang.Object
netx.jnlp.cache.ResourceTracker
public class ResourceTracker
extends java.lang.Object
This class tracks the downloading of various resources of a
JNLP file to local files in the cache. It can be used to
download icons, jnlp and extension files, jars, and jardiff
files using the version based protocol or any file using the
basic download protocol (jardiff and version not implemented
yet).
The resource tracker can be configured to prefetch resources,
which are downloaded in the order added to the media
tracker.
Multiple threads are used to download and cache resources that
are actively being waited for (blocking a caller) or those that
have been started downloading by calling the startDownload
method. Resources that are prefetched are downloaded one at a
time and only if no other trackers have requested downloads.
This allows the tracker to start downloading many items without
using many system resources, but still quickly download items
as needed.
void | addDownloadListener(DownloadListener listener) - Adds the listener to the list of objects interested in
receivind DownloadEvents.
|
void | addResource(URL location, Version version, UpdatePolicy updatePolicy) - Add a resource identified by the specified location and
version.
|
boolean | checkResource(URL location) - Returns whether a resource is available for use (ie, can be
accessed with the getCacheFile method).
|
protected void | fireDownloadEvent(Resource resource) - Fires the download event corresponding to the resource's
state.
|
long | getAmountRead(URL location) - Returns the number of bytes downloaded for a resource.
|
File | getCacheFile(URL location) - Returns a file containing the downloaded resource.
|
URL | getCacheURL(URL location) - Returns a URL pointing to the cached location of the
resource, or the resource itself if it is a non-cacheable
resource.
|
InputStream | getInputStream(URL location) - Returns an input stream that reads the contents of the
resource.
|
long | getTotalSize(URL location) - Returns the number of total size in bytes of a resource, or
-1 it the size is not known.
|
void | removeDownloadListener(DownloadListener listener) - Removes a download listener.
|
void | removeResource(URL location) - Removes a resource from the tracker.
|
boolean | startResource(URL location) - Starts loading the resource if it is not already being
downloaded or already cached.
|
protected void | startThread() - Start a new download thread if there are not too many threads
already running.
|
boolean | waitForResource(URL location, long timeout) - Wait for a particular resource to be downloaded and made
available.
|
boolean | waitForResources(urls[] , long timeout) - Wait for a group of resources to be downloaded and made
available locally.
|
ResourceTracker
public ResourceTracker()
Creates a resource tracker that does not prefetch resources.
ResourceTracker
public ResourceTracker(boolean prefetch)
Creates a resource tracker.
prefetch
- whether to download resources before requested.
addDownloadListener
public void addDownloadListener(DownloadListener listener)
Adds the listener to the list of objects interested in
receivind DownloadEvents.
addResource
public void addResource(URL location,
Version version,
UpdatePolicy updatePolicy)
Add a resource identified by the specified location and
version. The tracker only downloads one version of a given
resource per instance (ie cannot download both versions 1 and
2 of a resource in the same tracker).
location
- the location of the resourceversion
- the resource versionupdatePolicy
- whether to check for updates if already in cache
checkResource
public boolean checkResource(URL location)
Returns whether a resource is available for use (ie, can be
accessed with the getCacheFile method).
fireDownloadEvent
protected void fireDownloadEvent(Resource resource)
Fires the download event corresponding to the resource's
state. This method is typicall called by the Resource itself
on each tracker that is monitoring the resource. Do not call
this method with any locks because the listeners may call
back to this ResourceTracker.
getAmountRead
public long getAmountRead(URL location)
Returns the number of bytes downloaded for a resource.
location
- the resource location
- the number of bytes transferred
getCacheFile
public File getCacheFile(URL location)
Returns a file containing the downloaded resource. If the
resource is non-cacheable then null is returned unless the
resource is a local file (the original file is returned).
If the resource has not downloaded yet, the method will block
until it has been transferred to the cache.
location
- the resource location
- a local file containing the resource, or null
getCacheURL
public URL getCacheURL(URL location)
Returns a URL pointing to the cached location of the
resource, or the resource itself if it is a non-cacheable
resource.
If the resource has not downloaded yet, the method will block
until it has been transferred to the cache.
location
- the resource location
- the resource, or null if it could not be downloaded
getInputStream
public InputStream getInputStream(URL location)
throws IOException
Returns an input stream that reads the contents of the
resource. For non-cacheable resources, an InputStream that
reads from the source location is returned. Otherwise the
InputStream reads the cached resource.
This method will block while the resource is downloaded to
the cache.
getTotalSize
public long getTotalSize(URL location)
Returns the number of total size in bytes of a resource, or
-1 it the size is not known.
location
- the resource location
- the number of bytes, or -1
removeDownloadListener
public void removeDownloadListener(DownloadListener listener)
Removes a download listener.
removeResource
public void removeResource(URL location)
Removes a resource from the tracker. This method is useful
to allow memory to be reclaimed, but calling this method is
not required as resources are reclaimed when the tracker is
collected.
startResource
public boolean startResource(URL location)
Starts loading the resource if it is not already being
downloaded or already cached. Resources started downloading
using this method may download faster than those prefetched
by the tracker because the tracker will only prefetch one
resource at a time to conserve system resources.
- true if the resource is already downloaded (or an error occurred)
startThread
protected void startThread()
Start a new download thread if there are not too many threads
already running.
Calls to this method should be synchronized on lock.
waitForResource
public boolean waitForResource(URL location,
long timeout)
throws InterruptedException
Wait for a particular resource to be downloaded and made
available.
location
- the resource to wait fortimeout
- the timeout, or 0 to wait until completed
- whether the resource downloaded before the timeout
waitForResources
public boolean waitForResources(urls[] ,
long timeout)
throws InterruptedException
Wait for a group of resources to be downloaded and made
available locally.
timeout
- the time in ms to wait before returning, 0 for no timeout
- whether the resources downloaded before the timeout