package au.edu.anu.dcclient.tasks;
import java.io.File;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.core.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.ClientResponse.Status;
import com.sun.jersey.api.client.WebResource;
public class DownloadFilesTask extends AbstractDcBagTask<Map<String, File>, Void> {
private static final Logger LOGGER = LoggerFactory.getLogger(DownloadFilesTask.class);
private String pid;
private List<String> filepaths;
private Map<String, File> fileResults;
public DownloadFilesTask(String pid, List<String> filepaths) {
this.pid = pid;
this.filepaths = filepaths;
fileResults = new HashMap<String, File>(filepaths.size());
}
@Override
protected Map<String, File> doInBackground() throws Exception {
for (String filepath : filepaths) {
fileResults.put(filepath, null);
try {
ClientResponse resp = downloadFile(filepath);
if (resp.getClientResponseStatus() == Status.OK) {
File dlFile = resp.getEntity(File.class);
fileResults.put(filepath, dlFile);
LOGGER.trace(dlFile.getAbsolutePath());
}
} catch (Exception e) {
// No Op.
}
}
return fileResults;
}
private ClientResponse downloadFile(String filepath) {
ClientResponse resp;
URI pidUri = getBagFileUri(pid, filepath);
LOGGER.debug("Downloading file from {}", pidUri.toString());
WebResource webResource = client.resource(pidUri);
resp = webResource.type(MediaType.APPLICATION_OCTET_STREAM_TYPE).get(ClientResponse.class);
return resp;
}
}