From f71b2b4a6fe4b27039bcf646cd3f7eee9fa444d2 Mon Sep 17 00:00:00 2001 From: jo-pol Date: Mon, 1 Jun 2026 16:15:50 +0200 Subject: [PATCH] retention date - start date off by one - end date: neither check nor report --- .../harvard/iq/dataverse/SettingsWrapper.java | 17 +++++------------ .../edu/harvard/iq/dataverse/api/Datasets.java | 2 +- src/main/java/propertyFiles/Bundle.properties | 2 +- src/main/webapp/file-edit-popup-fragment.xhtml | 1 - 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java index 1b927162afa..a94db151520 100644 --- a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java @@ -618,17 +618,11 @@ public LocalDate getMinRetentionDate() { return minRetentionDate; } - public LocalDate getMaxRetentionDate() { - Long maxMonths = 12000l; // Arbitrary cutoff at 1000 years - needs to keep maxDate < year 999999999 and - // somehwere 1K> x >10K years the datepicker widget stops showing a popup - // calendar - return LocalDate.now().plusMonths(maxMonths); - } - public boolean isValidRetentionDate(Retention r) { - if (r.getDateUnavailable()==null || - isRetentionAllowed() && r.getDateUnavailable().isAfter(getMinRetentionDate())) { + var date = r.getDateUnavailable(); + if (date == null || + isRetentionAllowed() && date.isAfter(getMinRetentionDate().minusDays(1))) { return true; } @@ -662,15 +656,14 @@ public void validateRetentionDate(FacesContext context, UIComponent component, O Retention newR = new Retention(((LocalDate) value), null); if (!isValidRetentionDate(newR)) { String minDate = getMinRetentionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - String maxDate = getMaxRetentionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String msgString = BundleUtil.getStringFromBundle("retention.date.invalid", - Arrays.asList(minDate, maxDate)); + Arrays.asList(minDate)); // If we don't throw an exception here, the datePicker will use it's own // vaidator and display a default message. The value for that can be set by // adding validatorMessage="#{bundle['retention.date.invalid']}" (a version with // no params) to the datepicker // element in file-edit-popup-fragment.html, but it would be better to catch all - // problems here (so we can show a message with the min/max dates). + // problems here (so we can show a message with the min date). FacesMessage msg = new FacesMessage(msgString); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); 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 136b6dbb69b..139f025206c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -1824,7 +1824,7 @@ public Response createFileRetention(@Context ContainerRequestContext crc, @PathP // dateAvailable is within limits if (minRetentionDateTime != null){ - if (dateUnavailable.isBefore(minRetentionDateTime)){ + if (dateUnavailable.isBefore(minRetentionDateTime.minusDays(1))){ return error(Status.BAD_REQUEST, "Date unavailable can not be earlier than MinRetentionDurationInMonths: "+minRetentionDurationInMonths + " from now"); } } diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 9a8c97fe429..22df167a9f6 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -48,7 +48,7 @@ retention.after=Was retained until retention.isfrom=Is retained until retention.willbeafter=Draft: will be retained until retention.enddateinfo=after which it will no longer be accessible -retention.date.invalid=Date is outside the allowed range: ({0} to {1}) +retention.date.invalid=Date is before the allowed value: {0} retention.date.required=A retention period end date is required cancel=Cancel ok=OK diff --git a/src/main/webapp/file-edit-popup-fragment.xhtml b/src/main/webapp/file-edit-popup-fragment.xhtml index a3b9db00554..313d1f6bef8 100644 --- a/src/main/webapp/file-edit-popup-fragment.xhtml +++ b/src/main/webapp/file-edit-popup-fragment.xhtml @@ -209,7 +209,6 @@ value="#{bean.selectionRetention.dateUnavailable}" locale="#{dataverseSession.localeCode}" mindate="#{settingsWrapper.minRetentionDate}" pattern="yyyy-MM-dd" - maxdate="#{settingsWrapper.maxRetentionDate}" disabled="#{bean.removeRetention}" validator="#{settingsWrapper.validateRetentionDate}" >