Skip to content

Commit 3ccee6e

Browse files
committed
fix download all files in dataset with guestbook response
1 parent 55f77c5 commit 3ccee6e

3 files changed

Lines changed: 28 additions & 3 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/api/Access.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,11 @@ private Response processDatafileWithGuestbookResponse(ContainerRequestContext cr
454454
String displayName = "";
455455
String gbrids = null;
456456
List<String> fileIdList = new ArrayList<>();
457+
String id = null;
457458
try {
458459
// since all files must be in the same Dataset we can generate a Guestbook Response once and just replace the DataFile for each file in the list
459460
DataFile firstDatafile = datafilesMap.values().size() > 0 ? (DataFile) Arrays.stream(datafilesMap.values().toArray()).findFirst().get() : null;
461+
id = firstDatafile.getOwner().getId().toString();
460462
GuestbookResponse gbr = getGuestbookResponseFromBody(firstDatafile, GuestbookResponse.DOWNLOAD, jsonBody, user);
461463
boolean guestbookResponseRequired = checkGuestbookRequiredResponse(crc, uriInfo, firstDatafile, null);
462464
for (DataFile df : datafilesMap.values()) {
@@ -484,7 +486,11 @@ private Response processDatafileWithGuestbookResponse(ContainerRequestContext cr
484486
List<String> args = Arrays.asList(displayName, ex.getLocalizedMessage());
485487
return error(BAD_REQUEST, BundleUtil.getStringFromBundle("access.api.download.failure.guestbook.commandError", args));
486488
}
487-
return returnSignedUrl(crc, uriInfo, user, String.join(",", fileIdList), gbrids);
489+
// Check if requesting datafile(s) or all files within dataset
490+
if (!uriInfo.getPath().toLowerCase().contains("/dataset/")) {
491+
id = String.join(",", fileIdList);
492+
}
493+
return returnSignedUrl(crc, uriInfo, user, id, gbrids);
488494
}
489495

490496
private Map<Long, DataFile> getDatafilesMap(ContainerRequestContext crc, String fileIds) {

src/test/java/edu/harvard/iq/dataverse/api/FilesIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4037,6 +4037,14 @@ public void testDownloadFileWithGuestbookResponse() throws IOException, JsonPars
40374037
downloadResponse = UtilIT.postDownloadDatafiles(jsonBody, apiToken);
40384038
assertEquals(OK.getStatusCode(), downloadResponse.getStatusCode());
40394039

4040+
// Download all files in dataset with guestbook response using dataset persistentId
4041+
downloadResponse = UtilIT.downloadAllDatasetFilesWithGuestbookResponse(persistentId, apiToken, guestbookResponse);
4042+
downloadResponse.prettyPrint();
4043+
assertEquals(OK.getStatusCode(), signedUrlResponse.getStatusCode());
4044+
signedUrl = UtilIT.getSignedUrlFromResponse(downloadResponse);
4045+
signedUrlResponse = get(signedUrl);
4046+
assertEquals(OK.getStatusCode(), signedUrlResponse.getStatusCode());
4047+
40404048
downloadResponse = UtilIT.downloadFilesUrlWithGuestbookResponse(new Integer[]{fileId1, fileId2, fileId3}, apiToken, guestbookResponse);
40414049
signedUrl = UtilIT.getSignedUrlFromResponse(downloadResponse);
40424050
signedUrlResponse = get(signedUrl);

src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,8 +1302,19 @@ static Response downloadFilesUrlWithGuestbookResponse(String persistentId, Strin
13021302
if (body != null) {
13031303
requestSpecification.body(body);
13041304
}
1305-
String getString = "/api/access/datafile/:persistentId?persistentId=" + persistentId;
1306-
return requestSpecification.post(getString);
1305+
String postString = "/api/access/datafile/:persistentId?persistentId=" + persistentId;
1306+
return requestSpecification.post(postString);
1307+
}
1308+
static Response downloadAllDatasetFilesWithGuestbookResponse(String persistentId, String apiToken, String body) {
1309+
RequestSpecification requestSpecification = given();
1310+
if (apiToken != null) {
1311+
requestSpecification.header(API_TOKEN_HTTP_HEADER, apiToken);
1312+
}
1313+
if (body != null) {
1314+
requestSpecification.body(body);
1315+
}
1316+
String postString = "/api/access/dataset/:persistentId?persistentId=" + persistentId;
1317+
return requestSpecification.post(postString);
13071318
}
13081319

13091320
static Response postDownloadDatafiles(String body, String apiToken) {

0 commit comments

Comments
 (0)