Skip to content

Commit 8205f13

Browse files
authored
Extend the API for dataverse facets retrieval (#10727)
* Added: list dataverse facets API endpoint extended to include details * Added: docs for listFacets dataverses API endpoint * Added: API endpoint for getting all facetable field types * Changed: API endpoint route for obtaining facetables dataset fields * Changed: DatasetFieldServiceApi format reset * Added: docs for #10726 * Added: release notes for #10726 * Added: IT test case for listing Dataverse facets
1 parent 53f9b45 commit 8205f13

File tree

9 files changed

+244
-59
lines changed

9 files changed

+244
-59
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
New optional query parameter "returnDetails" added to "dataverses/{identifier}/facets/" endpoint to include detailed information of each DataverseFacet.
2+
3+
New endpoint "datasetfields/facetables" that lists all facetable dataset fields defined in the installation.

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,22 @@ The fully expanded example above (without environment variables) looks like this
224224
225225
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/dataverses/root/facets"
226226
227+
By default, this endpoint will return an array including the facet names. If more detailed information is needed, we can set the query parameter ``returnDetails`` to ``true``, which will return the display name and id in addition to the name for each facet:
228+
229+
.. code-block:: bash
230+
231+
export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
232+
export SERVER_URL=https://demo.dataverse.org
233+
export ID=root
234+
235+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/dataverses/$ID/facets?returnDetails=true"
236+
237+
The fully expanded example above (without environment variables) looks like this:
238+
239+
.. code-block:: bash
240+
241+
curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" "https://demo.dataverse.org/api/dataverses/root/facets?returnDetails=true"
242+
227243
Set Facets for a Dataverse Collection
228244
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
229245

@@ -4717,6 +4733,28 @@ The fully expanded example above (without environment variables) looks like this
47174733
47184734
curl "https://demo.dataverse.org/api/metadatablocks/citation"
47194735
4736+
.. _dataset-fields-api:
4737+
4738+
Dataset Fields
4739+
--------------
4740+
4741+
List All Facetable Dataset Fields
4742+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4743+
4744+
List all facetable dataset fields defined in the installation.
4745+
4746+
.. code-block:: bash
4747+
4748+
export SERVER_URL=https://demo.dataverse.org
4749+
4750+
curl "$SERVER_URL/api/datasetfields/facetables"
4751+
4752+
The fully expanded example above (without environment variables) looks like this:
4753+
4754+
.. code-block:: bash
4755+
4756+
curl "https://demo.dataverse.org/api/datasetfields/facetables"
4757+
47204758
.. _Notifications:
47214759
47224760
Notifications
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package edu.harvard.iq.dataverse.api;
2+
3+
import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
4+
import edu.harvard.iq.dataverse.DatasetFieldType;
5+
import jakarta.ejb.EJB;
6+
import jakarta.ws.rs.*;
7+
import jakarta.ws.rs.core.Response;
8+
9+
import java.util.List;
10+
11+
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.jsonDatasetFieldTypes;
12+
13+
/**
14+
* Api bean for managing dataset fields.
15+
*/
16+
@Path("datasetfields")
17+
@Produces("application/json")
18+
public class DatasetFields extends AbstractApiBean {
19+
20+
@EJB
21+
DatasetFieldServiceBean datasetFieldService;
22+
23+
@GET
24+
@Path("facetables")
25+
public Response listAllFacetableDatasetFields() {
26+
List<DatasetFieldType> datasetFieldTypes = datasetFieldService.findAllFacetableFieldTypes();
27+
return ok(jsonDatasetFieldTypes(datasetFieldTypes));
28+
}
29+
}

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -849,22 +849,29 @@ public Response setMetadataRoot(@Context ContainerRequestContext crc, @PathParam
849849
/**
850850
* return list of facets for the dataverse with alias `dvIdtf`
851851
*/
852-
public Response listFacets(@Context ContainerRequestContext crc, @PathParam("identifier") String dvIdtf) {
852+
public Response listFacets(@Context ContainerRequestContext crc,
853+
@PathParam("identifier") String dvIdtf,
854+
@QueryParam("returnDetails") boolean returnDetails) {
853855
try {
854-
User u = getRequestUser(crc);
855-
DataverseRequest r = createDataverseRequest(u);
856+
User user = getRequestUser(crc);
857+
DataverseRequest request = createDataverseRequest(user);
856858
Dataverse dataverse = findDataverseOrDie(dvIdtf);
857-
JsonArrayBuilder fs = Json.createArrayBuilder();
858-
for (DataverseFacet f : execCommand(new ListFacetsCommand(r, dataverse))) {
859-
fs.add(f.getDatasetFieldType().getName());
859+
List<DataverseFacet> dataverseFacets = execCommand(new ListFacetsCommand(request, dataverse));
860+
861+
if (returnDetails) {
862+
return ok(jsonDataverseFacets(dataverseFacets));
863+
} else {
864+
JsonArrayBuilder facetsBuilder = Json.createArrayBuilder();
865+
for (DataverseFacet facet : dataverseFacets) {
866+
facetsBuilder.add(facet.getDatasetFieldType().getName());
867+
}
868+
return ok(facetsBuilder);
860869
}
861-
return ok(fs);
862870
} catch (WrappedResponse e) {
863871
return e.getResponse();
864872
}
865873
}
866874

867-
868875
@GET
869876
@AuthRequired
870877
@Path("{identifier}/featured")

0 commit comments

Comments
 (0)