Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/sphinx-guides/source/developers/testing/fixtures.md
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
18 changes: 18 additions & 0 deletions forbiddenapis.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil.createArrayBuilder(...) instead
jakarta.json.Json#createArrayBuilder()
jakarta.json.Json#createArrayBuilder(java.util.Collection)
jakarta.json.Json#createArrayBuilder(jakarta.json.JsonArray)

@defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil.createObjectBuilder(...) instead
jakarta.json.Json#createObjectBuilder()
jakarta.json.Json#createObjectBuilder(java.util.Map)
jakarta.json.Json#createObjectBuilder(jakarta.json.JsonObject)

@defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil.createValue(...) instead
jakarta.json.Json#createValue(double)
jakarta.json.Json#createValue(int)
jakarta.json.Json#createValue(long)
jakarta.json.Json#createValue(java.lang.Number)
jakarta.json.Json#createValue(java.lang.String)
jakarta.json.Json#createValue(java.math.BigDecimal)
jakarta.json.Json#createValue(java.math.BigInteger)
53 changes: 53 additions & 0 deletions modules/dataverse-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,59 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>de.thetaphi</groupId>
<artifactId>forbiddenapis</artifactId>
<version>3.10</version>
<configuration>
<!-- If the used Java version is too new, don't fail, just do nothing: -->
<failOnUnsupportedJava>false</failOnUnsupportedJava>
<!--
If a class is missing while parsing signatures files, all methods
and fields from this class are silently ignored. This is useful
in multi-module Maven projects where only some modules have the
dependency to which the signature file(s) apply.

This settings prints no warning at all, so verify the signatures
at least once with full dependencies.
-->
<ignoreSignaturesOfMissingClasses>true</ignoreSignaturesOfMissingClasses>
<bundledSignatures>
<!-- See https://github.com/policeman-tools/forbidden-apis/wiki/BundledSignatures -->
<bundledSignature>jdk-non-portable</bundledSignature>
<bundledSignature>jdk-internal</bundledSignature>

<!-- Enabling the following checks will require refactoring within the codebase -->
<!--
<bundledSignature>jdk-reflection</bundledSignature>
<bundledSignature>jdk-unsafe</bundledSignature>
<bundledSignature>jdk-deprecated</bundledSignature>
<bundledSignature>jdk-system-out</bundledSignature>
<bundledSignature>commons-io-unsafe-${commons.io.version}</bundledSignature>
-->
</bundledSignatures>
<signaturesFiles>
<signaturesFile>${project.basedir}/forbiddenapis.txt</signaturesFile>
</signaturesFiles>
<targetVersion>${target.java.version}</targetVersion>
</configuration>
<executions>
<execution>
<id>for-classes</id>
<phase>process-classes</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
<execution>
<id>for-test-classes</id>
<phase>process-test-classes</phase>
<goals>
<goal>testCheck</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/DataFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -446,7 +448,7 @@ public JsonArrayBuilder getTagLabelsAsJsonArrayBuilder(){

List<DataFileTag> currentDataTags = this.getTags();

JsonArrayBuilder builder = Json.createArrayBuilder();
JsonArrayBuilder builder = JsonUtil.createArrayBuilder();

if ( (currentDataTags == null)||(currentDataTags.isEmpty())){
return builder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
Expand All @@ -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<Object> vals = new ArrayList<Object>();
Expand Down Expand Up @@ -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]);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down
32 changes: 16 additions & 16 deletions src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,14 +137,14 @@

@OneToMany(mappedBy = "datasetVersion", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
@OrderBy("label") // this is not our preferred ordering, which is with the AlphaNumericComparator, but does allow the files to be grouped by category
private List<FileMetadata> fileMetadatas = new ArrayList();

Check warning on line 140 in src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java

View workflow job for this annotation

GitHub Actions / (Stable / JDK 21) Unit Tests

unchecked conversion

@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)
@JoinColumn(name = "termsOfUseAndAccess_id")
private TermsOfUseAndAccess termsOfUseAndAccess;

@OneToMany(mappedBy = "datasetVersion", orphanRemoval = true, cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
private List<DatasetField> datasetFields = new ArrayList();

Check warning on line 147 in src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java

View workflow job for this annotation

GitHub Actions / (Stable / JDK 21) Unit Tests

unchecked conversion

@Temporal(value = TemporalType.TIMESTAMP)
@Column( nullable=false )
Expand Down Expand Up @@ -390,7 +390,7 @@
// 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);
Expand Down Expand Up @@ -1863,16 +1863,16 @@
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();
Expand All @@ -1894,7 +1894,7 @@
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) {
Expand All @@ -1908,7 +1908,7 @@
// 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
Expand Down Expand Up @@ -1963,7 +1963,7 @@
* 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);
Expand Down Expand Up @@ -1993,15 +1993,15 @@
*/
List<DatasetRelPublication> relatedPublications = getRelatedPublications();
if (!relatedPublications.isEmpty()) {
JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder();
JsonArrayBuilder jsonArrayBuilder = JsonUtil.createArrayBuilder();
for (DatasetRelPublication relatedPub : relatedPublications) {
boolean addToArray = false;
String pubCitation = relatedPub.getText();
String pubUrl = relatedPub.getUrl();
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);
Expand All @@ -2028,7 +2028,7 @@

List<String> timePeriodsCovered = this.getTimePeriodsCovered();
if (timePeriodsCovered.size() > 0) {
JsonArrayBuilder temporalCoverage = Json.createArrayBuilder();
JsonArrayBuilder temporalCoverage = JsonUtil.createArrayBuilder();
for (String timePeriod : timePeriodsCovered) {
temporalCoverage.add(timePeriod);
}
Expand All @@ -2053,7 +2053,7 @@

String installationBrandName = BrandingUtil.getInstallationBrandName();

job.add("includedInDataCatalog", Json.createObjectBuilder()
job.add("includedInDataCatalog", JsonUtil.createObjectBuilder()
.add("@type", "DataCatalog")
.add("name", installationBrandName)
.add("url", SystemConfig.getDataverseSiteUrlStatic())
Expand All @@ -2063,18 +2063,18 @@
* 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<String> 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");
Expand All @@ -2087,7 +2087,7 @@
boolean commaSeparated = true;
List<String> spatialCoverages = getSpatialCoverages(commaSeparated);
if (!spatialCoverages.isEmpty()) {
JsonArrayBuilder spatialArray = Json.createArrayBuilder();
JsonArrayBuilder spatialArray = JsonUtil.createArrayBuilder();
for (String spatialCoverage : spatialCoverages) {
spatialArray.add(spatialCoverage);
}
Expand All @@ -2096,7 +2096,7 @@

List<FileMetadata> 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();
Expand Down
Loading
Loading