From 6bc880dc48e86dd2f99c14ea30973e3904dd04cb Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Thu, 29 Jan 2026 11:06:19 -0500 Subject: [PATCH 01/18] #11912 WIP --- .../iq/dataverse/api/dto/NewTemplateDTO.java | 42 ++++++++++++++++++- .../iq/dataverse/api/DataversesIT.java | 4 -- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/dto/NewTemplateDTO.java b/src/main/java/edu/harvard/iq/dataverse/api/dto/NewTemplateDTO.java index 31adc30f2b9..8cf45bd8fa3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/dto/NewTemplateDTO.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/dto/NewTemplateDTO.java @@ -15,6 +15,7 @@ public class NewTemplateDTO { private List datasetFields; private Map instructionsMap; private boolean isDefault; + private Map termsOfUseAndAccess; public static NewTemplateDTO fromRequestBody(String requestBody, JsonParser jsonParser) throws JsonParseException { NewTemplateDTO newTemplateDTO = new NewTemplateDTO(); @@ -25,7 +26,8 @@ public static NewTemplateDTO fromRequestBody(String requestBody, JsonParser json newTemplateDTO.datasetFields = jsonParser.parseMultipleFields(jsonObject); newTemplateDTO.instructionsMap = parseRequestBodyInstructionsMap(jsonObject); newTemplateDTO.isDefault = jsonObject.getBoolean("isDefault", false); - + newTemplateDTO.termsOfUseAndAccess = parseRequestBodyTerms(jsonObject); + return newTemplateDTO; } @@ -58,6 +60,44 @@ public Map getInstructionsMap() { public boolean isDefault() { return isDefault; } + + private static Map parseRequestBodyTerms(JsonObject jsonObject){ + Map termsMap = new HashMap<>(); + JsonArray termsJsonArray = jsonObject.getJsonArray("termsOfUseAndAccess"); + if (termsJsonArray == null) { + return null; + } + /* + License license = termsOfUseAndAccess.getLicense(); + return jsonObjectBuilder() + .add("id", termsOfUseAndAccess.getId()) + .add("license", license != null ? json(license) : null) + .add("termsOfUse", termsOfUseAndAccess.getTermsOfUse()) + .add("termsOfAccess", termsOfUseAndAccess.getTermsOfAccess()) + .add("confidentialityDeclaration", termsOfUseAndAccess.getConfidentialityDeclaration()) + .add("specialPermissions", termsOfUseAndAccess.getSpecialPermissions()) + .add("restrictions", termsOfUseAndAccess.getRestrictions()) + .add("citationRequirements", termsOfUseAndAccess.getCitationRequirements()) + .add("depositorRequirements", termsOfUseAndAccess.getDepositorRequirements()) + .add("conditions", termsOfUseAndAccess.getConditions()) + .add("disclaimer", termsOfUseAndAccess.getDisclaimer()) + .add("dataAccessPlace", termsOfUseAndAccess.getDataAccessPlace()) + .add("originalArchive", termsOfUseAndAccess.getOriginalArchive()) + .add("availabilityStatus", termsOfUseAndAccess.getAvailabilityStatus()) + .add("sizeOfCollection", termsOfUseAndAccess.getSizeOfCollection()) + .add("studyCompletion", termsOfUseAndAccess.getStudyCompletion()) + .add("contactForAccess", termsOfUseAndAccess.getContactForAccess()) + .add("fileAccessRequest", termsOfUseAndAccess.isFileAccessRequest()); + */ + + for (JsonObject instructionJsonObject : termsJsonArray.getValuesAs(JsonObject.class)) { + termsMap.put( + instructionJsonObject.getString("instructionField"), + instructionJsonObject.getString("instructionText") + ); + } + return termsMap; + } private static Map parseRequestBodyInstructionsMap(JsonObject jsonObject) { Map instructionsMap = new HashMap<>(); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java index dc658c7134b..a1d8a3ea565 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java @@ -2729,10 +2729,6 @@ public void testCreateAndGetTemplates() throws JsonParseException { .body("data[0].instructions[0].instructionField", equalTo("author")) .body("data[0].instructions[0].instructionText", equalTo("The author data")) .body("data[0].dataverseAlias", equalTo(dataverseAlias)); - - - // Remove default template - System.out.print("***************: " + dataverseAlias ); Response removeDefaultResp = UtilIT.removeDefaultTemplate(dataverseAlias, apiToken); removeDefaultResp.prettyPrint(); From 9cd09053cd21a129056c1f81d5ae06fd4cb01397 Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Mon, 2 Feb 2026 09:41:31 -0500 Subject: [PATCH 02/18] #11912 add commands, etc. --- .../iq/dataverse/api/AbstractApiBean.java | 15 +- .../harvard/iq/dataverse/api/Dataverses.java | 28 ++- .../{NewTemplateDTO.java => TemplateDTO.java} | 22 ++- .../impl/UpdateTemplateFieldsCommand.java | 161 ++++++++++++++++++ .../impl/UpdateTemplateLicenseCommand.java | 89 ++++++++++ .../iq/dataverse/api/DataversesIT.java | 126 +++++++++++++- .../edu/harvard/iq/dataverse/api/UtilIT.java | 8 + 7 files changed, 430 insertions(+), 19 deletions(-) rename src/main/java/edu/harvard/iq/dataverse/api/dto/{NewTemplateDTO.java => TemplateDTO.java} (86%) create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateFieldsCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateLicenseCommand.java diff --git a/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java b/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java index 2ee5730153e..ffa9ae27f31 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java @@ -242,6 +242,9 @@ String getWrappedMessageWhenJson() { @EJB GuestbookResponseServiceBean gbRespSvc; + + @EJB + TemplateServiceBean templateSvc; @Inject FailedPIDResolutionLoggingServiceBean fprLogService; @@ -370,8 +373,18 @@ protected Dataverse findDataverseOrDie( String dvIdtf ) throws WrappedResponse { } return dv; } + + protected Template findTemplateOrDie(Long templateId) throws WrappedResponse { + + Template template = templateSvc.find(templateId); + if (template == null) { + throw new WrappedResponse( + error(Response.Status.NOT_FOUND, "Can't find template with identifier='" + templateId + "'")); + } + return template; + } - protected Template findTemplateOrDie(Long templateId, Dataverse dataverse) throws WrappedResponse { + protected Template findAllTemplatesOrDie(Long templateId, Dataverse dataverse) throws WrappedResponse { List