Skip to content

Commit 867f548

Browse files
committed
support id or name for GET of dataset type #10517
1 parent f8e8c4f commit 867f548

File tree

6 files changed

+43
-14
lines changed

6 files changed

+43
-14
lines changed

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -3047,23 +3047,23 @@ The fully expanded example above (without environment variables) looks like this
30473047
30483048
.. _api-list-dataset-type:
30493049
3050-
Get Dataset Type by Name
3051-
^^^^^^^^^^^^^^^^^^^^^^^^
3050+
Get Dataset Type
3051+
^^^^^^^^^^^^^^^^
30523052
3053-
Show a single dataset type based on its name.
3053+
Show a dataset type by passing either its database id (e.g. "2") or its name (e.g. "software").
30543054
30553055
.. code-block:: bash
30563056
30573057
export SERVER_URL=https://demo.dataverse.org
30583058
export TYPE=software
30593059
3060-
curl $SERVER_URL/api/datasets/datasetTypes/byName/$TYPE"
3060+
curl $SERVER_URL/api/datasets/datasetTypes/$TYPE"
30613061
30623062
The fully expanded example above (without environment variables) looks like this:
30633063
30643064
.. code-block:: bash
30653065
3066-
curl "https://demo.dataverse.org/api/datasets/datasetTypes/byName/software"
3066+
curl "https://demo.dataverse.org/api/datasets/datasetTypes/software"
30673067
30683068
.. _api-add-dataset-type:
30693069

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

+14-4
Original file line numberDiff line numberDiff line change
@@ -5092,13 +5092,23 @@ public Response getDatasetTypes() {
50925092
}
50935093

50945094
@GET
5095-
@Path("datasetTypes/byName/{name}")
5096-
public Response getDatasetTypes(@PathParam("name") String name) {
5097-
DatasetType datasetType = datasetTypeSvc.getByName(name);
5095+
@Path("datasetTypes/{idOrName}")
5096+
public Response getDatasetTypes(@PathParam("idOrName") String idOrName) {
5097+
DatasetType datasetType = null;
5098+
if (StringUtils.isNumeric(idOrName)) {
5099+
try {
5100+
long id = Long.parseLong(idOrName);
5101+
datasetType = datasetTypeSvc.getById(id);
5102+
} catch (NumberFormatException ex) {
5103+
return error(NOT_FOUND, "Could not find a dataset type with id " + idOrName);
5104+
}
5105+
} else {
5106+
datasetType = datasetTypeSvc.getByName(idOrName);
5107+
}
50985108
if (datasetType != null) {
50995109
return ok(datasetType.toJson());
51005110
} else {
5101-
return error(NOT_FOUND, "Could not find a dataset type with name " + name);
5111+
return error(NOT_FOUND, "Could not find a dataset type with name " + idOrName);
51025112
}
51035113
}
51045114

src/main/java/edu/harvard/iq/dataverse/dataset/DatasetType.java

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
@NamedQueries({
1717
@NamedQuery(name = "DatasetType.findAll",
1818
query = "SELECT d FROM DatasetType d"),
19+
@NamedQuery(name = "DatasetType.findById",
20+
query = "SELECT d FROM DatasetType d WHERE d.id=:id"),
1921
@NamedQuery(name = "DatasetType.findByName",
2022
query = "SELECT d FROM DatasetType d WHERE d.name=:name"),
2123
@NamedQuery(name = "DatasetType.deleteById",

src/main/java/edu/harvard/iq/dataverse/dataset/DatasetTypeServiceBean.java

+11
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ public List<DatasetType> listAll() {
3030
return em.createNamedQuery("DatasetType.findAll", DatasetType.class).getResultList();
3131
}
3232

33+
public DatasetType getById(long id) {
34+
try {
35+
return em.createNamedQuery("DatasetType.findById", DatasetType.class)
36+
.setParameter("id", id)
37+
.getSingleResult();
38+
} catch (NoResultException noResultException) {
39+
logger.log(Level.WARNING, "Couldn't find a dataset type with id " + id);
40+
return null;
41+
}
42+
}
43+
3344
public DatasetType getByName(String name) {
3445
try {
3546
return em.createNamedQuery("DatasetType.findByName", DatasetType.class)

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

+9-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class DatasetTypesIT {
2121
public static void setUpClass() {
2222
RestAssured.baseURI = UtilIT.getRestAssuredBaseUri();
2323

24-
Response getSoftwareType = UtilIT.getDatasetTypeByName(DatasetType.DATASET_TYPE_SOFTWARE);
24+
Response getSoftwareType = UtilIT.getDatasetType(DatasetType.DATASET_TYPE_SOFTWARE);
2525
getSoftwareType.prettyPrint();
2626

2727
String typeFound = JsonPath.from(getSoftwareType.getBody().asString()).getString("data.name");
@@ -175,7 +175,7 @@ public void testGetDatasetTypes() {
175175

176176
@Test
177177
public void testGetDefaultDatasetType() {
178-
Response getType = UtilIT.getDatasetTypeByName(DatasetType.DEFAULT_DATASET_TYPE);
178+
Response getType = UtilIT.getDatasetType(DatasetType.DEFAULT_DATASET_TYPE);
179179
getType.prettyPrint();
180180
getType.then().assertThat()
181181
.statusCode(OK.getStatusCode())
@@ -203,7 +203,13 @@ public void testAddAndDeleteDatasetType() {
203203

204204
typeAdded.then().assertThat().statusCode(OK.getStatusCode());
205205

206-
long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
206+
Long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
207+
208+
System.out.println("doomed: " + doomed);
209+
Response getTypeById = UtilIT.getDatasetType(doomed.toString());
210+
getTypeById.prettyPrint();
211+
getTypeById.then().assertThat().statusCode(OK.getStatusCode());
212+
207213
System.out.println("deleting type with id " + doomed);
208214
Response typeDeleted = UtilIT.deleteDatasetTypes(doomed, apiToken);
209215
typeDeleted.prettyPrint();

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -4089,9 +4089,9 @@ public static Response getDatasetTypes() {
40894089
return response;
40904090
}
40914091

4092-
static Response getDatasetTypeByName(String name) {
4092+
static Response getDatasetType(String idOrName) {
40934093
return given()
4094-
.get("/api/datasets/datasetTypes/byName/" + name);
4094+
.get("/api/datasets/datasetTypes/" + idOrName);
40954095
}
40964096

40974097
static Response addDatasetType(String jsonIn, String apiToken) {

0 commit comments

Comments
 (0)