Skip to content

Commit ea17f11

Browse files
committed
adding includeInherited to get guestbook list api
1 parent 6a144ac commit ea17f11

File tree

6 files changed

+58
-14
lines changed

6 files changed

+58
-14
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Added 'includeInherited' to query parameters of /api/guestbooks/{ID}/list?includeInherited=true to return the Collection's Guestbooks as well as the Guestbooks of the Collections' hierarchical owners
2+
Also removed the 'EditDataverse' permission requirement to get the list.

doc/sphinx-guides/source/api/native-api.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1223,7 +1223,6 @@ Get a list of Guestbooks for a Dataverse Collection
12231223
For more about guestbooks, see :ref:`dataset-guestbooks` in the User Guide.
12241224

12251225
Get a list of Guestbooks for a Dataverse Collection
1226-
You must have "EditDataverse" permission on the Dataverse collection.
12271226

12281227
.. code-block:: bash
12291228
@@ -1239,6 +1238,12 @@ The fully expanded example above (without environment variables) looks like this
12391238
12401239
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/guestbooks/root/list"
12411240
1241+
To include the inherited Guestbooks of the Dataverse Collection add the query parameter `includeInherited=true`
1242+
1243+
.. code-block:: bash
1244+
1245+
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/guestbooks/root/list?includeInherited=true"
1246+
12421247
Get a Guestbook for a Dataverse Collection
12431248
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12441249

src/main/java/edu/harvard/iq/dataverse/GuestbookServiceBean.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ public List<Guestbook> findGuestbooksForGivenDataverse(Dataverse dataverse) {
3333
return List.of();
3434
}
3535
}
36+
// Get all guestbooks for this collection and it's parent collections
37+
public List<Guestbook> findEffectiveGuestbooksForGivenDataverse(Dataverse dataverse) {
38+
List<Guestbook> guestbooks = findGuestbooksForGivenDataverse(dataverse);
39+
if (dataverse != null) {
40+
List<Dataverse> parentDataverses = dataverse.getOwners();
41+
for (Dataverse dv : parentDataverses) {
42+
guestbooks.addAll(findGuestbooksForGivenDataverse(dv));
43+
}
44+
}
45+
return guestbooks;
46+
}
3647

