package com.nutiteq.io; import com.nutiteq.cache.Cache; import com.nutiteq.fs.FileSystem; import com.nutiteq.net.DownloadCounter; import com.nutiteq.net.DownloadStreamOpener; import com.nutiteq.task.NetworkTask; import com.nutiteq.task.RetrieveNetworkResourceTask; import com.nutiteq.task.Task; import com.nutiteq.task.TasksRunner; import com.nutiteq.utils.Utils; public class RetrieveResourceTask implements Task { private final ResourceRequestor resourceRequestor; private DownloadStreamOpener downloadStreamOpener; private Cache networkCache; private DownloadCounter downloadCounter; private TasksRunner tasksRunner; private FileSystem fileSystem; public RetrieveResourceTask(final ResourceRequestor resourceRequestor) { this(resourceRequestor, null); } public RetrieveResourceTask(final ResourceRequestor resourceRequestor, final TasksRunner tasksRunner) { this.resourceRequestor = resourceRequestor; this.tasksRunner = tasksRunner; } public void execute() { Task executed = null; switch (Utils.getResourceType(resourceRequestor.resourcePath())) { case Utils.RESOURCE_TYPE_NETWORK: executed = new RetrieveNetworkResourceTask(resourceRequestor, null, resourceRequestor .getCachingLevel()); ((NetworkTask) executed).initialize(downloadStreamOpener, networkCache, downloadCounter); break; case Utils.RESOURCE_TYPE_FILE: throw new RuntimeException("No file support yet"); case Utils.RESOURCE_TYPE_JAR: executed = new RetrieveJarResourceTask(resourceRequestor); break; default: throw new RuntimeException("Don't know what to do with " + resourceRequestor.resourcePath()); } //TODO jaanus : check this if (tasksRunner == null) { executed.execute(); } else { tasksRunner.enqueue(executed); } } public void initialize(final DownloadStreamOpener downloadStreamOpener, final Cache networkCache, final DownloadCounter downloadCounter, final TasksRunner tasksRunner, final FileSystem fileSystem) { this.downloadStreamOpener = downloadStreamOpener; this.networkCache = networkCache; this.downloadCounter = downloadCounter; this.tasksRunner = tasksRunner; this.fileSystem = fileSystem; } public DownloadStreamOpener getDownloadStreamOpener() { return downloadStreamOpener; } public Cache getNetworkCache() { return networkCache; } public DownloadCounter getDownloadCounter() { return downloadCounter; } public FileSystem getFileSystem() { return fileSystem; } }