From fe2f1d222c4fbfdd1169ed0478cf77e49b7d6d9e Mon Sep 17 00:00:00 2001 From: Filipe Dias Lewandowski Date: Fri, 24 May 2024 16:42:51 +0200 Subject: [PATCH] Closes #2479: Allow dataset download in read-only mode --- .../persistence/dataset/DownloadDatasetLog.java | 5 +++++ .../java/edu/harvard/iq/dataverse/api/Access.java | 1 - .../edu/harvard/iq/dataverse/api/Datasets.java | 1 - .../dataset/DownloadDatasetLogService.java | 14 +++++++++++++- .../impl/CreateGuestbookResponseCommand.java | 8 ++------ .../guestbook/GuestbookResponseServiceBean.java | 11 ++++++++++- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/dataverse-persistence/src/main/java/edu/harvard/iq/dataverse/persistence/dataset/DownloadDatasetLog.java b/dataverse-persistence/src/main/java/edu/harvard/iq/dataverse/persistence/dataset/DownloadDatasetLog.java index 0957b1c45d..09e74625ec 100644 --- a/dataverse-persistence/src/main/java/edu/harvard/iq/dataverse/persistence/dataset/DownloadDatasetLog.java +++ b/dataverse-persistence/src/main/java/edu/harvard/iq/dataverse/persistence/dataset/DownloadDatasetLog.java @@ -56,4 +56,9 @@ public void setDatasetId(Long datasetId) { public void setDownloadDate(Date downloadDate) { this.downloadDate = downloadDate; } + + @Override + public String toString() { + return "DownloadDatasetLog [id=" + id + ", datasetId=" + datasetId + ", downloadDate=" + downloadDate + ']'; + } } diff --git a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Access.java b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Access.java index d9e72a97f9..b589271e1e 100644 --- a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Access.java +++ b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Access.java @@ -473,7 +473,6 @@ public DownloadInstance tabularDatafileMetadataPreprocessed(@PathParam("fileId") @Path("datafiles/{fileIds}") @GET @Produces({"application/zip"}) - @ApiWriteOperation public Response datafiles(@PathParam("fileIds") String fileIds, @QueryParam("gbrecs") Boolean gbrecs, @Context UriInfo uriInfo, @Context HttpServletResponse response) throws WebApplicationException { assertOrThrowBadRequest(() -> StringUtils.isNotBlank(fileIds)); diff --git a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 79bd79bab7..b0f3614485 100644 --- a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -483,7 +483,6 @@ public Response listVersionFiles(@PathParam("id") String datasetId, @PathParam(" @GET @Path("{id}/versions/{versionId}/files/download") @Produces({"application/zip"}) - @ApiWriteOperation public Response getVersionFiles(@PathParam("id") String datasetId, @PathParam("versionId") String versionId, @QueryParam("gbrecs") boolean gbrecs, @Context HttpServletResponse response, @Context UriInfo uriInfo) { diff --git a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/dataset/DownloadDatasetLogService.java b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/dataset/DownloadDatasetLogService.java index 6ab6b6108a..54a946215a 100644 --- a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/dataset/DownloadDatasetLogService.java +++ b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/dataset/DownloadDatasetLogService.java @@ -1,18 +1,26 @@ package edu.harvard.iq.dataverse.dataset; import edu.harvard.iq.dataverse.persistence.dataset.DownloadDatasetLog; +import edu.harvard.iq.dataverse.util.SystemConfig; +import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.Date; +import java.util.logging.Logger; @Stateless public class DownloadDatasetLogService { + private static final Logger logger = Logger.getLogger(DownloadDatasetLogService.class.getCanonicalName()); + @PersistenceContext(unitName = "VDCNet-ejbPU") private EntityManager em; + @EJB + protected SystemConfig systemConfig; + // -------------------- LOGIC -------------------- /** @@ -22,6 +30,10 @@ public void logWholeSetDownload(Long datasetId) { DownloadDatasetLog downloadDatasetLog = new DownloadDatasetLog(); downloadDatasetLog.setDatasetId(datasetId); downloadDatasetLog.setDownloadDate(new Date()); - em.persist(downloadDatasetLog); + if (systemConfig.isReadonlyMode()) { + logger.info(downloadDatasetLog.toString()); + } else { + em.persist(downloadDatasetLog); + } } } diff --git a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateGuestbookResponseCommand.java b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateGuestbookResponseCommand.java index 0a24246c2a..58eef9060e 100644 --- a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateGuestbookResponseCommand.java +++ b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateGuestbookResponseCommand.java @@ -35,12 +35,8 @@ public CreateGuestbookResponseCommand(DataverseRequest aRequest, GuestbookRespon protected void executeImpl(CommandContext ctxt) { Timestamp createDate = new Timestamp(new Date().getTime()); response.setResponseTime(createDate); - - if (ctxt.systemConfig().isReadonlyMode()) { - log.info(response.toString()); - } else { - ctxt.responses().save(response); - } + + ctxt.responses().save(response); } } diff --git a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/guestbook/GuestbookResponseServiceBean.java b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/guestbook/GuestbookResponseServiceBean.java index 4bf2665367..7584a1c222 100644 --- a/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/guestbook/GuestbookResponseServiceBean.java +++ b/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/guestbook/GuestbookResponseServiceBean.java @@ -19,7 +19,9 @@ import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser; import edu.harvard.iq.dataverse.persistence.user.GuestUser; import edu.harvard.iq.dataverse.persistence.user.User; +import edu.harvard.iq.dataverse.util.SystemConfig; +import javax.ejb.EJB; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; @@ -93,6 +95,9 @@ public class GuestbookResponseServiceBean { @PersistenceContext(unitName = "VDCNet-ejbPU") private EntityManager em; + @EJB + protected SystemConfig systemConfig; + public List findAll() { return em.createQuery("select object(o) from GuestbookResponse as o order by o.responseTime desc", GuestbookResponse.class).getResultList(); } @@ -701,7 +706,11 @@ public GuestbookResponse findById(Long id) { @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void save(GuestbookResponse guestbookResponse) { - em.persist(guestbookResponse); + if (systemConfig.isReadonlyMode()) { + logger.info(guestbookResponse.toString()); + } else { + em.persist(guestbookResponse); + } }