Skip to content

Commit dcd7c22

Browse files
authored
Merge pull request #10322 from IQSS/10286-add-owner-info
👍🏼
2 parents b9cd0dd + 9790d23 commit dcd7c22

File tree

11 files changed

+327
-29
lines changed

11 files changed

+327
-29
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
The API endpoints for getting datasets, Dataverse collections, and datafiles have been extended to support the following optional 'returnOwners' query parameter.
2+
3+
Including the parameter and setting it to true will add a hierarchy showing which dataset and dataverse collection(s) the object is part of to the json object returned.
4+
5+

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ The fully expanded example above (without environment variables) looks like this
8888
8989
curl "https://demo.dataverse.org/api/dataverses/root"
9090
91+
If you want to include the Dataverse collections that this collection is part of, you must set ``returnOwners`` query parameter to ``true``.
92+
93+
Usage example:
94+
95+
.. code-block:: bash
96+
97+
curl "https://demo.dataverse.org/api/dataverses/root?returnOwners=true"
98+
9199
To view an unpublished Dataverse collection:
92100

93101
.. code-block:: bash
@@ -910,6 +918,14 @@ The fully expanded example above (without environment variables) looks like this
910918
911919
The dataset id can be extracted from the response retrieved from the API which uses the persistent identifier (``/api/datasets/:persistentId/?persistentId=$PERSISTENT_IDENTIFIER``).
912920

921+
If you want to include the Dataverse collections that this dataset is part of, you must set ``returnOwners`` query parameter to ``true``.
922+
923+
Usage example:
924+
925+
.. code-block:: bash
926+
927+
curl "https://demo.dataverse.org/api/datasets/24?returnOwners=true"
928+
913929
List Versions of a Dataset
914930
~~~~~~~~~~~~~~~~~~~~~~~~~~
915931

@@ -1016,6 +1032,14 @@ Usage example:
10161032
10171033
curl "https://demo.dataverse.org/api/datasets/24/versions/1.0?includeDeaccessioned=true"
10181034
1035+
If you want to include the Dataverse collections that this dataset version is part of, you must set ``returnOwners`` query parameter to ``true``.
1036+
1037+
Usage example:
1038+
1039+
.. code-block:: bash
1040+
1041+
curl "https://demo.dataverse.org/api/datasets/24/versions/1.0?returnOwners=true"
1042+
10191043
.. _export-dataset-metadata-api:
10201044

10211045
Export Metadata of a Dataset in Various Formats
@@ -2585,6 +2609,15 @@ Get Dataset By Private URL Token
25852609
25862610
curl "$SERVER_URL/api/datasets/privateUrlDatasetVersion/$PRIVATE_URL_TOKEN"
25872611
2612+
If you want to include the Dataverse collections that this dataset is part of, you must set ``returnOwners`` query parameter to ``true``.
2613+
2614+
Usage example:
2615+
2616+
.. code-block:: bash
2617+
2618+
curl "https://demo.dataverse.org/api/datasets/privateUrlDatasetVersion/a56444bc-7697-4711-8964-e0577f055fd2?returnOwners=true"
2619+
2620+
25882621
.. _get-citation:
25892622