3748
public Long findCountUsages(Long guestbookId, Long dataverseId) {
3849
String queryString = "";

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ public Response getGuestbook(@Context ContainerRequestContext crc, @PathParam("i
5757
@GET
5858
@AuthRequired
5959
@Path("{identifier}/list")
60-
public Response getGuestbooks(@Context ContainerRequestContext crc, @PathParam("identifier") String identifier) {
60+
public Response getGuestbooks(@Context ContainerRequestContext crc, @PathParam("identifier") String identifier, @QueryParam("includeInherited") boolean includeInherited) {
6161
return response( req -> {
6262
Dataverse dataverse = findDataverseOrDie(identifier);
63-
if (!permissionSvc.request(req).on(dataverse).has(Permission.EditDataverse)) {
64-
return error(Response.Status.FORBIDDEN, "Not authorized");
65-
}
66-
List<Guestbook> guestbooks = guestbookService.findGuestbooksForGivenDataverse(dataverse);
63+
List<Guestbook> guestbooks = (includeInherited) ? guestbookService.findEffectiveGuestbooksForGivenDataverse(dataverse):
64+
guestbookService.findGuestbooksForGivenDataverse(dataverse);
65+
6766
JsonArrayBuilder guestbookArray = Json.createArrayBuilder();
6867
JsonPrinter jsonPrinter = new JsonPrinter();
6968
for (Guestbook gb : guestbooks) {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3876,8 +3876,16 @@ public void testDownloadFileWithGuestbookResponse() throws IOException, JsonPars
38763876
String superusername = UtilIT.getUsernameFromResponse(createUserResponse);
38773877
UtilIT.makeSuperUser(superusername).then().assertThat().statusCode(200);
38783878

3879+
// Create Parent Dataverse
3880+
String parentDataverseAlias = createDataverseGetAlias(ownerApiToken);
3881+
Response publishResponse = UtilIT.publishDataverseViaNativeApi(parentDataverseAlias, ownerApiToken);
3882+
assertEquals(200, publishResponse.getStatusCode());
3883+
// Create a Parent Guestbook
3884+
Guestbook parentGuestbook = UtilIT.createRandomGuestbook(parentDataverseAlias, null, ownerApiToken);
3885+
38793886
// Create Dataverse
38803887
String dataverseAlias = createDataverseGetAlias(ownerApiToken);
3888+
UtilIT.moveDataverse(dataverseAlias, parentDataverseAlias, null, ownerApiToken);
38813889

38823890
// Create user with no permission
38833891
createUserResponse = UtilIT.createRandomUser();
@@ -3912,6 +3920,10 @@ public void testDownloadFileWithGuestbookResponse() throws IOException, JsonPars
39123920
getGuestbooksResponse = UtilIT.getGuestbooks(dataverseAlias, ownerApiToken);
39133921
getGuestbooksResponse.then().assertThat().statusCode(200);
39143922
assertEquals(1, getGuestbooksResponse.getBody().jsonPath().getList("data").size());
3923+
// Get the list of Guestbooks including Parent Guestbook
3924+
getGuestbooksResponse = UtilIT.getGuestbooks(dataverseAlias, ownerApiToken, Boolean.TRUE);
3925+
getGuestbooksResponse.then().assertThat().statusCode(200);
3926+
assertEquals(2, getGuestbooksResponse.getBody().jsonPath().getList("data").size());
39153927

39163928
// Upload files
39173929
JsonObjectBuilder json1 = Json.createObjectBuilder().add("description", "my description1").add("directoryLabel", "data/subdir1").add("categories", Json.createArrayBuilder().add("Data"));

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

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -612,8 +612,16 @@ static Response getGuestbook(Long guestbookId, String apiToken) {
612612
}
613613

614614
static Response getGuestbooks(String dataverseAlias, String apiToken) {
615-
RequestSpecification requestSpec = given()
616-
.header(API_TOKEN_HTTP_HEADER, apiToken);
615+
return getGuestbooks(dataverseAlias, apiToken, null);
616+
}
617+
static Response getGuestbooks(String dataverseAlias, String apiToken, Boolean includeInherited) {
618+
RequestSpecification requestSpec = given();
619+
if (apiToken != null) {
620+
requestSpec.header(API_TOKEN_HTTP_HEADER, apiToken);
621+
}
622+
if (includeInherited != null) {
623+
requestSpec.queryParam("includeInherited", includeInherited);
624+
}
617625
return requestSpec.get("/api/guestbooks/" + dataverseAlias + "/list" );
618626
}
619627

@@ -2255,10 +2263,15 @@ static Response rejectFileAccessRequest(String fileIdOrPersistentId, String iden
22552263
}
22562264

22572265
static Response moveDataverse(String movedDataverseAlias, String targetDataverseAlias, Boolean force, String apiToken) {
2258-
Response response = given()
2259-
.header(API_TOKEN_HTTP_HEADER, apiToken)
2260-
.post("api/dataverses/" + movedDataverseAlias + "/move/" + targetDataverseAlias + "?forceMove=" + force + "&key=" + apiToken);
2261-
return response;
2266+
RequestSpecification requestSpecification = given();
2267+
if (apiToken != null) {
2268+
requestSpecification.header(API_TOKEN_HTTP_HEADER, apiToken);
2269+
requestSpecification.queryParam("key", apiToken);
2270+
}
2271+
if (force != null) {
2272+
requestSpecification.queryParam("forceMove", force);
2273+
}
2274+
return requestSpecification.post("api/dataverses/" + movedDataverseAlias + "/move/" + targetDataverseAlias);
22622275
}
22632276

22642277
static Response moveDataset(String idOrPersistentIdOfDatasetToMove, String destinationDataverseAlias, String apiToken) {
@@ -5500,8 +5513,10 @@ public static Guestbook createRandomGuestbook(String ownerAlias, String persiste
55005513
gb.getCustomQuestions().get(2).setId(jsonPath.getLong("data.customQuestions[2].id"));
55015514

55025515
// Add the Guestbook to the Dataset
5503-
Response setGuestbook = UtilIT.updateDatasetGuestbook(persistentId, guestbookId, apiToken);
5504-
setGuestbook.prettyPrint();
5516+
if (persistentId != null) {
5517+
Response setGuestbook = UtilIT.updateDatasetGuestbook(persistentId, guestbookId, apiToken);
5518+
setGuestbook.prettyPrint();
5519+
}
55055520
return gb;
55065521
}
55075522

0 commit comments

Comments
 (0)