Class ResourceTracker
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.
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionCreates a resource tracker that does not prefetch resources.ResourceTracker
(boolean prefetch) Creates a resource tracker. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addDownloadListener
(DownloadListener listener) Adds the listener to the list of objects interested in receivind DownloadEvents.void
addResource
(URL location, Version version, DownloadOptions options, 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.getCacheFile
(URL location) Returns a file containing the downloaded resource.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.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.protected void
startDownloadThread
(Resource resource) Start a new download thread.boolean
startResource
(URL location) Starts loading the resource if it is not already being downloaded or already cached.boolean
waitForResource
(URL location, long timeout) Wait for a particular resource to be downloaded and made available.boolean
waitForResources
(URL[] urls, long timeout) Wait for a group of resources to be downloaded and made available locally.
-
Constructor Details
-
ResourceTracker
public ResourceTracker()Creates a resource tracker that does not prefetch resources. -
ResourceTracker
public ResourceTracker(boolean prefetch) Creates a resource tracker.- Parameters:
prefetch
- whether to download resources before requested.
-
-
Method Details
-
addResource
public void addResource(URL location, Version version, DownloadOptions options, 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).- Parameters:
location
- the location of the resourceversion
- the resource versionoptions
- options to control downloadupdatePolicy
- whether to check for updates if already in cache
-
removeResource
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.- Parameters:
location
- location of resource to be removed- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked
-
addDownloadListener
Adds the listener to the list of objects interested in receivind DownloadEvents.- Parameters:
listener
- the listener to add.
-
removeDownloadListener
Removes a download listener.- Parameters:
listener
- the listener to remove.
-
fireDownloadEvent
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.- Parameters:
resource
- resource on which event is fired
-
getCacheURL
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.
- Parameters:
location
- the resource location- Returns:
- the resource, or null if it could not be downloaded
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked- See Also:
-
getCacheFile
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.
- Parameters:
location
- the resource location- Returns:
- a local file containing the resource, or null
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked- See Also:
-
waitForResources
Wait for a group of resources to be downloaded and made available locally.- Parameters:
urls
- the resources to wait fortimeout
- the time in ms to wait before returning, 0 for no timeout- Returns:
- whether the resources downloaded before the timeout
- Throws:
InterruptedException
- if thread is interruptedIllegalResourceDescriptorException
- if the resource is not being tracked
-
waitForResource
Wait for a particular resource to be downloaded and made available.- Parameters:
location
- the resource to wait fortimeout
- the timeout, or 0 to wait until completed- Returns:
- whether the resource downloaded before the timeout
- Throws:
InterruptedException
- if another thread interrupted the waitIllegalResourceDescriptorException
- if the resource is not being tracked
-
getAmountRead
Returns the number of bytes downloaded for a resource.- Parameters:
location
- the resource location- Returns:
- the number of bytes transferred
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked
-
checkResource
Returns whether a resource is available for use (ie, can be accessed with the getCacheFile method).- Parameters:
location
- the resource location- Returns:
- resource availability
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked
-
startResource
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.- Parameters:
location
- the resource location- Returns:
- true if the resource is already downloaded (or an error occurred)
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked
-
getTotalSize
Returns the number of total size in bytes of a resource, or -1 it the size is not known.- Parameters:
location
- the resource location- Returns:
- the number of bytes, or -1
- Throws:
IllegalResourceDescriptorException
- if the resource is not being tracked
-
startDownloadThread
Start a new download thread.Calls to this method should be synchronized on lock.
- Parameters:
resource
- resource to be download
-