25902623
Get Citation
@@ -2892,6 +2925,27 @@ The fully expanded example above (without environment variables) looks like this
28922925
28932926
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/files/:persistentId/versions/:draft?persistentId=doi:10.5072/FK2/J8SJZB&returnDatasetVersion=true"
28942927
2928+
If you want to include the dataset and collections that the file is part of in the response, there is an optional parameter for this called ``returnOwners`` whose default value is ``false``.
2929+
2930+
Usage example:
2931+
2932+
.. code-block:: bash
2933+
2934+
export SERVER_URL=https://demo.dataverse.org
2935+
export PERSISTENT_IDENTIFIER=doi:10.5072/FK2/J8SJZB
2936+
export DATASET_VERSION=:draft
2937+
export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
2938+
2939+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/files/:persistentId/versions/$DATASET_VERSION?persistentId=$PERSISTENT_IDENTIFIER&returnOwners=true"
2940+
2941+
The fully expanded example above (without environment variables) looks like this:
2942+
2943+
.. code-block:: bash
2944+
2945+
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/files/:persistentId/versions/:draft?persistentId=doi:10.5072/FK2/J8SJZB&returnOwners=true"
2946+
2947+
2948+
28952949
Adding Files
28962950
~~~~~~~~~~~~
28972951

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ public interface DsVersionHandler<T> {
186186
@GET
187187
@AuthRequired
188188
@Path("{id}")
189-
public Response getDataset(@Context ContainerRequestContext crc, @PathParam("id") String id, @Context UriInfo uriInfo, @Context HttpHeaders headers, @Context HttpServletResponse response) {
189+
public Response getDataset(@Context ContainerRequestContext crc, @PathParam("id") String id, @Context UriInfo uriInfo, @Context HttpHeaders headers, @Context HttpServletResponse response, @QueryParam("returnOwners") boolean returnOwners) {
190190
return response( req -> {
191191
final Dataset retrieved = execCommand(new GetDatasetCommand(req, findDatasetOrDie(id)));
192192
final DatasetVersion latest = execCommand(new GetLatestAccessibleDatasetVersionCommand(req, retrieved));
193-
final JsonObjectBuilder jsonbuilder = json(retrieved);
193+
final JsonObjectBuilder jsonbuilder = json(retrieved, returnOwners);
194194
//Report MDC if this is a released version (could be draft if user has access, or user may not have access at all and is not getting metadata beyond the minimum)
195195
if((latest != null) && latest.isReleased()) {
196196
MakeDataCountLoggingServiceBean.MakeDataCountEntry entry = new MakeDataCountEntry(uriInfo, headers, dvRequestService, retrieved);
@@ -421,6 +421,7 @@ public Response getVersion(@Context ContainerRequestContext crc,
421421
@PathParam("versionId") String versionId,
422422
@QueryParam("excludeFiles") Boolean excludeFiles,
423423
@QueryParam("includeDeaccessioned") boolean includeDeaccessioned,
424+
@QueryParam("returnOwners") boolean returnOwners,
424425
@Context UriInfo uriInfo,
425426
@Context HttpHeaders headers) {
426427
return response( req -> {
@@ -439,7 +440,7 @@ public Response getVersion(@Context ContainerRequestContext crc,
439440
if (excludeFiles == null ? true : !excludeFiles) {
440441
dsv = datasetversionService.findDeep(dsv.getId());
441442
}
442-
return ok(json(dsv, excludeFiles == null ? true : !excludeFiles));
443+
return ok(json(dsv, null, excludeFiles == null ? true : !excludeFiles, returnOwners));
443444
}, getRequestUser(crc));
444445
}
445446

@@ -4386,7 +4387,7 @@ public Response getDatasetSummaryFieldNames() {
43864387

43874388
@GET
43884389
@Path("privateUrlDatasetVersion/{privateUrlToken}")
4389-
public Response getPrivateUrlDatasetVersion(@PathParam("privateUrlToken") String privateUrlToken) {
4390+
public Response getPrivateUrlDatasetVersion(@PathParam("privateUrlToken") String privateUrlToken, @QueryParam("returnOwners") boolean returnOwners) {
43904391
PrivateUrlUser privateUrlUser = privateUrlService.getPrivateUrlUserFromToken(privateUrlToken);
43914392
if (privateUrlUser == null) {
43924393
return notFound("Private URL user not found");
@@ -4403,9 +4404,9 @@ public Response getPrivateUrlDatasetVersion(@PathParam("privateUrlToken") String
44034404
JsonObjectBuilder responseJson;
44044405
if (isAnonymizedAccess) {
44054406
List<String> anonymizedFieldTypeNamesList = new ArrayList<>(Arrays.asList(anonymizedFieldTypeNames.split(",\\s")));
4406-
responseJson = json(dsv, anonymizedFieldTypeNamesList, true);
4407+
responseJson = json(dsv, anonymizedFieldTypeNamesList, true, returnOwners);
44074408
} else {
4408-
responseJson = json(dsv, true);
4409+
responseJson = json(dsv, null, true, returnOwners);
44094410
}
44104411
return ok(responseJson);
44114412
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,10 +610,11 @@ private Dataset parseDataset(String datasetJson) throws WrappedResponse {
610610
@GET
611611
@AuthRequired
612612
@Path("{identifier}")
613-
public Response viewDataverse(@Context ContainerRequestContext crc, @PathParam("identifier") String idtf) {
613+
public Response getDataverse(@Context ContainerRequestContext crc, @PathParam("identifier") String idtf, @QueryParam("returnOwners") boolean returnOwners) {
614614
return response(req -> ok(
615615
json(execCommand(new GetDataverseCommand(req, findDataverseOrDie(idtf))),
616-
settingsService.isTrueForKey(SettingsServiceBean.Key.ExcludeEmailFromExport, false)
616+
settingsService.isTrueForKey(SettingsServiceBean.Key.ExcludeEmailFromExport, false),
617+
returnOwners
617618
)), getRequestUser(crc));
618619
}
619620

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -487,9 +487,10 @@ public Response getFileData(@Context ContainerRequestContext crc,
487487
@PathParam("id") String fileIdOrPersistentId,
488488
@QueryParam("includeDeaccessioned") boolean includeDeaccessioned,
489489
@QueryParam("returnDatasetVersion") boolean returnDatasetVersion,
490+
@QueryParam("returnOwners") boolean returnOwners,
490491
@Context UriInfo uriInfo,
491492
@Context HttpHeaders headers) {
492-
return response( req -> getFileDataResponse(req, fileIdOrPersistentId, DS_VERSION_LATEST, includeDeaccessioned, returnDatasetVersion, uriInfo, headers), getRequestUser(crc));
493+
return response( req -> getFileDataResponse(req, fileIdOrPersistentId, DS_VERSION_LATEST, includeDeaccessioned, returnDatasetVersion, returnOwners, uriInfo, headers), getRequestUser(crc));
493494
}
494495

495496
@GET
@@ -500,16 +501,18 @@ public Response getFileData(@Context ContainerRequestContext crc,
500501
@PathParam("datasetVersionId") String datasetVersionId,
501502
@QueryParam("includeDeaccessioned") boolean includeDeaccessioned,
502503
@QueryParam("returnDatasetVersion") boolean returnDatasetVersion,
504+
@QueryParam("returnOwners") boolean returnOwners,
503505
@Context UriInfo uriInfo,
504506
@Context HttpHeaders headers) {
505-
return response( req -> getFileDataResponse(req, fileIdOrPersistentId, datasetVersionId, includeDeaccessioned, returnDatasetVersion, uriInfo, headers), getRequestUser(crc));
507+
return response( req -> getFileDataResponse(req, fileIdOrPersistentId, datasetVersionId, includeDeaccessioned, returnDatasetVersion, returnOwners, uriInfo, headers), getRequestUser(crc));
506508
}
507509

508510
private Response getFileDataResponse(final DataverseRequest req,
509511
String fileIdOrPersistentId,
510512
String datasetVersionId,
511513
boolean includeDeaccessioned,
512514
boolean returnDatasetVersion,
515+
boolean returnOwners,
513516
UriInfo uriInfo,
514517
HttpHeaders headers) throws WrappedResponse {
515518
final DataFile dataFile = execCommand(new GetDataFileCommand(req, findDataFileOrDie(fileIdOrPersistentId)));
@@ -542,14 +545,15 @@ public Command<FileMetadata> handleLatestPublished() {
542545
if (fileMetadata.getDatasetVersion().isReleased()) {
543546
MakeDataCountLoggingServiceBean.MakeDataCountEntry entry = new MakeDataCountLoggingServiceBean.MakeDataCountEntry(uriInfo, headers, dvRequestService, dataFile);
544547
mdcLogService.logEntry(entry);
545-
}
546-
548+
}
549+
547550
return Response.ok(Json.createObjectBuilder()
548-
.add("status", ApiConstants.STATUS_OK)
549-
.add("data", json(fileMetadata, returnDatasetVersion)).build())
551+
.add("status", ApiConstants.STATUS_OK)
552+
.add("data", json(fileMetadata, returnOwners, returnDatasetVersion)).build())
550553
.type(MediaType.APPLICATION_JSON)
551554
.build();
552555
}
556+
553557

554558
@GET
555559
@AuthRequired

0 commit comments

Comments
 (0)