package com.github.jmchilton.blend4j.galaxy;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.type.TypeReference;
import com.github.jmchilton.blend4j.galaxy.beans.History;
import com.github.jmchilton.blend4j.galaxy.beans.Tool;
import com.github.jmchilton.blend4j.galaxy.beans.ToolExecution;
import com.github.jmchilton.blend4j.galaxy.beans.ToolInputs;
import com.github.jmchilton.blend4j.galaxy.beans.ToolSection;
import com.sun.jersey.api.client.ClientResponse;
class ToolsClientImpl extends Client implements ToolsClient {
ToolsClientImpl(GalaxyInstanceImpl galaxyInstance) {
super(galaxyInstance, "tools");
}
public ToolExecution create(History history, ToolInputs inputs) {
inputs.setHistoryId(history.getId());
return super.create(inputs).getEntity(ToolExecution.class);
// XXX Datasets not yet properly returned from Tool creation
// return new ArrayList();
}
public ClientResponse fileUploadRequest(final String historyId,
final String fileType,
final String dbKey,
final File file) {
final FileUploadRequest request = new FileUploadRequest(historyId, file);
request.setFileType(fileType);
request.setDbKey(dbKey);
return uploadRequest(request);
}
public ToolExecution upload(final FileUploadRequest request) {
return uploadRequest(request).getEntity(ToolExecution.class);
}
public ClientResponse uploadRequest(final FileUploadRequest request) {
final Map<String, String> uploadParameters = new HashMap<String, String>();
final String datasetName = request.getDatasetName();
if(datasetName != null) {
uploadParameters.put("files_0|NAME", datasetName);
} else {
uploadParameters.put("files_0|NAME", request.getFiles().iterator().next().getName());
}
uploadParameters.put("dbkey", request.getDbKey());
uploadParameters.put("file_type", request.getFileType());
uploadParameters.putAll(request.getExtraParameters());
final Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("tool_id", request.getToolId());
requestParameters.put("history_id", request.getHistoryId());
requestParameters.put("inputs", write(uploadParameters));
requestParameters.put("type", "upload_dataset");
return multipartPost(getWebResource(), requestParameters, prepareUploads(request.getFileObjects()));
}
/**
* {@inheritDoc}
*/
public Tool showTool(final String toolId) {
return super.getWebResource(toolId).get(Tool.class);
}
public List<ToolSection> getTools() {
return get(new TypeReference<List<ToolSection>>() {});
}
}