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()));
}