From 1a9133e7f8e06d7d174bf76b27c7e1523c6a0ae3 Mon Sep 17 00:00:00 2001 From: Matus Kasak Date: Tue, 8 Jul 2025 13:15:39 +0200 Subject: [PATCH 1/5] Added item handle to email --- .../ClarinUserMetadataRestController.java | 24 +++++++++++++------ .../config/emails/clarin_download_link_admin | 4 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java index 2c6eebac1666..f729c69e5fff 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java @@ -47,6 +47,7 @@ import org.dspace.content.clarin.ClarinUserRegistration; import org.dspace.content.service.BitstreamService; import org.dspace.content.service.ItemService; +import org.dspace.content.service.clarin.ClarinItemService; import org.dspace.content.service.clarin.ClarinLicenseResourceMappingService; import org.dspace.content.service.clarin.ClarinLicenseResourceUserAllowanceService; import org.dspace.content.service.clarin.ClarinUserMetadataService; @@ -86,6 +87,8 @@ public class ClarinUserMetadataRestController { @Autowired ItemService itemService; + @Autowired + ClarinItemService clarinItemService; @Autowired ConfigurationService configurationService; @@ -172,7 +175,7 @@ public ResponseEntity manageUserMetadataForZIP(@RequestParam("itemUUID") UUID it try { String email = getEmailFromUserMetadata(clarinUserMetadataRestList); this.sendEmailWithDownloadLink(context, item, clarinLicense, - email, downloadToken, MailType.ALLZIP, clarinUserMetadataRestList); + email, downloadToken, MailType.ALLZIP, clarinUserMetadataRestList, item.getHandle()); } catch (MessagingException e) { log.error("Cannot send the download email because: " + e.getMessage()); throw new RuntimeException("Cannot send the download email because: " + e.getMessage()); @@ -252,8 +255,9 @@ public ResponseEntity manageUserMetadata(@RequestParam("bitstreamUUID") UUID bit // If yes - send token to e-mail try { String email = getEmailFromUserMetadata(clarinUserMetadataRestList); + List items = clarinItemService.findByBitstreamUUID(context, bitstreamUUID); this.sendEmailWithDownloadLink(context, bitstream, clarinLicense, - email, downloadToken, MailType.BITSTREAM, clarinUserMetadataRestList); + email, downloadToken, MailType.BITSTREAM, clarinUserMetadataRestList, items.get(0).getHandle()); } catch (MessagingException e) { log.error("Cannot send the download email because: " + e.getMessage()); throw new RuntimeException("Cannot send the download email because: " + e.getMessage()); @@ -271,7 +275,8 @@ private void sendEmailWithDownloadLink(Context context, DSpaceObject dso, String email, String downloadToken, MailType mailType, - List clarinUserMetadataRestList) + List clarinUserMetadataRestList, + String itemHandle) throws IOException, SQLException, MessagingException { if (StringUtils.isBlank(email)) { log.error("Cannot send email with download link because the email is empty."); @@ -320,7 +325,8 @@ private void sendEmailWithDownloadLink(Context context, DSpaceObject dso, } // If previous mail fails with exception, this block never executes = admin is NOT // notified, if the mail is not really sent (if it fails HERE, not later, e.g. due to mail server issue). - sendAdminNotificationEmail(context, downloadLink, dso, clarinLicense, mailType, clarinUserMetadataRestList); + sendAdminNotificationEmail(context, downloadLink, dso, clarinLicense, + mailType, clarinUserMetadataRestList, itemHandle); } @@ -347,7 +353,8 @@ private List getCCEmails(String ccAdmin, ClarinLicense clarinLicense) { private void addAdminEmailArguments(Email mail, MailType mailType, DSpaceObject dso, String downloadLink, ClarinLicense clarinLicense, Context context, - List extraMetadata) { + List extraMetadata, + String handle) { if (mailType == MailType.ALLZIP) { mail.addArgument("all files requested"); } else if (mailType == MailType.BITSTREAM) { @@ -372,6 +379,7 @@ private void addAdminEmailArguments(Email mail, MailType mailType, DSpaceObject exdata.append(data.getMetadataKey()).append(": ").append(data.getMetadataValue()).append(", "); } mail.addArgument(exdata.toString()); + mail.addArgument(handle); } private void sendAdminNotificationEmail(Context context, @@ -379,7 +387,8 @@ private void sendAdminNotificationEmail(Context context, DSpaceObject dso, ClarinLicense clarinLicense, MailType mailType, - List extraMetadata) + List extraMetadata, + String itemHandle) throws MessagingException, IOException { try { Locale locale = context.getCurrentLocale(); @@ -391,7 +400,8 @@ private void sendAdminNotificationEmail(Context context, for (String cc : ccEmails) { email2Admin.addRecipient(cc); } - addAdminEmailArguments(email2Admin, mailType, dso, downloadLink, clarinLicense, context, extraMetadata); + addAdminEmailArguments(email2Admin, mailType, dso, downloadLink, + clarinLicense, context, extraMetadata, itemHandle); } email2Admin.send(); diff --git a/dspace/config/emails/clarin_download_link_admin b/dspace/config/emails/clarin_download_link_admin index 9d9c8978f8cc..55ec474f4230 100644 --- a/dspace/config/emails/clarin_download_link_admin +++ b/dspace/config/emails/clarin_download_link_admin @@ -6,6 +6,7 @@ ## {3} user name ## {4} user email ## {5} extra metadata provided +## {6} item uuid ## ## See org.dspace.core.Email for information on the format of this file. ## @@ -24,6 +25,9 @@ Link of the requested file (does not contain the download token): The file is distributed under specific license: ${params[2]} +Item handle: + ${params[6]} + Extra information filled by the user: ${params[5]} From cebd93895d86a95a2adcb9ea419b9b33fa094ffc Mon Sep 17 00:00:00 2001 From: Matus Kasak Date: Tue, 8 Jul 2025 13:26:51 +0200 Subject: [PATCH 2/5] Exception when item not found --- .../app/rest/repository/ClarinUserMetadataRestController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java index f729c69e5fff..2ed23415907f 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java @@ -256,6 +256,9 @@ public ResponseEntity manageUserMetadata(@RequestParam("bitstreamUUID") UUID bit try { String email = getEmailFromUserMetadata(clarinUserMetadataRestList); List items = clarinItemService.findByBitstreamUUID(context, bitstreamUUID); + if (CollectionUtils.isEmpty(items)) { + throw new NotFoundException("No items found for the given bitstream UUID: " + bitstreamUUID); + } this.sendEmailWithDownloadLink(context, bitstream, clarinLicense, email, downloadToken, MailType.BITSTREAM, clarinUserMetadataRestList, items.get(0).getHandle()); } catch (MessagingException e) { From 089bf6ae3faa11a3866d7a79d72466022d700629 Mon Sep 17 00:00:00 2001 From: Matus Kasak Date: Tue, 8 Jul 2025 14:24:23 +0200 Subject: [PATCH 3/5] Checked grammar --- dspace/config/emails/clarin_download_link_admin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dspace/config/emails/clarin_download_link_admin b/dspace/config/emails/clarin_download_link_admin index 55ec474f4230..f6c0476f343e 100644 --- a/dspace/config/emails/clarin_download_link_admin +++ b/dspace/config/emails/clarin_download_link_admin @@ -25,7 +25,7 @@ Link of the requested file (does not contain the download token): The file is distributed under specific license: ${params[2]} -Item handle: +Item's handle: ${params[6]} Extra information filled by the user: From 2d483730278947d3a722bc0e78f1289856525298 Mon Sep 17 00:00:00 2001 From: Matus Kasak Date: Wed, 9 Jul 2025 14:18:52 +0200 Subject: [PATCH 4/5] Handled multiple items found by bitstream --- .../app/rest/repository/ClarinUserMetadataRestController.java | 4 ++++ dspace/config/emails/clarin_download_link_admin | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java index 2ed23415907f..d27a17a16df0 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java @@ -258,6 +258,10 @@ public ResponseEntity manageUserMetadata(@RequestParam("bitstreamUUID") UUID bit List items = clarinItemService.findByBitstreamUUID(context, bitstreamUUID); if (CollectionUtils.isEmpty(items)) { throw new NotFoundException("No items found for the given bitstream UUID: " + bitstreamUUID); + } else if (items.size() > 1) { + // This situation is not expected. A bitstream should be linked to only one item. + log.error("Multiple items ({}) found for bitstream UUID: {}. Expected only one.", + items.size(), bitstreamUUID); } this.sendEmailWithDownloadLink(context, bitstream, clarinLicense, email, downloadToken, MailType.BITSTREAM, clarinUserMetadataRestList, items.get(0).getHandle()); diff --git a/dspace/config/emails/clarin_download_link_admin b/dspace/config/emails/clarin_download_link_admin index f6c0476f343e..2689180a660b 100644 --- a/dspace/config/emails/clarin_download_link_admin +++ b/dspace/config/emails/clarin_download_link_admin @@ -6,7 +6,7 @@ ## {3} user name ## {4} user email ## {5} extra metadata provided -## {6} item uuid +## {6} item handle ## ## See org.dspace.core.Email for information on the format of this file. ## From 09ef9635f15cab2b31923955d402d6802babaf90 Mon Sep 17 00:00:00 2001 From: Matus Kasak Date: Thu, 10 Jul 2025 10:26:34 +0200 Subject: [PATCH 5/5] Using PID instead of handle --- .../app/rest/repository/ClarinUserMetadataRestController.java | 4 ++-- dspace/config/emails/clarin_download_link_admin | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java index d27a17a16df0..31101e97f3c7 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java @@ -361,7 +361,7 @@ private List getCCEmails(String ccAdmin, ClarinLicense clarinLicense) { private void addAdminEmailArguments(Email mail, MailType mailType, DSpaceObject dso, String downloadLink, ClarinLicense clarinLicense, Context context, List extraMetadata, - String handle) { + String itemHandle) { if (mailType == MailType.ALLZIP) { mail.addArgument("all files requested"); } else if (mailType == MailType.BITSTREAM) { @@ -386,7 +386,7 @@ private void addAdminEmailArguments(Email mail, MailType mailType, DSpaceObject exdata.append(data.getMetadataKey()).append(": ").append(data.getMetadataValue()).append(", "); } mail.addArgument(exdata.toString()); - mail.addArgument(handle); + mail.addArgument(itemHandle); } private void sendAdminNotificationEmail(Context context, diff --git a/dspace/config/emails/clarin_download_link_admin b/dspace/config/emails/clarin_download_link_admin index 2689180a660b..615c0b74a6bf 100644 --- a/dspace/config/emails/clarin_download_link_admin +++ b/dspace/config/emails/clarin_download_link_admin @@ -6,7 +6,7 @@ ## {3} user name ## {4} user email ## {5} extra metadata provided -## {6} item handle +## {6} item PID ## ## See org.dspace.core.Email for information on the format of this file. ## @@ -25,7 +25,7 @@ Link of the requested file (does not contain the download token): The file is distributed under specific license: ${params[2]} -Item's handle: +Item's PID: ${params[6]} Extra information filled by the user: