diff --git a/.github/workflows/reviewdog_checkstyle.yml b/.github/workflows/reviewdog_checkstyle.yml index 6e82489c2db..e66095b08e1 100644 --- a/.github/workflows/reviewdog_checkstyle.yml +++ b/.github/workflows/reviewdog_checkstyle.yml @@ -16,6 +16,6 @@ jobs: with: fail_on_error: true reporter: github-pr-review - checkstyle_config: checkstyle.xml + checkstyle_config: src/maven/checkstyle.xml github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/doc/release-notes/12362-factory-method-for-JSONbuilders.md b/doc/release-notes/12362-factory-method-for-JSONbuilders.md new file mode 100644 index 00000000000..0a3cdfdf5a8 --- /dev/null +++ b/doc/release-notes/12362-factory-method-for-JSONbuilders.md @@ -0,0 +1,4 @@ +# Improved JSON Performance + +A Jakarta JSON-P provider is now reused for every builder or value creation. +This improves the performance of large JSON operations, especially large exports and API responses, without changing the existing behavior or the JSON output. diff --git a/doc/sphinx-guides/source/developers/testing/fixtures.md b/doc/sphinx-guides/source/developers/testing/fixtures.md index 06f8edfc25a..a720bd57d81 100644 --- a/doc/sphinx-guides/source/developers/testing/fixtures.md +++ b/doc/sphinx-guides/source/developers/testing/fixtures.md @@ -128,7 +128,7 @@ DatasetFixture fixture = DatasetFixtureBuilder.builder() .populator(FixturePopulator.minimal()) .build(); -JsonArrayBuilder files = Json.createArrayBuilder(); +JsonArrayBuilder files = JsonUtil.createArrayBuilder(); for (FileMetadata fileMetadata : fixture.fileMetadatas()) { files.add(JsonPrinter.json(fileMetadata.getDataFile(), fileMetadata, true)); diff --git a/pom.xml b/pom.xml index 297f630ceea..136db4e76f2 100644 --- a/pom.xml +++ b/pom.xml @@ -886,6 +886,59 @@ + + de.thetaphi + forbiddenapis + 3.10 + + + false + + true + + + jdk-non-portable + jdk-internal + + + + + + ${project.basedir}/src/maven/forbiddenapis.txt + + ${target.java.version} + + + + for-classes + process-classes + + check + + + + for-test-classes + process-test-classes + + testCheck + + + + org.apache.maven.plugins maven-compiler-plugin @@ -1106,7 +1159,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - checkstyle.xml + ${project.basedir}/src/maven/checkstyle.xml UTF-8 true diff --git a/src/main/java/edu/harvard/iq/dataverse/DataFile.java b/src/main/java/edu/harvard/iq/dataverse/DataFile.java index 6e92f71547a..194343c1772 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataFile.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataFile.java @@ -30,6 +30,8 @@ import java.util.Set; import java.util.logging.Logger; import java.util.stream.Collectors; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.persistence.*; @@ -446,7 +448,7 @@ public JsonArrayBuilder getTagLabelsAsJsonArrayBuilder(){ List currentDataTags = this.getTags(); - JsonArrayBuilder builder = Json.createArrayBuilder(); + JsonArrayBuilder builder = JsonUtil.createArrayBuilder(); if ( (currentDataTags == null)||(currentDataTags.isEmpty())){ return builder; diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index e6b2711b443..61821022301 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -20,6 +20,7 @@ import java.util.Set; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.inject.Named; @@ -645,7 +646,7 @@ private String tryToReplaceRetrievalUriParam(String retrievalUri, String paramNa */ private JsonObject filterResponse(JsonObject cvocEntry, JsonObject readObject, String termUri) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); JsonObject filtering = cvocEntry.getJsonObject("retrieval-filtering"); logger.fine("RF: " + filtering.toString()); JsonObject managedFields = cvocEntry.getJsonObject("managed-fields"); @@ -658,7 +659,7 @@ private JsonObject filterResponse(JsonObject cvocEntry, JsonObject readObject, S logger.fine("F: " + filter.toString()); JsonArray params = filter.getJsonArray("params"); if (params == null) { - params = Json.createArrayBuilder().build(); + params = JsonUtil.createArrayBuilder().build(); } logger.fine("Params: " + params.toString()); List vals = new ArrayList(); @@ -790,7 +791,7 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri } } } else { - JsonArrayBuilder parts = Json.createArrayBuilder(); + JsonArrayBuilder parts = JsonUtil.createArrayBuilder(); for (JsonValue subPath : arr) { if (subPath instanceof JsonObject) { JsonValue nextValue = ((JsonObject) subPath).get(keyVal[0]); diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index e79de5c1d8d..2c78873fa71 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -3015,7 +3015,7 @@ public String updateCurrentVersion() { String status = updateVersion.getArchivalCopyLocationStatus(); if((status==null) || status.equals(DatasetVersion.ARCHIVAL_STATUS_FAILURE) || (JvmSettings.BAGIT_ARCHIVE_ON_VERSION_UPDATE.lookupOptional(Boolean.class).orElse(false) && archiveCommand.canDelete())){ // Delete the record of any existing copy since it is now out of date/incorrect - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_PENDING); updateVersion.setArchivalCopyLocation(JsonUtil.prettyPrint(job.build())); //Persist to db now @@ -6126,7 +6126,7 @@ public String getCroissant() { reviewsJsonObj = commandEngine.submit(new GetDatasetReviewsCommand(dvRequestService.getDataverseRequest(), dataset)); JsonObjectBuilder reviews = CroissantExportUtil.getReviews(reviewsJsonObj); JsonObject croissantJson = JsonUtil.getJsonObject(croissant); - String updatedContent = Json.createObjectBuilder(croissantJson) + String updatedContent = JsonUtil.createObjectBuilder(croissantJson) .add("reviews", reviews.build().getJsonArray("reviews")).build().toString(); return updatedContent; } catch (CommandException e) { @@ -6206,7 +6206,7 @@ public void archiveVersion(Long id, boolean force) { if (status == null || (force && cmd.canDelete())) { // Set initial pending status - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_PENDING); dv.setArchivalCopyLocation(JsonUtil.prettyPrint(job.build())); //Persist now diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index c45ddcd62cb..ef998bf9b30 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -390,7 +390,7 @@ public void setArchivalCopyLocation(String location) { // Convenience method to just change the status without changing the location public void setArchivalStatusOnly(String status) { populateArchivalStatus(false); - JsonObjectBuilder job = Json.createObjectBuilder(archivalCopyLocationJson); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(archivalCopyLocationJson); job.add(DatasetVersion.ARCHIVAL_STATUS, status); archivalCopyLocationJson = job.build(); archivalCopyLocation = JsonUtil.prettyPrint(archivalCopyLocationJson); @@ -1863,16 +1863,16 @@ public String getJsonLd() { if (jsonLd != null) { return jsonLd; } - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("@context", "http://schema.org"); job.add("@type", "Dataset"); // Note that whenever you use "@id" you should also use "identifier" and vice versa. job.add("@id", this.getDataset().getPersistentURL()); job.add("identifier", this.getDataset().getPersistentURL()); job.add("name", this.getTitle()); - JsonArrayBuilder authors = Json.createArrayBuilder(); + JsonArrayBuilder authors = JsonUtil.createArrayBuilder(); for (DatasetAuthor datasetAuthor : this.getDatasetAuthors()) { - JsonObjectBuilder author = Json.createObjectBuilder(); + JsonObjectBuilder author = JsonUtil.createObjectBuilder(); String name = datasetAuthor.getName().getDisplayValue(); String identifierAsUrl = datasetAuthor.getIdentifierAsUrl(); DatasetField authorAffiliation = datasetAuthor.getAffiliation(); @@ -1894,7 +1894,7 @@ public String getJsonLd() { author.add("familyName", familyName); } if (!StringUtil.isEmpty(affiliation)) { - author.add("affiliation", Json.createObjectBuilder().add("@type", "Organization").add("name", affiliation)); + author.add("affiliation", JsonUtil.createObjectBuilder().add("@type", "Organization").add("name", affiliation)); } //Currently all possible identifier URLs are for people not Organizations if(identifierAsUrl != null) { @@ -1908,7 +1908,7 @@ public String getJsonLd() { // Organization author.add("@type", "Organization"); if (!StringUtil.isEmpty(affiliation)) { - author.add("parentOrganization", Json.createObjectBuilder().add("@type", "Organization").add("name", affiliation)); + author.add("parentOrganization", JsonUtil.createObjectBuilder().add("@type", "Organization").add("name", affiliation)); } } // Both cases @@ -1963,7 +1963,7 @@ public String getJsonLd() { * metadata fields for the version. -- L.A. * (see #2243 for details/discussion/feedback from Google) */ - JsonArrayBuilder keywords = Json.createArrayBuilder(); + JsonArrayBuilder keywords = JsonUtil.createArrayBuilder(); for (String subject : this.getDatasetSubjects()) { keywords.add(subject); @@ -1993,7 +1993,7 @@ public String getJsonLd() { */ List relatedPublications = getRelatedPublications(); if (!relatedPublications.isEmpty()) { - JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder jsonArrayBuilder = JsonUtil.createArrayBuilder(); for (DatasetRelPublication relatedPub : relatedPublications) { boolean addToArray = false; String pubCitation = relatedPub.getText(); @@ -2001,7 +2001,7 @@ public String getJsonLd() { if (pubCitation != null || pubUrl != null) { addToArray = true; } - JsonObjectBuilder citationEntry = Json.createObjectBuilder(); + JsonObjectBuilder citationEntry = JsonUtil.createObjectBuilder(); citationEntry.add("@type", "CreativeWork"); if (pubCitation != null) { citationEntry.add("name", pubCitation); @@ -2028,7 +2028,7 @@ public String getJsonLd() { List timePeriodsCovered = this.getTimePeriodsCovered(); if (timePeriodsCovered.size() > 0) { - JsonArrayBuilder temporalCoverage = Json.createArrayBuilder(); + JsonArrayBuilder temporalCoverage = JsonUtil.createArrayBuilder(); for (String timePeriod : timePeriodsCovered) { temporalCoverage.add(timePeriod); } @@ -2053,7 +2053,7 @@ public String getJsonLd() { String installationBrandName = BrandingUtil.getInstallationBrandName(); - job.add("includedInDataCatalog", Json.createObjectBuilder() + job.add("includedInDataCatalog", JsonUtil.createObjectBuilder() .add("@type", "DataCatalog") .add("name", installationBrandName) .add("url", SystemConfig.getDataverseSiteUrlStatic()) @@ -2063,18 +2063,18 @@ public String getJsonLd() { * Both "publisher" and "provider" are included but they have the same * values. Some services seem to prefer one over the other. */ - job.add("publisher", Json.createObjectBuilder() + job.add("publisher", JsonUtil.createObjectBuilder() .add("@type", "Organization") .add("name", installationBrandName) ); - job.add("provider", Json.createObjectBuilder() + job.add("provider", JsonUtil.createObjectBuilder() .add("@type", "Organization") .add("name", installationBrandName) ); List funderNames = getFunders(); if (!funderNames.isEmpty()) { - JsonArrayBuilder funderArray = Json.createArrayBuilder(); + JsonArrayBuilder funderArray = JsonUtil.createArrayBuilder(); for (String funderName : funderNames) { JsonObjectBuilder funder = NullSafeJsonBuilder.jsonObjectBuilder(); funder.add("@type", "Organization"); @@ -2087,7 +2087,7 @@ public String getJsonLd() { boolean commaSeparated = true; List spatialCoverages = getSpatialCoverages(commaSeparated); if (!spatialCoverages.isEmpty()) { - JsonArrayBuilder spatialArray = Json.createArrayBuilder(); + JsonArrayBuilder spatialArray = JsonUtil.createArrayBuilder(); for (String spatialCoverage : spatialCoverages) { spatialArray.add(spatialCoverage); } @@ -2096,7 +2096,7 @@ public String getJsonLd() { List fileMetadatasSorted = getFileMetadatasSorted(); if (fileMetadatasSorted != null && !fileMetadatasSorted.isEmpty()) { - JsonArrayBuilder fileArray = Json.createArrayBuilder(); + JsonArrayBuilder fileArray = JsonUtil.createArrayBuilder(); String dataverseSiteUrl = SystemConfig.getDataverseSiteUrlStatic(); for (FileMetadata fileMetadata : fileMetadatasSorted) { JsonObjectBuilder fileObject = NullSafeJsonBuilder.jsonObjectBuilder(); diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java index 09762d8d9df..fd52e0c4df4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java @@ -14,6 +14,7 @@ import java.util.Set; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; @@ -1794,10 +1795,10 @@ public JsonObjectBuilder compareVersionsAsJson() { job.add("newVersion", jobVersion); if (!this.detailDataByBlock.isEmpty()) { - JsonArrayBuilder jabMetadata = Json.createArrayBuilder(); + JsonArrayBuilder jabMetadata = JsonUtil.createArrayBuilder(); for (List blocks : detailDataByBlock) { JsonObjectBuilder jobMetadata = new NullSafeJsonBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); String blockDisplay = blocks.get(0)[0].getDatasetFieldType().getMetadataBlock().getDisplayName(); for (DatasetField[] dsfArray : blocks) { JsonObjectBuilder jb = new NullSafeJsonBuilder(); @@ -1822,23 +1823,23 @@ public JsonObjectBuilder compareVersionsAsJson() { } // Format added, removed, and modified files - JsonArrayBuilder jabDiffFiles = Json.createArrayBuilder(); + JsonArrayBuilder jabDiffFiles = JsonUtil.createArrayBuilder(); if (!addedFiles.isEmpty()) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); addedFiles.forEach(f -> { jab.add(filesDiffJson(f)); }); job.add("filesAdded", jab); } if (!removedFiles.isEmpty()) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); removedFiles.forEach(f -> { jab.add(filesDiffJson(f)); }); job.add("filesRemoved", jab); } if (!replacedFiles.isEmpty()) { - JsonArrayBuilder jabReplaced = Json.createArrayBuilder(); + JsonArrayBuilder jabReplaced = JsonUtil.createArrayBuilder(); replacedFiles.forEach(fm -> { if (fm.length == 2) { JsonObjectBuilder jobReplaced = new NullSafeJsonBuilder(); @@ -1851,7 +1852,7 @@ public JsonObjectBuilder compareVersionsAsJson() { } if (!changedFileMetadata.isEmpty()) { changedFileMetadataDiff.entrySet().forEach(entry -> { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); JsonObjectBuilder jobChanged = new NullSafeJsonBuilder(); jobChanged.add("fileName", entry.getKey().getDataFile().getDisplayName()); jobChanged.add(entry.getKey().getDataFile().getChecksumType().name(), entry.getKey().getDataFile().getChecksumValue()); @@ -1872,7 +1873,7 @@ public JsonObjectBuilder compareVersionsAsJson() { // Format Terms Of Access changes if (!changedTermsAccess.isEmpty()) { JsonObjectBuilder jobTOA = new NullSafeJsonBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); changedTermsAccess.forEach(toa -> { JsonObjectBuilder jobValue = new NullSafeJsonBuilder(); jobValue.add("fieldName",toa[0]); @@ -1897,12 +1898,12 @@ private JsonObjectBuilder filesDiffJson(FileMetadata fileMetadata) { .add("description", fileMetadata.getDescription()) .add("isRestricted", df.isRestricted()); if (fileMetadata.getCategories() != null && !fileMetadata.getCategories().isEmpty()) { - JsonArrayBuilder jabCategories = Json.createArrayBuilder(); + JsonArrayBuilder jabCategories = JsonUtil.createArrayBuilder(); fileMetadata.getCategories().forEach(c -> jabCategories.add(c.getName())); job.add("categories", jabCategories); } if (df.getTags() != null && !df.getTags().isEmpty()) { - JsonArrayBuilder jabTags = Json.createArrayBuilder(); + JsonArrayBuilder jabTags = JsonUtil.createArrayBuilder(); df.getTags().forEach(t -> jabTags.add(t.getTypeLabel())); job.add("tags", jabTags); } diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java index 95443c35e05..15a5ca0873d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.EJBException; import jakarta.ejb.Stateless; @@ -1159,7 +1161,7 @@ public HashMap getFileMetadataHistory(DataFile df){ } public JsonObjectBuilder fixMissingUnf(String datasetVersionId, boolean forceRecalculate) { - JsonObjectBuilder info = Json.createObjectBuilder(); + JsonObjectBuilder info = JsonUtil.createObjectBuilder(); if (datasetVersionId == null || datasetVersionId.isEmpty()) { info.add("message", "datasetVersionId was null or empty!"); return info; diff --git a/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java index 1816a76ed5c..d06ca2cb5de 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java @@ -30,6 +30,7 @@ import java.util.*; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.validation.JSONDataValidation; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; @@ -879,11 +880,11 @@ public String addRoleAssignmentsToChildren(Dataverse owner, ArrayList ro // Set up to track the set of users/groups that get assigned a role and those // that don't - JsonArrayBuilder usedNames = Json.createArrayBuilder(); - JsonArrayBuilder unusedNames = Json.createArrayBuilder(); + JsonArrayBuilder usedNames = JsonUtil.createArrayBuilder(); + JsonArrayBuilder unusedNames = JsonUtil.createArrayBuilder(); // Set up to track the list of dataverses, by id and alias, that are traversed. - JsonArrayBuilder dataverseIds = Json.createArrayBuilder(); - JsonArrayBuilder dataverseAliases = Json.createArrayBuilder(); + JsonArrayBuilder dataverseIds = JsonUtil.createArrayBuilder(); + JsonArrayBuilder dataverseAliases = JsonUtil.createArrayBuilder(); // Get the Dataverses for the returned ids List children = new ArrayList(); @@ -988,7 +989,7 @@ public String addRoleAssignmentsToChildren(Dataverse owner, ArrayList ro * entities that had an admin role on the specified dataverse which were not * handled. Add this to the log and the API return message. */ - String result = Json.createObjectBuilder().add("Dataverses Updated", dataverseIds) + String result = JsonUtil.createObjectBuilder().add("Dataverses Updated", dataverseIds) .add("Updated Dataverse Aliases", dataverseAliases).add("Assignments added for", usedNames) .add("Assignments not added for", unusedNames).build().toString(); logger.info(result); diff --git a/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java b/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java index 0fc43d391ce..5891586744d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java +++ b/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java @@ -221,7 +221,7 @@ public void setPidGeneratorId(String pidGeneratorId) { public void setPidGenerator(PidProvider pidGenerator) { this.pidGenerator = pidGenerator; if (pidGenerator != null) { - JsonObjectBuilder job = jakarta.json.Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); this.pidGeneratorSpecs = job.add("protocol", pidGenerator.getProtocol()) .add("authority", pidGenerator.getAuthority()).add("shoulder", pidGenerator.getShoulder()) .add("separator", pidGenerator.getSeparator()).build().toString(); diff --git a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java index 3bcb31970a7..438d889dc7f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java +++ b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java @@ -22,6 +22,8 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.persistence.Column; @@ -333,7 +335,7 @@ public List getCategoriesByName() { public JsonArrayBuilder getCategoryNamesAsJsonArrayBuilder() { - JsonArrayBuilder builder = Json.createArrayBuilder(); + JsonArrayBuilder builder = JsonUtil.createArrayBuilder(); if (fileCategories == null) { return builder; diff --git a/src/main/java/edu/harvard/iq/dataverse/Template.java b/src/main/java/edu/harvard/iq/dataverse/Template.java index be80bc57f73..5082db5e736 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Template.java +++ b/src/main/java/edu/harvard/iq/dataverse/Template.java @@ -441,7 +441,7 @@ public void setInstructionsFor(String fieldType, String instructionString) { //Keep instructions up-to-date on any change public void updateInstructions() { - JsonObjectBuilder builder = Json.createObjectBuilder(); + JsonObjectBuilder builder = JsonUtil.createObjectBuilder(); getInstructionsMap().forEach((key, value) -> { if (value != null) builder.add(key, value); 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 562e5bb2c6f..4eccb16f2b3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java @@ -851,9 +851,9 @@ protected Response getRoleAssignmentHistoryResponse(DvObject dvObject, Authentic } // Or Json by default - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); for (DataverseRoleServiceBean.RoleAssignmentHistoryConsolidatedEntry entry : history) { - JsonObjectBuilder job = Json.createObjectBuilder() + JsonObjectBuilder job = JsonUtil.createObjectBuilder() .add("definedOn", entry.getDefinitionPointIdsAsString()) .add("assigneeIdentifier", entry.getAssigneeIdentifier()) .add("roleName", entry.getRoleName()); @@ -1016,7 +1016,7 @@ private Response handleDataverseRequestHandlerException(Exception ex) { String incidentId = UUID.randomUUID().toString(); logger.log(Level.SEVERE, "API internal error " + incidentId +": " + ex.getMessage(), ex); return Response.status(500) - .entity(Json.createObjectBuilder() + .entity(JsonUtil.createObjectBuilder() .add("status", "ERROR") .add("code", 500) .add("message", "Internal server error. More details available at the server logs.") @@ -1067,9 +1067,9 @@ protected Response ok(String msg) { // This is a highly used response builder, which is why this is an experimental opt-in change! // TODO: This will be removed in a future version. if (FeatureFlags.UNIFY_API_RESPONSE_MESSAGE_STYLE.enabled()) { - return ok(null, Json.createValue(msg), null); + return ok(null, JsonUtil.createValue(msg), null); } else { - return ok(Json.createObjectBuilder().add("message", msg).build(), null, null); + return ok(JsonUtil.createObjectBuilder().add("message", msg).build(), null, null); } } @@ -1078,9 +1078,9 @@ protected Response ok(String msg, JsonObjectBuilder bld) { // This is a scarcely used way to build a response, mostly relevant to admins, which is why we make it opt-out. // TODO: This will be removed in a future version. if (JvmSettings.LEGACY_API_RESPONSE_MESSAGE_STYLE.lookupOptional(Boolean.class).orElse(false)) { - return ok(bld.build(), Json.createObjectBuilder().add(ApiConstants.MESSAGE_FIELD, msg).build(), null); + return ok(bld.build(), JsonUtil.createObjectBuilder().add(ApiConstants.MESSAGE_FIELD, msg).build(), null); } else { - return ok(bld.build(), Json.createValue(msg), null); + return ok(bld.build(), JsonUtil.createValue(msg), null); } } @@ -1089,7 +1089,7 @@ protected Response ok( boolean value ) { } protected Response ok(long value) { - return ok(Json.createValue(value), null, null); + return ok(JsonUtil.createValue(value), null, null); } /** @@ -1113,7 +1113,7 @@ protected Response ok(InputStream inputStream) { protected Response created( String uri, JsonObjectBuilder bld ) { return Response.created( URI.create(uri) ) - .entity( Json.createObjectBuilder() + .entity( JsonUtil.createObjectBuilder() .add(ApiConstants.STATUS_FIELD, ApiConstants.STATUS_OK) .add(ApiConstants.DATA_FIELD, bld).build()) .type(MediaType.APPLICATION_JSON) @@ -1122,7 +1122,7 @@ protected Response created( String uri, JsonObjectBuilder bld ) { protected Response accepted(JsonObjectBuilder bld) { return Response.accepted() - .entity(Json.createObjectBuilder() + .entity(JsonUtil.createObjectBuilder() .add(ApiConstants.STATUS_FIELD, ApiConstants.STATUS_WF_IN_PROGRESS) .add(ApiConstants.DATA_FIELD, bld).build() ).build(); @@ -1130,7 +1130,7 @@ protected Response accepted(JsonObjectBuilder bld) { protected Response accepted() { return Response.accepted() - .entity(Json.createObjectBuilder() + .entity(JsonUtil.createObjectBuilder() .add(ApiConstants.STATUS_FIELD, ApiConstants.STATUS_WF_IN_PROGRESS).build() ).build(); } @@ -1148,7 +1148,7 @@ protected Response badRequest(String msg, Map fieldErrors) { .entity(NullSafeJsonBuilder.jsonObjectBuilder() .add(ApiConstants.STATUS_FIELD, ApiConstants.STATUS_ERROR) .add(ApiConstants.MESSAGE_FIELD, msg) - .add("fieldErrors", Json.createObjectBuilder(fieldErrors).build()) + .add("fieldErrors", JsonUtil.createObjectBuilder(fieldErrors).build()) .build() ) .type(MediaType.APPLICATION_JSON_TYPE) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Access.java b/src/main/java/edu/harvard/iq/dataverse/api/Access.java index 7d12e5e8b3f..9b6beb999ae 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Access.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Access.java @@ -619,7 +619,7 @@ private Response returnSignedUrl(ContainerRequestContext crc, UriInfo uriInfo, U baseUrl = baseUrl.replace(":persistentId", id); key = JvmSettings.API_SIGNING_SECRET.lookupOptional().orElse("") + key; String signedUrl = UrlSignerUtil.signUrl(baseUrl, GUESTBOOK_RESPONSE_SIGNEDURL_TIMEOUT_MINUTES, userIdentifier, "GET", key); - return ok(Json.createObjectBuilder().add(URLTokenUtil.SIGNED_URL, signedUrl)); + return ok(JsonUtil.createObjectBuilder().add(URLTokenUtil.SIGNED_URL, signedUrl)); } /* @@ -782,7 +782,7 @@ private Response listAuxiliaryFiles(User user, String fileId, String origin, Uri throw new NotFoundException("No Auxiliary files exist for datafile " + fileId + (origin==null ? "": " and the specified origin")); } boolean isAccessAllowed = isAccessAuthorized(user, df); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); auxFileList.forEach(auxFile -> { if (isAccessAllowed || auxFile.getIsPublic()) { NullSafeJsonBuilder job = NullSafeJsonBuilder.jsonObjectBuilder(); @@ -1951,7 +1951,7 @@ public Response listFileAccessRequests(@Context ContainerRequestContext crc, return error(NOT_FOUND, BundleUtil.getStringFromBundle("access.api.requestList.noRequestsFound", args)); } - JsonArrayBuilder userArray = Json.createArrayBuilder(); + JsonArrayBuilder userArray = JsonUtil.createArrayBuilder(); for (FileAccessRequest fileAccessRequest : requests) { userArray.add(json(fileAccessRequest)); @@ -1959,7 +1959,7 @@ public Response listFileAccessRequests(@Context ContainerRequestContext crc, // Check for pagination request if (includeHistory && numResultsPerPageRequested > 0 && paginationStart > 0) { - JsonObjectBuilder builder = Json.createObjectBuilder() + JsonObjectBuilder builder = JsonUtil.createObjectBuilder() .add("status", ApiConstants.STATUS_OK) .add("data", userArray); @@ -2226,7 +2226,7 @@ public Response getUserPermissionsOnFile(@Context ContainerRequestContext crc, } catch (WrappedResponse wr) { return wr.getResponse(); } - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); User requestUser = getRequestUser(crc); jsonObjectBuilder.add("canDownloadFile", permissionService.userOn(requestUser, dataFile).has(Permission.DownloadFile)); jsonObjectBuilder.add("canManageFilePermissions", permissionService.userOn(requestUser, dataFile).has(Permission.ManageFilePermissions)); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Admin.java b/src/main/java/edu/harvard/iq/dataverse/api/Admin.java index d4b0daa04e1..38209ebdd94 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Admin.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Admin.java @@ -22,6 +22,7 @@ import edu.harvard.iq.dataverse.util.StringUtil; import edu.harvard.iq.dataverse.util.cache.CacheFactoryBean; import edu.harvard.iq.dataverse.util.json.JsonPrinter; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; import edu.harvard.iq.dataverse.validation.EMailValidator; import edu.harvard.iq.dataverse.EjbDataverseEngine; @@ -414,9 +415,9 @@ public Response findTemplates(@Parameter(description = "Dataverse alias whose te } } - JsonArrayBuilder container = Json.createArrayBuilder(); + JsonArrayBuilder container = JsonUtil.createArrayBuilder(); for (Template t : templates) { - JsonObjectBuilder bld = Json.createObjectBuilder(); + JsonObjectBuilder bld = JsonUtil.createObjectBuilder(); bld.add("templateId", t.getId()); bld.add("templateName", t.getName()); Dataverse loopowner = t.getDataverse(); @@ -717,7 +718,7 @@ public Response listAuthenticatedUsers(@Context ContainerRequestContext crc) { } catch (WrappedResponse ex) { return error(Response.Status.FORBIDDEN, "Superusers only."); } - JsonArrayBuilder userArray = Json.createArrayBuilder(); + JsonArrayBuilder userArray = JsonUtil.createArrayBuilder(); authSvc.findAllAuthenticatedUsers().stream().forEach((user) -> { userArray.add(json(user)); }); @@ -823,7 +824,7 @@ public Response convertShibUserToBuiltin(@Context ContainerRequestContext crc, + " could not be converted from Shibboleth to BuiltIn. An Exception was not thrown."); } AuthenticatedUser authUser = authSvc.getAuthenticatedUser(builtinUser.getUserName()); - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("email", authUser.getEmail()); output.add("username", builtinUser.getUserName()); return ok(output); @@ -867,7 +868,7 @@ public Response convertOAuthUserToBuiltin(@Context ContainerRequestContext crc, + " could not be converted from remote to BuiltIn. An Exception was not thrown."); } AuthenticatedUser authUser = authSvc.getAuthenticatedUser(builtinUser.getUserName()); - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("email", authUser.getEmail()); output.add("username", builtinUser.getUserName()); return ok(output); @@ -978,8 +979,8 @@ public Response builtin2shib(@Context ContainerRequestContext crc, String overwritePosition = "staff;student"; AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo(overwriteFirstName, overwriteLastName, overwriteEmail, overwriteAffiliation, overwritePosition); - JsonObjectBuilder response = Json.createObjectBuilder(); - JsonArrayBuilder problems = Json.createArrayBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); + JsonArrayBuilder problems = JsonUtil.createArrayBuilder(); if (password != null) { response.add("password supplied", password); boolean knowsExistingPassword = false; @@ -1141,8 +1142,8 @@ public Response builtin2oauth(@Context ContainerRequestContext crc, String overwritePosition = "staff;student"; AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo(overwriteFirstName, overwriteLastName, overwriteEmail, overwriteAffiliation, overwritePosition); - JsonObjectBuilder response = Json.createObjectBuilder(); - JsonArrayBuilder problems = Json.createArrayBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); + JsonArrayBuilder problems = JsonUtil.createArrayBuilder(); if (password != null) { response.add("password supplied", password); boolean knowsExistingPassword = false; @@ -1356,7 +1357,7 @@ public void write(OutputStream os) throws IOException, boolean success = false; boolean constraintViolationDetected = false; - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("datasetId", datasetId); @@ -1453,7 +1454,7 @@ public Response validateDataset(@Parameter(description = "Dataset id or persiste if (constraintViolation.getInvalidValue() != null) { invalidValue = constraintViolation.getInvalidValue().toString(); } - JsonObjectBuilder violation = Json.createObjectBuilder(); + JsonObjectBuilder violation = JsonUtil.createObjectBuilder(); violation.add("entityClassDatabaseTableRowId", databaseRow); violation.add("field", field); violation.add("invalidValue", invalidValue == null ? "NULL" : invalidValue); @@ -1501,7 +1502,7 @@ public void write(OutputStream os) throws IOException, boolean success = false; - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("datafileId", dataFile.getId()); output.add("storageIdentifier", dataFile.getStorageIdentifier()); @@ -1545,7 +1546,7 @@ public void write(OutputStream os) throws IOException, public Response getAssignmentsFor(@Parameter(description = "Role assignee identifier.", required = true) @PathParam("raIdtf") String raIdtf) { - JsonArrayBuilder arr = Json.createArrayBuilder(); + JsonArrayBuilder arr = JsonUtil.createArrayBuilder(); roleAssigneeSvc.getAssignmentsFor(raIdtf).forEach(a -> arr.add(json(a))); return ok(arr); @@ -1568,7 +1569,7 @@ public Response getConfirmEmailToken(@Parameter(description = "Authenticated use if (user != null) { ConfirmEmailData confirmEmailData = confirmEmailSvc.findSingleConfirmEmailDataByUser(user); if (confirmEmailData != null) { - return ok(Json.createObjectBuilder().add("token", confirmEmailData.getToken())); + return ok(JsonUtil.createObjectBuilder().add("token", confirmEmailData.getToken())); } } return error(Status.BAD_REQUEST, "Could not find confirm email token for user " + userId); @@ -1591,7 +1592,7 @@ public Response startConfirmEmailProcess(@Parameter(description = "Authenticated try { ConfirmEmailInitResponse confirmEmailInitResponse = confirmEmailSvc.beginConfirm(user); ConfirmEmailData confirmEmailData = confirmEmailInitResponse.getConfirmEmailData(); - return ok(Json.createObjectBuilder().add("tokenCreated", confirmEmailData.getCreated().toString()) + return ok(JsonUtil.createObjectBuilder().add("tokenCreated", confirmEmailData.getCreated().toString()) .add("identifier", user.getUserIdentifier())); } catch (ConfirmEmailException ex) { return error(Status.BAD_REQUEST, @@ -1633,7 +1634,7 @@ public Response findPermissonsOn(@Context final ContainerRequestContext crc, try { final DvObject dvObj = findDvo(dvo); final User aUser = getRequestUser(crc); - final JsonObjectBuilder bld = Json.createObjectBuilder(); + final JsonObjectBuilder bld = JsonUtil.createObjectBuilder(); bld.add("user", aUser.getIdentifier()); bld.add("permissions", json(permissionSvc.permissionsFor(createDataverseRequest(aUser), dvObj))); return ok(bld); @@ -1672,7 +1673,7 @@ public Response fixUnf(@Parameter(description = "Dataset version database id.", @Operation(summary = "Repair missing original file types", description = "Starts a background repair for tabular files missing original file type metadata.") public Response fixMissingOriginalTypes() { - JsonObjectBuilder info = Json.createObjectBuilder(); + JsonObjectBuilder info = JsonUtil.createObjectBuilder(); List affectedFileIds = fileService.selectFilesWithMissingOriginalTypes(); @@ -1698,7 +1699,7 @@ public Response fixMissingOriginalTypes() { description = "Starts a background repair for tabular files missing original file size metadata.") public Response fixMissingOriginalSizes(@Parameter(description = "Maximum number of affected files to repair.") @QueryParam("limit") Integer limit) { - JsonObjectBuilder info = Json.createObjectBuilder(); + JsonObjectBuilder info = JsonUtil.createObjectBuilder(); List affectedFileIds = fileService.selectFilesWithMissingOriginalSizes(); @@ -1736,7 +1737,7 @@ public Response getDatasetThumbnailMetadata(@Parameter(description = "Dataset da if (dataset == null) { return error(Response.Status.NOT_FOUND, "Could not find dataset based on id supplied: " + idSupplied + "."); } - JsonObjectBuilder data = Json.createObjectBuilder(); + JsonObjectBuilder data = JsonUtil.createObjectBuilder(); DatasetThumbnail datasetThumbnail = dataset.getDatasetThumbnail(ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); data.add("isUseGenericThumbnail", dataset.isUseGenericThumbnail()); data.add("datasetLogoPresent", DatasetUtil.isDatasetLogoPresent(dataset, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE)); @@ -1770,9 +1771,9 @@ public Response validatePassword(@RequestBody(description = "Password text to va String password) { final List errors = passwordValidatorService.validate(password, new Date(), false); - final JsonArrayBuilder errorArray = Json.createArrayBuilder(); + final JsonArrayBuilder errorArray = JsonUtil.createArrayBuilder(); errors.forEach(errorArray::add); - return ok(Json.createObjectBuilder().add("password", password).add("errors", errorArray)); + return ok(JsonUtil.createObjectBuilder().add("password", password).add("errors", errorArray)); } @GET @@ -2369,7 +2370,7 @@ public Response archiveAllUnarchivedDatasetVersions(@Context ContainerRequestCon List dsl = datasetversionService.getUnarchivedDatasetVersions(); if (dsl != null) { if (listonly) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); logger.fine("Unarchived versions found: "); int current = 0; for (DatasetVersion dv : dsl) { @@ -2597,10 +2598,10 @@ public Response listCurationLabelSets(@Context ContainerRequestContext crc) thro } catch (WrappedResponse wr) { return wr.getResponse(); } - JsonObjectBuilder bld = Json.createObjectBuilder(); + JsonObjectBuilder bld = JsonUtil.createObjectBuilder(); systemConfig.getCurationLabels().entrySet().forEach(s -> { - JsonArrayBuilder labels = Json.createArrayBuilder(); + JsonArrayBuilder labels = JsonUtil.createArrayBuilder(); Arrays.asList(s.getValue()).forEach(l -> labels.add(l)); bld.add(s.getKey(), labels); }); @@ -2639,7 +2640,7 @@ public Response addBannerMessage(@RequestBody(description = "Banner message JSON } bannerMessageService.save(toAdd); - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder() + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder() .add("message", "Banner Message added successfully.") .add("id", toAdd.getId()); @@ -2756,7 +2757,7 @@ public Response getSignedUrl(@Context ContainerRequestContext crc, String signedUrl = UrlSignerUtil.signUrl(baseUrl, timeout, userId, method, key); - return ok(Json.createObjectBuilder().add(URLTokenUtil.SIGNED_URL, signedUrl)); + return ok(JsonUtil.createObjectBuilder().add(URLTokenUtil.SIGNED_URL, signedUrl)); } @DELETE @@ -2825,7 +2826,7 @@ public Response getFeatureFlags() { for (FeatureFlags flag : FeatureFlags.values()) { map.put(flag.name(), flag.enabled() ? "enabled" : "disabled"); } - return ok(Json.createObjectBuilder(map)); + return ok(JsonUtil.createObjectBuilder(map)); } @GET @@ -2836,7 +2837,7 @@ public Response getFeatureFlag(@Parameter(description = "Feature flag enum name. @PathParam("flag") String flagIn) { try { FeatureFlags flag = FeatureFlags.valueOf(flagIn); - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("enabled", flag.enabled()); return ok(job); } catch (IllegalArgumentException ex) { @@ -2882,8 +2883,8 @@ public Response getAuditFiles(@Context ContainerRequestContext crc, } NullSafeJsonBuilder jsonObjectBuilder = NullSafeJsonBuilder.jsonObjectBuilder(); - JsonArrayBuilder jsonDatasetsArrayBuilder = Json.createArrayBuilder(); - JsonArrayBuilder jsonFailuresArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder jsonDatasetsArrayBuilder = JsonUtil.createArrayBuilder(); + JsonArrayBuilder jsonFailuresArrayBuilder = JsonUtil.createArrayBuilder(); if (startId > 0) { jsonObjectBuilder.add("firstId", startId); @@ -2898,7 +2899,7 @@ public Response getAuditFiles(@Context ContainerRequestContext crc, datasetIds = datasetService.findAllLocalDatasetIds(); } else { datasetIds = new ArrayList<>(datasetIdentifiers.size()); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); datasetIdentifiers.forEach(id -> { String dId = id.trim(); jab.add(dId); @@ -2967,13 +2968,13 @@ public Response getAuditFiles(@Context ContainerRequestContext crc, jsonFailuresArrayBuilder.add(job); } - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); if (!missingFiles.isEmpty() || !missingFileMetadata.isEmpty()) { job.add("id", dataset.getId()); job.add("pid", dataset.getProtocol() + ":" + dataset.getAuthority() + "/" + dataset.getIdentifier()); job.add("persistentURL", dataset.getPersistentURL()); if (!missingFileMetadata.isEmpty()) { - JsonArrayBuilder jabMissingFileMetadata = Json.createArrayBuilder(); + JsonArrayBuilder jabMissingFileMetadata = JsonUtil.createArrayBuilder(); missingFileMetadata.forEach(mm -> { String[] missingMetadata = mm.split(","); NullSafeJsonBuilder jobj = NullSafeJsonBuilder.jsonObjectBuilder() @@ -2984,7 +2985,7 @@ public Response getAuditFiles(@Context ContainerRequestContext crc, job.add("missingFileMetadata", jabMissingFileMetadata); } if (!missingFiles.isEmpty()) { - JsonArrayBuilder jabMissingFiles = Json.createArrayBuilder(); + JsonArrayBuilder jabMissingFiles = JsonUtil.createArrayBuilder(); missingFiles.forEach(mf -> { String[] missingFile = mf.split(","); NullSafeJsonBuilder jobj = NullSafeJsonBuilder.jsonObjectBuilder() diff --git a/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java index fda698d6f5c..815b73f97f5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java @@ -14,6 +14,8 @@ import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Asynchronous; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; @@ -41,7 +43,7 @@ public void processFilePath(String fileDir, String parentIdtf, DataverseRequest PrintWriter validationLog = null; PrintWriter cleanupLog = null; try { - JsonArrayBuilder status = Json.createArrayBuilder(); + JsonArrayBuilder status = JsonUtil.createArrayBuilder(); Date timestamp = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss"); @@ -84,7 +86,7 @@ public void processFilePath(String fileDir, String parentIdtf, DataverseRequest } public JsonArrayBuilder handleDirectory(DataverseRequest dataverseRequest, File dir, ImportUtil.ImportType importType, PrintWriter validationLog, PrintWriter cleanupLog, Boolean createDV) throws ImportException{ - JsonArrayBuilder status = Json.createArrayBuilder(); + JsonArrayBuilder status = JsonUtil.createArrayBuilder(); Dataverse owner = dataverseService.findByAlias(dir.getName()); if (owner == null ) { if (createDV) { @@ -100,7 +102,7 @@ public JsonArrayBuilder handleDirectory(DataverseRequest dataverseRequest, File JsonObjectBuilder fileStatus = importService.handleFile(dataverseRequest, owner, file, importType, validationLog, cleanupLog); status.add(fileStatus); } catch (ImportException | IOException e) { - status.add(Json.createObjectBuilder().add("importStatus", "Exception importing " + file.getName() + ", message = " + e.getMessage())); + status.add(JsonUtil.createObjectBuilder().add("importStatus", "Exception importing " + file.getName() + ", message = " + e.getMessage())); } } } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/BuiltinUsers.java b/src/main/java/edu/harvard/iq/dataverse/api/BuiltinUsers.java index de1e0e1fdc0..40e82b2963d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/BuiltinUsers.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/BuiltinUsers.java @@ -16,6 +16,7 @@ import java.util.logging.Level; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.EJBException; import jakarta.json.Json; @@ -218,7 +219,7 @@ private Response internalSave(BuiltinUser user, String password, String key, Boo ApiToken token = authSvc.generateApiTokenForUser(au); authSvc.save(token); - JsonObjectBuilder resp = Json.createObjectBuilder(); + JsonObjectBuilder resp = JsonUtil.createObjectBuilder(); resp.add("user", json(user)); resp.add("authenticatedUser", json(au)); resp.add("apiToken", token.getTokenString()); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApi.java b/src/main/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApi.java index 20dc70d4833..6dd7a684c42 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApi.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApi.java @@ -20,6 +20,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.EJBException; import jakarta.json.Json; @@ -99,7 +101,7 @@ public Response getAll() { for ( DatasetFieldType dt : requiredFields ) { requiredFieldNames.add( dt.getName() ); } - return ok( Json.createObjectBuilder().add("haveParents", asJsonArray(listOfIsHasParentsTrue)) + return ok( JsonUtil.createObjectBuilder().add("haveParents", asJsonArray(listOfIsHasParentsTrue)) .add("noParents", asJsonArray(listOfIsHasParentsFalse)) .add("allowsMultiples", asJsonArray(listOfIsAllowsMultiplesTrue)) .add("allowsMultiples", asJsonArray(listOfIsAllowsMultiplesTrue)) @@ -149,7 +151,7 @@ public Response getByName( parentAllowsMultiplesBoolean = parent.isAllowMultiples(); parentAllowsMultiplesDisplay = Boolean.toString(parentAllowsMultiplesBoolean); } - JsonArrayBuilder controlledVocabularyValues = Json.createArrayBuilder(); + JsonArrayBuilder controlledVocabularyValues = JsonUtil.createArrayBuilder(); for (ControlledVocabularyValue controlledVocabularyValue : dsf.getControlledVocabularyValues()) { controlledVocabularyValues.add(NullSafeJsonBuilder.jsonObjectBuilder() .add("id", controlledVocabularyValue.getId()) @@ -205,7 +207,7 @@ public Response getByName( description = "Returns the configured controlled vocabulary display values for the subject dataset field.") public Response showControlledVocabularyForSubject() { DatasetFieldType subjectDatasetField = datasetFieldService.findByName(DatasetFieldConstant.subject); - JsonArrayBuilder possibleSubjects = Json.createArrayBuilder(); + JsonArrayBuilder possibleSubjects = JsonUtil.createArrayBuilder(); for (ControlledVocabularyValue subjectValue : controlledVocabularyValueService.findByDatasetFieldTypeId(subjectDatasetField.getId())) { String subject = subjectValue.getStrValue(); if (subject != null) { @@ -257,7 +259,7 @@ public Response loadDatasetFields( String splitBy = "\t"; int lineNumber = 0; HeaderType header = null; - JsonArrayBuilder responseArr = Json.createArrayBuilder(); + JsonArrayBuilder responseArr = JsonUtil.createArrayBuilder(); String[] values = null; try { br = new BufferedReader(new FileReader("/" + file)); @@ -283,19 +285,19 @@ public Response loadDatasetFields( } else { switch (header) { case METADATABLOCK: - responseArr.add( Json.createObjectBuilder() + responseArr.add( JsonUtil.createObjectBuilder() .add("name", parseMetadataBlock(values)) .add("type", "MetadataBlock")); break; case DATASETFIELD: - responseArr.add( Json.createObjectBuilder() + responseArr.add( JsonUtil.createObjectBuilder() .add("name", parseDatasetField(values)) .add("type", "DatasetField") ); break; case CONTROLLEDVOCABULARY: - responseArr.add( Json.createObjectBuilder() + responseArr.add( JsonUtil.createObjectBuilder() .add("name", parseControlledVocabulary(values)) .add("type", "Controlled Vocabulary") ); break; @@ -336,7 +338,7 @@ public Response loadDatasetFields( actionLogSvc.log(alr); } - return ok( Json.createObjectBuilder().add("added", responseArr) ); + return ok( JsonUtil.createObjectBuilder().add("added", responseArr) ); } /** 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 56ed1b88cb0..1061eae6f30 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -296,7 +296,7 @@ public Response exportDataset(@Context ContainerRequestContext crc, @Parameter(d .getReviews(commandEngine.submit(new GetDatasetReviewsCommand(req, dataset))); String content = new String(is.readAllBytes(), StandardCharsets.UTF_8); JsonObject croissantJson = JsonUtil.getJsonObject(content); - String updatedContent = Json.createObjectBuilder(croissantJson) + String updatedContent = JsonUtil.createObjectBuilder(croissantJson) .add("reviews", reviews.build().getJsonArray("reviews")).build().toString(); is = new ByteArrayInputStream(updatedContent.getBytes(StandardCharsets.UTF_8)); } @@ -649,7 +649,7 @@ public Response getVersionFileCounts(@Context ContainerRequestContext crc, return badRequest(BundleUtil.getStringFromBundle("datasets.api.version.files.invalid.access.status", List.of(accessStatus))); } DatasetVersion datasetVersion = getDatasetVersionOrDie(req, versionId, findDatasetUserCanSeeOrDie(datasetId, req, false), uriInfo, headers, includeDeaccessioned, false); - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); jsonObjectBuilder.add("total", datasetVersionFilesServiceBean.getFileMetadataCount(datasetVersion, fileSearchCriteria)); jsonObjectBuilder.add("perContentType", json(datasetVersionFilesServiceBean.getFileMetadataCountPerContentType(datasetVersion, fileSearchCriteria))); jsonObjectBuilder.add("perCategoryName", json(datasetVersionFilesServiceBean.getFileMetadataCountPerCategoryName(datasetVersion, fileSearchCriteria))); @@ -678,7 +678,7 @@ public Response getDownloadCountByDatasetId(@Context ContainerRequestContext crc } catch (WrappedResponse wr) { return wr.getResponse(); } - JsonObjectBuilder job = Json.createObjectBuilder() + JsonObjectBuilder job = JsonUtil.createObjectBuilder() .add("id", id) .add("downloadCount", count); if (date != null) { @@ -799,7 +799,7 @@ public Response getLinkset(@Context ContainerRequestContext crc, try { DatasetVersion dsv = getDatasetVersionOrDie(req, versionId, findDatasetUserCanSeeOrDie(datasetId, req, false), uriInfo, headers); return Response - .ok(Json.createObjectBuilder() + .ok(JsonUtil.createObjectBuilder() .add("linkset", new SignpostingResources(systemConfig, dsv, JvmSettings.SIGNPOSTING_LEVEL1_AUTHOR_LIMIT.lookupOptional().orElse(""), @@ -1039,7 +1039,7 @@ public Response updateVersionMetadata(@Context ContainerRequestContext crc, Dataset managedDataset = execCommand(new UpdateDatasetVersionCommand(ds, req)); managedVersion = managedDataset.getLatestVersion(); String info = updateDraft ? "Version Updated" : "Version Created"; - return ok(Json.createObjectBuilder().add(info, managedVersion.getVersionDate())); + return ok(JsonUtil.createObjectBuilder().add(info, managedVersion.getVersionDate())); } catch (WrappedResponse ex) { return ex.getResponse(); @@ -1074,7 +1074,7 @@ public Response deleteMetadata(@Context ContainerRequestContext crc, Dataset managedDataset = execCommand(new UpdateDatasetVersionCommand(ds, req)); managedVersion = managedDataset.getLatestVersion(); String info = updateDraft ? "Version Updated" : "Version Created"; - return ok(Json.createObjectBuilder().add(info, managedVersion.getVersionDate())); + return ok(JsonUtil.createObjectBuilder().add(info, managedVersion.getVersionDate())); } catch (WrappedResponse ex) { ex.printStackTrace(); @@ -1441,7 +1441,7 @@ public Response publishDataset(@Context ContainerRequestContext crc, if ((status == null) || status.equals(DatasetVersion.ARCHIVAL_STATUS_FAILURE)) { // Delete the record of any existing copy since it is now out of // date/incorrect - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_PENDING); updateVersion.setArchivalCopyLocation(JsonUtil.prettyPrint(job.build())); datasetVersionSvc.persistArchivalCopyLocation(updateVersion); @@ -1475,7 +1475,7 @@ public Response publishDataset(@Context ContainerRequestContext crc, if (errorMsg != null) { return error(Response.Status.INTERNAL_SERVER_ERROR, errorMsg); } else { - return Response.ok(Json.createObjectBuilder() + return Response.ok(JsonUtil.createObjectBuilder() .add("status", ApiConstants.STATUS_OK) .add("status_details", successMsg) .add("data", json(ds)).build()) @@ -1737,7 +1737,7 @@ public Response createFileEmbargo(@Context ContainerRequestContext crc, @Paramet List orphanedEmbargoes = new ArrayList(); // check if files belong to dataset if (datasetFiles.containsAll(filesToEmbargo)) { - JsonArrayBuilder restrictedFiles = Json.createArrayBuilder(); + JsonArrayBuilder restrictedFiles = JsonUtil.createArrayBuilder(); boolean badFiles = false; for (DataFile datafile : filesToEmbargo) { // superuser can overrule an existing embargo, even on released files @@ -1787,7 +1787,7 @@ public Response createFileEmbargo(@Context ContainerRequestContext crc, @Paramet .setUserIdentifier(authenticatedUser.getIdentifier())); } } - return ok(Json.createObjectBuilder().add("message", "Files were embargoed")); + return ok(JsonUtil.createObjectBuilder().add("message", "Files were embargoed")); } else { return error(BAD_REQUEST, "Not all files belong to dataset"); } @@ -1863,7 +1863,7 @@ public Response removeFileEmbargo(@Context ContainerRequestContext crc, @Paramet List orphanedEmbargoes = new ArrayList(); // check if files belong to dataset if (datasetFiles.containsAll(embargoFilesToUnset)) { - JsonArrayBuilder restrictedFiles = Json.createArrayBuilder(); + JsonArrayBuilder restrictedFiles = JsonUtil.createArrayBuilder(); boolean badFiles = false; for (DataFile datafile : embargoFilesToUnset) { // superuser can overrule an existing embargo, even on released files @@ -1904,7 +1904,7 @@ public Response removeFileEmbargo(@Context ContainerRequestContext crc, @Paramet removeRecord.setUserIdentifier(authenticatedUser.getIdentifier()); actionLogSvc.log(removeRecord); } - return ok(Json.createObjectBuilder().add("message", "Embargo(es) were removed from files")); + return ok(JsonUtil.createObjectBuilder().add("message", "Embargo(es) were removed from files")); } else { return error(BAD_REQUEST, "Not all files belong to dataset"); } @@ -2039,7 +2039,7 @@ public Response createFileRetention(@Context ContainerRequestContext crc, @Param List orphanedRetentions = new ArrayList(); // check if files belong to dataset if (datasetFiles.containsAll(filesToRetention)) { - JsonArrayBuilder restrictedFiles = Json.createArrayBuilder(); + JsonArrayBuilder restrictedFiles = JsonUtil.createArrayBuilder(); boolean badFiles = false; for (DataFile datafile : filesToRetention) { // superuser can overrule an existing retention, even on released files @@ -2089,7 +2089,7 @@ public Response createFileRetention(@Context ContainerRequestContext crc, @Param .setUserIdentifier(authenticatedUser.getIdentifier())); } } - return ok(Json.createObjectBuilder().add("message", "File(s) retention period has been set or updated")); + return ok(JsonUtil.createObjectBuilder().add("message", "File(s) retention period has been set or updated")); } else { return error(BAD_REQUEST, "Not all files belong to dataset"); } @@ -2174,7 +2174,7 @@ public Response removeFileRetention(@Context ContainerRequestContext crc, @Param List orphanedRetentions = new ArrayList(); // check if files belong to dataset if (datasetFiles.containsAll(retentionFilesToUnset)) { - JsonArrayBuilder restrictedFiles = Json.createArrayBuilder(); + JsonArrayBuilder restrictedFiles = JsonUtil.createArrayBuilder(); boolean badFiles = false; for (DataFile datafile : retentionFilesToUnset) { // superuser can overrule an existing retention, even on released files @@ -2215,7 +2215,7 @@ public Response removeFileRetention(@Context ContainerRequestContext crc, @Param removeRecord.setUserIdentifier(authenticatedUser.getIdentifier()); actionLogSvc.log(removeRecord); } - return ok(Json.createObjectBuilder().add("message", "Retention periods were removed from file(s)")); + return ok(JsonUtil.createObjectBuilder().add("message", "Retention periods were removed from file(s)")); } else { return error(BAD_REQUEST, "Not all files belong to dataset"); } @@ -2351,17 +2351,17 @@ public Response getLinks(@Context ContainerRequestContext crc, @Parameter(descri long datasetId = dataset.getId(); List dvsThatLinkToThisDatasetId = dataverseSvc.findDataversesThatLinkToThisDatasetId(datasetId); - JsonArrayBuilder dataversesThatLinkToThisDatasetIdBuilder = Json.createArrayBuilder(); + JsonArrayBuilder dataversesThatLinkToThisDatasetIdBuilder = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dvsThatLinkToThisDatasetId) { if (dataverse.isReleased() || this.permissionService.hasPermissionsFor(u, dataverse, EnumSet.of(Permission.ViewUnpublishedDataverse))) { - JsonObjectBuilder datasetBuilder = Json.createObjectBuilder(); + JsonObjectBuilder datasetBuilder = JsonUtil.createObjectBuilder(); datasetBuilder.add("id", dataverse.getId()); datasetBuilder.add("alias", dataverse.getAlias()); datasetBuilder.add("displayName", dataverse.getDisplayName()); dataversesThatLinkToThisDatasetIdBuilder.add(datasetBuilder.build()); } } - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("id", datasetId); response.add("identifier", dataset.getIdentifier()); response.add("linked-dataverses", dataversesThatLinkToThisDatasetIdBuilder); @@ -2551,10 +2551,10 @@ public Response getDatasetThumbnailCandidates(@Context ContainerRequestContext c if (!canUpdateThumbnail) { return error(Response.Status.FORBIDDEN, "You are not permitted to list dataset thumbnail candidates."); } - JsonArrayBuilder data = Json.createArrayBuilder(); + JsonArrayBuilder data = JsonUtil.createArrayBuilder(); boolean considerDatasetLogoAsCandidate = true; for (DatasetThumbnail datasetThumbnail : DatasetUtil.getThumbnailCandidates(dataset, considerDatasetLogoAsCandidate, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE)) { - JsonObjectBuilder candidate = Json.createObjectBuilder(); + JsonObjectBuilder candidate = JsonUtil.createObjectBuilder(); String base64image = datasetThumbnail.getBase64image(); if (base64image != null) { logger.fine("found a candidate!"); @@ -2747,7 +2747,7 @@ public Response receiveChecksumValidationResults(@Context ContainerRequestContex JsonObject jsonFromImportJobKickoff = execCommand(new ImportFromFileSystemCommand(createDataverseRequest(getRequestUser(crc)), dataset, uploadFolder, new Long(totalSize), importMode)); long jobId = jsonFromImportJobKickoff.getInt("executionId"); String message = jsonFromImportJobKickoff.getString("message"); - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("jobId", jobId); job.add("message", message); return ok(job); @@ -2791,7 +2791,7 @@ public Response receiveChecksumValidationResults(@Context ContainerRequestContex logger.log(Level.SEVERE, constraintError); } - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); return ok(job); } catch (IOException e) { @@ -2830,7 +2830,7 @@ public Response receiveChecksumValidationResults(@Context ContainerRequestContex public Response submitForReview(@Context ContainerRequestContext crc, @Parameter(description = "Resource id or persistent identifier.") @PathParam("id") String idSupplied) { try { Dataset updatedDataset = execCommand(new SubmitDatasetForReviewCommand(createDataverseRequest(getRequestUser(crc)), findDatasetOrDie(idSupplied))); - JsonObjectBuilder result = Json.createObjectBuilder(); + JsonObjectBuilder result = JsonUtil.createObjectBuilder(); boolean inReview = updatedDataset.isLockedFor(DatasetLock.Reason.InReview); @@ -2867,7 +2867,7 @@ public Response returnToAuthor(@Context ContainerRequestContext crc, @Parameter( AuthenticatedUser authenticatedUser = getRequestAuthenticatedUserOrDie(crc); Dataset updatedDataset = execCommand(new ReturnDatasetToAuthorCommand(createDataverseRequest(authenticatedUser), dataset, reasonForReturn )); - JsonObjectBuilder result = Json.createObjectBuilder(); + JsonObjectBuilder result = JsonUtil.createObjectBuilder(); result.add("inReview", false); result.add("message", "Dataset id " + updatedDataset.getId() + " has been sent back to the author(s)."); return ok(result); @@ -2888,7 +2888,7 @@ public Response getAvailableFileCategories(@Context ContainerRequestContext crc, DataverseRequest req = createDataverseRequest(getRequestUser(crc)); Dataset ds = findDatasetUserCanSeeOrDie(idSupplied, req, false); List datasetFileCategories = dataFileCategoryService.mergeDatasetFileCategories(ds.getCategories()); - JsonArrayBuilder fileCategoriesArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder fileCategoriesArrayBuilder = JsonUtil.createArrayBuilder(); for (String fieldName : datasetFileCategories) { fileCategoriesArrayBuilder.add(fieldName); } @@ -2931,7 +2931,7 @@ public Response getCurationStatus(@Context ContainerRequestContext crc, if (canSeeStatus) { List statuses = includeHistory ? dsv.getCurationStatuses() : Collections.singletonList(dsv.getCurrentCurationStatus()); if (includeHistory) { - JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder arrayBuilder = JsonUtil.createArrayBuilder(); for (CurationStatus status : statuses) { arrayBuilder.add(curationStatusToJson(status)); } @@ -2949,7 +2949,7 @@ public Response getCurationStatus(@Context ContainerRequestContext crc, private JsonObject curationStatusToJson(CurationStatus status) { if (status == null) { - return Json.createObjectBuilder().build(); + return JsonUtil.createObjectBuilder().build(); } return NullSafeJsonBuilder.jsonObjectBuilder() .add("label", status.getLabel()) @@ -3788,10 +3788,10 @@ public Response getMakeDataCountCitations(@Context ContainerRequestContext crc, try { DataverseRequest req = createDataverseRequest(getRequestUser(crc)); Dataset dataset = findDatasetUserCanSeeOrDie(idSupplied, req, false); - JsonArrayBuilder datasetsCitations = Json.createArrayBuilder(); + JsonArrayBuilder datasetsCitations = JsonUtil.createArrayBuilder(); List externalCitations = datasetExternalCitationsService.getDatasetExternalCitationsByDataset(dataset); for (DatasetExternalCitations citation : externalCitations) { - JsonObjectBuilder candidateObj = Json.createObjectBuilder(); + JsonObjectBuilder candidateObj = JsonUtil.createObjectBuilder(); /** * In the future we can imagine storing and presenting more * information about the citation such as the title of the paper @@ -3870,7 +3870,7 @@ public Response getDownloadSize(@Context ContainerRequestContext crc, DatasetVersion datasetVersion = getDatasetVersionOrDie(req, version, findDatasetUserCanSeeOrDie(dvIdtf, req, false), uriInfo, headers, includeDeaccessioned, false); long datasetStorageSize = datasetVersionFilesServiceBean.getFilesDownloadSize(datasetVersion, fileSearchCriteria, fileDownloadSizeMode); String message = MessageFormat.format(BundleUtil.getStringFromBundle("datasets.api.datasize.download"), datasetStorageSize); - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); jsonObjectBuilder.add("message", message); jsonObjectBuilder.add("storageSize", datasetStorageSize); return ok(jsonObjectBuilder); @@ -4241,7 +4241,7 @@ public Response getTimestamps(@Context ContainerRequestContext crc, @Parameter(d Set perms = new HashSet(); perms.add(Permission.ViewUnpublishedDataset); boolean canSeeDraft = permissionSvc.hasPermissionsFor(u, dataset, perms); - JsonObjectBuilder timestamps = Json.createObjectBuilder(); + JsonObjectBuilder timestamps = JsonUtil.createObjectBuilder(); logger.fine("CSD: " + canSeeDraft); logger.fine("IT: " + dataset.getIndexTime()); logger.fine("MT: " + dataset.getModificationTime()); @@ -4386,15 +4386,15 @@ public Response getGlobusUploadParams(@Context ContainerRequestContext crc, @Par referenceEndpointsWithPaths = GlobusAccessibleStore.getReferenceEndpointsWithPaths(storeId); } - JsonObjectBuilder queryParams = Json.createObjectBuilder(); + JsonObjectBuilder queryParams = JsonUtil.createObjectBuilder(); queryParams.add("queryParameters", - Json.createArrayBuilder().add(Json.createObjectBuilder().add("datasetId", "{datasetId}")) - .add(Json.createObjectBuilder().add("siteUrl", "{siteUrl}")) - .add(Json.createObjectBuilder().add("datasetVersion", "{datasetVersion}")) - .add(Json.createObjectBuilder().add("dvLocale", "{localeCode}")) - .add(Json.createObjectBuilder().add("datasetPid", "{datasetPid}"))); + JsonUtil.createArrayBuilder().add(JsonUtil.createObjectBuilder().add("datasetId", "{datasetId}")) + .add(JsonUtil.createObjectBuilder().add("siteUrl", "{siteUrl}")) + .add(JsonUtil.createObjectBuilder().add("datasetVersion", "{datasetVersion}")) + .add(JsonUtil.createObjectBuilder().add("dvLocale", "{localeCode}")) + .add(JsonUtil.createObjectBuilder().add("datasetPid", "{datasetPid}"))); JsonObject substitutedParams = tokenUtil.getParams(queryParams.build()); - JsonObjectBuilder params = Json.createObjectBuilder(); + JsonObjectBuilder params = JsonUtil.createObjectBuilder(); substitutedParams.keySet().forEach((key) -> { params.add(key, substitutedParams.get(key)); }); @@ -4415,29 +4415,29 @@ public Response getGlobusUploadParams(@Context ContainerRequestContext crc, @Par params.add("referenceEndpointsWithPaths", referenceEndpointsWithPaths); } int timeoutSeconds = JvmSettings.GLOBUS_CACHE_MAXAGE.lookup(Integer.class); - JsonArrayBuilder allowedApiCalls = Json.createArrayBuilder(); + JsonArrayBuilder allowedApiCalls = JsonUtil.createArrayBuilder(); String requestCallName = managed ? "requestGlobusTransferPaths" : "requestGlobusReferencePaths"; allowedApiCalls.add( - Json.createObjectBuilder().add(URLTokenUtil.NAME, requestCallName).add(URLTokenUtil.HTTP_METHOD, "POST") + JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, requestCallName).add(URLTokenUtil.HTTP_METHOD, "POST") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/requestGlobusUploadPaths") .add(URLTokenUtil.TIMEOUT, timeoutSeconds)); if(managed) { - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "addGlobusFiles") + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "addGlobusFiles") .add(URLTokenUtil.HTTP_METHOD, "POST") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/addGlobusFiles") .add(URLTokenUtil.TIMEOUT, timeoutSeconds)); } else { - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "addFiles") + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "addFiles") .add(URLTokenUtil.HTTP_METHOD, "POST") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/addFiles") .add(URLTokenUtil.TIMEOUT, timeoutSeconds)); } - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "getDatasetMetadata") + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "getDatasetMetadata") .add(URLTokenUtil.HTTP_METHOD, "GET") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/versions/{datasetVersion}") .add(URLTokenUtil.TIMEOUT, 5)); allowedApiCalls.add( - Json.createObjectBuilder().add(URLTokenUtil.NAME, "getFileListing").add(URLTokenUtil.HTTP_METHOD, "GET") + JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "getFileListing").add(URLTokenUtil.HTTP_METHOD, "GET") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/versions/{datasetVersion}/files") .add(URLTokenUtil.TIMEOUT, 5)); @@ -4724,15 +4724,15 @@ public Response getGlobusDownloadParams(@Context ContainerRequestContext crc, @P boolean managed = GlobusAccessibleStore.isDataverseManaged(storeId); String transferEndpoint = null; - JsonObjectBuilder queryParams = Json.createObjectBuilder(); + JsonObjectBuilder queryParams = JsonUtil.createObjectBuilder(); queryParams.add("queryParameters", - Json.createArrayBuilder().add(Json.createObjectBuilder().add("datasetId", "{datasetId}")) - .add(Json.createObjectBuilder().add("siteUrl", "{siteUrl}")) - .add(Json.createObjectBuilder().add("datasetVersion", "{datasetVersion}")) - .add(Json.createObjectBuilder().add("dvLocale", "{localeCode}")) - .add(Json.createObjectBuilder().add("datasetPid", "{datasetPid}"))); + JsonUtil.createArrayBuilder().add(JsonUtil.createObjectBuilder().add("datasetId", "{datasetId}")) + .add(JsonUtil.createObjectBuilder().add("siteUrl", "{siteUrl}")) + .add(JsonUtil.createObjectBuilder().add("datasetVersion", "{datasetVersion}")) + .add(JsonUtil.createObjectBuilder().add("dvLocale", "{localeCode}")) + .add(JsonUtil.createObjectBuilder().add("datasetPid", "{datasetPid}"))); JsonObject substitutedParams = tokenUtil.getParams(queryParams.build()); - JsonObjectBuilder params = Json.createObjectBuilder(); + JsonObjectBuilder params = JsonUtil.createObjectBuilder(); substitutedParams.keySet().forEach((key) -> { params.add(key, substitutedParams.get(key)); }); @@ -4743,22 +4743,22 @@ public Response getGlobusDownloadParams(@Context ContainerRequestContext crc, @P } params.add("files", files); int timeoutSeconds = JvmSettings.GLOBUS_CACHE_MAXAGE.lookup(Integer.class); - JsonArrayBuilder allowedApiCalls = Json.createArrayBuilder(); - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "monitorGlobusDownload") + JsonArrayBuilder allowedApiCalls = JsonUtil.createArrayBuilder(); + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "monitorGlobusDownload") .add(URLTokenUtil.HTTP_METHOD, "POST") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/monitorGlobusDownload") .add(URLTokenUtil.TIMEOUT, timeoutSeconds)); - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "requestGlobusDownload") + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "requestGlobusDownload") .add(URLTokenUtil.HTTP_METHOD, "POST") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/requestGlobusDownload?downloadId=" + downloadId) .add(URLTokenUtil.TIMEOUT, timeoutSeconds)); - allowedApiCalls.add(Json.createObjectBuilder().add(URLTokenUtil.NAME, "getDatasetMetadata") + allowedApiCalls.add(JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "getDatasetMetadata") .add(URLTokenUtil.HTTP_METHOD, "GET") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/versions/{datasetVersion}") .add(URLTokenUtil.TIMEOUT, 5)); allowedApiCalls.add( - Json.createObjectBuilder().add(URLTokenUtil.NAME, "getFileListing").add(URLTokenUtil.HTTP_METHOD, "GET") + JsonUtil.createObjectBuilder().add(URLTokenUtil.NAME, "getFileListing").add(URLTokenUtil.HTTP_METHOD, "GET") .add(URLTokenUtil.URL_TEMPLATE, "/api/v1/datasets/{datasetId}/versions/{datasetVersion}/files") .add(URLTokenUtil.TIMEOUT, 5)); @@ -5645,7 +5645,7 @@ public Response getDatasetExternalToolUrl(@Context ContainerRequestContext crc, } // Return the URL in a JSON response - return ok(Json.createObjectBuilder().add("toolUrl", toolUrl).add("displayName", externalTool.getDisplayName()) + return ok(JsonUtil.createObjectBuilder().add("toolUrl", toolUrl).add("displayName", externalTool.getDisplayName()) .add("datasetId", dataset.getId()).add("preview", preview)); } catch (Exception ex) { @@ -5703,7 +5703,7 @@ public Response getExternalToolDVParams(@Context ContainerRequestContext crc, public Response getDatasetSummaryFieldNames() { String customFieldNames = settingsService.getValueForKey(SettingsServiceBean.Key.CustomDatasetSummaryFields); String[] fieldNames = DatasetUtil.getDatasetSummaryFieldNames(customFieldNames); - JsonArrayBuilder fieldNamesArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder fieldNamesArrayBuilder = JsonUtil.createArrayBuilder(); for (String fieldName : fieldNames) { fieldNamesArrayBuilder.add(fieldName); } @@ -6007,7 +6007,7 @@ public Response getUserPermissionsOnDataset(@Context ContainerRequestContext crc return wr.getResponse(); } - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); jsonObjectBuilder.add("canViewUnpublishedDataset", permissionService.userOn(requestUser, dataset).has(Permission.ViewUnpublishedDataset)); jsonObjectBuilder.add("canEditDataset", permissionService.userOn(requestUser, dataset).has(Permission.EditDataset)); jsonObjectBuilder.add("canPublishDataset", permissionService.userOn(requestUser, dataset).has(Permission.PublishDataset)); @@ -6173,7 +6173,7 @@ public Response resetPidGenerator(@Context ContainerRequestContext crc, @Paramet public Response getDatasetTypes(@Parameter(description = "Language preference for localized dataset type labels.") @HeaderParam(ACCEPT_LANGUAGE) String acceptLanguage) { Locale locale = I18nUtil.parseAcceptLanguageHeader(acceptLanguage); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DatasetType datasetType : datasetTypeSvc.listAll()) { jab.add(datasetType.toJson(locale)); } @@ -6235,7 +6235,7 @@ public Response addDatasetType(@Context ContainerRequestContext crc, String displayNameIn = null; String descriptionIn = null; - JsonArrayBuilder datasetTypesAfter = Json.createArrayBuilder(); + JsonArrayBuilder datasetTypesAfter = JsonUtil.createArrayBuilder(); List metadataBlocksToSave = new ArrayList<>(); List licensesToSave = new ArrayList<>(); @@ -6379,11 +6379,11 @@ public Response updateDatasetTypeLinksWithMetadataBlocks(@Context ContainerReque } else { datasetType = datasetTypeSvc.getByName(idOrName); } - JsonArrayBuilder datasetTypesBefore = Json.createArrayBuilder(); + JsonArrayBuilder datasetTypesBefore = JsonUtil.createArrayBuilder(); for (MetadataBlock metadataBlock : datasetType.getMetadataBlocks()) { datasetTypesBefore.add(metadataBlock.getName()); } - JsonArrayBuilder datasetTypesAfter = Json.createArrayBuilder(); + JsonArrayBuilder datasetTypesAfter = JsonUtil.createArrayBuilder(); List metadataBlocksToSave = new ArrayList<>(); if (jsonBody != null && !jsonBody.isEmpty()) { JsonArray json = JsonUtil.getJsonArray(jsonBody); @@ -6401,8 +6401,8 @@ public Response updateDatasetTypeLinksWithMetadataBlocks(@Context ContainerReque } try { execCommand(new UpdateDatasetTypeLinksToMetadataBlocksCommand(createDataverseRequest(getRequestUser(crc)), datasetType, metadataBlocksToSave)); - return ok(Json.createObjectBuilder() - .add("linkedMetadataBlocks", Json.createObjectBuilder() + return ok(JsonUtil.createObjectBuilder() + .add("linkedMetadataBlocks", JsonUtil.createObjectBuilder() .add("before", datasetTypesBefore) .add("after", datasetTypesAfter)) ); @@ -6433,11 +6433,11 @@ public Response updateDatasetTypeWithLicenses(@Context ContainerRequestContext c } else { datasetType = datasetTypeSvc.getByName(idOrName); } - JsonArrayBuilder licensesBefore = Json.createArrayBuilder(); + JsonArrayBuilder licensesBefore = JsonUtil.createArrayBuilder(); for (License license : datasetType.getLicenses()) { licensesBefore.add(license.getName()); } - JsonArrayBuilder licensesAfter = Json.createArrayBuilder(); + JsonArrayBuilder licensesAfter = JsonUtil.createArrayBuilder(); List licensesToSave = new ArrayList<>(); if (jsonBody != null && !jsonBody.isEmpty()) { JsonArray json = JsonUtil.getJsonArray(jsonBody); @@ -6455,8 +6455,8 @@ public Response updateDatasetTypeWithLicenses(@Context ContainerRequestContext c } try { execCommand(new UpdateDatasetTypeAvailableLicensesCommand(createDataverseRequest(getRequestUser(crc)), datasetType, licensesToSave)); - return ok(Json.createObjectBuilder() - .add("availableLicenses", Json.createObjectBuilder() + return ok(JsonUtil.createObjectBuilder() + .add("availableLicenses", JsonUtil.createObjectBuilder() .add("before", licensesBefore) .add("after", licensesAfter)) ); @@ -6609,7 +6609,7 @@ public Response getVersionCreationNote(@Context ContainerRequestContext crc, DatasetVersion datasetVersion = getDatasetVersionOrDie(req, versionId, findDatasetUserCanSeeOrDie(datasetId, req, false), uriInfo, headers); String note = datasetVersion.getVersionNote(); if(note == null) { - return ok(Json.createObjectBuilder()); + return ok(JsonUtil.createObjectBuilder()); } return ok(note); }, getRequestUser(crc)); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index b3c35771ce6..28a67237af1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -477,7 +477,7 @@ public Response createDataset(@Context ContainerRequestContext crc, } return created("/datasets/" + managedDs.getId(), - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("id", managedDs.getId()) .add("persistentId", managedDs.getGlobalId().asString()) ); @@ -526,7 +526,7 @@ public Response createDatasetFromJsonLd(@Context ContainerRequestContext crc, Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); return created("/datasets/" + managedDs.getId(), - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("id", managedDs.getId()) .add("persistentId", managedDs.getGlobalId().asString()) ); @@ -612,7 +612,7 @@ public Response importDataset(@Context ContainerRequestContext crc, } Dataset managedDs = execCommand(new ImportDatasetCommand(ds, request)); - JsonObjectBuilder responseBld = Json.createObjectBuilder() + JsonObjectBuilder responseBld = JsonUtil.createObjectBuilder() .add("id", managedDs.getId()) .add("persistentId", managedDs.getGlobalId().asString()); @@ -688,7 +688,7 @@ public Response importDatasetDdi(@Context ContainerRequestContext crc, managedDs = execCommand(new CreateNewDatasetCommand(ds, request)); } - JsonObjectBuilder responseBld = Json.createObjectBuilder() + JsonObjectBuilder responseBld = JsonUtil.createObjectBuilder() .add("id", managedDs.getId()) .add("persistentId", managedDs.getGlobalId().toString()); @@ -763,7 +763,7 @@ public Response recreateDataset(@Context ContainerRequestContext crc, DataverseRequest request = createDataverseRequest(u); Dataset managedDs = execCommand(new ImportDatasetCommand(ds, request)); - JsonObjectBuilder responseBld = Json.createObjectBuilder() + JsonObjectBuilder responseBld = JsonUtil.createObjectBuilder() .add("id", managedDs.getId()) .add("persistentId", managedDs.getGlobalId().toString()); @@ -1127,7 +1127,7 @@ public Response listFacets(@Context ContainerRequestContext crc, if (returnDetails) { return ok(jsonDataverseFacets(dataverseFacets)); } else { - JsonArrayBuilder facetsBuilder = Json.createArrayBuilder(); + JsonArrayBuilder facetsBuilder = JsonUtil.createArrayBuilder(); for (DataverseFacet facet : dataverseFacets) { facetsBuilder.add(facet.getDatasetFieldType().getName()); } @@ -1157,7 +1157,7 @@ public Response getFeaturedDataverses(@Context ContainerRequestContext crc, User u = getRequestUser(crc); DataverseRequest r = createDataverseRequest(u); Dataverse dataverse = findDataverseUserCanSeeOrDie(dvIdtf, r); - JsonArrayBuilder fs = Json.createArrayBuilder(); + JsonArrayBuilder fs = JsonUtil.createArrayBuilder(); for (Dataverse f : execCommand(new ListFeaturedCollectionsCommand(r, dataverse))) { fs.add(f.getAlias()); } @@ -1403,7 +1403,7 @@ public Response listContent(@Context ContainerRequestContext crc, DvObject.Visitor ser = new DvObject.Visitor() { @Override public JsonObjectBuilder visit(Dataverse dv) { - return Json.createObjectBuilder().add("type", "dataverse") + return JsonUtil.createObjectBuilder().add("type", "dataverse") .add("id", dv.getId()) .add("title", dv.getName()); } @@ -1943,9 +1943,9 @@ public Response listLinks(@Context ContainerRequestContext crc, } List dvsThisDvHasLinkedToList = dataverseSvc.findDataversesThisIdHasLinkedTo(dv.getId()); - JsonArrayBuilder dvsThisDvHasLinkedToBuilder = Json.createArrayBuilder(); + JsonArrayBuilder dvsThisDvHasLinkedToBuilder = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dvsThisDvHasLinkedToList) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("id", dataverse.getId()); job.add("alias", dataverse.getAlias()); job.add("displayName", dataverse.getDisplayName()); @@ -1953,9 +1953,9 @@ public Response listLinks(@Context ContainerRequestContext crc, } List dvsThatLinkToThisDvList = dataverseSvc.findDataversesThatLinkToThisDvId(dv.getId()); - JsonArrayBuilder dvsThatLinkToThisDvBuilder = Json.createArrayBuilder(); + JsonArrayBuilder dvsThatLinkToThisDvBuilder = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dvsThatLinkToThisDvList) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("id", dataverse.getId()); job.add("alias", dataverse.getAlias()); job.add("displayName", dataverse.getDisplayName()); @@ -1963,7 +1963,7 @@ public Response listLinks(@Context ContainerRequestContext crc, } List datasetsThisDvHasLinkedToList = dataverseSvc.findDatasetsThisIdHasLinkedTo(dv.getId()); - JsonArrayBuilder datasetsThisDvHasLinkedToBuilder = Json.createArrayBuilder(); + JsonArrayBuilder datasetsThisDvHasLinkedToBuilder = JsonUtil.createArrayBuilder(); for (Dataset dataset : datasetsThisDvHasLinkedToList) { JsonObjectBuilder ds = new NullSafeJsonBuilder(); ds.add("title", dataset.getLatestVersion().getTitle()); @@ -1971,7 +1971,7 @@ public Response listLinks(@Context ContainerRequestContext crc, datasetsThisDvHasLinkedToBuilder.add(ds); } - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("linkedDataverses", dvsThisDvHasLinkedToBuilder); response.add("dataversesLinkingToThis", dvsThatLinkToThisDvBuilder); response.add("linkedDatasets", datasetsThisDvHasLinkedToBuilder); @@ -2065,7 +2065,7 @@ public Response getLinkingDataverseList(@Context ContainerRequestContext crc, alreadyLinking )); - JsonArrayBuilder dvBuilder = Json.createArrayBuilder(); + JsonArrayBuilder dvBuilder = JsonUtil.createArrayBuilder(); if (dataversesForLinking != null && !dataversesForLinking.isEmpty()) { for (Dataverse dv : dataversesForLinking) { dvBuilder.add(json(dv, true)); @@ -2094,7 +2094,7 @@ public Response getUserPermissionsOnDataverse(@Context ContainerRequestContext c return wr.getResponse(); } User requestUser = getRequestUser(crc); - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); jsonObjectBuilder.add("canAddDataverse", permissionService.userOn(requestUser, dataverse).has(Permission.AddDataverse)); jsonObjectBuilder.add("canAddDataset", permissionService.userOn(requestUser, dataverse).has(Permission.AddDataset)); jsonObjectBuilder.add("canViewUnpublishedDataverse", permissionService.userOn(requestUser, dataverse).has(Permission.ViewUnpublishedDataverse)); @@ -2724,7 +2724,7 @@ public Response listLocallyFairRoleAssignees(@Context ContainerRequestContext cr } Dataverse dataverse = findDataverseOrDie(dvIdtf); - JsonArrayBuilder assignees = Json.createArrayBuilder(); + JsonArrayBuilder assignees = JsonUtil.createArrayBuilder(); dataverse.getLocallyFAIRRoleAssigneeIdentifiers().stream() .sorted() .forEach(assignees::add); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/ExternalTools.java b/src/main/java/edu/harvard/iq/dataverse/api/ExternalTools.java index 9d094360681..61de83cb8cd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/ExternalTools.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/ExternalTools.java @@ -4,6 +4,8 @@ import edu.harvard.iq.dataverse.externaltools.ExternalTool; import edu.harvard.iq.dataverse.externaltools.ExternalToolServiceBean; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.ws.rs.DELETE; @@ -28,7 +30,7 @@ public class ExternalTools extends AbstractApiBean { @Operation(summary = "Lists external tools", description = "Returns all registered external tools as JSON.") public Response getExternalTools() { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); externalToolService.findAll().forEach((externalTool) -> { jab.add(externalTool.toJson()); }); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/FeedbackApi.java b/src/main/java/edu/harvard/iq/dataverse/api/FeedbackApi.java index 9d180096228..b8e63a2b3c6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/FeedbackApi.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/FeedbackApi.java @@ -8,6 +8,7 @@ import edu.harvard.iq.dataverse.feedback.Feedback; import edu.harvard.iq.dataverse.feedback.FeedbackUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; @@ -62,7 +63,7 @@ public Response submitFeedback( String baseUrl = systemConfig.getDataverseSiteUrl(); String installationBrandName = BrandingUtil.getInstallationBrandName(); String supportTeamName = BrandingUtil.getSupportTeamName(systemAddress); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); Feedback feedback = FeedbackUtil.gatherFeedback(feedbackTarget, dataverseSession, messageSubject, userMessage, systemAddress, userEmail, baseUrl, installationBrandName, supportTeamName, SendFeedbackDialog.ccSupport(feedbackTarget)); jab.add(feedback.toJsonObjectBuilder()); mailService.sendMail(feedback.getFromEmail(), feedback.getToEmail(), feedback.getCcEmail(), feedback.getSubject(), feedback.getBody()); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Files.java b/src/main/java/edu/harvard/iq/dataverse/api/Files.java index 687ccadc36f..6983a06d07a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Files.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Files.java @@ -634,7 +634,7 @@ public Command handleLatestPublished() { mdcLogService.logEntry(entry); } - return Response.ok(Json.createObjectBuilder() + return Response.ok(JsonUtil.createObjectBuilder() .add("status", ApiConstants.STATUS_OK) .add("data", json(fileMetadata, returnOwners, returnDatasetVersion)).build()) .type(MediaType.APPLICATION_JSON) @@ -1036,7 +1036,7 @@ public Response getExternalToolUrl(@Context ContainerRequestContext crc, @Parame } // Return the URL in a JSON response - return ok(Json.createObjectBuilder().add("toolUrl", toolUrl).add("displayName", externalTool.getDisplayName()) + return ok(JsonUtil.createObjectBuilder().add("toolUrl", toolUrl).add("displayName", externalTool.getDisplayName()) .add("fileId", dataFile.getId()).add("preview", preview)); } catch (Exception ex) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Groups.java b/src/main/java/edu/harvard/iq/dataverse/api/Groups.java index 55fb68857f3..5e2b40d6329 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Groups.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Groups.java @@ -9,6 +9,7 @@ import edu.harvard.iq.dataverse.util.json.JsonParseException; import edu.harvard.iq.dataverse.util.json.JsonParser; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Stateless; import jakarta.interceptor.Interceptors; import jakarta.ws.rs.GET; @@ -190,7 +191,7 @@ public Response deleteIpGroup( @Operation(summary = "Lists Shibboleth groups", description = "Returns all global Shibboleth groups as JSON.") public Response listShibGroups() { - JsonArrayBuilder arrBld = Json.createArrayBuilder(); + JsonArrayBuilder arrBld = JsonUtil.createArrayBuilder(); for (ShibGroup g : shibGroupPrv.findGlobalGroups()) { arrBld.add(json(g)); } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Guestbooks.java b/src/main/java/edu/harvard/iq/dataverse/api/Guestbooks.java index 1867b0b515b..2bc18c16a2e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Guestbooks.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Guestbooks.java @@ -86,7 +86,7 @@ public Response getGuestbooks(@Context ContainerRequestContext crc, guestbookService.findEffectiveGuestbooksForGivenDataverse(dataverse): guestbookService.findGuestbooksForGivenDataverse(dataverse); - JsonArrayBuilder guestbookArray = Json.createArrayBuilder(); + JsonArrayBuilder guestbookArray = JsonUtil.createArrayBuilder(); JsonPrinter jsonPrinter = new JsonPrinter(); for (Guestbook gb : guestbooks) { if (includeStats) { @@ -200,7 +200,7 @@ public Response getResponses(@Context ContainerRequestContext crc, JsonObjectBuilder guestbookResponseObject = jsonObjectBuilder(); guestbookResponseObject.add("guestbook", JsonPrinter.json(guestbook)); - JsonArrayBuilder responseObjects = Json.createArrayBuilder(); + JsonArrayBuilder responseObjects = JsonUtil.createArrayBuilder(); for (GuestbookResponse gr : responses) { responseObjects.add(JsonPrinter.json(gr)); } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingClients.java b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingClients.java index 24dbfd3e532..33549608331 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingClients.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingClients.java @@ -83,7 +83,7 @@ public Response harvestingClients(@Context ContainerRequestContext crc, return ok(jsonObjectBuilder().add("harvestingClients","")); } - JsonArrayBuilder hcArr = Json.createArrayBuilder(); + JsonArrayBuilder hcArr = JsonUtil.createArrayBuilder(); for (HarvestingClient harvestingClient : harvestingClients) { // We already have this harvestingClient - wny do we need to diff --git a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java index 0598210d50a..989ab160d27 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java @@ -11,6 +11,7 @@ import edu.harvard.iq.dataverse.harvest.server.OAISetServiceBean; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.util.json.JsonParseException; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonObjectBuilder; import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder; import java.io.IOException; @@ -76,7 +77,7 @@ public Response oaiSets( return ok(jsonObjectBuilder().add("oaisets", "")); } - JsonArrayBuilder hcArr = Json.createArrayBuilder(); + JsonArrayBuilder hcArr = JsonUtil.createArrayBuilder(); for (OAISet set : oaiSets) { hcArr.add(oaiSetAsJson(set)); @@ -325,7 +326,7 @@ public Response oaiSetListDatasets( /* Auxiliary, helper methods: */ public static JsonArrayBuilder oaiSetsAsJsonArray(List oaiSets) { - JsonArrayBuilder hdArr = Json.createArrayBuilder(); + JsonArrayBuilder hdArr = JsonUtil.createArrayBuilder(); for (OAISet set : oaiSets) { hdArr.add(oaiSetAsJson(set)); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Index.java b/src/main/java/edu/harvard/iq/dataverse/api/Index.java index 5d2dce16528..7f34fbc1aeb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Index.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Index.java @@ -38,6 +38,7 @@ import edu.harvard.iq.dataverse.search.SolrIndexServiceBean; import edu.harvard.iq.dataverse.search.SortBy; import edu.harvard.iq.dataverse.util.ConstraintViolationUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder; import java.io.IOException; @@ -167,10 +168,10 @@ private Response indexAllOrSubset(Long numPartitionsSelected, Long partitionIdTo } - JsonObjectBuilder args = Json.createObjectBuilder(); + JsonObjectBuilder args = JsonUtil.createObjectBuilder(); args.add("numPartitions", numPartitions); args.add("partitionIdToProcess", partitionIdToProcess); - JsonArrayBuilder availablePartitionIdsBuilder = Json.createArrayBuilder(); + JsonArrayBuilder availablePartitionIdsBuilder = JsonUtil.createArrayBuilder(); for (long i : availablePartitionIds) { availablePartitionIdsBuilder.add(i); } @@ -182,7 +183,7 @@ private Response indexAllOrSubset(Long numPartitionsSelected, Long partitionIdTo return ok(preview); } - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("availablePartitionIds", availablePartitionIdsBuilder); response.add("args", args); /** @@ -342,13 +343,13 @@ public Response indexDatasetByPersistentId( if (dataset != null) { boolean doNormalSolrDocCleanUp = true; indexService.asyncIndexDataset(dataset, doNormalSolrDocCleanUp); - JsonObjectBuilder data = Json.createObjectBuilder(); + JsonObjectBuilder data = JsonUtil.createObjectBuilder(); data.add("message", "Reindexed dataset " + persistentId); data.add("id", dataset.getId()); data.add("persistentId", dataset.getGlobalId().asString()); - JsonArrayBuilder versions = Json.createArrayBuilder(); + JsonArrayBuilder versions = JsonUtil.createArrayBuilder(); for (DatasetVersion version : dataset.getVersions()) { - JsonObjectBuilder versionObject = Json.createObjectBuilder(); + JsonObjectBuilder versionObject = JsonUtil.createObjectBuilder(); versionObject.add("semanticVersion", version.getSemanticVersion()); versionObject.add("id", version.getId()); versions.add(versionObject); @@ -401,7 +402,7 @@ public Response indexMod(@Parameter(description = "Number of indexing partitions dvObjectsIds.add(i); } List mine = IndexUtil.findDvObjectIdsToProcessMod(dvObjectsIds, partitions, which); - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("partitions", partitions); response.add("which", which); response.add("mine", mine.toString()); @@ -601,7 +602,7 @@ public String getSolrSchema() { } static String error(String message) { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("status", "ERROR"); response.add("message", message); @@ -641,7 +642,7 @@ public Response searchDebug( return error(Response.Status.INTERNAL_SERVER_ERROR, ex.getLocalizedMessage() + ": " + ex.getCause().getLocalizedMessage()); } - JsonArrayBuilder itemsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder itemsArrayBuilder = JsonUtil.createArrayBuilder(); List solrSearchResults = solrQueryResponse.getSolrSearchResults(); for (SolrSearchResult solrSearchResult : solrSearchResults) { itemsArrayBuilder.add(solrSearchResult.getType() + ":" + solrSearchResult.getNameSort()); @@ -672,15 +673,15 @@ public Response searchPermsDebug( } List solrDocs = SolrIndexService.determineSolrDocs(dvObjectToLookUp); - JsonObjectBuilder data = Json.createObjectBuilder(); + JsonObjectBuilder data = JsonUtil.createObjectBuilder(); - JsonArrayBuilder permissionsData = Json.createArrayBuilder(); + JsonArrayBuilder permissionsData = JsonUtil.createArrayBuilder(); for (DvObjectSolrDoc solrDoc : solrDocs) { - JsonObjectBuilder dataDoc = Json.createObjectBuilder(); + JsonObjectBuilder dataDoc = JsonUtil.createObjectBuilder(); dataDoc.add(SearchFields.ID, solrDoc.getSolrId()); dataDoc.add(SearchFields.NAME_SORT, solrDoc.getNameOrTitle()); - JsonArrayBuilder perms = Json.createArrayBuilder(); + JsonArrayBuilder perms = JsonUtil.createArrayBuilder(); for (String perm : solrDoc.getPermissions()) { perms.add(perm); } @@ -696,7 +697,7 @@ public Response searchPermsDebug( timestamps.add(permsChanged, SearchUtil.getTimestampOrNull(dvObject.getPermissionModificationTime())); timestamps.add(permsIndexed, SearchUtil.getTimestampOrNull(dvObject.getPermissionIndexTime())); Set roleAssignments = rolesSvc.rolesAssignments(dvObject); - JsonArrayBuilder roleAssignmentsData = Json.createArrayBuilder(); + JsonArrayBuilder roleAssignmentsData = JsonUtil.createArrayBuilder(); for (RoleAssignment roleAssignment : roleAssignments) { roleAssignmentsData.add(roleAssignment.getRole() + " has been granted to " + roleAssignment.getAssigneeIdentifier() + " on " + roleAssignment.getDefinitionPoint()); } @@ -751,32 +752,32 @@ public Response filesearch(@Context ContainerRequestContext crc, @Parameter(desc if (fileView == null) { return error(Status.BAD_REQUEST, "Problem searching for files. Null returned from getFileView."); } - JsonArrayBuilder filesFound = Json.createArrayBuilder(); - JsonArrayBuilder cards = Json.createArrayBuilder(); - JsonArrayBuilder fileIds = Json.createArrayBuilder(); + JsonArrayBuilder filesFound = JsonUtil.createArrayBuilder(); + JsonArrayBuilder cards = JsonUtil.createArrayBuilder(); + JsonArrayBuilder fileIds = JsonUtil.createArrayBuilder(); for (SolrSearchResult result : fileView.getSolrSearchResults()) { cards.add(result.getNameSort()); fileIds.add(result.getEntityId()); - JsonObjectBuilder fileFound = Json.createObjectBuilder(); + JsonObjectBuilder fileFound = JsonUtil.createObjectBuilder(); fileFound.add("name", result.getNameSort()); fileFound.add("entityId", result.getEntityId().toString()); fileFound.add("datasetVersionId", result.getDatasetVersionId()); fileFound.add("datasetId", result.getParent().get(SearchFields.ID)); filesFound.add(fileFound); } - JsonArrayBuilder facets = Json.createArrayBuilder(); + JsonArrayBuilder facets = JsonUtil.createArrayBuilder(); for (FacetCategory facetCategory : fileView.getFacetCategoryList()) { facets.add(facetCategory.getFriendlyName()); } - JsonArrayBuilder filterQueries = Json.createArrayBuilder(); + JsonArrayBuilder filterQueries = JsonUtil.createArrayBuilder(); for (String filterQuery : fileView.getFilterQueries()) { filterQueries.add(filterQuery); } - JsonArrayBuilder allDatasetVersionIds = Json.createArrayBuilder(); + JsonArrayBuilder allDatasetVersionIds = JsonUtil.createArrayBuilder(); for (DatasetVersion dsVersion : dataset.getVersions()) { allDatasetVersionIds.add(dsVersion.getId()); } - JsonObjectBuilder data = Json.createObjectBuilder(); + JsonObjectBuilder data = JsonUtil.createObjectBuilder(); data.add("filesFound", filesFound); data.add("cards", cards); data.add("fileIds", fileIds); @@ -800,7 +801,7 @@ public Response getFileMetadataByDatasetId( @Parameter(description = "Sort field.") @QueryParam("sort") String sortField, @Parameter(description = "Sort order.") @QueryParam("order") String sortOrder ) { - JsonArrayBuilder data = Json.createArrayBuilder(); + JsonArrayBuilder data = JsonUtil.createArrayBuilder(); List fileMetadatasFound = new ArrayList<>(); try { fileMetadatasFound = dataFileService.findFileMetadataByDatasetVersionId(datasetIdToLookUp, maxResults, sortField, sortOrder); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Info.java b/src/main/java/edu/harvard/iq/dataverse/api/Info.java index 78edf67ad5a..b3cc69837f8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Info.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Info.java @@ -2,6 +2,7 @@ import java.util.logging.Logger; import edu.harvard.iq.dataverse.customization.CustomizationConstants; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ws.rs.*; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; @@ -88,8 +89,8 @@ public Response getInfo() { String versionStr = systemConfig.getVersion(true); String[] comps = versionStr.split("build",2); String version = comps[0].trim(); - JsonValue build = comps.length > 1 ? Json.createArrayBuilder().add(comps[1].trim()).build().get(0) : JsonValue.NULL; - return ok(Json.createObjectBuilder() + JsonValue build = comps.length > 1 ? JsonUtil.createArrayBuilder().add(comps[1].trim()).build().get(0) : JsonValue.NULL; + return ok(JsonUtil.createObjectBuilder() .add("version", version) .add("build", build)); } @@ -147,12 +148,12 @@ public Response getZipDownloadLimit() { @Operation(summary = "Lists export formats", description = "Returns dataset export formats with display name, media type, harvestability, user-interface visibility, and XML metadata when available.") public Response getExportFormats() { - JsonObjectBuilder responseModel = Json.createObjectBuilder(); + JsonObjectBuilder responseModel = JsonUtil.createObjectBuilder(); ExportService instance = ExportService.getInstance(); for (String[] labels : instance.getExportersLabels()) { try { Exporter exporter = instance.getExporter(labels[1]); - JsonObjectBuilder exporterObject = Json.createObjectBuilder().add("displayName", labels[0]) + JsonObjectBuilder exporterObject = JsonUtil.createObjectBuilder().add("displayName", labels[0]) .add("mediaType", exporter.getMediaType()).add("isHarvestable", exporter.isHarvestable()) .add("isVisibleInUserInterface", exporter.isAvailableToUsers()); if (exporter instanceof XMLExporter xmlExporter) { @@ -197,7 +198,7 @@ public Response getCustomizationFile( private Response getSettingResponseByKey(SettingsServiceBean.Key key) { String setting = settingsService.getValueForKey(key); if (setting != null) { - return ok(Json.createObjectBuilder().add("message", setting)); + return ok(JsonUtil.createObjectBuilder().add("message", setting)); } else { return notFound("Setting " + key + " not found"); } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Licenses.java b/src/main/java/edu/harvard/iq/dataverse/api/Licenses.java index 73031bebc1e..d169f8798c1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Licenses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Licenses.java @@ -2,6 +2,7 @@ import edu.harvard.iq.dataverse.actionlogging.ActionLogRecord; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.ws.rs.DELETE; @@ -48,7 +49,7 @@ public class Licenses extends AbstractApiBean { @Operation(summary = "Lists licenses", description = "Returns all configured licenses as JSON.") public Response getLicenses() { - JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder arrayBuilder = JsonUtil.createArrayBuilder(); for (License license : licenseSvc.listAll()) { arrayBuilder.add(JsonPrinter.json(license)); } @@ -95,7 +96,7 @@ public Response addLicense(@Context ContainerRequestContext crc, actionLogSvc.log(new ActionLogRecord(ActionLogRecord.ActionType.Admin, "licenseAdded") .setInfo("License " + l.getName() + "(" + l.getUri() + ") as id: " + l.getId() + ".") .setUserIdentifier(authenticatedUser.getIdentifier())); - return created("/api/licenses/" + l.getId(), Json.createObjectBuilder().add("message", "License created")); + return created("/api/licenses/" + l.getId(), JsonUtil.createObjectBuilder().add("message", "License created")); } catch (WrappedResponse e) { Throwable cause = e.getCause(); if (cause instanceof IllegalArgumentException) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/MakeDataCountApi.java b/src/main/java/edu/harvard/iq/dataverse/api/MakeDataCountApi.java index 709d403c568..5b03a1fee72 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/MakeDataCountApi.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/MakeDataCountApi.java @@ -199,7 +199,7 @@ public Response updateCitationsForDataset( } }); - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("status", "queued"); output.add("message", "Citation update for dataset " + datasetId + " has been queued for processing"); return ok(output); @@ -263,7 +263,7 @@ private boolean processCitationUpdate(Dataset dataset, GlobalId pid, PidProvider logger.fine("Retrieving Citations from " + url.toString()); boolean nextPage = true; - JsonArrayBuilder dataBuilder = Json.createArrayBuilder(); + JsonArrayBuilder dataBuilder = JsonUtil.createArrayBuilder(); try { do { @@ -359,7 +359,7 @@ public Response getProcessingState( return error(Status.BAD_REQUEST,e.getMessage()); } if (mdcps != null) { - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("yearMonth", mdcps.getYearMonth()); output.add("state", mdcps.getState().name()); output.add("stateChangeTimestamp", mdcps.getStateChangeTime().toString()); @@ -390,7 +390,7 @@ public Response updateProcessingState( return badRequest(e.getMessage()); } - JsonObjectBuilder output = Json.createObjectBuilder(); + JsonObjectBuilder output = JsonUtil.createObjectBuilder(); output.add("yearMonth", mdcps.getYearMonth()); output.add("state", mdcps.getState().name()); output.add("stateChangeTimestamp", mdcps.getStateChangeTime().toString()); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java b/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java index 972411e2296..c9a61c0bde8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java @@ -8,6 +8,7 @@ import java.util.Optional; import java.util.Set; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Stateless; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; @@ -61,7 +62,7 @@ public Response getUnreadNotificationsCountForUser(@Context ContainerRequestCont try { AuthenticatedUser au = getRequestAuthenticatedUserOrDie(crc); long unreadCount = userNotificationSvc.getUnreadNotificationCountByUser(au.getId()); - return ok(Json.createObjectBuilder() + return ok(JsonUtil.createObjectBuilder() .add("unreadCount", unreadCount)); } catch (WrappedResponse wr) { return wr.getResponse(); @@ -127,11 +128,11 @@ public Response deleteNotificationForUser(@Context ContainerRequestContext crc, public Response getMutedEmailsForUser(@Context ContainerRequestContext crc) { try { AuthenticatedUser authenticatedUser = getRequestAuthenticatedUserOrDie(crc); - JsonArrayBuilder mutedEmails = Json.createArrayBuilder(); + JsonArrayBuilder mutedEmails = JsonUtil.createArrayBuilder(); authenticatedUser.getMutedEmails().stream().forEach( x -> mutedEmails.add(jsonObjectBuilder().add("name", x.name()).add("description", x.getDescription())) ); - JsonObjectBuilder result = Json.createObjectBuilder().add("mutedEmails", mutedEmails); + JsonObjectBuilder result = JsonUtil.createObjectBuilder().add("mutedEmails", mutedEmails); return ok(result); } catch (WrappedResponse wr) { return wr.getResponse(); @@ -198,11 +199,11 @@ public Response unmuteEmailsForUser(@Context ContainerRequestContext crc, public Response getMutedNotificationsForUser(@Context ContainerRequestContext crc) { try { AuthenticatedUser authenticatedUser = getRequestAuthenticatedUserOrDie(crc); - JsonArrayBuilder mutedNotifications = Json.createArrayBuilder(); + JsonArrayBuilder mutedNotifications = JsonUtil.createArrayBuilder(); authenticatedUser.getMutedNotifications().stream().forEach( x -> mutedNotifications.add(jsonObjectBuilder().add("name", x.name()).add("description", x.getDescription())) ); - JsonObjectBuilder result = Json.createObjectBuilder().add("mutedNotifications", mutedNotifications); + JsonObjectBuilder result = JsonUtil.createObjectBuilder().add("mutedNotifications", mutedNotifications); return ok(result); } catch (WrappedResponse wr) { return wr.getResponse(); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Pids.java b/src/main/java/edu/harvard/iq/dataverse/api/Pids.java index 4a543ba32d3..db47de7bbed 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Pids.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Pids.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Stateless; import jakarta.json.Json; import jakarta.json.JsonArray; @@ -91,13 +92,13 @@ public Response getUnreserved(@Context ContainerRequestContext crc, return error(Response.Status.FORBIDDEN, BundleUtil.getStringFromBundle("admin.api.auth.mustBeSuperUser")); } - JsonArrayBuilder unreserved = Json.createArrayBuilder(); + JsonArrayBuilder unreserved = JsonUtil.createArrayBuilder(); for (Dataset dataset : datasetSvc.findAll()) { if (dataset.isReleased()) { continue; } if (dataset.getGlobalIdCreateTime() == null) { - unreserved.add(Json.createObjectBuilder() + unreserved.add(JsonUtil.createObjectBuilder() .add("id", dataset.getId()) .add("pid", dataset.getGlobalId().asString()) ); @@ -105,7 +106,7 @@ public Response getUnreserved(@Context ContainerRequestContext crc, } JsonArray finalUnreserved = unreserved.build(); int size = finalUnreserved.size(); - return ok(Json.createObjectBuilder() + return ok(JsonUtil.createObjectBuilder() .add("numUnreserved", size) .add("count", finalUnreserved) ); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Prov.java b/src/main/java/edu/harvard/iq/dataverse/api/Prov.java index e398f8bc921..b9355958ae7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Prov.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Prov.java @@ -87,7 +87,7 @@ public Response addProvJson(@Context ContainerRequestContext crc, } execCommand(new PersistProvJsonCommand(createDataverseRequest(getRequestUser(crc)), dataFile , body, entityName, true)); - JsonObjectBuilder jsonResponse = Json.createObjectBuilder(); + JsonObjectBuilder jsonResponse = JsonUtil.createObjectBuilder(); jsonResponse.add("message", BundleUtil.getStringFromBundle("api.prov.provJsonSaved") + " " + dataFile.getDisplayName()); return ok(jsonResponse); } catch (WrappedResponse ex) { @@ -157,7 +157,7 @@ public Response addProvFreeForm(@Context ContainerRequestContext crc, execCommand(new PersistProvFreeFormCommand(dr, dataFile, provFreeForm)); execCommand(new UpdateDatasetVersionCommand(dataFile.getOwner(), dr)); dataFile = findDataFileOrDie(idSupplied); - JsonObjectBuilder jsonResponse = Json.createObjectBuilder(); + JsonObjectBuilder jsonResponse = JsonUtil.createObjectBuilder(); jsonResponse.add("message", "Free-form provenance data saved for Data File : " + dataFile.getFileMetadata().getProvFreeForm()); return ok(jsonResponse); } catch (WrappedResponse ex) { @@ -184,7 +184,7 @@ public Response getProvFreeForm(@Context ContainerRequestContext crc, if(null == freeFormText) { return error(BAD_REQUEST, BundleUtil.getStringFromBundle("api.prov.error.freeformNoText")); } - JsonObjectBuilder jsonResponse = Json.createObjectBuilder(); + JsonObjectBuilder jsonResponse = JsonUtil.createObjectBuilder(); jsonResponse.add("text", freeFormText); return ok(jsonResponse); } catch (WrappedResponse ex) { @@ -210,7 +210,7 @@ public Response getProvJson(@Context ContainerRequestContext crc, if(null == jsonText) { return error(BAD_REQUEST, BundleUtil.getStringFromBundle("api.prov.error.jsonNoContent")); } - JsonObjectBuilder jsonResponse = Json.createObjectBuilder(); + JsonObjectBuilder jsonResponse = JsonUtil.createObjectBuilder(); jsonResponse.add("json", jsonText.toString()); return ok(jsonResponse); } catch (WrappedResponse ex) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/SavedSearches.java b/src/main/java/edu/harvard/iq/dataverse/api/SavedSearches.java index cb4de9090dc..6a494a82fc2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/SavedSearches.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/SavedSearches.java @@ -11,6 +11,8 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJBException; import jakarta.json.Json; import jakarta.json.JsonArray; @@ -43,7 +45,7 @@ public class SavedSearches extends AbstractApiBean { @Operation(summary = "Lists saved-search endpoints", description = "Returns a simple list of supported saved-search administration endpoint patterns.") public Response meta() { - JsonArrayBuilder endpoints = Json.createArrayBuilder(); + JsonArrayBuilder endpoints = JsonUtil.createArrayBuilder(); endpoints.add("GET"); endpoints.add("GET /list"); endpoints.add("GET /id"); @@ -57,13 +59,13 @@ public Response meta() { @Operation(summary = "Lists saved searches", description = "Returns all saved searches with query, filter queries, id, definition point, and creator id.") public Response list() { - JsonArrayBuilder savedSearchesBuilder = Json.createArrayBuilder(); + JsonArrayBuilder savedSearchesBuilder = JsonUtil.createArrayBuilder(); List savedSearches = savedSearchSvc.findAll(); for (SavedSearch savedSearch : savedSearches) { JsonObjectBuilder thisSavedSearch = toJson(savedSearch); savedSearchesBuilder.add(thisSavedSearch); } - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); response.add("savedSearches", savedSearchesBuilder); return ok(response); } @@ -85,10 +87,10 @@ public Response show( } private JsonObjectBuilder toJson(SavedSearch savedSearch) { - JsonObjectBuilder savedSearchJson = Json.createObjectBuilder(); + JsonObjectBuilder savedSearchJson = JsonUtil.createObjectBuilder(); long savedSearchId = savedSearch.getId(); Dataverse definitionPoint = savedSearch.getDefinitionPoint(); - JsonArrayBuilder fqBuilder = Json.createArrayBuilder(); + JsonArrayBuilder fqBuilder = JsonUtil.createArrayBuilder(); for (SavedSearchFilterQuery fq : savedSearch.getSavedSearchFilterQueries()) { fqBuilder.add(fq.getFilterQuery()); } @@ -175,7 +177,7 @@ public Response add( try { SavedSearch persistedSavedSearch = savedSearchSvc.add(toPersist); - return ok("Added: " + persistedSavedSearch, Json.createObjectBuilder().add("id", persistedSavedSearch.getId())); + return ok("Added: " + persistedSavedSearch, JsonUtil.createObjectBuilder().add("id", persistedSavedSearch.getId())); } catch (EJBException ex) { StringBuilder errors = new StringBuilder(); Throwable throwable = ex.getCause(); @@ -208,7 +210,7 @@ public Response delete( } if (wasDeleted) { - return ok(Json.createObjectBuilder().add("Deleted", doomedId)); + return ok(JsonUtil.createObjectBuilder().add("Deleted", doomedId)); } else { return error(INTERNAL_SERVER_ERROR, "Problem deleting id " + doomedId); } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Search.java b/src/main/java/edu/harvard/iq/dataverse/api/Search.java index a3fcd950994..ce20ee76abe 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Search.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Search.java @@ -23,6 +23,8 @@ import java.io.IOException; import java.util.*; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.inject.Inject; import jakarta.json.Json; @@ -222,18 +224,18 @@ public Response search( return error(Response.Status.INTERNAL_SERVER_ERROR, message); } - JsonArrayBuilder itemsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder itemsArrayBuilder = JsonUtil.createArrayBuilder(); List solrSearchResults = solrQueryResponse.getSolrSearchResults(); for (SolrSearchResult solrSearchResult : solrSearchResults) { itemsArrayBuilder.add(solrSearchResult.json(showRelevance, showEntityIds, showApiUrls, metadataFields)); } - JsonObjectBuilder spelling_alternatives = Json.createObjectBuilder(); + JsonObjectBuilder spelling_alternatives = JsonUtil.createObjectBuilder(); for (Map.Entry> entry : solrQueryResponse.getSpellingSuggestionsByToken().entrySet()) { spelling_alternatives.add(entry.getKey(), entry.getValue().toString()); } - JsonObjectBuilder value = Json.createObjectBuilder() + JsonObjectBuilder value = JsonUtil.createObjectBuilder() .add("q", query) .add("total_count", solrQueryResponse.getNumResultsFound()) .add("start", solrQueryResponse.getResultsStart()) @@ -241,13 +243,13 @@ public Response search( .add("items", itemsArrayBuilder.build()); if (showFacets) { - JsonArrayBuilder facets = Json.createArrayBuilder(); - JsonObjectBuilder facetCategoryBuilder = Json.createObjectBuilder(); + JsonArrayBuilder facets = JsonUtil.createArrayBuilder(); + JsonObjectBuilder facetCategoryBuilder = JsonUtil.createObjectBuilder(); for (FacetCategory facetCategory : solrQueryResponse.getFacetCategoryList()) { - JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = Json.createObjectBuilder(); - JsonArrayBuilder facetLabelBuilderData = Json.createArrayBuilder(); + JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = JsonUtil.createObjectBuilder(); + JsonArrayBuilder facetLabelBuilderData = JsonUtil.createArrayBuilder(); for (FacetLabel facetLabel : facetCategory.getFacetLabel()) { - JsonObjectBuilder countBuilder = Json.createObjectBuilder(); + JsonObjectBuilder countBuilder = JsonUtil.createObjectBuilder(); countBuilder.add(facetLabel.getName(), facetLabel.getCount()); facetLabelBuilderData.add(countBuilder); } @@ -269,7 +271,7 @@ public Response search( } } } - JsonObjectBuilder objectTypeCounts = Json.createObjectBuilder(); + JsonObjectBuilder objectTypeCounts = JsonUtil.createObjectBuilder(); objectTypeCountsMap.forEach((k,v) -> objectTypeCounts.add(k,v)); value.add("total_count_per_object_type", objectTypeCounts); } @@ -301,15 +303,15 @@ public Response getSearchEngines() { Map availableEngines = searchServiceFactory.getAvailableServices(); String defaultServiceName = JvmSettings.DEFAULT_SEARCH_SERVICE.lookupOptional().orElse(SearchServiceFactory.INTERNAL_SOLR_SERVICE_NAME); - JsonArrayBuilder enginesArray = Json.createArrayBuilder(); + JsonArrayBuilder enginesArray = JsonUtil.createArrayBuilder(); for (String engine : availableEngines.keySet()) { - JsonObjectBuilder engineObject = Json.createObjectBuilder() + JsonObjectBuilder engineObject = JsonUtil.createObjectBuilder() .add("name", engine) .add("displayName", availableEngines.get(engine).getDisplayName()); enginesArray.add(engineObject); } - JsonObjectBuilder response = Json.createObjectBuilder() + JsonObjectBuilder response = JsonUtil.createObjectBuilder() .add("services", enginesArray) .add("defaultService", defaultServiceName); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/SendFeedbackAPI.java b/src/main/java/edu/harvard/iq/dataverse/api/SendFeedbackAPI.java index ac1d2ca432a..6ebaff01a2b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/SendFeedbackAPI.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/SendFeedbackAPI.java @@ -90,7 +90,7 @@ public Response submitFeedback(@Context ContainerRequestContext crc, String baseUrl = systemConfig.getDataverseSiteUrl(); String installationBrandName = BrandingUtil.getInstallationBrandName(); String supportTeamName = BrandingUtil.getSupportTeamName(systemAddress); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); Feedback feedback = FeedbackUtil.gatherFeedback(feedbackTarget, dataverseSession, messageSubject, userMessage, systemAddress, userEmail, baseUrl, installationBrandName, supportTeamName, SendFeedbackDialog.ccSupport(feedbackTarget)); jab.add(feedback.toLimitedJsonObjectBuilder()); mailService.sendMail(feedback.getFromEmail(), feedback.getToEmail(), feedback.getCcEmail(), feedback.getSubject(), feedback.getBody()); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/StorageSites.java b/src/main/java/edu/harvard/iq/dataverse/api/StorageSites.java index 3ee77683d90..449a372000a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/StorageSites.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/StorageSites.java @@ -3,6 +3,8 @@ import edu.harvard.iq.dataverse.locality.StorageSite; import edu.harvard.iq.dataverse.locality.StorageSiteUtil; import java.util.List; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObject; @@ -28,7 +30,7 @@ public class StorageSites extends AbstractApiBean { public Response listAll() { List storageSites = storageSiteSvc.findAll(); if (storageSites != null && !storageSites.isEmpty()) { - JsonArrayBuilder sites = Json.createArrayBuilder(); + JsonArrayBuilder sites = JsonUtil.createArrayBuilder(); storageSites.forEach((storageSite) -> { sites.add(storageSite.toJsonObjectBuilder()); }); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/WorkflowsAdmin.java b/src/main/java/edu/harvard/iq/dataverse/api/WorkflowsAdmin.java index 21b82505616..924de3704a0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/WorkflowsAdmin.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/WorkflowsAdmin.java @@ -8,6 +8,8 @@ import static edu.harvard.iq.dataverse.util.json.JsonPrinter.brief; import static edu.harvard.iq.dataverse.util.json.JsonPrinter.json; import static edu.harvard.iq.dataverse.util.json.JsonPrinter.toJsonArray; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.workflow.Workflow; import edu.harvard.iq.dataverse.workflow.WorkflowContext.TriggerType; import edu.harvard.iq.dataverse.workflow.WorkflowServiceBean; @@ -100,7 +102,7 @@ public Response setDefault( @Operation(summary = "Lists default workflows", description = "Returns each workflow trigger type with its configured default workflow or null when no default is set.") public Response listDefaults() { - JsonObjectBuilder bld = Json.createObjectBuilder(); + JsonObjectBuilder bld = JsonUtil.createObjectBuilder(); for ( TriggerType tp : TriggerType.values() ) { bld.add(tp.name(), workflows.getDefaultWorkflow(tp) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/batchjob/FileRecordJobResource.java b/src/main/java/edu/harvard/iq/dataverse/api/batchjob/FileRecordJobResource.java index 8e48f09bcac..1b4141f858a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/batchjob/FileRecordJobResource.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/batchjob/FileRecordJobResource.java @@ -6,6 +6,7 @@ import edu.harvard.iq.dataverse.api.auth.AuthRequired; import edu.harvard.iq.dataverse.batch.jobs.importer.ImportMode; import edu.harvard.iq.dataverse.engine.command.impl.ImportFromFileSystemCommand; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.ws.rs.DefaultValue; @@ -64,7 +65,7 @@ public Response getFilesystemImport(@Context ContainerRequestContext crc, if (!returnString.equals("FileSystemImportJob in progress")) { return error(Response.Status.INTERNAL_SERVER_ERROR, returnString); } - return ok(Json.createObjectBuilder() + return ok(JsonUtil.createObjectBuilder() .add("message", returnString) .add("executionId", jsonObject.getInt("executionId")) ); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/errorhandlers/ConstraintViolationExceptionHandler.java b/src/main/java/edu/harvard/iq/dataverse/api/errorhandlers/ConstraintViolationExceptionHandler.java index bb57059a99a..0531b0117d1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/errorhandlers/ConstraintViolationExceptionHandler.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/errorhandlers/ConstraintViolationExceptionHandler.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.api.errorhandlers; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; @@ -34,7 +35,7 @@ public Response toResponse(ConstraintViolationException exception) { .collect(Collectors.toList()); return Response.status(Response.Status.BAD_REQUEST) - .entity( Json.createObjectBuilder() + .entity( JsonUtil.createObjectBuilder() .add("status", "ERROR") .add("code", Response.Status.BAD_REQUEST.getStatusCode()) .add("message", "JPA validation constraints failed persistence. See list of violations for details.") @@ -51,10 +52,10 @@ private ValidationError toValidationError(ConstraintViolation constraintViolatio } private JsonArray toJsonArray(List list) { - JsonArrayBuilder builder = Json.createArrayBuilder(); + JsonArrayBuilder builder = JsonUtil.createArrayBuilder(); list.stream() .forEach(error -> builder.add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("path", error.getPath()) .add("message", error.getMessage()))); return builder.build(); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/filter/ApiBlockingFilter.java b/src/main/java/edu/harvard/iq/dataverse/api/filter/ApiBlockingFilter.java index 39efbb97aaa..84497b479d4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/filter/ApiBlockingFilter.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/filter/ApiBlockingFilter.java @@ -4,6 +4,7 @@ import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.settings.JvmSettings; import edu.harvard.iq.dataverse.settings.SettingsServiceBean; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.validation.PasswordValidatorServiceBean; import jakarta.annotation.PostConstruct; import jakarta.inject.Inject; @@ -211,7 +212,7 @@ private void updateBlockedPoints(String endpointList) { String currentErrorMessage = POLICY_ERROR_MESSAGES.getOrDefault(policy, "Endpoint blocked. Please contact the dataverse administrator."); - errorJson = Json.createObjectBuilder().add("status", "error").add("message", currentErrorMessage).build(); + errorJson = JsonUtil.createObjectBuilder().add("status", "error").add("message", currentErrorMessage).build(); for (String endpoint : endpointList.split(",")) { String endpointPrefix = canonicalize(endpoint); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java index bbd8260e3fe..3a39400a598 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java @@ -164,7 +164,7 @@ public JsonObjectBuilder handleFile(DataverseRequest dataverseRequest, Dataverse if (validationLog!=null) { validationLog.println(msg); } - return Json.createObjectBuilder().add("message", "Import Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + ex.getMessage()); + return JsonUtil.createObjectBuilder().add("message", "Import Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + ex.getMessage()); } catch (IOException e) { Throwable causedBy =e.getCause(); while (causedBy != null && causedBy.getCause()!=null) { @@ -189,7 +189,7 @@ public JsonObjectBuilder handleFile(DataverseRequest dataverseRequest, Dataverse validationLog.println(msg); e.printStackTrace(); - return Json.createObjectBuilder().add("message", "Unexpected Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + e.getMessage()); + return JsonUtil.createObjectBuilder().add("message", "Unexpected Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + e.getMessage()); } } @@ -560,7 +560,7 @@ public JsonObjectBuilder doImport(DataverseRequest dataverseRequest, Dataverse o logger.log(Level.INFO, "Error excuting Create dataset command: {0}", ex.getMessage()); throw new ImportException("Error excuting dataverse command: " + ex.getMessage(), ex); } - return Json.createObjectBuilder().add("message", status); + return JsonUtil.createObjectBuilder().add("message", status); } private boolean processMigrationValidationError(DatasetFieldValue f, PrintWriter cleanupLog, String fileName) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/ldn/COARNotifyRelationshipAnnouncement.java b/src/main/java/edu/harvard/iq/dataverse/api/ldn/COARNotifyRelationshipAnnouncement.java index cfeb034782b..5682a93dc3d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/ldn/COARNotifyRelationshipAnnouncement.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/ldn/COARNotifyRelationshipAnnouncement.java @@ -332,7 +332,7 @@ private String extractRelationshipLabel(String relationshipId) { * Build the JSON object representing the citing resource. */ private JsonObject buildCitingResourceJson(String subjectId, String relationship, ResourceMetadata metadata) { - JsonObjectBuilder citingResourceBuilder = Json.createObjectBuilder() + JsonObjectBuilder citingResourceBuilder = JsonUtil.createObjectBuilder() .add("@id", subjectId) .add("relationship", relationship); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/util/JsonResponseBuilder.java b/src/main/java/edu/harvard/iq/dataverse/api/util/JsonResponseBuilder.java index 287a99270e9..f16afdbda06 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/util/JsonResponseBuilder.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/util/JsonResponseBuilder.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.api.util; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonValue; @@ -22,7 +23,7 @@ public class JsonResponseBuilder { - private JsonObjectBuilder entityBuilder = Json.createObjectBuilder(); + private JsonObjectBuilder entityBuilder = JsonUtil.createObjectBuilder(); private Response.ResponseBuilder jerseyResponseBuilder; private boolean alreadyLogged = false; @@ -121,7 +122,7 @@ public JsonResponseBuilder request(HttpServletRequest request) { */ public JsonResponseBuilder requestContentType(HttpServletRequest request) { String type = request.getContentType(); - this.entityBuilder.add("requestContentType", ((type==null) ? JsonValue.NULL : Json.createValue(type))); + this.entityBuilder.add("requestContentType", ((type==null) ? JsonValue.NULL : JsonUtil.createValue(type))); return this; } @@ -220,7 +221,7 @@ public JsonResponseBuilder log(Logger logger, Level level, Optional e // This is necessary because we need to build in two places: logging and response creation. // Without cloning the object builder, we'd end up with an empty entity in the response when logging before that. JsonObject entity = this.entityBuilder.build(); - this.entityBuilder = Json.createObjectBuilder(entity); + this.entityBuilder = JsonUtil.createObjectBuilder(entity); StringBuilder metadata = new StringBuilder(); entity.forEach((k,v) -> metadata.append("_").append(k).append("=").append(v.toString()).append(";")); diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/users/AuthenticatedUser.java b/src/main/java/edu/harvard/iq/dataverse/authorization/users/AuthenticatedUser.java index 123155f06e0..b799575818d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/users/AuthenticatedUser.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/users/AuthenticatedUser.java @@ -6,6 +6,7 @@ import edu.harvard.iq.dataverse.FileAccessRequest; import edu.harvard.iq.dataverse.UserNotification.Type; import edu.harvard.iq.dataverse.UserNotification; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.validation.ValidateEmail; import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo; import edu.harvard.iq.dataverse.authorization.AuthenticatedUserLookup; @@ -454,7 +455,7 @@ public void setShibIdentityProvider(String shibIdentityProvider) { } public JsonObjectBuilder toJson() { - //JsonObjectBuilder authenicatedUserJson = Json.createObjectBuilder(); + //JsonObjectBuilder authenicatedUserJson = JsonUtil.createObjectBuilder(); NullSafeJsonBuilder authenicatedUserJson = NullSafeJsonBuilder.jsonObjectBuilder(); authenicatedUserJson.add("id", this.id); @@ -490,7 +491,7 @@ public JsonObjectBuilder toJson() { */ public static JsonObjectBuilder getBundleStrings(){ - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("userId", BundleUtil.getStringFromBundle("dashboard.list_users.tbl_header.userId")) .add("userIdentifier", BundleUtil.getStringFromBundle("dashboard.list_users.tbl_header.userIdentifier")) .add("lastName", BundleUtil.getStringFromBundle("dashboard.list_users.tbl_header.lastName")) diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusAccessibleStore.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusAccessibleStore.java index 032ec1cfe48..55bc9f65312 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusAccessibleStore.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusAccessibleStore.java @@ -1,6 +1,7 @@ package edu.harvard.iq.dataverse.dataaccess; import edu.harvard.iq.dataverse.util.ListSplitUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; @@ -39,7 +40,7 @@ public static String getTransferPath(String driverId) { } public static JsonArray getReferenceEndpointsWithPaths(String driverId) { - JsonArrayBuilder builder = Json.createArrayBuilder(); + JsonArrayBuilder builder = JsonUtil.createArrayBuilder(); for (String endpoint : ListSplitUtil.split(StorageIO.getConfigParamForDriver(driverId, AbstractRemoteOverlayAccessIO.REFERENCE_ENDPOINTS_WITH_BASEPATHS))) { builder.add(endpoint); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusOverlayAccessIO.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusOverlayAccessIO.java index b0728390c55..e0734d841c4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusOverlayAccessIO.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/GlobusOverlayAccessIO.java @@ -276,9 +276,9 @@ public void delete() throws IOException { logger.fine("submission_id for delete is: " + submissionId); absoluteURI = new URI("https://transfer.api.globusonline.org/v0.10/delete"); HttpPost post = new HttpPost(absoluteURI); - JsonObjectBuilder taskJsonBuilder = Json.createObjectBuilder(); + JsonObjectBuilder taskJsonBuilder = JsonUtil.createObjectBuilder(); taskJsonBuilder.add("submission_id", submissionId).add("DATA_TYPE", "delete").add("endpoint", endpoint) - .add("DATA", Json.createArrayBuilder().add(Json.createObjectBuilder().add("DATA_TYPE", "delete_item").add("path", + .add("DATA", JsonUtil.createArrayBuilder().add(JsonUtil.createObjectBuilder().add("DATA_TYPE", "delete_item").add("path", endpointPath + relativeDirectoryPath + "/" + filename))); post.setHeader("Content-Type", "application/json"); post.addHeader("Authorization", "Bearer " + globusAccessToken); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/S3AccessIO.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/S3AccessIO.java index 74c22f4ce3e..d13d615f5bd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/S3AccessIO.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/S3AccessIO.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.dataaccess; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain; @@ -1098,14 +1099,14 @@ private String generateTemporaryS3UploadUrl(String key, Date expiration) throws public JsonObjectBuilder generateTemporaryS3UploadUrls(String globalId, String storageIdentifier, long fileSize) throws IOException { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); key = getMainFileKey(); Instant expiration = Instant.now().plus(Duration.ofMinutes(getUrlExpirationMinutes())); if (fileSize <= minPartSize) { response.add("url", generateTemporaryS3UploadUrl(key, Date.from(expiration))); } else { - JsonObjectBuilder urls = Json.createObjectBuilder(); + JsonObjectBuilder urls = JsonUtil.createObjectBuilder(); CreateMultipartUploadRequest.Builder createMultipartUploadRequestBuilder = CreateMultipartUploadRequest .builder().bucket(bucketName).key(key); diff --git a/src/main/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleUtil.java b/src/main/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleUtil.java index de2aa0aaee8..7bf0233a8f7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleUtil.java @@ -8,6 +8,8 @@ import edu.harvard.iq.dataverse.util.ListSplitUtil; import edu.harvard.iq.dataverse.util.SystemConfig; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -32,7 +34,7 @@ public static boolean rsyncSupportEnabled(String uploadMethodsSettings) { */ @Deprecated(forRemoval = true, since = "2024-07-07") public static JsonObject generateJsonForUploadRequest(AuthenticatedUser user, Dataset dataset) { - JsonObjectBuilder jab = Json.createObjectBuilder(); + JsonObjectBuilder jab = JsonUtil.createObjectBuilder(); // The general rule should be to always pass the user id and dataset identifier to the DCM. jab.add("userId", user.getId()); jab.add("datasetIdentifier", dataset.getIdentifier()); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetType.java b/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetType.java index e07e80f7dd3..2dbc0dca3fe 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetType.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetType.java @@ -3,6 +3,7 @@ import edu.harvard.iq.dataverse.MetadataBlock; import edu.harvard.iq.dataverse.license.License; import edu.harvard.iq.dataverse.util.BundleUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; @@ -144,11 +145,11 @@ public void setLicenses(List licenses) { } public JsonObjectBuilder toJson(Locale locale) { - JsonArrayBuilder linkedMetadataBlocks = Json.createArrayBuilder(); + JsonArrayBuilder linkedMetadataBlocks = JsonUtil.createArrayBuilder(); for (MetadataBlock metadataBlock : this.getMetadataBlocks()) { linkedMetadataBlocks.add(metadataBlock.getName()); } - JsonArrayBuilder availableLicenses = Json.createArrayBuilder(); + JsonArrayBuilder availableLicenses = JsonUtil.createArrayBuilder(); for (License license : this.getLicenses()) { availableLicenses.add(license.getName()); } diff --git a/src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java b/src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java index 572b7fc5b78..03d91fb24d4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java +++ b/src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java @@ -2046,7 +2046,7 @@ public void setDuplicateFileWarning(String duplicateFileWarning) { public Response addFiles(String jsonData, Dataset dataset, User authUser, boolean trustSuppliedFileSizes) { msgt("(addFilesToDataset) jsonData: " + jsonData.toString()); - JsonArrayBuilder jarr = Json.createArrayBuilder(); + JsonArrayBuilder jarr = JsonUtil.createArrayBuilder(); JsonArray filesJson = null; @@ -2104,7 +2104,7 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea runAddFileByDataset(dataset, newFilename, newFileContentType, newStorageIdentifier, null, optionalFileParams, true); if (hasError()) { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("errorMessage", getHttpErrorCode().toString() +":"+ getErrorMessagesAsString("\n")) .add("fileDetails", fileJson); @@ -2114,13 +2114,13 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea String duplicateWarning = getDuplicateFileWarning(); if (duplicateWarning != null && !duplicateWarning.isEmpty()) { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("warningMessage", getDuplicateFileWarning()) .add("fileDetails", successresult.getJsonArray("files").getJsonObject(0)); jarr.add(fileoutput); } else { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("successMessage", "Added successfully to the dataset") .add("fileDetails", successresult.getJsonArray("files").getJsonObject(0)); @@ -2129,7 +2129,7 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea successNumberofFiles = successNumberofFiles + 1; } } else { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorMessage", "You must provide a storageidentifier, filename, and mimetype.") .add("fileDetails", fileJson); @@ -2138,7 +2138,7 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea } catch (DataFileTagException ex) { logger.log(Level.SEVERE, null, ex); - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorCode", Response.Status.BAD_REQUEST.getStatusCode()) .add("message", ex.getMessage()) .add("fileDetails", fileJson); @@ -2147,7 +2147,7 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea } catch (NoFilesException ex) { logger.log(Level.SEVERE, null, ex); - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorCode", Response.Status.BAD_REQUEST.getStatusCode()) .add("message", BundleUtil.getStringFromBundle("NoFileException! Serious Error! See administrator!")) .add("fileDetails", fileJson); @@ -2188,14 +2188,14 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea return error(BAD_REQUEST, e.getMessage()); } - JsonObjectBuilder result = Json.createObjectBuilder() + JsonObjectBuilder result = JsonUtil.createObjectBuilder() .add(ApiConstants.API_ADD_FILES_COUNT_PROCESSED, totalNumberofFiles) .add(ApiConstants.API_ADD_FILES_COUNT_SUCCESSFUL, successNumberofFiles); - return Response.ok().entity(Json.createObjectBuilder() + return Response.ok().entity(JsonUtil.createObjectBuilder() .add("status", ApiConstants.STATUS_OK) - .add("data", Json.createObjectBuilder().add("Files", jarr).add("Result", result)).build() ).build(); + .add("data", JsonUtil.createObjectBuilder().add("Files", jarr).add("Result", result)).build() ).build(); } public Response addFiles(String jsonData, Dataset dataset, User authUser) { @@ -2216,7 +2216,7 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { msgt("(replaceFilesInDataset) jsonData: " + jsonData.toString()); this.dataset = ds; - JsonArrayBuilder jarr = Json.createArrayBuilder(); + JsonArrayBuilder jarr = JsonUtil.createArrayBuilder(); JsonArray filesJson = null; @@ -2276,7 +2276,7 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { null, dataset, optionalFileParams, true); } if (hasError()) { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("errorMessage", getHttpErrorCode().toString() +":"+ getErrorMessagesAsString("\n")) .add("fileDetails", fileJson); @@ -2286,13 +2286,13 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { String duplicateWarning = getDuplicateFileWarning(); if (duplicateWarning != null && !duplicateWarning.isEmpty()) { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("warningMessage", getDuplicateFileWarning()) .add("fileDetails", successresult.getJsonArray("files").getJsonObject(0)); jarr.add(fileoutput); } else { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("storageIdentifier", newStorageIdentifier) .add("successMessage", "Replaced successfully in the dataset") .add("fileDetails", successresult.getJsonArray("files").getJsonObject(0)); @@ -2301,7 +2301,7 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { successNumberofFiles = successNumberofFiles + 1; } } else { - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorMessage", "You must provide a fileToReplaceId, storageidentifier, filename, and mimetype.") .add("fileDetails", fileJson); @@ -2310,7 +2310,7 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { } catch (DataFileTagException ex) { logger.log(Level.SEVERE, null, ex); - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorCode", Response.Status.BAD_REQUEST.getStatusCode()) .add("message", ex.getMessage()) .add("fileDetails", fileJson); @@ -2319,7 +2319,7 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { } catch (NoFilesException ex) { logger.log(Level.SEVERE, null, ex); - JsonObjectBuilder fileoutput = Json.createObjectBuilder() + JsonObjectBuilder fileoutput = JsonUtil.createObjectBuilder() .add("errorCode", Response.Status.BAD_REQUEST.getStatusCode()) .add("message", BundleUtil.getStringFromBundle("NoFileException! Serious Error! See administrator!")) .add("fileDetails", fileJson); @@ -2361,13 +2361,13 @@ public Response replaceFiles(String jsonData, Dataset ds, User authUser) { return error(BAD_REQUEST, e.getMessage()); } - JsonObjectBuilder result = Json.createObjectBuilder() + JsonObjectBuilder result = JsonUtil.createObjectBuilder() .add("Total number of files", totalNumberofFiles) .add("Number of files successfully replaced", successNumberofFiles); - return Response.ok().entity(Json.createObjectBuilder() + return Response.ok().entity(JsonUtil.createObjectBuilder() .add("status", ApiConstants.STATUS_OK) - .add("data", Json.createObjectBuilder().add("Files", jarr).add("Result", result)).build() ).build(); + .add("data", JsonUtil.createObjectBuilder().add("Files", jarr).add("Result", result)).build() ).build(); } protected static Response error(Response.Status sts, String msg ) { diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AbstractSubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AbstractSubmitToArchiveCommand.java index e6f87e73940..766bfc1b865 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AbstractSubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AbstractSubmitToArchiveCommand.java @@ -20,6 +20,7 @@ import edu.harvard.iq.dataverse.util.ListSplitUtil; import edu.harvard.iq.dataverse.util.bagit.BagGenerator; import edu.harvard.iq.dataverse.util.bagit.OREMap; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.workflow.step.Failure; import edu.harvard.iq.dataverse.util.json.JsonLDTerm; import edu.harvard.iq.dataverse.workflow.step.WorkflowStepResult; @@ -83,7 +84,7 @@ public DatasetVersion execute(CommandContext ctxt) throws CommandException { token = ctxt.authentication().generateApiTokenForUser(user); } if (!preconditionsMet(version, token, requestedSettings)) { - JsonObjectBuilder statusObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder statusObjectBuilder = JsonUtil.createObjectBuilder(); statusObjectBuilder.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObjectBuilder.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Successful archiving of earlier versions is required."); diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DRSSubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DRSSubmitToArchiveCommand.java index 1a49a68b097..e55667ee211 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DRSSubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DRSSubmitToArchiveCommand.java @@ -42,7 +42,6 @@ import jakarta.ejb.TransactionAttribute; import jakarta.ejb.TransactionAttributeType; -import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonValue; @@ -64,6 +63,8 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTCreationException; +import org.omnifaces.util.Json; + import static edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key.DRSArchiverConfig; @RequiredPermissions(Permission.PublishDataset) @@ -142,7 +143,7 @@ public DatasetVersion execute(CommandContext ctxt) throws CommandException { token = ctxt.authentication().generateApiTokenForUser(user); } if (!preconditionsMet(version, token, requestedSettings)) { - JsonObjectBuilder statusObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder statusObjectBuilder = JsonUtil.createObjectBuilder(); statusObjectBuilder.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObjectBuilder.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Successful archiving of earlier versions is required."); @@ -192,7 +193,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat WorkflowStepResult s3Result = super.performArchiveSubmission(dv, dataciteXml, ore, terms, token, requestedSettings); - JsonObjectBuilder statusObject = Json.createObjectBuilder(); + JsonObjectBuilder statusObject = JsonUtil.createObjectBuilder(); statusObject.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObject.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Bag not transferred"); @@ -204,7 +205,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat // Now contact DRS boolean trustCert = drsConfigObject.getBoolean(TRUST_CERT, false); int jwtTimeout = drsConfigObject.getInt(TIMEOUT, 5); - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(S3_BUCKET_NAME, adminMetadata.getString(S3_BUCKET_NAME)); @@ -212,7 +213,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat job.add(S3_PATH, spaceName); // We start with the default admin_metadata - JsonObjectBuilder amob = Json.createObjectBuilder(adminMetadata); + JsonObjectBuilder amob = JsonUtil.createObjectBuilder(adminMetadata); // Remove collections and then override any params for the given alias amob.remove(COLLECTIONS); // Allow override of bucket name @@ -295,7 +296,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat String status = responseObject.getString(DatasetVersion.ARCHIVAL_STATUS); if (status.equals(DatasetVersion.ARCHIVAL_STATUS_PENDING) || status.equals(DatasetVersion.ARCHIVAL_STATUS_FAILURE) || status.equals(DatasetVersion.ARCHIVAL_STATUS_SUCCESS)) { - statusObject.addAll(Json.createObjectBuilder(responseObject)); + statusObject.addAll(JsonUtil.createObjectBuilder(responseObject)); switch (status) { case DatasetVersion.ARCHIVAL_STATUS_PENDING: logger.info("DRS Ingest successfully started for: " + packageId + " : " diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DuraCloudSubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DuraCloudSubmitToArchiveCommand.java index 57a4a68a44a..e87a228d4e0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DuraCloudSubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DuraCloudSubmitToArchiveCommand.java @@ -12,6 +12,7 @@ import edu.harvard.iq.dataverse.util.bagit.BagGenerator; import edu.harvard.iq.dataverse.util.json.JsonLDTerm; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.workflow.step.Failure; import edu.harvard.iq.dataverse.workflow.step.WorkflowStepResult; @@ -97,7 +98,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat ContentStore store; // Set a failure status that will be updated if we succeed - JsonObjectBuilder statusObject = Json.createObjectBuilder(); + JsonObjectBuilder statusObject = JsonUtil.createObjectBuilder(); statusObject.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObject.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Bag not transferred"); diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetDatasetReviewsCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetDatasetReviewsCommand.java index 582b890777e..4e4a05db368 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetDatasetReviewsCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetDatasetReviewsCommand.java @@ -20,6 +20,7 @@ import edu.harvard.iq.dataverse.search.SolrQueryResponse; import edu.harvard.iq.dataverse.search.SolrSearchResult; import edu.harvard.iq.dataverse.search.SortBy; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; @@ -39,7 +40,7 @@ public GetDatasetReviewsCommand(DataverseRequest request, Dataset target) { @Override public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { - JsonObjectBuilder reviews = Json.createObjectBuilder(); + JsonObjectBuilder reviews = JsonUtil.createObjectBuilder(); List dataverses = new ArrayList<>(); // Putting PID as URL in quotes to avoid hits we don't want String query = "itemReviewedUrl:\"" + dataset.getGlobalId().asURL() + "\""; @@ -56,7 +57,7 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { SolrQueryResponse solrQueryResponse = ctxt.search().getDefaultSearchService().search(getRequest(), dataverses, query, filterQueries, sortField, sortOrder, paginationStart, dataRelatedToMe, numResultsPerPage); - JsonArrayBuilder itemsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder itemsArrayBuilder = JsonUtil.createArrayBuilder(); List solrSearchResults = solrQueryResponse.getSolrSearchResults(); for (SolrSearchResult solrSearchResult : solrSearchResults) { // Construct a JSON object intentionally rather than simply returning the @@ -84,19 +85,19 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { String datePublished = searchResultObject.getString("published_at", ""); String description = searchResultObject.getString("description"); JsonObject rubricMetadataBlocksFromSolr = searchResultObject.getJsonObject("metadataBlocks"); - JsonArrayBuilder rubricMetadataBlocks = Json.createArrayBuilder(); + JsonArrayBuilder rubricMetadataBlocks = JsonUtil.createArrayBuilder(); for (String key : rubricMetadataBlocksFromSolr.keySet()) { String displayName = rubricMetadataBlocksFromSolr.getJsonObject(key).getString("displayName"); JsonArray fieldsFromJson = rubricMetadataBlocksFromSolr.getJsonObject(key).getJsonArray("fields"); - JsonObjectBuilder block = Json.createObjectBuilder(); + JsonObjectBuilder block = JsonUtil.createObjectBuilder(); block.add("name", key); block.add("displayName", displayName); - JsonArrayBuilder fieldAccumulator = Json.createArrayBuilder(); + JsonArrayBuilder fieldAccumulator = JsonUtil.createArrayBuilder(); for (JsonValue fieldJsonValue : fieldsFromJson) { JsonObject fieldObject = fieldJsonValue.asJsonObject(); String typeName = fieldObject.getString("typeName"); String value = fieldObject.getString("value"); - JsonObjectBuilder fieldToAdd = Json.createObjectBuilder(); + JsonObjectBuilder fieldToAdd = JsonUtil.createObjectBuilder(); fieldToAdd.add("typeName", typeName); fieldToAdd.add("value", value); fieldAccumulator.add(fieldToAdd); @@ -104,7 +105,7 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { block.add("fields", fieldAccumulator); rubricMetadataBlocks.add(block); } - JsonObjectBuilder review = Json.createObjectBuilder() + JsonObjectBuilder review = JsonUtil.createObjectBuilder() .add("title", title) .add("authors", authors) .add("persistentId", pid) diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetUserTracesCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetUserTracesCommand.java index df0b5d785e4..5e890ebee90 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetUserTracesCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetUserTracesCommand.java @@ -16,6 +16,7 @@ import edu.harvard.iq.dataverse.engine.command.exception.CommandException; import edu.harvard.iq.dataverse.engine.command.exception.PermissionException; import edu.harvard.iq.dataverse.search.savedsearch.SavedSearch; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; import java.util.List; @@ -52,14 +53,14 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { throw new CommandException("Cannot get traces. User not found.", this); } Long userId = user.getId(); - JsonObjectBuilder traces = Json.createObjectBuilder(); + JsonObjectBuilder traces = JsonUtil.createObjectBuilder(); if (element == null || element.equals("roleAssignments")) { // List roleAssignments = // ctxt.permissions().getDvObjectsUserHasRoleOn(user); List roleAssignments = ctxt.roleAssignees().getAssignmentsFor(user.getIdentifier()); if (roleAssignments != null && !roleAssignments.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (RoleAssignment roleAssignment : roleAssignments) { jab.add(NullSafeJsonBuilder.jsonObjectBuilder() .add("id", roleAssignment.getId()) @@ -77,10 +78,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("dataverseCreator")) { List dataversesCreated = ctxt.dataverses().findByCreatorId(userId); if (dataversesCreated != null && !dataversesCreated.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dataversesCreated) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataverse.getId()) .add("alias", dataverse.getAlias())); } @@ -92,10 +93,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("dataversePublisher")) { List dataversesPublished = ctxt.dataverses().findByReleaseUserId(userId); if (dataversesPublished != null && !dataversesPublished.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dataversesPublished) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataverse.getId()) .add("alias", dataverse.getAlias())); } @@ -107,10 +108,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("datasetCreator")) { List datasetsCreated = ctxt.datasets().findByCreatorId(userId); if (datasetsCreated != null && !datasetsCreated.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Dataset dataset : datasetsCreated) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataset.getId()) .add("pid", dataset.getGlobalId().asString())); } @@ -122,10 +123,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("datasetPublisher")) { List datasetsPublished = ctxt.datasets().findByReleaseUserId(userId); if (datasetsPublished != null && !datasetsPublished.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Dataset dataset : datasetsPublished) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataset.getId()) .add("pid", dataset.getGlobalId().asString())); } @@ -137,10 +138,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("dataFileCreator")) { List dataFilesCreated = ctxt.files().findByCreatorId(userId); if (dataFilesCreated != null && !dataFilesCreated.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DataFile dataFile : dataFilesCreated) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataFile.getId()) .add("filename", dataFile.getCurrentName()) .add("datasetPid", dataFile.getOwner().getGlobalId().asString())); @@ -155,10 +156,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { // for files. List dataFilesPublished = ctxt.files().findByReleaseUserId(userId); if (dataFilesPublished != null && !dataFilesPublished.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DataFile dataFile : dataFilesPublished) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", dataFile.getId()) .add("filename", dataFile.getCurrentName()) .add("datasetPid", dataFile.getOwner().getGlobalId().asString())); @@ -172,10 +173,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { // These are the users who have published a version (or created a draft). List datasetVersionUsers = ctxt.datasetVersion().getDatasetVersionUsersByAuthenticatedUser(user); if (datasetVersionUsers != null && !datasetVersionUsers.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DatasetVersionUser datasetVersionUser : datasetVersionUsers) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", datasetVersionUser.getId()) .add("dataset", datasetVersionUser.getDatasetVersion().getDataset().getGlobalId().asString()) .add("version", datasetVersionUser.getDatasetVersion().getSemanticVersion())); @@ -188,10 +189,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("explicitGroups")) { Set explicitGroups = ctxt.explicitGroups().findDirectlyContainingGroups(user); if (explicitGroups != null && !explicitGroups.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (ExplicitGroup explicitGroup : explicitGroups) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", explicitGroup.getId()) .add("name", explicitGroup.getDisplayName())); } @@ -203,14 +204,14 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("guestbookEntries")) { List guestbookResponses = ctxt.responses().findByAuthenticatedUserId(user); if (guestbookResponses != null && !guestbookResponses.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); // The feeling is that this is too much detail for the call for all elements so // we only show a count in that case. if (element != null) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (GuestbookResponse guestbookResponse : guestbookResponses) { try { - JsonObjectBuilder gbe = Json.createObjectBuilder() + JsonObjectBuilder gbe = JsonUtil.createObjectBuilder() .add("id", guestbookResponse.getId()) .add("eventType", guestbookResponse.getEventType()) .add("filename", guestbookResponse.getDataFile().getCurrentName()) @@ -238,10 +239,10 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { if (element == null || element.equals("savedSearches")) { List savedSearchs = ctxt.savedSearches().findByAuthenticatedUser(user); if (savedSearchs != null && !savedSearchs.isEmpty()) { - JsonObjectBuilder job = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (SavedSearch savedSearch : savedSearchs) { - jab.add(Json.createObjectBuilder() + jab.add(JsonUtil.createObjectBuilder() .add("id", savedSearch.getId())); } job.add("count", savedSearchs.size()); @@ -249,8 +250,8 @@ public JsonObjectBuilder execute(CommandContext ctxt) throws CommandException { traces.add("savedSearches", job); } } - JsonObjectBuilder result = Json.createObjectBuilder(); - result.add("user", Json.createObjectBuilder() + JsonObjectBuilder result = JsonUtil.createObjectBuilder(); + result.add("user", JsonUtil.createObjectBuilder() .add("identifier", user.getIdentifier()) .add("name", user.getName())); result.add("traces", traces); diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GoogleCloudSubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GoogleCloudSubmitToArchiveCommand.java index 43769dbdb49..b47828f309f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GoogleCloudSubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GoogleCloudSubmitToArchiveCommand.java @@ -18,6 +18,7 @@ import edu.harvard.iq.dataverse.util.bagit.BagGenerator; import edu.harvard.iq.dataverse.util.bagit.BagGenerator.FileEntry; import edu.harvard.iq.dataverse.util.json.JsonLDTerm; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.workflow.step.Failure; import edu.harvard.iq.dataverse.workflow.step.WorkflowStepResult; import org.apache.commons.codec.binary.Hex; @@ -70,7 +71,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat if (bucketName != null && projectName != null) { Storage storage; // Set a failure status that will be updated if we succeed - JsonObjectBuilder statusObject = Json.createObjectBuilder(); + JsonObjectBuilder statusObject = JsonUtil.createObjectBuilder(); statusObject.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObject.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Bag not transferred"); diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/LocalSubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/LocalSubmitToArchiveCommand.java index a594ac02cfb..7176b6e3a49 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/LocalSubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/LocalSubmitToArchiveCommand.java @@ -11,6 +11,7 @@ import edu.harvard.iq.dataverse.util.bagit.BagGenerator; import edu.harvard.iq.dataverse.util.bagit.BagGenerator.FileEntry; import edu.harvard.iq.dataverse.util.json.JsonLDTerm; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.workflow.step.Failure; import edu.harvard.iq.dataverse.workflow.step.WorkflowStepResult; @@ -53,7 +54,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat String zipName = null; // Set a failure status that will be updated if we succeed - JsonObjectBuilder statusObject = Json.createObjectBuilder(); + JsonObjectBuilder statusObject = JsonUtil.createObjectBuilder(); statusObject.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObject.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Bag not transferred"); diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/S3SubmitToArchiveCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/S3SubmitToArchiveCommand.java index 17be53a458f..487f4af6a23 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/S3SubmitToArchiveCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/S3SubmitToArchiveCommand.java @@ -108,7 +108,7 @@ public WorkflowStepResult performArchiveSubmission(DatasetVersion dv, String dat createClient(configObject); // Set a failure status that will be updated if we succeed - JsonObjectBuilder statusObject = Json.createObjectBuilder(); + JsonObjectBuilder statusObject = JsonUtil.createObjectBuilder(); statusObject.add(DatasetVersion.ARCHIVAL_STATUS, DatasetVersion.ARCHIVAL_STATUS_FAILURE); statusObject.add(DatasetVersion.ARCHIVAL_STATUS_MESSAGE, "Bag not transferred"); ExecutorService executor = Executors.newCachedThreadPool(); diff --git a/src/main/java/edu/harvard/iq/dataverse/export/InternalExportDataProvider.java b/src/main/java/edu/harvard/iq/dataverse/export/InternalExportDataProvider.java index f0d77eb8b52..6c834cbd53b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/InternalExportDataProvider.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/InternalExportDataProvider.java @@ -73,7 +73,7 @@ public String getDataCiteXml() { @Override public JsonArray getDatasetFileDetails() { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (FileMetadata fileMetadata : dv.getFileMetadatas()) { DataFile dataFile = fileMetadata.getDataFile(); jab.add(JsonPrinter.json(dataFile, fileMetadata, true)); diff --git a/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java index 33189054b8c..d2ed834f9ef 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.export.croissant; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.gdcc.spi.export.ExportDataProvider; import io.gdcc.spi.export.ExportException; import jakarta.json.Json; @@ -28,7 +29,7 @@ public static void exportDataset( throws ExportException { try { // Start building the output format. - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); String contextString = """ { @@ -154,12 +155,12 @@ public static void exportDataset( } } - JsonArrayBuilder distribution = Json.createArrayBuilder(); - JsonArrayBuilder recordSet = Json.createArrayBuilder(); + JsonArrayBuilder distribution = JsonUtil.createArrayBuilder(); + JsonArrayBuilder recordSet = JsonUtil.createArrayBuilder(); JsonArray datasetFileDetails = dataProvider.getDatasetFileDetails(); for (JsonValue jsonValue : datasetFileDetails) { - JsonObjectBuilder recordSetContent = Json.createObjectBuilder(); + JsonObjectBuilder recordSetContent = JsonUtil.createObjectBuilder(); recordSetContent.add("@type", "cr:RecordSet"); JsonObject fileDetails = jsonValue.asJsonObject(); /** @@ -238,7 +239,7 @@ public static void exportDataset( } distribution.add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@type", "cr:FileObject") .add("@id", fileId) .add("name", filename) @@ -266,15 +267,15 @@ public static void exportDataset( int caseQuantity = dataTableObject.getInt("caseQuantity"); recordSetContent.add( "cr:annotation", - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@type", "cr:Field") .add("name", fileId.toString() + "/count") .add("value", caseQuantity) .add("dataType", "http://www.wikidata.org/entity/Q4049983")); JsonArray dataVariables = dataTableObject.getJsonArray("dataVariables"); - JsonArrayBuilder fieldSetArray = Json.createArrayBuilder(); + JsonArrayBuilder fieldSetArray = JsonUtil.createArrayBuilder(); for (JsonValue dataVariableValue : dataVariables) { - JsonObjectBuilder fieldSetObject = Json.createObjectBuilder(); + JsonObjectBuilder fieldSetObject = JsonUtil.createObjectBuilder(); fieldSetObject.add("@type", "cr:RecordSet"); JsonObject dataVariableObject = dataVariableValue.asJsonObject(); // TODO: should this be an integer? @@ -305,12 +306,12 @@ public static void exportDataset( default: break; } - JsonArrayBuilder annotationsBuilder = Json.createArrayBuilder(); + JsonArrayBuilder annotationsBuilder = JsonUtil.createArrayBuilder(); if (variableSummaryStatistics != null) { // Same order as upstream: MEAN, MEDN, MODE, MIN, MAX, STDEV, VALD, INVD annotationsBuilder .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() // We're aware that an @id of // "data/stata13-auto.dta/price/mean" // looks nice but won't validate if there's @@ -333,7 +334,7 @@ public static void exportDataset( "mean")) .add("dataType", "ddi-stats:7975ed0")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -347,7 +348,7 @@ public static void exportDataset( .add("dataType", "ddi-stats:66851a3") .add("equivalentProperty", "sc:median")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -360,7 +361,7 @@ public static void exportDataset( "mode")) .add("dataType", "ddi-stats:650be61")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -374,7 +375,7 @@ public static void exportDataset( .add("dataType", "ddi-stats:a1d0ec6") .add("equivalentProperty", "sc:minValue")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -388,7 +389,7 @@ public static void exportDataset( .add("dataType", "ddi-stats:8321e79") .add("equivalentProperty", "sc:maxValue")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -401,7 +402,7 @@ public static void exportDataset( "stdev")) .add("dataType", "ddi-stats:690ab50")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -414,7 +415,7 @@ public static void exportDataset( "vald")) .add("dataType", "ddi-stats:c646dd8")) .add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "@id", fileId.toString() @@ -428,22 +429,22 @@ public static void exportDataset( .add("dataType", "ddi-stats:6459c62")); } JsonObjectBuilder fieldBuilder = - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@type", "cr:Field") .add("name", variableName) .add("description", variableDescription) .add("dataType", dataType) .add( "source", - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@id", variableId.toString()) .add( "fileObject", - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@id", fileId)) .add( "extract", - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add( "column", variableName))); @@ -598,25 +599,25 @@ private static String getNumericType(String variableIntervalType) { // ] // }] public static JsonObjectBuilder getReviews(JsonObjectBuilder reviewsIn) { - JsonObjectBuilder reviewsOut = Json.createObjectBuilder(); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonObjectBuilder reviewsOut = JsonUtil.createObjectBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); JsonArray reviews = reviewsIn.build().getJsonArray("reviews"); for (JsonValue jsonValue : reviews) { JsonObject jsonObject = (JsonObject) jsonValue; String title = jsonObject.getString("title"); JsonArray authors = jsonObject.getJsonArray("authors"); - JsonArrayBuilder creators = Json.createArrayBuilder(); + JsonArrayBuilder creators = JsonUtil.createArrayBuilder(); for (JsonValue author : authors) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); // TODO add @type for "Person" or "Organization" job.add("name", author); creators.add(job); } String datePublished = jsonObject.getString("datePublished"); - JsonObjectBuilder positiveNotesObj = Json.createObjectBuilder(); + JsonObjectBuilder positiveNotesObj = JsonUtil.createObjectBuilder(); positiveNotesObj.add("@type", "ItemList"); - JsonArrayBuilder positiveNotesArray = Json.createArrayBuilder(); + JsonArrayBuilder positiveNotesArray = JsonUtil.createArrayBuilder(); JsonArray rubricMetadataBlocks = jsonObject.getJsonArray("rubricMetadataBlocks"); for (JsonValue rmb : rubricMetadataBlocks) { JsonObject rubricMetadataBlock = rmb.asJsonObject(); @@ -627,10 +628,10 @@ public static JsonObjectBuilder getReviews(JsonObjectBuilder reviewsIn) { String value = field.getString("value"); // Flatten all positive notes into a single array, regardless of which block // they came from. - positiveNotesArray.add(Json.createObjectBuilder() + positiveNotesArray.add(JsonUtil.createObjectBuilder() .add("@type", "StructuredValue") .add("name", typeName) - .add("value", Json.createObjectBuilder() + .add("value", JsonUtil.createObjectBuilder() .add("@type", StringUtils.isNumeric(value) ? "QuantitativeValue" : "QualitativeValue") // We are aware that the value might be "Low", which is a bit strange for a positive note! We are constrained by what's allowed by https://schema.org/CriticReview .add("value", value))); @@ -638,12 +639,12 @@ public static JsonObjectBuilder getReviews(JsonObjectBuilder reviewsIn) { } positiveNotesObj.add("itemListElement", positiveNotesArray); jab.add( - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("@context", "https://schema.org/") .add("@type", "CriticReview") .add( "itemReviewed", - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() // TODO don't hard code this to "Dataset" .add("@type", "Dataset") .add("name", title)) diff --git a/src/main/java/edu/harvard/iq/dataverse/externaltools/ExternalTool.java b/src/main/java/edu/harvard/iq/dataverse/externaltools/ExternalTool.java index 5ec551ba7c1..c20178a23e0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/externaltools/ExternalTool.java +++ b/src/main/java/edu/harvard/iq/dataverse/externaltools/ExternalTool.java @@ -296,14 +296,14 @@ public void setContentType(String contentType) { } public JsonObjectBuilder toJson() { - JsonObjectBuilder jab = Json.createObjectBuilder(); + JsonObjectBuilder jab = JsonUtil.createObjectBuilder(); jab.add("id", getId()); jab.add(DISPLAY_NAME, getDisplayName()); if (getToolName() != null) { jab.add(TOOL_NAME, getToolName()); } jab.add(DESCRIPTION, getDescription()); - JsonArrayBuilder types = Json.createArrayBuilder(); + JsonArrayBuilder types = JsonUtil.createArrayBuilder(); for (ExternalToolType externalToolType : externalToolTypes) { types.add(externalToolType.getType().text); } diff --git a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java index 789e0883a7c..f204dd1f156 100644 --- a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java @@ -225,7 +225,7 @@ public JsonObject requestAccessiblePaths(String principal, Dataset dataset, int permissions.setPath(endpoint.getBasePath() + "/"); permissions.setPermissions("rw"); - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); //Try to create the directory (202 status) if it does not exist (502-already exists) int mkDirStatus = makeDirs(endpoint, dataset); if (!(mkDirStatus== 202 || mkDirStatus == 502)) { @@ -259,7 +259,7 @@ public JsonObject requestAccessiblePaths(String principal, Dataset dataset, int response.add("status", requestPermStatus); if (requestPermStatus == 201) { String driverId = dataset.getEffectiveStorageDriverId(); - JsonObjectBuilder paths = Json.createObjectBuilder(); + JsonObjectBuilder paths = JsonUtil.createObjectBuilder(); for (int i = 0; i < numberOfPaths; i++) { String storageIdentifier = DataAccess.getNewStorageIdentifier(driverId); int lastIndex = Math.max(storageIdentifier.lastIndexOf("/"), storageIdentifier.lastIndexOf(":")); @@ -431,7 +431,7 @@ public JsonObject requestReferenceFileIdentifiers(Dataset dataset, JsonArray ref String driverId = dataset.getEffectiveStorageDriverId(); JsonArray endpoints = GlobusAccessibleStore.getReferenceEndpointsWithPaths(driverId); - JsonObjectBuilder fileMap = Json.createObjectBuilder(); + JsonObjectBuilder fileMap = JsonUtil.createObjectBuilder(); referencedFiles.forEach(value -> { if (value.getValueType() != ValueType.STRING) { throw new JsonParsingException("ReferencedFiles must be strings", null); @@ -1125,7 +1125,7 @@ private void processUploadedFiles(JsonArray filesJsonArray, Dataset dataset, Aut JsonArray newfilesJsonArray = newfilesJsonObject.getJsonArray("files"); logger.fine("Size: " + newfilesJsonArray.size()); logger.fine("Val: " + JsonUtil.prettyPrint(newfilesJsonArray.getJsonObject(0))); - JsonArrayBuilder addFilesJsonData = Json.createArrayBuilder(); + JsonArrayBuilder addFilesJsonData = JsonUtil.createArrayBuilder(); for (JsonObject fileJsonObject : filesJsonArray.getValuesAs(JsonObject.class)) { @@ -1158,7 +1158,7 @@ private void processUploadedFiles(JsonArray filesJsonArray, Dataset dataset, Aut Long uploadedFileSize = fileSizeMap.get(fileId); myLogger.info("Found size for file " + fileId + ": " + uploadedFileSize + " bytes"); patch = Json.createPatchBuilder() - .add("/fileSize", Json.createValue(uploadedFileSize)).build(); + .add("/fileSize", JsonUtil.createValue(uploadedFileSize)).build(); fileJsonObject = patch.apply(fileJsonObject); } else { logger.fine("No file size entry found for file "+fileId); @@ -1478,7 +1478,7 @@ private JsonObject calculateMissingMetadataFields(List inputList, Logger JsonArrayBuilder filesObject = (JsonArrayBuilder) completableFuture.get(); - JsonObject output = Json.createObjectBuilder().add("files", filesObject).build(); + JsonObject output = JsonUtil.createObjectBuilder().add("files", filesObject).build(); return output; @@ -1736,7 +1736,7 @@ public void processCompletedTask(GlobusTaskInProgress globusTask, return; } - JsonArrayBuilder filesJsonArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder filesJsonArrayBuilder = JsonUtil.createArrayBuilder(); for (ExternalFileUploadInProgress pendingFile : fileUploadsInProgress) { String jsonInfoString = pendingFile.getFileInfo(); diff --git a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusUtil.java b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusUtil.java index c9bb7fb6c4e..35932d4fe99 100644 --- a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusUtil.java @@ -6,6 +6,7 @@ import edu.harvard.iq.dataverse.Dataset; import edu.harvard.iq.dataverse.dataaccess.DataAccess; import edu.harvard.iq.dataverse.dataaccess.GlobusAccessibleStore; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -13,7 +14,7 @@ public class GlobusUtil { public static JsonObject getFilesMap(List dataFiles, Dataset d) { - JsonObjectBuilder filesBuilder = Json.createObjectBuilder(); + JsonObjectBuilder filesBuilder = JsonUtil.createObjectBuilder(); for (DataFile df : dataFiles) { String storageId = df.getStorageIdentifier(); String[] parts = DataAccess diff --git a/src/main/java/edu/harvard/iq/dataverse/locality/StorageSite.java b/src/main/java/edu/harvard/iq/dataverse/locality/StorageSite.java index c074cb5918f..a2bb820bf60 100644 --- a/src/main/java/edu/harvard/iq/dataverse/locality/StorageSite.java +++ b/src/main/java/edu/harvard/iq/dataverse/locality/StorageSite.java @@ -2,6 +2,8 @@ import java.io.Serializable; import java.util.Objects; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObjectBuilder; import jakarta.persistence.Column; @@ -125,7 +127,7 @@ public boolean equals(Object object) { } public JsonObjectBuilder toJsonObjectBuilder() { - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add(ID, id) .add(HOSTNAME, hostname) .add(NAME, name) diff --git a/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsServiceBean.java index 9090ef05918..f40aa9352b4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsServiceBean.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.json.Json; @@ -369,14 +371,14 @@ public JsonArray filesByType(Dataverse d) { + " WHERE dv.versionstate = 'RELEASED' " + ((d == null) ? "" : "AND ob.owner_id in (" + getCommaSeparatedIdStringForSubtree(d, "Dataset") + ") ") + "GROUP BY df.contenttype;"); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); try { List results = query.getResultList(); for (Object[] result : results) { if((BigDecimal)result[2]==BigDecimal.ZERO) { logger.warning("File(s) of type " + (String) result[0] + " are reported as having 0 total size"); } - JsonObject stats = Json.createObjectBuilder().add(MetricsUtil.CONTENTTYPE, (String) result[0]).add(MetricsUtil.COUNT, (long) result[1]).add(MetricsUtil.SIZE, (BigDecimal) result[2]).build(); + JsonObject stats = JsonUtil.createObjectBuilder().add(MetricsUtil.CONTENTTYPE, (String) result[0]).add(MetricsUtil.COUNT, (long) result[1]).add(MetricsUtil.SIZE, (BigDecimal) result[2]).build(); jab.add(stats); } @@ -509,11 +511,11 @@ public JsonArray fileDownloads(String yyyymm, Dataverse d, boolean uniqueCounts) + "group by gb.datafile_id, ob.id, ob.protocol, ob.authority, ob.identifier order by count desc;"); logger.log(Level.FINE, "Metric query: {0}", query); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); try { List results = query.getResultList(); for (Object[] result : results) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(MetricsUtil.ID, (int) result[0]); if(result[1]!=null) { job.add(MetricsUtil.PID, (String) result[1]); @@ -552,11 +554,11 @@ public JsonArray uniqueDatasetDownloads(String yyyymm, Dataverse d) { + " and date_trunc('month', responsetime) <= to_date('" + yyyymm + "','YYYY-MM')\n" + "and eventtype!='" + GuestbookResponse.ACCESS_REQUEST +"'\n" + "group by gb.dataset_id, ob.protocol, ob.authority, ob.identifier order by count(distinct email) desc;"); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); try { List results = query.getResultList(); for (Object[] result : results) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(MetricsUtil.PID, (String) result[0]); job.add(MetricsUtil.COUNT, (long) result[1]); jab.add(job); @@ -643,7 +645,7 @@ public JsonObject getMDCDatasetMetrics(MetricType metricType, String yyyymm, Str // if(sum==null) { // sum = BigDecimal.ZERO; // } - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(metricType.toString(), sum.longValue()); return job.build(); } @@ -858,7 +860,7 @@ public JsonObject getDataverseTree(Dataverse d, String yyyymm, DatasetVersion.Ve int depth = (int) result[1]; long ownerId = (long) result[4]; long id = (int) result[0]; - JsonObjectBuilder node = Json.createObjectBuilder() + JsonObjectBuilder node = JsonUtil.createObjectBuilder() .add("id", id) .add("ownerId", ownerId) .add("alias", (String) result[2]) @@ -869,7 +871,7 @@ public JsonObject getDataverseTree(Dataverse d, String yyyymm, DatasetVersion.Ve if (children != null) { subtrees.put(currentOwnerId, children.build()); } - children = Json.createArrayBuilder(); + children = JsonUtil.createArrayBuilder(); currentOwnerId = ownerId; } if (subtrees.containsKey(id)) { diff --git a/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsUtil.java b/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsUtil.java index 7d968e7e5c1..9e334a44dc6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/metrics/MetricsUtil.java @@ -43,15 +43,15 @@ public class MetricsUtil { private MetricsUtil() {} public static JsonObjectBuilder countToJson(long count) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(COUNT, count); return job; } public static JsonArrayBuilder dataversesByCategoryToJson(List listOfObjectArrays) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Object[] arrayOfObjects : listOfObjectArrays) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); String categoryNameUppercase = (String) arrayOfObjects[0]; Dataverse dataverse = new Dataverse(); dataverse.setDataverseType(Dataverse.DataverseType.valueOf(categoryNameUppercase)); @@ -65,9 +65,9 @@ public static JsonArrayBuilder dataversesByCategoryToJson(List listOfO } public static JsonArrayBuilder dataversesBySubjectToJson(List listOfObjectArrays) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Object[] objectArray : listOfObjectArrays) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); String subject = (String) objectArray[0]; long count = (long) objectArray[1]; job.add(SUBJECT, subject); @@ -78,9 +78,9 @@ public static JsonArrayBuilder dataversesBySubjectToJson(List listOfOb } public static JsonArrayBuilder datasetsBySubjectToJson(List listOfObjectArrays) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (Object[] objectArray : listOfObjectArrays) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); String subject = (String) objectArray[0]; long count = (long) objectArray[1]; job.add(SUBJECT, subject); @@ -95,7 +95,7 @@ public static JsonArray timeSeriesToJson(List results) { } public static JsonArray timeSeriesToJson(List results, boolean isBigDecimal) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); long total = 0; String curDate = (String) results.get(0)[0]; // Get a list of all the monthly dates from the start until now @@ -103,7 +103,7 @@ public static JsonArray timeSeriesToJson(List results, boolean isBigDe int i = 0; // Create an entry for each date for (String date : dates) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); // If there's a result for this date, add it's count to the total // and find the date of the next entry @@ -136,7 +136,7 @@ public static JsonArray timeSeriesToJson(List results, boolean isBigDe } public static JsonArray timeSeriesByTypeToJson(List results) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); Map totals = new HashMap<>(); Map sizes = new HashMap<>(); String curDate = (String) results.get(0)[0]; @@ -159,7 +159,7 @@ public static JsonArray timeSeriesByTypeToJson(List results) { } // Then add the aggregate count and size for all types for(String type: totals.keySet()) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(MetricsUtil.DATE, date); job.add(CONTENTTYPE, type); job.add(COUNT, totals.get(type)); @@ -171,7 +171,7 @@ public static JsonArray timeSeriesByTypeToJson(List results) { } public static JsonArray timeSeriesByPIDToJson(List results) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); Map totals = new HashMap<>(); String curDate = (String) results.get(0)[0]; // Get a list of all the monthly dates from the start until now @@ -191,7 +191,7 @@ public static JsonArray timeSeriesByPIDToJson(List results) { } // Then add the aggregate count and size for all types for(String type: totals.keySet()) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(MetricsUtil.DATE, date); job.add(PID, type); job.add(COUNT, totals.get(type)); @@ -202,7 +202,7 @@ public static JsonArray timeSeriesByPIDToJson(List results) { } public static JsonArray timeSeriesByIDAndPIDToJson(List results) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); Map totals = new HashMap<>(); Map pids = new HashMap<>(); String curDate = (String) results.get(0)[0]; @@ -225,7 +225,7 @@ public static JsonArray timeSeriesByIDAndPIDToJson(List results) { } // Then add the aggregate count and size for all types for(Integer id: totals.keySet()) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add(MetricsUtil.DATE, date); job.add(ID, id); if(pids.get(id)!=null) { diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java index 0bdfdb61ed7..1abfad90cb0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java @@ -24,6 +24,7 @@ import edu.harvard.iq.dataverse.settings.FeatureFlags; import edu.harvard.iq.dataverse.util.json.JsonPrinter; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.inject.Inject; import jakarta.json.Json; @@ -115,7 +116,7 @@ private String getJSONErrorString(String jsonMsg, String optionalLoggerMsg){ if (optionalLoggerMsg != null){ logger.severe(optionalLoggerMsg); } - JsonObjectBuilder jsonData = Json.createObjectBuilder(); + JsonObjectBuilder jsonData = JsonUtil.createObjectBuilder(); jsonData.add(DataRetrieverAPI.JSON_SUCCESS_FIELD_NAME, false); jsonData.add(DataRetrieverAPI.JSON_ERROR_MSG_FIELD_NAME, jsonMsg); @@ -311,12 +312,12 @@ private JsonObjectBuilder myDataAsJson(String message) { } private JsonObjectBuilder myDataAsJson(String message, Pager pager, RoleTagRetriever roleTagRetriever, List metadataFields) { - JsonObjectBuilder jsonData = Json.createObjectBuilder().add(DataRetrieverAPI.JSON_SUCCESS_FIELD_NAME, true); + JsonObjectBuilder jsonData = JsonUtil.createObjectBuilder().add(DataRetrieverAPI.JSON_SUCCESS_FIELD_NAME, true); if (message != null) { jsonData.add(DataRetrieverAPI.JSON_MSG_FIELD_NAME, message); } jsonData.add(DataRetrieverAPI.JSON_DATA_FIELD_NAME, - Json.createObjectBuilder() + JsonUtil.createObjectBuilder() .add("pagination", pager.asJsonObjectBuilderUsingCardTerms()) .add(SearchConstants.SEARCH_API_ITEMS, this.formatSolrDocs(solrQueryResponse, roleTagRetriever, metadataFields)) .add(SearchConstants.SEARCH_API_TOTAL_COUNT, solrQueryResponse.getNumResultsFound()) @@ -379,7 +380,7 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR throw new NullPointerException("DataRetrieverAPI.formatSolrDocs: roleTagRetriever should not be null"); } - JsonArrayBuilder jsonSolrDocsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder jsonSolrDocsArrayBuilder = JsonUtil.createArrayBuilder(); JsonObjectBuilder myDataCardInfo; JsonArrayBuilder rolesForCard; diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java index 2acb93d37f5..3dd52a5a8f2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java @@ -18,6 +18,8 @@ import java.util.HashMap; import java.util.List; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -317,7 +319,7 @@ public String getDvObjectTypesAsJSONString(){ */ public JsonArrayBuilder getListofSelectedPublicationStatuses(){ - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); for (String pubStatus : this.publicationStatuses){ jsonArray.add(pubStatus); @@ -337,7 +339,7 @@ public JsonArrayBuilder getListofSelectedValidities(){ return null; } - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); for (Boolean valid : this.datasetValidities){ jsonArray.add(valid); @@ -348,20 +350,20 @@ public JsonArrayBuilder getListofSelectedValidities(){ public JsonObjectBuilder getDvObjectTypesAsJSON(){ - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); - jsonArray.add(Json.createObjectBuilder().add("value", DvObject.DType.Dataverse.getDType()) + jsonArray.add(JsonUtil.createObjectBuilder().add("value", DvObject.DType.Dataverse.getDType()) .add("label", SearchConstants.UI_DATAVERSES) .add("selected", this.areDataversesIncluded())) - .add(Json.createObjectBuilder().add("value", DvObject.DType.Dataset.getDType()) + .add(JsonUtil.createObjectBuilder().add("value", DvObject.DType.Dataset.getDType()) .add("label", SearchConstants.UI_DATASETS) .add("selected", this.areDatasetsIncluded())) - .add(Json.createObjectBuilder().add("value", DvObject.DType.DataFile.getDType()) + .add(JsonUtil.createObjectBuilder().add("value", DvObject.DType.DataFile.getDType()) .add("label", SearchConstants.UI_FILES) .add("selected", this.areFilesIncluded()) ); - JsonObjectBuilder jsonData = Json.createObjectBuilder(); + JsonObjectBuilder jsonData = JsonUtil.createObjectBuilder(); jsonData.add(SearchFields.TYPE, jsonArray); return jsonData; diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFinder.java b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFinder.java index 36cb38419a3..d38e520de0b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFinder.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFinder.java @@ -20,6 +20,8 @@ import java.util.Map; import java.util.Set; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -400,7 +402,7 @@ public String formatUserIdentifierAsAssigneeIdentifier(String userIdentifier){ */ public JsonObjectBuilder getSelectedFilterParamsAsJSON() { - JsonObjectBuilder jsonData = Json.createObjectBuilder(); + JsonObjectBuilder jsonData = JsonUtil.createObjectBuilder(); jsonData.add("publication_statuses", this.filterParams.getListofSelectedPublicationStatuses()) .add("role_names", this.getListofSelectedRoles()); @@ -421,7 +423,7 @@ public JsonObjectBuilder getSelectedFilterParamsAsJSON() { */ public JsonArrayBuilder getListofSelectedRoles(){ - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); for (Long roleId : this.filterParams.getRoleIds()){ String roleName = this.rolePermissionHelper.getRoleName(roleId); diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/Pager.java b/src/main/java/edu/harvard/iq/dataverse/mydata/Pager.java index 096974b9d72..6ed03c8a731 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/Pager.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/Pager.java @@ -15,6 +15,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -371,7 +373,7 @@ public JsonObjectBuilder asJsonObjectBuilder(){ private JsonObjectBuilder asJsonObjectBuilderCore(boolean useCardTerms){ - JsonObjectBuilder jsonPageInfo = Json.createObjectBuilder(); + JsonObjectBuilder jsonPageInfo = JsonUtil.createObjectBuilder(); jsonPageInfo.add("isNecessary", this.isPagerNecessary()) @@ -405,7 +407,7 @@ private JsonObjectBuilder asJsonObjectBuilderCore(boolean useCardTerms){ // -------------------- // pageNumberList // -------------------- - JsonArrayBuilder jsonPageNumberArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder jsonPageNumberArrayBuilder = JsonUtil.createArrayBuilder(); if (this.pageNumberList != null) { for (int pg : this.pageNumberList) { jsonPageNumberArrayBuilder.add(pg); diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/RoleTagRetriever.java b/src/main/java/edu/harvard/iq/dataverse/mydata/RoleTagRetriever.java index e328a50e962..c4f1e0e68ab 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/RoleTagRetriever.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/RoleTagRetriever.java @@ -23,6 +23,8 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; @@ -465,7 +467,7 @@ public JsonArrayBuilder getRolesForCardAsJSON(Long dvObjectId){ return null; } - JsonArrayBuilder jsonArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonArray = JsonUtil.createArrayBuilder(); for (String roleName : this.finalIdToRolesHash.get(dvObjectId)){ jsonArray.add(roleName); diff --git a/src/main/java/edu/harvard/iq/dataverse/openapi/OpenApi.java b/src/main/java/edu/harvard/iq/dataverse/openapi/OpenApi.java index 6bd54916e0d..e09bafc270a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/openapi/OpenApi.java +++ b/src/main/java/edu/harvard/iq/dataverse/openapi/OpenApi.java @@ -6,6 +6,7 @@ import java.util.*; import java.util.logging.*; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.servlet.ServletException; @@ -66,7 +67,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se List args = Arrays.asList(format); String bundleResponse = BundleUtil.getStringFromBundle("openapi.exception.invalid.format", args); - JsonObject errorResponse = Json.createObjectBuilder() + JsonObject errorResponse = JsonUtil.createObjectBuilder() .add("status", "ERROR") .add("code", HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE) .add("message", bundleResponse) diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/AbstractPidProvider.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/AbstractPidProvider.java index 0affd32eb99..d32fbe0c947 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/AbstractPidProvider.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/AbstractPidProvider.java @@ -9,6 +9,7 @@ import edu.harvard.iq.dataverse.GlobalId; import edu.harvard.iq.dataverse.util.ListSplitUtil; import edu.harvard.iq.dataverse.util.SystemConfig; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -568,7 +569,7 @@ public boolean canCreatePidsLike(GlobalId pid) { @Override public JsonObject getProviderSpecification() { - JsonObjectBuilder providerSpecification = Json.createObjectBuilder(); + JsonObjectBuilder providerSpecification = JsonUtil.createObjectBuilder(); providerSpecification.add("id", id); providerSpecification.add("label", label); providerSpecification.add("protocol", protocol); diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java index 003b4e3f61c..37fd380c7b1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java @@ -17,6 +17,7 @@ import java.util.Set; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -96,13 +97,13 @@ public static JsonObjectBuilder queryDoi(GlobalId globalId, String baseUrl, Stri try { out = Json.createReader(connection.getInputStream()).readObject(); } catch (IOException ex) { - return Json.createObjectBuilder().add("response", ex.getLocalizedMessage()); + return JsonUtil.createObjectBuilder().add("response", ex.getLocalizedMessage()); } JsonObject data = out.getJsonObject("data"); String id = data.getString("id"); JsonObject attributes = data.getJsonObject("attributes"); String state = attributes.getString("state"); - JsonObjectBuilder ret = Json.createObjectBuilder().add("id", id).add("state", state); + JsonObjectBuilder ret = JsonUtil.createObjectBuilder().add("id", id).add("state", state); return ret; } catch (IllegalArgumentException ex) { throw new BadRequestException(ex.getLocalizedMessage()); @@ -281,7 +282,7 @@ public static Set getManagedProviderIds() { } public static JsonObject getProviders() { - JsonObjectBuilder builder = Json.createObjectBuilder(); + JsonObjectBuilder builder = JsonUtil.createObjectBuilder(); for (PidProvider pidProvider : providerMap.values()) { builder.add(pidProvider.getId(), pidProvider.getProviderSpecification()); } diff --git a/src/main/java/edu/harvard/iq/dataverse/repositorystorageabstractionlayer/RepositoryStorageAbstractionLayerUtil.java b/src/main/java/edu/harvard/iq/dataverse/repositorystorageabstractionlayer/RepositoryStorageAbstractionLayerUtil.java index 0d547402676..64a45ffa3e7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/repositorystorageabstractionlayer/RepositoryStorageAbstractionLayerUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/repositorystorageabstractionlayer/RepositoryStorageAbstractionLayerUtil.java @@ -8,6 +8,8 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; @@ -88,7 +90,7 @@ public static String getDirectoryContainingTheData(Dataset dataset, boolean leaf */ @Deprecated(forRemoval = true, since = "2024-07-07") static JsonArray getStorageSitesAsJson(List storageSites) { - JsonArrayBuilder arraybuilder = Json.createArrayBuilder(); + JsonArrayBuilder arraybuilder = JsonUtil.createArrayBuilder(); if (storageSites == null || storageSites.isEmpty()) { return arraybuilder.build(); } @@ -98,7 +100,7 @@ static JsonArray getStorageSitesAsJson(List storageSites) { if (storageSite.isPrimaryStorage()) { countOfPrimarySites++; } - arraybuilder.add(Json.createObjectBuilder() + arraybuilder.add(JsonUtil.createObjectBuilder() .add("fqdn", storageSite.getHostname()) .add("name", storageSite.getName())); } diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexBatchServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexBatchServiceBean.java index 6e47d1938c1..39de4eddf26 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexBatchServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexBatchServiceBean.java @@ -11,6 +11,8 @@ import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.AsyncResult; import jakarta.ejb.Asynchronous; import jakarta.ejb.EJB; @@ -48,7 +50,7 @@ public class IndexBatchServiceBean { @Asynchronous public Future indexStatus() { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); logger.info("Beginning indexStatus()"); try { JsonObject contentInDatabaseButStaleInOrMissingFromSolr = getContentInDatabaseButStaleInOrMissingFromSolr().build(); @@ -77,7 +79,7 @@ public Future indexStatus() { @Asynchronous public Future clearOrphans() { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); List solrIds = new ArrayList<>(); logger.info("Beginning clearOrphans() to check for orphan Solr documents."); try { @@ -104,7 +106,7 @@ public Future clearOrphans() { @Asynchronous public Future indexAllOrSubset(long numPartitions, long partitionId, boolean skipIndexed, boolean previewOnly) { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); indexAllOrSubset(numPartitions, partitionId, skipIndexed); String status = "indexAllOrSubset has begun"; response.add("responseFromIndexAllOrSubset", status); @@ -112,13 +114,13 @@ public Future indexAllOrSubset(long numPartitions, long parti } public JsonObjectBuilder indexAllOrSubsetPreview(long numPartitions, long partitionId, boolean skipIndexed) { - JsonObjectBuilder response = Json.createObjectBuilder(); - JsonObjectBuilder previewOfWorkload = Json.createObjectBuilder(); - JsonObjectBuilder dvContainerIds = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); + JsonObjectBuilder previewOfWorkload = JsonUtil.createObjectBuilder(); + JsonObjectBuilder dvContainerIds = JsonUtil.createObjectBuilder(); List dataverseIds = dataverseService.findDataverseIdsForIndexing(skipIndexed); - JsonArrayBuilder dataverseIdsJson = Json.createArrayBuilder(); + JsonArrayBuilder dataverseIdsJson = JsonUtil.createArrayBuilder(); //List dataverses = dataverseService.findAllOrSubset(numPartitions, partitionId, skipIndexed); for (Long id : dataverseIds) { dataverseIdsJson.add(id); @@ -126,7 +128,7 @@ public JsonObjectBuilder indexAllOrSubsetPreview(long numPartitions, long partit List datasetIds = datasetService.findAllOrSubset(numPartitions, partitionId, skipIndexed); - JsonArrayBuilder datasetIdsJson = Json.createArrayBuilder(); + JsonArrayBuilder datasetIdsJson = JsonUtil.createArrayBuilder(); for (Long id : datasetIds) { datasetIdsJson.add(id); } @@ -271,15 +273,15 @@ private JsonObjectBuilder getContentInDatabaseButStaleInOrMissingFromSolr() { List stateOrMissingDataverses = indexService.findStaleOrMissingDataverses(); logger.info("checking for stale or missing datasets"); List staleOrMissingDatasets = indexService.findStaleOrMissingDatasets(); - JsonArrayBuilder jsonStaleOrMissingDataverses = Json.createArrayBuilder(); + JsonArrayBuilder jsonStaleOrMissingDataverses = JsonUtil.createArrayBuilder(); for (Long id : stateOrMissingDataverses) { jsonStaleOrMissingDataverses.add(id); } - JsonArrayBuilder datasetsInDatabaseButNotSolr = Json.createArrayBuilder(); + JsonArrayBuilder datasetsInDatabaseButNotSolr = JsonUtil.createArrayBuilder(); for (Long id : staleOrMissingDatasets) { datasetsInDatabaseButNotSolr.add(id); } - JsonObjectBuilder contentInDatabaseButStaleInOrMissingFromSolr = Json.createObjectBuilder() + JsonObjectBuilder contentInDatabaseButStaleInOrMissingFromSolr = JsonUtil.createObjectBuilder() /** * @todo What about files? Currently files are always indexed * along with their parent dataset @@ -297,20 +299,20 @@ private JsonObjectBuilder getContentInSolrButNotDatabase() throws SearchExceptio List datasetsInSolrOnly = indexService.findDatasetsInSolrOnly(); logger.info("checking for files in Solr only"); List filesInSolrOnly = indexService.findFilesInSolrOnly(); - JsonArrayBuilder dataversesInSolrButNotDatabase = Json.createArrayBuilder(); + JsonArrayBuilder dataversesInSolrButNotDatabase = JsonUtil.createArrayBuilder(); logger.info("completed check for content in Solr but not database"); for (String dataverseId : dataversesInSolrOnly) { dataversesInSolrButNotDatabase.add(dataverseId); } - JsonArrayBuilder datasetsInSolrButNotDatabase = Json.createArrayBuilder(); + JsonArrayBuilder datasetsInSolrButNotDatabase = JsonUtil.createArrayBuilder(); for (String datasetId : datasetsInSolrOnly) { datasetsInSolrButNotDatabase.add(datasetId); } - JsonArrayBuilder filesInSolrButNotDatabase = Json.createArrayBuilder(); + JsonArrayBuilder filesInSolrButNotDatabase = JsonUtil.createArrayBuilder(); for (String fileId : filesInSolrOnly) { filesInSolrButNotDatabase.add(fileId); } - JsonObjectBuilder contentInSolrButNotDatabase = Json.createObjectBuilder() + JsonObjectBuilder contentInSolrButNotDatabase = JsonUtil.createObjectBuilder() /** * @todo What about files? Currently files are always indexed * along with their parent dataset @@ -327,22 +329,22 @@ private JsonObjectBuilder getPermissionsInDatabaseButStaleInOrMissingFromSolr() logger.info("checking for permissions in database but stale or missing from Solr"); staleOrMissingPermissions = solrIndexService.findPermissionsInDatabaseButStaleInOrMissingFromSolr(); logger.info("completed checking for permissions in database but stale or missing from Solr"); - JsonArrayBuilder stalePermissionList = Json.createArrayBuilder(); + JsonArrayBuilder stalePermissionList = JsonUtil.createArrayBuilder(); for (Long dvObjectId : staleOrMissingPermissions) { stalePermissionList.add(dvObjectId); } - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("dvobjects", stalePermissionList.build()); } private JsonObjectBuilder getPermissionsInSolrButNotDatabase() throws SearchException { List staleOrMissingPermissions = indexService.findPermissionsInSolrOnly(); - JsonArrayBuilder stalePermissionList = Json.createArrayBuilder(); + JsonArrayBuilder stalePermissionList = JsonUtil.createArrayBuilder(); for (String id : staleOrMissingPermissions) { stalePermissionList.add(id); } - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("permissions", stalePermissionList.build()); } diff --git a/src/main/java/edu/harvard/iq/dataverse/search/PostExternalSearchServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/PostExternalSearchServiceBean.java index f7e9fe5fb0f..b03941695d5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/PostExternalSearchServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/PostExternalSearchServiceBean.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.search; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Stateless; import jakarta.inject.Named; import jakarta.json.Json; @@ -35,7 +36,7 @@ private JsonObject prepareQuery(String query, int paginationStart, int numResult // Create JSON object with search parameters JsonObject searchParams = return NullSafeJsonBuilder.jsonObjectBuilder().add("query", query) - .add("filterQueries", Json.createArrayBuilder(filterQueries)).add("sortField", sortField) + .add("filterQueries", JsonUtil.createArrayBuilder(filterQueries)).add("sortField", sortField) .add("sortOrder", sortOrder).add("paginationStart", paginationStart) .add("onlyDataRelatedToMe", onlyDataRelatedToMe).add("numResultsPerPage", numResultsPerPage) .add("geoPoint", geoPoint).add("geoRadius", geoRadius).build(); diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrIndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrIndexServiceBean.java index d787be684d5..b38060db1ef 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrIndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrIndexServiceBean.java @@ -28,6 +28,7 @@ import java.util.logging.Logger; import java.util.stream.Stream; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.Asynchronous; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; @@ -568,7 +569,7 @@ public IndexResponse deleteMultipleSolrIds(List solrIdsToDelete) { } public JsonObjectBuilder deleteAllFromSolrAndResetIndexTimes() throws SolrServerException, IOException { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); logger.fine("attempting to delete all Solr documents before a complete re-index"); solrClientService.getSolrClient().deleteByQuery("*:*"); int numRowsAffected = dvObjectService.clearAllIndexTimes(); diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrQueryResponse.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrQueryResponse.java index 8d1924feb0c..a06787537cb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrQueryResponse.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrQueryResponse.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonObjectBuilder; import org.apache.solr.client.solrj.SolrQuery; @@ -122,7 +124,7 @@ public JsonObjectBuilder getMapCountsAsJSON(Map countMap){ if (countMap == null){ return null; } - JsonObjectBuilder jsonData = Json.createObjectBuilder(); + JsonObjectBuilder jsonData = JsonUtil.createObjectBuilder(); for (Map.Entry entry : countMap.entrySet()) { jsonData.add(entry.getKey(), entry.getValue()); diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java index 11e2628411a..0f38698cbad 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java @@ -11,6 +11,7 @@ import java.util.logging.Logger; import edu.harvard.iq.dataverse.*; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObject; @@ -249,7 +250,7 @@ public List getPublicationStatuses() { public JsonArrayBuilder getPublicationStatusesAsJSON() { - JsonArrayBuilder statuses = Json.createArrayBuilder(); + JsonArrayBuilder statuses = JsonUtil.createArrayBuilder(); for (String status : this.getPublicationStatuses()) { statuses.add(status); } @@ -397,13 +398,13 @@ public String toString() { } public JsonArrayBuilder getRelevance() { - JsonArrayBuilder matchedFieldsArray = Json.createArrayBuilder(); - JsonObjectBuilder matchedFieldObject = Json.createObjectBuilder(); + JsonArrayBuilder matchedFieldsArray = JsonUtil.createArrayBuilder(); + JsonObjectBuilder matchedFieldObject = JsonUtil.createObjectBuilder(); for (Map.Entry entry : highlightsMap.entrySet()) { SolrField solrField = entry.getKey(); Highlight snippets = entry.getValue(); - JsonArrayBuilder snippetArrayBuilder = Json.createArrayBuilder(); - JsonObjectBuilder matchedFieldDetails = Json.createObjectBuilder(); + JsonArrayBuilder snippetArrayBuilder = JsonUtil.createArrayBuilder(); + JsonObjectBuilder matchedFieldDetails = JsonUtil.createObjectBuilder(); for (String highlight : snippets.getSnippets()) { snippetArrayBuilder.add(highlight); } @@ -613,14 +614,14 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool DatasetVersion dv = ds.getVersionFromId(this.datasetVersionId); if (!dv.getKeywords().isEmpty()) { - JsonArrayBuilder keyWords = Json.createArrayBuilder(); + JsonArrayBuilder keyWords = JsonUtil.createArrayBuilder(); for (String keyword : dv.getKeywords()) { keyWords.add(keyword); } nullSafeJsonBuilder.add("keywords", keyWords); } - JsonArrayBuilder subjects = Json.createArrayBuilder(); + JsonArrayBuilder subjects = JsonUtil.createArrayBuilder(); for (String subject : dv.getDatasetSubjects()) { subjects.add(subject); } @@ -637,7 +638,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool nullSafeJsonBuilder.add("updatedAt", ds.getModificationTime()); if (!dv.getDatasetContacts().isEmpty()) { - JsonArrayBuilder contacts = Json.createArrayBuilder(); + JsonArrayBuilder contacts = JsonUtil.createArrayBuilder(); NullSafeJsonBuilder nullSafeJsonBuilderInner = jsonObjectBuilder(); for (String contact[] : dv.getDatasetContacts(false)) { nullSafeJsonBuilderInner.add("name", contact[0]); @@ -647,7 +648,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool nullSafeJsonBuilder.add("contacts", contacts); } if (!dv.getRelatedPublications().isEmpty()) { - JsonArrayBuilder relPub = Json.createArrayBuilder(); + JsonArrayBuilder relPub = JsonUtil.createArrayBuilder(); NullSafeJsonBuilder inner = jsonObjectBuilder(); for (DatasetRelPublication dsRelPub : dv.getRelatedPublications()) { inner.add("title", dsRelPub.getTitle()); @@ -659,14 +660,14 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool } if (!dv.getDatasetProducers().isEmpty()) { - JsonArrayBuilder producers = Json.createArrayBuilder(); + JsonArrayBuilder producers = JsonUtil.createArrayBuilder(); for (String[] producer : dv.getDatasetProducers()) { producers.add(producer[0]); } nullSafeJsonBuilder.add("producers", producers); } if (!dv.getRelatedMaterial().isEmpty()) { - JsonArrayBuilder relatedMaterials = Json.createArrayBuilder(); + JsonArrayBuilder relatedMaterials = JsonUtil.createArrayBuilder(); for (String relatedMaterial : dv.getRelatedMaterial()) { relatedMaterials.add(relatedMaterial); } @@ -674,7 +675,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool } if (!dv.getGeographicCoverage().isEmpty()) { - JsonArrayBuilder geoCov = Json.createArrayBuilder(); + JsonArrayBuilder geoCov = JsonUtil.createArrayBuilder(); NullSafeJsonBuilder inner = jsonObjectBuilder(); for (String ind[] : dv.getGeographicCoverage()) { inner.add("country", ind[0]); @@ -686,7 +687,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool nullSafeJsonBuilder.add("geographicCoverage", geoCov); } if (!dv.getDataSource().isEmpty()) { - JsonArrayBuilder dataSources = Json.createArrayBuilder(); + JsonArrayBuilder dataSources = JsonUtil.createArrayBuilder(); for (String dsource : dv.getDataSource()) { dataSources.add(dsource); } @@ -709,7 +710,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool } if (this.collections != null && !this.collections.isEmpty()) { - JsonArrayBuilder collections = Json.createArrayBuilder(); + JsonArrayBuilder collections = JsonUtil.createArrayBuilder(); for (Dataverse collection : this.collections) { NullSafeJsonBuilder dvBuilder = jsonObjectBuilder(); dvBuilder.add("id", collection.getId()); @@ -748,7 +749,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool } // NullSafeJsonBuilder is awesome but can't build null safe arrays. :( if (!datasetAuthors.isEmpty()) { - JsonArrayBuilder authors = Json.createArrayBuilder(); + JsonArrayBuilder authors = JsonUtil.createArrayBuilder(); for (String datasetAuthor : datasetAuthors) { authors.add(datasetAuthor); } @@ -767,7 +768,7 @@ private void json(Map> metadataFieldMapNames, // create metadataBlock object NullSafeJsonBuilder metadataBlockBuilder = jsonObjectBuilder(); metadataBlockBuilder.add("displayName", metadataBlock.getDisplayName()); - JsonArrayBuilder fieldsArray = Json.createArrayBuilder(); + JsonArrayBuilder fieldsArray = JsonUtil.createArrayBuilder(); List datasetFields = groupedFields.get(metadataBlock); for (DatasetField datasetField : datasetFields) { @@ -1350,7 +1351,7 @@ private String getDisplayType(String type) { /* * public JsonArrayBuilder getUserRolesAsJson() { * - * JsonArrayBuilder jsonRoleStrings = Json.createArrayBuilder(); for (String role : this.getUserRole()) { jsonRoleStrings.add(role); } return + * JsonArrayBuilder jsonRoleStrings = JsonUtil.createArrayBuilder(); for (String role : this.getUserRole()) { jsonRoleStrings.add(role); } return * jsonRoleStrings; } */ public List getUserRole() { diff --git a/src/main/java/edu/harvard/iq/dataverse/search/savedsearch/SavedSearchServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/savedsearch/SavedSearchServiceBean.java index fcb423fa492..570e3939ab2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/savedsearch/SavedSearchServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/savedsearch/SavedSearchServiceBean.java @@ -24,6 +24,7 @@ import edu.harvard.iq.dataverse.search.SolrSearchResult; import edu.harvard.iq.dataverse.search.SortBy; import edu.harvard.iq.dataverse.util.SystemConfig; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Schedule; import jakarta.ejb.Stateless; @@ -151,9 +152,9 @@ public void makeLinksForAllSavedSearchesTimer() { } public JsonObjectBuilder makeLinksForAllSavedSearches(boolean debugFlag) throws SearchException, CommandException { - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); List allSavedSearches = findAll(); - JsonArrayBuilder savedSearchArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder savedSearchArrayBuilder = JsonUtil.createArrayBuilder(); for (SavedSearch savedSearch : allSavedSearches) { DataverseRequest dataverseRequest = new DataverseRequest(savedSearch.getCreator(), getHttpServletRequest()); JsonObjectBuilder perSavedSearchResponse = makeLinksForSingleSavedSearch(dataverseRequest, savedSearch, debugFlag); @@ -181,9 +182,9 @@ public JsonObjectBuilder makeLinksForAllSavedSearches(boolean debugFlag) throws public JsonObjectBuilder makeLinksForSingleSavedSearch(DataverseRequest dvReq, SavedSearch savedSearch, boolean debugFlag) throws SearchException, CommandException { logger.info("SAVED SEARCH (" + savedSearch.getId() + ") START search and link process"); Date start = new Date(); - JsonObjectBuilder response = Json.createObjectBuilder(); - JsonArrayBuilder savedSearchArrayBuilder = Json.createArrayBuilder(); - JsonArrayBuilder infoPerHit = Json.createArrayBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); + JsonArrayBuilder savedSearchArrayBuilder = JsonUtil.createArrayBuilder(); + JsonArrayBuilder infoPerHit = JsonUtil.createArrayBuilder(); SolrQueryResponse queryResponse = findHits(savedSearch); List skipList = new ArrayList(); // a list for the definition point itself and already linked objects @@ -199,7 +200,7 @@ public JsonObjectBuilder makeLinksForSingleSavedSearch(DataverseRequest dvReq, S for (SolrSearchResult solrSearchResult : queryResponse.getSolrSearchResults()) { - JsonObjectBuilder hitInfo = Json.createObjectBuilder(); + JsonObjectBuilder hitInfo = JsonUtil.createObjectBuilder(); hitInfo.add("name", solrSearchResult.getNameSort()); hitInfo.add("dvObjectId", solrSearchResult.getEntityId()); @@ -325,7 +326,7 @@ private SolrQueryResponse findHits(SavedSearch savedSearch) throws SearchExcepti } private JsonObjectBuilder getInfo(SavedSearch savedSearch, JsonArrayBuilder infoPerHit) { - JsonObjectBuilder info = Json.createObjectBuilder(); + JsonObjectBuilder info = JsonUtil.createObjectBuilder(); info.add("definitionPointAlias", savedSearch.getDefinitionPoint().getAlias()); info.add("savedSearchId", savedSearch.getId()); info.add("hitInfo", infoPerHit); @@ -333,7 +334,7 @@ private JsonObjectBuilder getInfo(SavedSearch savedSearch, JsonArrayBuilder info } private JsonObjectBuilder getDebugInfo(SavedSearch savedSearch) { - JsonObjectBuilder debug = Json.createObjectBuilder(); + JsonObjectBuilder debug = JsonUtil.createObjectBuilder(); debug.add("creatorId", savedSearch.getCreator().getId()); debug.add("query", savedSearch.getQuery()); debug.add("filterQueries", getFilterQueries(savedSearch)); @@ -341,7 +342,7 @@ private JsonObjectBuilder getDebugInfo(SavedSearch savedSearch) { } private JsonArrayBuilder getFilterQueries(SavedSearch savedSearch) { - JsonArrayBuilder filterQueriesArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder filterQueriesArrayBuilder = JsonUtil.createArrayBuilder(); for (String filterQueryToAdd : savedSearch.getFilterQueriesAsStrings()) { filterQueriesArrayBuilder.add(filterQueryToAdd); } diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java index 20ee381228a..8273869f6f0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java @@ -1217,7 +1217,7 @@ public Set listAllWithoutLocalizations() { */ public JsonObject listAllAsJson() { Set settings = new HashSet<>(em.createNamedQuery("Setting.findAll", Setting.class).getResultList()); - JsonObjectBuilder response = Json.createObjectBuilder(); + JsonObjectBuilder response = JsonUtil.createObjectBuilder(); // Iterate over all the settings and add them to the response. settings.forEach(setting -> { @@ -1326,11 +1326,11 @@ public enum Op { static JsonObjectBuilder convertToJson(Map operationalDetails) { // Create a nice represenation of what happened as Json - JsonObjectBuilder jbo = Json.createObjectBuilder(); - JsonArrayBuilder created = Json.createArrayBuilder(); - JsonArrayBuilder updated = Json.createArrayBuilder(); - JsonArrayBuilder deleted = Json.createArrayBuilder(); - JsonArrayBuilder unchanged = Json.createArrayBuilder(); + JsonObjectBuilder jbo = JsonUtil.createObjectBuilder(); + JsonArrayBuilder created = JsonUtil.createArrayBuilder(); + JsonArrayBuilder updated = JsonUtil.createArrayBuilder(); + JsonArrayBuilder deleted = JsonUtil.createArrayBuilder(); + JsonArrayBuilder unchanged = JsonUtil.createArrayBuilder(); operationalDetails.forEach((setting, op) -> { String name = convertToJsonKey(setting); diff --git a/src/main/java/edu/harvard/iq/dataverse/userdata/UserListResult.java b/src/main/java/edu/harvard/iq/dataverse/userdata/UserListResult.java index 5e7f532d2ac..6ef139c12cf 100644 --- a/src/main/java/edu/harvard/iq/dataverse/userdata/UserListResult.java +++ b/src/main/java/edu/harvard/iq/dataverse/userdata/UserListResult.java @@ -11,6 +11,8 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -164,7 +166,7 @@ public JsonObjectBuilder toJSON(){ } - JsonObjectBuilder jsonOverallData = Json.createObjectBuilder(); + JsonObjectBuilder jsonOverallData = JsonUtil.createObjectBuilder(); jsonOverallData.add("userCount", pager.getNumResults()) .add("selectedPage", pager.getSelectedPageNumber()) .add("pagination", pager.asJsonObjectBuilder()) @@ -182,13 +184,13 @@ private JsonArrayBuilder getUsersAsJSONArray(){ // No results..... Return count of 0 and empty array // ------------------------------------------------- if ((userList==null)||(userList.isEmpty())){ - return Json.createArrayBuilder(); // return an empty array + return JsonUtil.createArrayBuilder(); // return an empty array } // ------------------------------------------------- // We have results, format them into a JSON object // ------------------------------------------------- - JsonArrayBuilder jsonUserListArray = Json.createArrayBuilder(); + JsonArrayBuilder jsonUserListArray = JsonUtil.createArrayBuilder(); for (AuthenticatedUser oneUser : userList) { jsonUserListArray.add(oneUser.toJson()); @@ -199,11 +201,11 @@ private JsonArrayBuilder getUsersAsJSONArray(){ private JsonObjectBuilder getNoResultsJSON(){ - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("userCount", 0) .add("selectedPage", 1) .add("bundleStrings", AuthenticatedUser.getBundleStrings()) - .add("users", Json.createArrayBuilder()); // empty array + .add("users", JsonUtil.createArrayBuilder()); // empty array } diff --git a/src/main/java/edu/harvard/iq/dataverse/util/SignpostingResources.java b/src/main/java/edu/harvard/iq/dataverse/util/SignpostingResources.java index 8bebcf4d438..e26549736c1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/SignpostingResources.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/SignpostingResources.java @@ -17,6 +17,7 @@ Two configurable options allow changing the limit for the number of authors or d import edu.harvard.iq.dataverse.*; import edu.harvard.iq.dataverse.dataset.DatasetUtil; import edu.harvard.iq.dataverse.export.ExportService; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -113,7 +114,7 @@ public JsonArrayBuilder getJsonLinkset() { String licenseString = DatasetUtil.getLicenseURI(workingDatasetVersion); - JsonArrayBuilder mediaTypes = Json.createArrayBuilder(); + JsonArrayBuilder mediaTypes = JsonUtil.createArrayBuilder(); mediaTypes.add( jsonObjectBuilder().add( "href", @@ -142,13 +143,13 @@ public JsonArrayBuilder getJsonLinkset() { logger.warning("Could not look up exporter based on " + formatName + ". Exception: " + ex); } } - JsonArrayBuilder linksetJsonObj = Json.createArrayBuilder(); + JsonArrayBuilder linksetJsonObj = JsonUtil.createArrayBuilder(); JsonObjectBuilder mandatory; mandatory = jsonObjectBuilder().add("anchor", landingPage) - .add("cite-as", Json.createArrayBuilder().add(jsonObjectBuilder().add("href", ds.getPersistentURL()))) + .add("cite-as", JsonUtil.createArrayBuilder().add(jsonObjectBuilder().add("href", ds.getPersistentURL()))) .add("type", - Json.createArrayBuilder().add(jsonObjectBuilder().add("href", "https://schema.org/AboutPage")) + JsonUtil.createArrayBuilder().add(jsonObjectBuilder().add("href", "https://schema.org/AboutPage")) .add(jsonObjectBuilder().add("href", defaultFileTypeValue))); if (authors != null) { @@ -169,7 +170,7 @@ public JsonArrayBuilder getJsonLinkset() { for (FileMetadata fm : workingDatasetVersion.getFileMetadatas()) { DataFile df = fm.getDataFile(); JsonObjectBuilder itemAnchor = jsonObjectBuilder().add("anchor", getPublicDownloadUrl(df)); - itemAnchor.add("collection", Json.createArrayBuilder().add(jsonObjectBuilder() + itemAnchor.add("collection", JsonUtil.createArrayBuilder().add(jsonObjectBuilder() .add("href", landingPage))); linksetJsonObj.add(itemAnchor); } @@ -255,7 +256,7 @@ private JsonArrayBuilder getJsonAuthors(List datasetAuthorURLs) { if(datasetAuthorURLs.isEmpty()) { return null; } - JsonArrayBuilder authors = Json.createArrayBuilder(); + JsonArrayBuilder authors = JsonUtil.createArrayBuilder(); for (String authorURL : datasetAuthorURLs) { authors.add(jsonObjectBuilder().add("href", authorURL)); } @@ -281,7 +282,7 @@ private String getItems(List fms) { } private JsonArrayBuilder getJsonItems() { - JsonArrayBuilder items = Json.createArrayBuilder(); + JsonArrayBuilder items = JsonUtil.createArrayBuilder(); for (FileMetadata fm : workingDatasetVersion.getFileMetadatas()) { DataFile df = fm.getDataFile(); items.add(jsonObjectBuilder().add("href", getPublicDownloadUrl(df)).add("type", df.getContentType())); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/URLTokenUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/URLTokenUtil.java index 90557a530c9..5c82cba4875 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/URLTokenUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/URLTokenUtil.java @@ -121,9 +121,9 @@ public JsonValue getParam(String value) { if (tokenValue != null && !tokenValue.isBlank()) { try{ int x =Integer.parseInt(tokenValue); - return Json.createValue(x); + return JsonUtil.createValue(x); } catch (NumberFormatException nfe){ - return Json.createValue(tokenValue); + return JsonUtil.createValue(tokenValue); } } else { return null; @@ -209,10 +209,10 @@ private String getTokenValue(String value) { } public JsonObjectBuilder createPostBody(JsonObject params, JsonArray allowedApiCalls) { - JsonObjectBuilder bodyBuilder = Json.createObjectBuilder(); + JsonObjectBuilder bodyBuilder = JsonUtil.createObjectBuilder(); bodyBuilder.add("queryParameters", params); if (allowedApiCalls != null && !allowedApiCalls.isEmpty()) { - JsonArrayBuilder apisBuilder = Json.createArrayBuilder(); + JsonArrayBuilder apisBuilder = JsonUtil.createArrayBuilder(); allowedApiCalls.getValuesAs(JsonObject.class).forEach(((apiObj) -> { logger.fine(JsonUtil.prettyPrint(apiObj)); String name = apiObj.getJsonString(NAME).getString(); @@ -232,7 +232,7 @@ public JsonObjectBuilder createPostBody(JsonObject params, JsonArray allowedApiC + getApiToken().getTokenString()); } logger.fine("Signed URL: " + url); - apisBuilder.add(Json.createObjectBuilder().add(NAME, name).add(HTTP_METHOD, httpmethod) + apisBuilder.add(JsonUtil.createObjectBuilder().add(NAME, name).add(HTTP_METHOD, httpmethod) .add(SIGNED_URL, url).add(TIMEOUT, timeout)); })); bodyBuilder.add("signedUrls", apisBuilder); @@ -245,7 +245,7 @@ public JsonObject getParams(JsonObject toolParameters) { JsonArray queryParams = toolParameters.getJsonArray("queryParameters"); // ToDo return json and print later - JsonObjectBuilder paramsBuilder = Json.createObjectBuilder(); + JsonObjectBuilder paramsBuilder = JsonUtil.createObjectBuilder(); if (!(queryParams == null) && !queryParams.isEmpty()) { queryParams.getValuesAs(JsonObject.class).forEach((queryParam) -> { queryParam.keySet().forEach((key) -> { diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 1e8fe184566..c29354d63f7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -19,6 +19,7 @@ import java.util.logging.Level; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; @@ -89,16 +90,16 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { // Add namespaces we'll definitely use to Context // Additional namespaces are added as needed below - localContext.putIfAbsent(JsonLDNamespace.ore.getPrefix(), Json.createValue(JsonLDNamespace.ore.getUrl())); - localContext.putIfAbsent(JsonLDNamespace.dcterms.getPrefix(), Json.createValue(JsonLDNamespace.dcterms.getUrl())); - localContext.putIfAbsent(JsonLDNamespace.dvcore.getPrefix(), Json.createValue(JsonLDNamespace.dvcore.getUrl())); - localContext.putIfAbsent(JsonLDNamespace.schema.getPrefix(), Json.createValue(JsonLDNamespace.schema.getUrl())); + localContext.putIfAbsent(JsonLDNamespace.ore.getPrefix(), JsonUtil.createValue(JsonLDNamespace.ore.getUrl())); + localContext.putIfAbsent(JsonLDNamespace.dcterms.getPrefix(), JsonUtil.createValue(JsonLDNamespace.dcterms.getUrl())); + localContext.putIfAbsent(JsonLDNamespace.dvcore.getPrefix(), JsonUtil.createValue(JsonLDNamespace.dvcore.getUrl())); + localContext.putIfAbsent(JsonLDNamespace.schema.getPrefix(), JsonUtil.createValue(JsonLDNamespace.schema.getUrl())); Dataset dataset = version.getDataset(); String id = dataset.getGlobalId().asURL(); - JsonArrayBuilder fileArray = Json.createArrayBuilder(); + JsonArrayBuilder fileArray = JsonUtil.createArrayBuilder(); // The map describes an aggregation - JsonObjectBuilder aggBuilder = Json.createObjectBuilder(); + JsonObjectBuilder aggBuilder = JsonUtil.createObjectBuilder(); List fields = version.getDatasetFields(); // That has it's own metadata Map cvocMap = datasetFieldService.getCVocConf(true); @@ -115,7 +116,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { // Add metadata related to the Dataset/DatasetVersion aggBuilder.add("@id", id) .add("@type", - Json.createArrayBuilder().add(JsonLDTerm.ore("Aggregation").getLabel()) + JsonUtil.createArrayBuilder().add(JsonLDTerm.ore("Aggregation").getLabel()) .add(JsonLDTerm.schemaOrg("Dataset").getLabel())) .add(JsonLDTerm.schemaOrg("version").getLabel(), version.getFriendlyVersionNumber()) .add(JsonLDTerm.schemaOrg("name").getLabel(), version.getTitle()) @@ -126,7 +127,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { //Add version state info - DRAFT, RELEASED, DEACCESSIONED, ARCHIVED with extra info for DEACCESIONED VersionState vs = version.getVersionState(); if(vs.equals(VersionState.DEACCESSIONED)) { - JsonObjectBuilder deaccBuilder = Json.createObjectBuilder(); + JsonObjectBuilder deaccBuilder = JsonUtil.createObjectBuilder(); deaccBuilder.add(JsonLDTerm.schemaOrg("name").getLabel(), vs.name()); // Reason is supposed to not be null, but historically this has not been enforced (in the API) addIfNotNull(deaccBuilder, JsonLDTerm.DVCore("reason"), version.getDeaccessionNote()); @@ -152,7 +153,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { addIfNotNull(aggBuilder, JsonLDTerm.disclaimer, terms.getDisclaimer()); } // Add fileTermsofAccess as an object since it is compound - JsonObjectBuilder fAccess = Json.createObjectBuilder(); + JsonObjectBuilder fAccess = JsonUtil.createObjectBuilder(); addIfNotNull(fAccess, JsonLDTerm.termsOfAccess, terms.getTermsOfAccess()); addIfNotNull(fAccess, JsonLDTerm.fileRequestAccess, terms.isFileAccessRequest()); addIfNotNull(fAccess, JsonLDTerm.dataAccessPlace, terms.getDataAccessPlace()); @@ -177,12 +178,12 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { // The aggregation aggregates aggregatedresources (Datafiles) which each have // their own entry and metadata - JsonArrayBuilder aggResArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder aggResArrayBuilder = JsonUtil.createArrayBuilder(); if (!aggregationOnly) { for (FileMetadata fmd : version.getFileMetadatas()) { DataFile df = fmd.getDataFile(); - JsonObjectBuilder aggRes = Json.createObjectBuilder(); + JsonObjectBuilder aggRes = JsonUtil.createObjectBuilder(); if (fmd.getDescription() != null) { aggRes.add(JsonLDTerm.schemaOrg("description").getLabel(), fmd.getDescription()); @@ -220,7 +221,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { if(embargo!=null) { String date = embargo.getFormattedDateAvailable(); String reason= embargo.getReason(); - JsonObjectBuilder embargoObject = Json.createObjectBuilder(); + JsonObjectBuilder embargoObject = JsonUtil.createObjectBuilder(); embargoObject.add(JsonLDTerm.DVCore("dateAvailable").getLabel(), date); if(reason!=null) { embargoObject.add(JsonLDTerm.DVCore("reason").getLabel(), reason); @@ -231,7 +232,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { if(retention!=null) { String date = retention.getFormattedDateUnavailable(); String reason= retention.getReason(); - JsonObjectBuilder retentionObject = Json.createObjectBuilder(); + JsonObjectBuilder retentionObject = JsonUtil.createObjectBuilder(); retentionObject.add(JsonLDTerm.DVCore("dateUnavailable").getLabel(), date); if(reason!=null) { retentionObject.add(JsonLDTerm.DVCore("reason").getLabel(), reason); @@ -245,7 +246,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { if (fmd != null) { List categories = fmd.getCategoriesByName(); if (categories.size() > 0) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (String s : categories) { jab.add(s); } @@ -279,7 +280,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { JsonObject checksum = null; // Add checksum. RDA recommends SHA-512 if (df.getChecksumType() != null && df.getChecksumValue() != null) { - checksum = Json.createObjectBuilder().add("@type", df.getChecksumType().toUri()) + checksum = JsonUtil.createObjectBuilder().add("@type", df.getChecksumType().toUri()) .add("@value", df.getChecksumValue()).build(); aggRes.add(JsonLDTerm.checksum.getLabel(), checksum); } @@ -294,7 +295,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { } } // Build the '@context' object for json-ld based on the localContext entries - JsonObjectBuilder contextBuilder = Json.createObjectBuilder(); + JsonObjectBuilder contextBuilder = JsonUtil.createObjectBuilder(); for (Entry e : localContext.entrySet()) { contextBuilder.add(e.getKey(), e.getValue()); } @@ -304,14 +305,14 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { // Now create the overall map object with it's metadata //Start with a reference to the Dataverse software - JsonObjectBuilder dvSoftwareBuilder = Json.createObjectBuilder() + JsonObjectBuilder dvSoftwareBuilder = JsonUtil.createObjectBuilder() .add("@type", JsonLDTerm.schemaOrg("SoftwareApplication").getLabel()) .add(JsonLDTerm.schemaOrg("name").getLabel(), DATAVERSE_SOFTWARE_NAME) .add(JsonLDTerm.schemaOrg("version").getLabel(), systemConfig.getVersion(true)) .add(JsonLDTerm.schemaOrg("url").getLabel(), DATAVERSE_SOFTWARE_URL); //Now the OREMAP object itself - JsonObjectBuilder oremapBuilder = Json.createObjectBuilder() + JsonObjectBuilder oremapBuilder = JsonUtil.createObjectBuilder() .add(JsonLDTerm.dcTerms("modified").getLabel(), LocalDate.now().toString()) .add(JsonLDTerm.dcTerms("creator").getLabel(), BrandingUtil.getInstallationBrandName()) .add("@type", JsonLDTerm.ore("ResourceMap").getLabel()) @@ -336,7 +337,7 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) { private JsonObjectBuilder getDataverseDescription(Dataverse dv) { //Schema.org is already in local context, no updates needed as long as we only use chemaOrg and "@id" here - JsonObjectBuilder dvjob = Json.createObjectBuilder().add(JsonLDTerm.schemaOrg("name").getLabel(), dv.getCurrentName()).add("@id", dv.getLocalURL()); + JsonObjectBuilder dvjob = JsonUtil.createObjectBuilder().add(JsonLDTerm.schemaOrg("name").getLabel(), dv.getCurrentName()).add("@id", dv.getLocalURL()); addIfNotNull(dvjob, JsonLDTerm.schemaOrg("description"), dv.getDescription()); Dataverse owner = dv.getOwner(); if(owner!=null) { @@ -380,7 +381,7 @@ private void addIfNotNull(JsonObjectBuilder builder, JsonLDTerm key, Long value) private void addToContextMap(JsonLDTerm key) { if (!key.inNamespace()) { - localContext.putIfAbsent(key.getLabel(), Json.createValue(key.getUrl())); + localContext.putIfAbsent(key.getLabel(), JsonUtil.createValue(key.getUrl())); } } @@ -425,11 +426,11 @@ public static JsonValue getJsonLDForField(DatasetField field, Boolean excludeEma JsonLDTerm fieldName = dfType.getJsonLDTerm(); if (fieldName.inNamespace()) { - localContext2.putIfAbsent(fieldName.getNamespace().getPrefix(), Json.createValue(fieldName.getNamespace().getUrl())); + localContext2.putIfAbsent(fieldName.getNamespace().getPrefix(), JsonUtil.createValue(fieldName.getNamespace().getUrl())); } else { - localContext2.putIfAbsent(fieldName.getLabel(), Json.createValue(fieldName.getUrl())); + localContext2.putIfAbsent(fieldName.getLabel(), JsonUtil.createValue(fieldName.getUrl())); } - JsonArrayBuilder vals = Json.createArrayBuilder(); + JsonArrayBuilder vals = JsonUtil.createArrayBuilder(); if (!dfType.isCompound()) { for (String val : field.getValues_nondisplay()) { if (cvocMap.containsKey(dfType.getId())) { @@ -442,7 +443,7 @@ public static JsonValue getJsonLDForField(DatasetField field, Boolean excludeEma // ToDo: Needs to be recursive (as in JsonPrinter?) for (DatasetFieldCompoundValue dscv : field.getDatasetFieldCompoundValues()) { // compound values are of different types - JsonObjectBuilder child = Json.createObjectBuilder(); + JsonObjectBuilder child = JsonUtil.createObjectBuilder(); for (DatasetField dsf : dscv.getChildDatasetFields()) { DatasetFieldType dsft = dsf.getDatasetFieldType(); @@ -461,14 +462,14 @@ public static JsonValue getJsonLDForField(DatasetField field, Boolean excludeEma // ToDo - also needs to recurse here? if (subFieldName.inNamespace()) { localContext2.putIfAbsent(subFieldName.getNamespace().getPrefix(), - Json.createValue(subFieldName.getNamespace().getUrl())); + JsonUtil.createValue(subFieldName.getNamespace().getUrl())); } else { - localContext2.putIfAbsent(subFieldName.getLabel(), Json.createValue(subFieldName.getUrl())); + localContext2.putIfAbsent(subFieldName.getLabel(), JsonUtil.createValue(subFieldName.getUrl())); } List values = dsf.getValues_nondisplay(); - JsonArrayBuilder childVals = Json.createArrayBuilder(); + JsonArrayBuilder childVals = JsonUtil.createArrayBuilder(); for (String val : dsf.getValues_nondisplay()) { logger.fine("Child name: " + dsft.getName()); @@ -506,7 +507,7 @@ private static void addCvocValue(String val, JsonArrayBuilder vals, JsonObject c } JsonObject cachedValue = datasetFieldService.getExternalVocabularyValue(val); if (cachedValue != null) { - JsonObjectBuilder job = Json.createObjectBuilder(cachedValue); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(cachedValue); job.add("@id", val); JsonObject extVal = job.build(); logger.fine("Adding: " + extVal); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/FileVersionDifferenceJsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/FileVersionDifferenceJsonPrinter.java index 44941203fc6..73ee29cd729 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/FileVersionDifferenceJsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/FileVersionDifferenceJsonPrinter.java @@ -213,7 +213,7 @@ private static String getFileAction(FileMetadata originalFileMetadata, FileMetad */ private static class GroupDataAccumulator { private JsonObject nameValue; - private JsonArrayBuilder listItems = Json.createArrayBuilder(); + private JsonArrayBuilder listItems = JsonUtil.createArrayBuilder(); private Map itemCounts = new HashMap<>(); void mergeCounts(FileVersionDifference.FileDifferenceSummaryItem item) { @@ -246,7 +246,7 @@ private String getActionFromItem(FileVersionDifference.FileDifferenceSummaryItem void reset() { nameValue = null; - listItems = Json.createArrayBuilder(); + listItems = JsonUtil.createArrayBuilder(); itemCounts.clear(); } diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java index 242847d2e25..126f0bac83d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java @@ -70,7 +70,7 @@ public class JSONLDUtil { */ public static JsonObject getContext(Map contextMap) { - JsonObjectBuilder contextBuilder = Json.createObjectBuilder(); + JsonObjectBuilder contextBuilder = JsonUtil.createObjectBuilder(); for (Entry e : contextMap.entrySet()) { contextBuilder.add(e.getKey(), e.getValue()); } @@ -498,7 +498,7 @@ private static JsonArray getValues(JsonValue val, boolean allowMultiples, String valArray = (JsonArray) val; } } else { - valArray = Json.createArrayBuilder().add(val).build(); + valArray = JsonUtil.createArrayBuilder().add(val).build(); } return valArray; } @@ -547,7 +547,7 @@ public static JsonObject decontextualizeJsonLD(String jsonLDString) { JsonObject jsonld = jsonReader.readObject(); JsonDocument doc = JsonDocument.of(jsonld); JsonArray array = JsonLd.expand(doc).get(); - jsonld = JsonLd.compact(JsonDocument.of(array), JsonDocument.of(Json.createObjectBuilder().build())).get(); + jsonld = JsonLd.compact(JsonDocument.of(array), JsonDocument.of(JsonUtil.createObjectBuilder().build())).get(); // jsonld = array.getJsonObject(0); logger.fine("Decontextualized object: " + jsonld); return jsonld; diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java index e6e0c71c396..2785f4113a2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java @@ -324,7 +324,7 @@ public MailDomainGroup parseMailDomainGroup(JsonObject obj) throws JsonParseExce if ( obj.containsKey("domains") ) { List domains = Optional.ofNullable(obj.getJsonArray("domains")) - .orElse(Json.createArrayBuilder().build()) + .orElse(JsonUtil.createArrayBuilder().build()) .getValuesAs(JsonString.class) .stream() .map(JsonString::getString) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java index 55247f7d2af..f2716fe20d2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java @@ -101,7 +101,7 @@ public JsonPrinter() { public static final BriefJsonPrinter brief = new BriefJsonPrinter(); public static JsonArrayBuilder asJsonArray(Collection strings) { - JsonArrayBuilder arr = Json.createArrayBuilder(); + JsonArrayBuilder arr = JsonUtil.createArrayBuilder(); for (String s : strings) { arr.add(s); } @@ -145,7 +145,7 @@ public static JsonObjectBuilder json(FileAccessRequest fileAccessRequest) { } public static JsonArrayBuilder jsonRoleAssignments(List roleAssignments) { - JsonArrayBuilder bld = Json.createArrayBuilder(); + JsonArrayBuilder bld = JsonUtil.createArrayBuilder(); roleAssignments.forEach(roleAssignment -> bld.add(json(roleAssignment))); return bld; } @@ -172,7 +172,7 @@ public static JsonObjectBuilder json(RoleAssignment ra) { } public static JsonArrayBuilder json(Set permissions) { - JsonArrayBuilder bld = Json.createArrayBuilder(); + JsonArrayBuilder bld = JsonUtil.createArrayBuilder(); permissions.forEach(p -> bld.add(p.name())); return bld; } @@ -215,8 +215,8 @@ public static JsonObjectBuilder json(IpGroup grp) { } if ( ! ranges.isEmpty() ) { - JsonArrayBuilder rangesBld = Json.createArrayBuilder(); - ranges.forEach( r -> rangesBld.add( Json.createArrayBuilder().add(r.get(0)).add(r.get(1))) ); + JsonArrayBuilder rangesBld = JsonUtil.createArrayBuilder(); + ranges.forEach( r -> rangesBld.add( JsonUtil.createArrayBuilder().add(r.get(0)).add(r.get(1))) ); bld.add("ranges", rangesBld ); } @@ -243,7 +243,7 @@ public static JsonObjectBuilder json(MailDomainGroup grp) { } public static JsonArrayBuilder rolesToJson(List role) { - JsonArrayBuilder bld = Json.createArrayBuilder(); + JsonArrayBuilder bld = JsonUtil.createArrayBuilder(); for (DataverseRole r : role) { bld.add(JsonPrinter.json(r)); } @@ -251,7 +251,7 @@ public static JsonArrayBuilder rolesToJson(List role) { } public static JsonArrayBuilder enumsToJson(Collection collection) { - JsonArrayBuilder arr = Json.createArrayBuilder(); + JsonArrayBuilder arr = JsonUtil.createArrayBuilder(); for (E entry : collection) { arr.add(entry.name()); } @@ -259,7 +259,7 @@ public static JsonArrayBuilder enumsToJson(Collection collec } public static JsonArrayBuilder jsonDataverseRoles(List roles) { - JsonArrayBuilder jsonArrayOfDataverseRoles = Json.createArrayBuilder(); + JsonArrayBuilder jsonArrayOfDataverseRoles = JsonUtil.createArrayBuilder(); for (DataverseRole role : roles) { jsonArrayOfDataverseRoles.add(json(role)); } @@ -293,7 +293,7 @@ public static JsonObjectBuilder json(Workflow wf){ } if ( wf.getSteps()!=null && !wf.getSteps().isEmpty()) { - JsonArrayBuilder arr = Json.createArrayBuilder(); + JsonArrayBuilder arr = JsonUtil.createArrayBuilder(); for ( WorkflowStepData stp : wf.getSteps() ) { arr.add( jsonObjectBuilder().add("stepType", stp.getStepType()) .add("provider", stp.getProviderId()) @@ -369,7 +369,7 @@ public static JsonObjectBuilder json(Dataverse dv, Boolean hideEmail, Boolean re } List allowedDatasetTypes = dv.getAllowedDatasetTypes(); if (allowedDatasetTypes != null && !allowedDatasetTypes.isEmpty()) { - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DatasetType datasetType : allowedDatasetTypes) { NullSafeJsonBuilder json = NullSafeJsonBuilder.jsonObjectBuilder() .add("id", datasetType.getId()) @@ -385,9 +385,9 @@ public static JsonObjectBuilder json(Dataverse dv, Boolean hideEmail, Boolean re } public static JsonObjectBuilder jsonArray(List dataverses) { - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); job.add("count", dataverses.size()); - JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder jsonArrayBuilder = JsonUtil.createArrayBuilder(); for (Dataverse dataverse : dataverses) { NullSafeJsonBuilder jsonObject = NullSafeJsonBuilder.jsonObjectBuilder(); jsonObject.add("id", dataverse.getId()); @@ -400,7 +400,7 @@ public static JsonObjectBuilder jsonArray(List dataverses) { } public static JsonArrayBuilder json(List dataverseContacts) { - JsonArrayBuilder jsonArrayOfContacts = Json.createArrayBuilder(); + JsonArrayBuilder jsonArrayOfContacts = JsonUtil.createArrayBuilder(); for (DataverseContact dataverseContact : dataverseContacts) { NullSafeJsonBuilder contactJsonObject = NullSafeJsonBuilder.jsonObjectBuilder(); contactJsonObject.add("displayOrder", dataverseContact.getDisplayOrder()); @@ -441,7 +441,7 @@ public static JsonObjectBuilder json(GuestbookResponse gbResponse) { } final List cqResponses = gbResponse.getCustomQuestionResponses(); if (cqResponses != null && !cqResponses.isEmpty()) { - JsonArrayBuilder customQuestions = Json.createArrayBuilder(); + JsonArrayBuilder customQuestions = JsonUtil.createArrayBuilder(); for (CustomQuestionResponse cqResponse : cqResponses) { JsonObjectBuilder cqObj = jsonObjectBuilder(); cqObj.add("question", cqResponse.getCustomQuestion().getQuestionString()); @@ -473,7 +473,7 @@ public static JsonObjectBuilder json(Guestbook guestbook) { guestbookObject.add("responseCount", guestbook.getResponseCount()); } if (guestbook.getCustomQuestions() != null && !guestbook.getCustomQuestions().isEmpty()) { - JsonArrayBuilder customQuestions = Json.createArrayBuilder(); + JsonArrayBuilder customQuestions = JsonUtil.createArrayBuilder(); for (CustomQuestion cq : guestbook.getCustomQuestions()) { customQuestions.add(json(cq)); } @@ -499,7 +499,7 @@ public static JsonObjectBuilder json(CustomQuestion customQuestion) { customQuestionObject.add("type", customQuestion.getQuestionType()); customQuestionObject.add("hidden", customQuestion.isHidden()); if (customQuestion.getCustomQuestionValues() != null && !customQuestion.getCustomQuestionValues().isEmpty()) { - JsonArrayBuilder customQuestionsValues = Json.createArrayBuilder(); + JsonArrayBuilder customQuestionsValues = JsonUtil.createArrayBuilder(); for (CustomQuestionValue value : customQuestion.getCustomQuestionValues()) { JsonObjectBuilder customQuestionValueObject = jsonObjectBuilder(); if (value.getId() != null) { @@ -613,7 +613,7 @@ public static JsonObjectBuilder json(Dataset ds, Boolean returnOwners) { } bld.add("datasetType", ds.getDatasetType().getName()); - JsonArrayBuilder locksArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder locksArrayBuilder = JsonUtil.createArrayBuilder(); for (DatasetLock lock : ds.getLocks()) { locksArrayBuilder.add(lock.getReason().toString()); } @@ -638,8 +638,8 @@ private static void addDatasetFileCountLimit(DvObjectContainer dvo, JsonObjectBu } public static JsonObjectBuilder json(FileDetailsHolder ds) { - return Json.createObjectBuilder().add(ds.getStorageID() , - Json.createObjectBuilder() + return JsonUtil.createObjectBuilder().add(ds.getStorageID() , + JsonUtil.createObjectBuilder() .add("id", ds.getStorageID() ) .add("hash", ds.getHash()) .add("mime",ds.getMime())); @@ -773,7 +773,7 @@ public static JsonObjectBuilder jsonAsDatasetDto(DatasetVersion dsv) { } public static JsonArrayBuilder jsonFileMetadatas(Collection fmds) { - JsonArrayBuilder filesArr = Json.createArrayBuilder(); + JsonArrayBuilder filesArr = JsonUtil.createArrayBuilder(); for (FileMetadata fmd : fmds) { filesArr.add(JsonPrinter.json(fmd)); } @@ -828,7 +828,7 @@ public static JsonObjectBuilder json(MetadataBlock block, List fie blockBld.add("displayName", block.getDisplayName()); blockBld.add("name", block.getName()); - final JsonArrayBuilder fieldsArray = Json.createArrayBuilder(); + final JsonArrayBuilder fieldsArray = JsonUtil.createArrayBuilder(); Map cvocMap = (datasetFieldService==null) ? new HashMap() :datasetFieldService.getCVocConf(true); List excludedFieldTypeList = new ArrayList<>(); // Exclude the Email field or override the exclusion of the Email field type based on the settings ExcludeEmailFromExport and ignoreSettingExcludeEmailFromExport @@ -846,7 +846,7 @@ public static JsonArrayBuilder json(List metadataBlocks, boolean } public static JsonArrayBuilder json(List metadataBlocks, boolean returnDatasetFieldTypes, boolean printOnlyDisplayedOnCreateDatasetFieldTypes, Dataverse ownerDataverse, DatasetType datasetType) { - JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder arrayBuilder = JsonUtil.createArrayBuilder(); for (MetadataBlock metadataBlock : metadataBlocks) { arrayBuilder.add(returnDatasetFieldTypes ? json(metadataBlock, printOnlyDisplayedOnCreateDatasetFieldTypes, ownerDataverse, datasetType) : brief.json(metadataBlock)); } @@ -867,7 +867,7 @@ public static JsonObject json(DatasetField dfv) { if (dfv.isEmpty()) { return null; } else { - JsonArrayBuilder fieldArray = Json.createArrayBuilder(); + JsonArrayBuilder fieldArray = JsonUtil.createArrayBuilder(); Map cvocMap = (datasetFieldService==null) ? new HashMap() :datasetFieldService.getCVocConf(true); DatasetFieldWalker.walk(dfv, new DatasetFieldsToJson(fieldArray), cvocMap); JsonArray out = fieldArray.build(); @@ -890,7 +890,7 @@ public static JsonObjectBuilder json(MetadataBlock metadataBlock, boolean printO List datasetFieldTypesList = metadataBlock.getDatasetFieldTypes(); Set datasetFieldTypes = filterOutDuplicateDatasetFieldTypes(datasetFieldTypesList); - JsonObjectBuilder fieldsBuilder = Json.createObjectBuilder(); + JsonObjectBuilder fieldsBuilder = JsonUtil.createObjectBuilder(); for (DatasetFieldType datasetFieldType : datasetFieldTypes) { if (!datasetFieldType.isChild()) { @@ -929,7 +929,7 @@ private static Set filterOutDuplicateDatasetFieldTypes(List fields) { - JsonArrayBuilder fieldsJson = Json.createArrayBuilder(); + JsonArrayBuilder fieldsJson = JsonUtil.createArrayBuilder(); for (DatasetFieldType field : fields) { fieldsJson.add(JsonPrinter.json(field)); } @@ -962,7 +962,7 @@ public static JsonObjectBuilder json(DatasetFieldType fld, Dataverse ownerDatave if (fld.isControlledVocabulary()) { // If the field has a controlled vocabulary, // add all values to the resulting JSON - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (ControlledVocabularyValue cvv : fld.getControlledVocabularyValues()) { jab.add(cvv.getStrValue()); } @@ -1132,7 +1132,7 @@ public static JsonObjectBuilder json(DataFile df, FileMetadata fileMetadata, boo //Started from https://github.com/RENCI-NRIG/dataverse/, i.e. https://github.com/RENCI-NRIG/dataverse/commit/2b5a1225b42cf1caba85e18abfeb952171c6754a public static JsonArrayBuilder jsonDT(List ldt) { - JsonArrayBuilder ldtArr = Json.createArrayBuilder(); + JsonArrayBuilder ldtArr = JsonUtil.createArrayBuilder(); for(DataTable dt: ldt){ ldtArr.add(JsonPrinter.json(dt)); } @@ -1150,7 +1150,7 @@ public static JsonObjectBuilder json(DataTable dt) { } public static JsonArrayBuilder jsonDV(List dvl) { - JsonArrayBuilder varArr = Json.createArrayBuilder(); + JsonArrayBuilder varArr = JsonUtil.createArrayBuilder(); if(dvl!=null){ for (DataVariable dv: dvl){ varArr.add(JsonPrinter.json(dv)); @@ -1195,8 +1195,8 @@ public static JsonObjectBuilder json(DataVariable dv) { } private static JsonArrayBuilder jsonInvalidRanges(Collection invalidRanges) { - JsonArrayBuilder invRanges = Json.createArrayBuilder(); - JsonObjectBuilder job = Json.createObjectBuilder(); + JsonArrayBuilder invRanges = JsonUtil.createArrayBuilder(); + JsonObjectBuilder job = JsonUtil.createObjectBuilder(); for (VariableRange vr: invalidRanges){ job.add("beginValue", vr.getBeginValue()) .add("hasBeginValueType", vr.getBeginValueType()!=null) @@ -1216,8 +1216,8 @@ private static JsonArrayBuilder jsonInvalidRanges(Collection inva } private static JsonObjectBuilder jsonSumStat(Collection sumStat){ - //JsonArrayBuilder sumStatArr = Json.createArrayBuilder(); - JsonObjectBuilder sumStatObj = Json.createObjectBuilder(); + //JsonArrayBuilder sumStatArr = JsonUtil.createArrayBuilder(); + JsonObjectBuilder sumStatObj = JsonUtil.createObjectBuilder(); for (SummaryStatistic stat: sumStat){ String label = stat.getTypeLabel()==null ? "unknown":stat.getTypeLabel(); sumStatObj.add(label, stat.getValue()); @@ -1227,10 +1227,10 @@ private static JsonObjectBuilder jsonSumStat(Collection sumSta private static JsonArrayBuilder jsonCatStat(Collection catStat){ - JsonArrayBuilder catArr = Json.createArrayBuilder(); + JsonArrayBuilder catArr = JsonUtil.createArrayBuilder(); for (VariableCategory stat: catStat){ - JsonObjectBuilder catStatObj = Json.createObjectBuilder(); + JsonObjectBuilder catStatObj = JsonUtil.createObjectBuilder(); catStatObj.add("label", stat.getLabel()) .add("value", stat.getValue()) .add("isMissing", stat.isMissing()); @@ -1243,10 +1243,10 @@ private static JsonArrayBuilder jsonCatStat(Collection catStat } private static JsonArrayBuilder jsonVarGroup(List varGroups) { - JsonArrayBuilder vgArr = Json.createArrayBuilder(); + JsonArrayBuilder vgArr = JsonUtil.createArrayBuilder(); for (VarGroup vg : varGroups) { JsonObjectBuilder vgJson = jsonObjectBuilder().add("id", vg.getId()).add("label", vg.getLabel()); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); for (DataVariable dvar : vg.getVarsInGroup()) { jab.add(dvar.getId()); } @@ -1257,7 +1257,7 @@ private static JsonArrayBuilder jsonVarGroup(List varGroups) { } private static JsonArrayBuilder jsonVarMetadata(Collection varMetadatas) { - JsonArrayBuilder vmArr = Json.createArrayBuilder(); + JsonArrayBuilder vmArr = JsonUtil.createArrayBuilder(); for (VariableMetadata vm : varMetadatas) { JsonObjectBuilder vmJson = jsonObjectBuilder() .add("id", vm.getId()) @@ -1272,13 +1272,13 @@ private static JsonArrayBuilder jsonVarMetadata(Collection var .add("universe", vm.getUniverse()) .add("notes", vm.getNotes()) .add("categoryMetadatas",json(vm.getCategoriesMetadata())); - JsonArrayBuilder jab = Json.createArrayBuilder(); + JsonArrayBuilder jab = JsonUtil.createArrayBuilder(); } return vmArr; } private static JsonArrayBuilder json(Collection categoriesMetadata) { - JsonArrayBuilder cmArr = Json.createArrayBuilder(); + JsonArrayBuilder cmArr = JsonUtil.createArrayBuilder(); for(CategoryMetadata cm: categoriesMetadata) { JsonObjectBuilder job = jsonObjectBuilder() .add("wFreq", cm.getWfreq()) @@ -1330,7 +1330,7 @@ private static JsonArrayBuilder getFileCategories(FileMetadata fmd) { if (categories == null || categories.isEmpty()) { return null; } - JsonArrayBuilder fileCategories = Json.createArrayBuilder(); + JsonArrayBuilder fileCategories = JsonUtil.createArrayBuilder(); for (String category : categories) { fileCategories.add(category); } @@ -1345,7 +1345,7 @@ public static JsonArrayBuilder getTabularFileTags(DataFile df) { if (tags == null || tags.isEmpty()) { return null; } - JsonArrayBuilder tabularTags = Json.createArrayBuilder(); + JsonArrayBuilder tabularTags = JsonUtil.createArrayBuilder(); for (DataFileTag tag : tags) { String label = tag.getTypeLabel(); if (label != null) { @@ -1356,12 +1356,12 @@ public static JsonArrayBuilder getTabularFileTags(DataFile df) { } public static JsonObjectBuilder jsonLocallyFairRoleAssignees(Dataverse dataverse) { - JsonArrayBuilder assignees = Json.createArrayBuilder(); + JsonArrayBuilder assignees = JsonUtil.createArrayBuilder(); dataverse.getLocallyFAIRRoleAssigneeIdentifiers().stream() .sorted() .forEach(assignees::add); - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("dataverseId", dataverse.getId()) .add("dataverseAlias", dataverse.getAlias()) .add("locallyFairRoleAssignees", assignees); @@ -1385,7 +1385,7 @@ private static class DatasetFieldsToJson implements DatasetFieldWalker.Listener public void startField(DatasetField f) { objectStack.push(jsonObjectBuilder()); // Invariant: all values are multiple. Differentiation between multiple and single is done at endField. - valueArrStack.push(Json.createArrayBuilder()); + valueArrStack.push(JsonUtil.createArrayBuilder()); DatasetFieldType typ = f.getDatasetFieldType(); objectStack.peek().add("typeName", typ.getName()); @@ -1396,7 +1396,7 @@ public void startField(DatasetField f) { @Override public void addExpandedValuesArray(DatasetField f) { // Invariant: all values are multiple. Differentiation between multiple and single is done at endField. - valueArrStack.push(Json.createArrayBuilder()); + valueArrStack.push(JsonUtil.createArrayBuilder()); } @Override @@ -1448,7 +1448,7 @@ public void controlledVocabularyValue(ControlledVocabularyValue cvv) { @Override public void startCompoundValue(DatasetFieldCompoundValue dsfcv) { - valueArrStack.push(Json.createArrayBuilder()); + valueArrStack.push(JsonUtil.createArrayBuilder()); } @Override @@ -1490,7 +1490,7 @@ public static JsonObjectBuilder json(PrivateUrl privateUrl) { } public static JsonObjectBuilder json( ExplicitGroup eg ) { - JsonArrayBuilder ras = Json.createArrayBuilder(); + JsonArrayBuilder ras = JsonUtil.createArrayBuilder(); for (String u : eg.getContainedRoleAssgineeIdentifiers()) { ras.add(u); } @@ -1504,7 +1504,7 @@ public static JsonObjectBuilder json( ExplicitGroup eg ) { } public static JsonArrayBuilder jsonDataverseFacets(List dataverseFacets) { - JsonArrayBuilder dataverseFacetsJson = Json.createArrayBuilder(); + JsonArrayBuilder dataverseFacetsJson = JsonUtil.createArrayBuilder(); for(DataverseFacet facet: dataverseFacets) { dataverseFacetsJson.add(json(facet)); } @@ -1550,7 +1550,7 @@ public static Collector stringsToJso @Override public Supplier supplier() { - return () -> Json.createArrayBuilder(); + return () -> JsonUtil.createArrayBuilder(); } @Override @@ -1561,7 +1561,7 @@ public BiConsumer accumulator() { @Override public BinaryOperator combiner() { return (jab1, jab2) -> { - JsonArrayBuilder retVal = Json.createArrayBuilder(); + JsonArrayBuilder retVal = JsonUtil.createArrayBuilder(); jab1.build().forEach(retVal::add); jab2.build().forEach(retVal::add); return retVal; @@ -1581,7 +1581,7 @@ public Set characteristics() { } public static JsonObjectBuilder json(Map map) { - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); for (Map.Entry mapEntry : map.entrySet()) { jsonObjectBuilder.add(mapEntry.getKey(), mapEntry.getValue()); } @@ -1589,7 +1589,7 @@ public static JsonObjectBuilder json(Map map) { } public static JsonObjectBuilder jsonFileCountPerAccessStatusMap(Map map) { - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); for (Map.Entry mapEntry : map.entrySet()) { jsonObjectBuilder.add(mapEntry.getKey().toString(), mapEntry.getValue()); } @@ -1597,7 +1597,7 @@ public static JsonObjectBuilder jsonFileCountPerAccessStatusMap(Map map) { - JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + JsonObjectBuilder jsonObjectBuilder = JsonUtil.createObjectBuilder(); for (Map.Entry mapEntry : map.entrySet()) { jsonObjectBuilder.add(mapEntry.getKey().toString(), mapEntry.getValue()); } @@ -1628,7 +1628,7 @@ public BinaryOperator> combiner() { @Override public Function, JsonArrayBuilder> finisher() { return (l) -> { - JsonArrayBuilder bld = Json.createArrayBuilder(); + JsonArrayBuilder bld = JsonUtil.createArrayBuilder(); l.forEach( bld::add ); return bld; }; @@ -1651,7 +1651,7 @@ public static String getMd5IfItExists(DataFile.ChecksumType checksumType, String public static JsonObjectBuilder getChecksumTypeAndValue(DataFile.ChecksumType checksumType, String checksumValue) { if (checksumType != null) { - return Json.createObjectBuilder() + return JsonUtil.createObjectBuilder() .add("type", checksumType.toString()) .add("value", checksumValue); } else { @@ -1681,8 +1681,8 @@ public static JsonObjectBuilder mapToObject(Map in) { public static JsonObjectBuilder jsonLinkset(Dataset ds) { return jsonObjectBuilder() .add("anchor", ds.getPersistentURL()) - .add("cite-as", Json.createArrayBuilder().add(jsonObjectBuilder().add("href", ds.getPersistentURL()))) - .add("type", Json.createArrayBuilder().add(jsonObjectBuilder().add("href", "https://schema.org/AboutPage"))) + .add("cite-as", JsonUtil.createArrayBuilder().add(jsonObjectBuilder().add("href", ds.getPersistentURL()))) + .add("type", JsonUtil.createArrayBuilder().add(jsonObjectBuilder().add("href", "https://schema.org/AboutPage"))) .add("author", ds.getPersistentURL()) .add("protocol", ds.getProtocol()) .add("authority", ds.getAuthority()) @@ -1710,7 +1710,7 @@ private static JsonObjectBuilder jsonLicense(DatasetVersion dsv) { } public static JsonArrayBuilder jsonDataverseFieldTypeInputLevels(List inputLevels) { - JsonArrayBuilder jsonArrayOfInputLevels = Json.createArrayBuilder(); + JsonArrayBuilder jsonArrayOfInputLevels = JsonUtil.createArrayBuilder(); for (DataverseFieldTypeInputLevel inputLevel : inputLevels) { NullSafeJsonBuilder inputLevelJsonObject = NullSafeJsonBuilder.jsonObjectBuilder(); inputLevelJsonObject.add("datasetFieldTypeName", inputLevel.getDatasetFieldType().getName()); @@ -1723,7 +1723,7 @@ public static JsonArrayBuilder jsonDataverseFieldTypeInputLevels(List inputLevels) { - JsonArrayBuilder inputLevelsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder inputLevelsArrayBuilder = JsonUtil.createArrayBuilder(); for (DataverseFieldTypeInputLevel inputLevel : inputLevels) { inputLevelsArrayBuilder.add(jsonDataverseInputLevel(inputLevel)); } @@ -1740,7 +1740,7 @@ private static JsonObjectBuilder jsonDataverseInputLevel(DataverseFieldTypeInput } public static JsonArrayBuilder jsonDataverseFeaturedItems(List dataverseFeaturedItems) { - JsonArrayBuilder featuredItemsArrayBuilder = Json.createArrayBuilder(); + JsonArrayBuilder featuredItemsArrayBuilder = JsonUtil.createArrayBuilder(); for (DataverseFeaturedItem dataverseFeaturedItem : dataverseFeaturedItems) { featuredItemsArrayBuilder.add(json(dataverseFeaturedItem)); } @@ -1779,7 +1779,7 @@ public static JsonObjectBuilder json(DataverseFeaturedItem dataverseFeaturedItem } public static JsonArrayBuilder jsonTemplates(List