Class ResourceTracker
- java.lang.Object
-
- net.adoptopenjdk.icedteaweb.resources.ResourceTracker
-
public class ResourceTracker extends java.lang.ObjectThis 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.
- Version:
- $Revision: 1.22 $
-
-
Field Summary
Fields Modifier and Type Field Description private DownloadOptionsdownloadOptionsprivate static LoggerLOGprivate booleanprefetchwhether to download parts before requestedprivate java.util.Map<UrlKey,Resource>resourcesthe resources known about by this resource trackerprivate UpdatePolicyupdatePolicy
-
Constructor Summary
Constructors Constructor Description ResourceTracker()Creates a resource tracker that does not prefetch resources.ResourceTracker(boolean prefetch)Creates a resource tracker that does not prefetch resources.ResourceTracker(boolean prefetch, DownloadOptions downloadOptions, UpdatePolicy updatePolicy)Creates a resource tracker.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddDownloadListener(java.net.URL resourceUrl, java.net.URL[] allResources, DownloadServiceListener listener)voidaddResource(java.net.URL location, VersionString version)voidaddResource(java.net.URL location, VersionString version, UpdatePolicy updatePolicy)Add a resource identified by the specified location and version.private booleanaddToResources(Resource resource)booleancheckResource(java.net.URL location)Returns whether a resource is available for use (ie, can be accessed with the getCacheFile method).longgetAmountRead(java.net.URL location)Returns the number of bytes downloaded for a resource.java.io.FilegetCacheFile(java.net.URL location)Returns a file containing the downloaded resource.private static java.io.FilegetCacheFile(Resource resource)java.net.URLgetCacheURL(java.net.URL location)Returns a URL pointing to the cached location of the resource, or the resource itself if it is a non-cacheable resource.private intgetConfiguredThreadCount()private intgetPercentageDownloaded(java.net.URL[] allResources)private ResourcegetResource(java.net.URL location)Return the resource matching the specified URL.private Resource[]getResources(java.net.URL[] urls)longgetTotalSize(java.net.URL location)Returns the number of total size in bytes of a resource, or -1 it the size is not known.voidremoveResource(java.net.URL location)Removes a resource from the tracker.private voidstartDownloadingIfPrefetch(Resource resource)private java.util.concurrent.Future<Resource>triggerDownloadFor(Resource resource, java.util.concurrent.Executor downloadExecutor)private voidwaitForCompletion(Resource... resources)Wait for some resources.voidwaitForResources(java.net.URL... urls)Wait for a group of resources to be downloaded and made available locally.
-
-
-
Field Detail
-
LOG
private static final Logger LOG
-
resources
private final java.util.Map<UrlKey,Resource> resources
the resources known about by this resource tracker
-
prefetch
private final boolean prefetch
whether to download parts before requested
-
downloadOptions
private final DownloadOptions downloadOptions
-
updatePolicy
private final UpdatePolicy updatePolicy
-
-
Constructor Detail
-
ResourceTracker
public ResourceTracker()
Creates a resource tracker that does not prefetch resources.
-
ResourceTracker
public ResourceTracker(boolean prefetch)
Creates a resource tracker that does not prefetch resources.
-
ResourceTracker
public ResourceTracker(boolean prefetch, DownloadOptions downloadOptions, UpdatePolicy updatePolicy)Creates a resource tracker.- Parameters:
prefetch- whether to download resources before requested.
-
-
Method Detail
-
addResource
public void addResource(java.net.URL location, VersionString version)
-
addResource
public void addResource(java.net.URL location, VersionString 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).- Parameters:
location- the location of the resourceversion- the resource versionupdatePolicy- whether to check for updates if already in cache
-
addToResources
private boolean addToResources(Resource resource)
- Returns:
trueif no resource with the given URL is currently tracked.
-
startDownloadingIfPrefetch
private void startDownloadingIfPrefetch(Resource resource)
-
removeResource
public void removeResource(java.net.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.- Parameters:
location- location of resource to be removed- Throws:
IllegalResourceDescriptorException- if the resource is not being tracked
-
getCacheURL
public java.net.URL getCacheURL(java.net.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.
- 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:
CacheUtil.isCacheable(java.net.URL)
-
getCacheFile
public java.io.File getCacheFile(java.net.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.
- 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:
CacheUtil.isCacheable(java.net.URL)
-
getCacheFile
private static java.io.File getCacheFile(Resource resource)
-
waitForResources
public void waitForResources(java.net.URL... urls) throws java.lang.InterruptedExceptionWait for a group of resources to be downloaded and made available locally.- Parameters:
urls- the resources to wait for- Throws:
java.lang.InterruptedException- if thread is interruptedIllegalResourceDescriptorException- if the resource is not being tracked
-
getAmountRead
public long getAmountRead(java.net.URL location)
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
public boolean checkResource(java.net.URL location)
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
-
getTotalSize
public long getTotalSize(java.net.URL location)
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
-
getResources
private Resource[] getResources(java.net.URL[] urls)
-
getResource
private Resource getResource(java.net.URL location)
Return the resource matching the specified URL.- Throws:
IllegalResourceDescriptorException- if the resource is not being tracked
-
waitForCompletion
private void waitForCompletion(Resource... resources)
Wait for some resources.- Parameters:
resources- the resources to wait for- Throws:
java.lang.InterruptedException- if another thread interrupted the wait
-
getConfiguredThreadCount
private int getConfiguredThreadCount()
-
triggerDownloadFor
private java.util.concurrent.Future<Resource> triggerDownloadFor(Resource resource, java.util.concurrent.Executor downloadExecutor)
-
addDownloadListener
public void addDownloadListener(java.net.URL resourceUrl, java.net.URL[] allResources, DownloadServiceListener listener)
-
getPercentageDownloaded
private int getPercentageDownloaded(java.net.URL[] allResources)
-
-