From 3d9df39b61c355f96864eda1b0e0e67c9f0a2bcc Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Mon, 24 Apr 2023 15:42:14 -0400 Subject: [PATCH 1/6] Fix /listCurationStates to work with second versions, add doc --- .../source/api/curation-labels.rst | 19 +++++++++++++++++++ .../iq/dataverse/DatasetServiceBean.java | 4 ++-- .../harvard/iq/dataverse/api/Datasets.java | 9 +++++---- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/doc/sphinx-guides/source/api/curation-labels.rst b/doc/sphinx-guides/source/api/curation-labels.rst index 36950a37eb3..fffd1d7f912 100644 --- a/doc/sphinx-guides/source/api/curation-labels.rst +++ b/doc/sphinx-guides/source/api/curation-labels.rst @@ -93,3 +93,22 @@ To get the list of allowed curation labels allowed for a given Dataset curl -H X-Dataverse-key:$API_TOKEN "$SERVER_URL/api/datasets/:persistentId/allowedCurationLabels?persistentId=$DATASET_PID" You should expect a 200 ("OK") response with a comma-separated list of allowed labels contained in a JSON 'data' object. + + +Get a Report on the Curation Status of all Datasets +--------------------------------------------------- + +To get a CSV file listing the curation label assigned to each Dataset with a draft version, along with the creation and last modification dates, and list of those with permissions to publish the version. + +This API call is restricted to superusers. + +.. code-block:: bash + + export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + export SERVER_URL=https://demo.dataverse.org + + Example: Get the report + + curl -H X-Dataverse-key:$API_TOKEN "$SERVER_URL/api/datasets/listCurationStates" + +You should expect a 200 ("OK") response with a 'datasets.status.csv' file download. diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java index bf36fb469bd..d187aa3d4ef 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java @@ -199,8 +199,8 @@ public List findAllUnindexed() { } //Used in datasets listcurationstatus API - public List findAllUnpublished() { - return em.createQuery("SELECT object(o) FROM Dataset o, DvObject d WHERE d.id=o.id and d.publicationDate IS null ORDER BY o.id ASC", Dataset.class).getResultList(); + public List findAllWithDraftVersion() { + return em.createQuery("SELECT object(o) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset_id and v.versionstate='" + DatasetVersion.VersionState.DRAFT +"' ORDER BY d.id ASC", Dataset.class).getResultList(); } /** diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index d40bc153141..9d75a706296 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -3646,7 +3646,7 @@ public Response getCurationStates(@Context ContainerRequestContext crc) throws W BundleUtil.getStringFromBundle("datasets.api.modificationdate"), BundleUtil.getStringFromBundle("datasets.api.curationstatus"), String.join(",", assignees.keySet()))); - for (Dataset dataset : datasetSvc.findAllUnpublished()) { + for (Dataset dataset : datasetSvc.findAllWithDraftVersion()) { List ras = permissionService.assignmentsOn(dataset); curationRoles.forEach(r -> { assignees.put(r.getAlias(), new HashSet()); @@ -3656,11 +3656,12 @@ public Response getCurationStates(@Context ContainerRequestContext crc) throws W assignees.get(ra.getRole().getAlias()).add(ra.getAssigneeIdentifier()); } } + DatasetVersion dsv = dataset.getLatestVersion(); String name = "\"" + dataset.getCurrentName().replace("\"", "\"\"") + "\""; - String status = dataset.getLatestVersion().getExternalStatusLabel(); + String status = dsv.getExternalStatusLabel(); String url = systemConfig.getDataverseSiteUrl() + dataset.getTargetUrl() + dataset.getGlobalId().asString(); - String date = new SimpleDateFormat("yyyy-MM-dd").format(dataset.getCreateDate()); - String modDate = new SimpleDateFormat("yyyy-MM-dd").format(dataset.getModificationTime()); + String date = new SimpleDateFormat("yyyy-MM-dd").format(dsv.getCreateTime()); + String modDate = new SimpleDateFormat("yyyy-MM-dd").format(dsv.getLastUpdateTime()); String hyperlink = "\"=HYPERLINK(\"\"" + url + "\"\",\"\"" + name + "\"\")\""; List sList = new ArrayList(); assignees.entrySet().forEach(e -> sList.add(e.getValue().size() == 0 ? "" : String.join(";", e.getValue()))); From 604c2793c02c0868646db50f8fef8db29987fe04 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Mon, 24 Apr 2023 17:01:44 -0400 Subject: [PATCH 2/6] fix query --- src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java index d187aa3d4ef..ff7dd231f63 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java @@ -200,7 +200,7 @@ public List findAllUnindexed() { //Used in datasets listcurationstatus API public List findAllWithDraftVersion() { - return em.createQuery("SELECT object(o) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset_id and v.versionstate='" + DatasetVersion.VersionState.DRAFT +"' ORDER BY d.id ASC", Dataset.class).getResultList(); + return em.createQuery("SELECT object(d) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset.id and v.versionState='" + DatasetVersion.VersionState.DRAFT +"' ORDER BY d.id ASC", Dataset.class).getResultList(); } /** From 32c12b027c9540da4163594b6afc7e945136f777 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Mon, 24 Apr 2023 17:23:09 -0400 Subject: [PATCH 3/6] use toString() --- src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java index ff7dd231f63..e003b481e0d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java @@ -200,7 +200,7 @@ public List findAllUnindexed() { //Used in datasets listcurationstatus API public List findAllWithDraftVersion() { - return em.createQuery("SELECT object(d) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset.id and v.versionState='" + DatasetVersion.VersionState.DRAFT +"' ORDER BY d.id ASC", Dataset.class).getResultList(); + return em.createQuery("SELECT object(d) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset.id and v.versionState='" + DatasetVersion.VersionState.DRAFT.toString() +"' ORDER BY d.id ASC", Dataset.class).getResultList(); } /** From fabf95604cbca9837435d7bdd48f4904c798e120 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Mon, 24 Apr 2023 17:41:09 -0400 Subject: [PATCH 4/6] use parameter --- .../java/edu/harvard/iq/dataverse/DatasetServiceBean.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java index e003b481e0d..0563d83527a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse; +import edu.harvard.iq.dataverse.DatasetVersion.VersionState; import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; @@ -200,7 +201,9 @@ public List findAllUnindexed() { //Used in datasets listcurationstatus API public List findAllWithDraftVersion() { - return em.createQuery("SELECT object(d) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset.id and v.versionState='" + DatasetVersion.VersionState.DRAFT.toString() +"' ORDER BY d.id ASC", Dataset.class).getResultList(); + TypedQuery query = em.createQuery("SELECT object(d) FROM Dataset d, DatasetVersion v WHERE d.id=v.dataset.id and v.versionState=:state ORDER BY d.id ASC", Dataset.class); + query.setParameter("state", VersionState.DRAFT); + return query.getResultList(); } /** From 7e4e29975dd5ce785d30445eec6aeffac27bd1ed Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 11 Jul 2023 09:11:43 -0400 Subject: [PATCH 5/6] title case #9555 --- doc/sphinx-guides/source/api/curation-labels.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/api/curation-labels.rst b/doc/sphinx-guides/source/api/curation-labels.rst index fffd1d7f912..c8ea8016f70 100644 --- a/doc/sphinx-guides/source/api/curation-labels.rst +++ b/doc/sphinx-guides/source/api/curation-labels.rst @@ -95,7 +95,7 @@ To get the list of allowed curation labels allowed for a given Dataset You should expect a 200 ("OK") response with a comma-separated list of allowed labels contained in a JSON 'data' object. -Get a Report on the Curation Status of all Datasets +Get a Report on the Curation Status of All Datasets --------------------------------------------------- To get a CSV file listing the curation label assigned to each Dataset with a draft version, along with the creation and last modification dates, and list of those with permissions to publish the version. From 3bd1501b783dd507c91a200dfbd0386d1d285a41 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Wed, 12 Jul 2023 10:47:57 -0400 Subject: [PATCH 6/6] clarify response output --- doc/sphinx-guides/source/api/curation-labels.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/api/curation-labels.rst b/doc/sphinx-guides/source/api/curation-labels.rst index fffd1d7f912..57b5536eb5f 100644 --- a/doc/sphinx-guides/source/api/curation-labels.rst +++ b/doc/sphinx-guides/source/api/curation-labels.rst @@ -111,4 +111,4 @@ This API call is restricted to superusers. curl -H X-Dataverse-key:$API_TOKEN "$SERVER_URL/api/datasets/listCurationStates" -You should expect a 200 ("OK") response with a 'datasets.status.csv' file download. +You should expect a 200 ("OK") response with a CSV formatted response.