diff --git a/doc/release-notes/12659-split-TermsOfUseAndAccess.md b/doc/release-notes/12659-split-TermsOfUseAndAccess.md
new file mode 100644
index 00000000000..ea56202b463
--- /dev/null
+++ b/doc/release-notes/12659-split-TermsOfUseAndAccess.md
@@ -0,0 +1 @@
+To prepare for file-specific licenses/terms the tables `TermsOfUseAndAccess` is split into two separate tables: `TermsOfUseOrLicense` and `TermsOfAccess`. Existing functionality is preserved.
diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst
index 360a96e8eb5..02e520a9b81 100644
--- a/doc/sphinx-guides/source/installation/config.rst
+++ b/doc/sphinx-guides/source/installation/config.rst
@@ -2157,7 +2157,7 @@ Example::
license.cc0_1.0.description=Creative Commons CC0 1.0 Universal Public Domain Dedication.
license.cc0_1.0.name=CC0 1.0
-You have a lot of control over which licenses and terms are available. You can remove licenses and add new ones. You can decide which license is the default. You can remove "Custom Dataset Terms" as a option. You can remove all licenses and make "Custom Dataset Terms" the only option.
+You have a lot of control over which licenses and terms are available. You can remove licenses and add new ones. You can decide which license is the default. You can remove "Custom Dataset Terms" as an option. You can remove all licenses and make "Custom Dataset Terms" the only option.
Before making changes, you are encouraged to read the :ref:`license-terms` section of the User Guide about why CC0 is the default and what the "Custom Dataset Terms" option allows.
diff --git a/src/main/java/edu/harvard/iq/dataverse/Dataset.java b/src/main/java/edu/harvard/iq/dataverse/Dataset.java
index 39dccdcd4ea..24a56919125 100644
--- a/src/main/java/edu/harvard/iq/dataverse/Dataset.java
+++ b/src/main/java/edu/harvard/iq/dataverse/Dataset.java
@@ -398,16 +398,26 @@ private DatasetVersion createNewDatasetVersion(Template template, FileMetadata f
}
}
- if (latestVersion.getTermsOfUseAndAccess()!= null){
- TermsOfUseAndAccess terms = latestVersion.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ if (latestVersion.getTermsOfAccess() != null){
+ TermsOfAccess terms = latestVersion.getTermsOfAccess().copyTermsOfAccess();
terms.setDatasetVersion(dsv);
- dsv.setTermsOfUseAndAccess(terms);
+ dsv.setTermsOfAccess(terms);
} else {
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
+ TermsOfAccess terms = new TermsOfAccess();
terms.setDatasetVersion(dsv);
- terms.setLicense(null);
terms.setFileAccessRequest(true);
- dsv.setTermsOfUseAndAccess(terms);
+ dsv.setTermsOfAccess(terms);
+ }
+
+ if (latestVersion.getTermsOfUseOrLicense() != null){
+ TermsOfUseOrLicense terms = latestVersion.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
+ terms.setDatasetVersion(dsv);
+ dsv.setTermsOfUseOrLicense(terms);
+ } else {
+ TermsOfUseOrLicense terms = new TermsOfUseOrLicense();
+ terms.setDatasetVersion(dsv);
+ terms.setLicense(null);
+ dsv.setTermsOfUseOrLicense(terms);
}
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
index ff047bec4b0..48a6f31524b 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
@@ -67,6 +67,7 @@
import edu.harvard.iq.dataverse.util.JsfHelper;
import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
import static edu.harvard.iq.dataverse.util.StringUtil.isEmpty;
+import static java.lang.Integer.*;
import edu.harvard.iq.dataverse.util.StringUtil;
import edu.harvard.iq.dataverse.util.SystemConfig;
@@ -474,7 +475,7 @@ public Boolean isHasValidTermsOfAccess() {
hasValidTermsOfAccess = true;
return hasValidTermsOfAccess;
} else {
- hasValidTermsOfAccess = TermsOfUseAndAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfUseAndAccess(), null);
+ hasValidTermsOfAccess = TermsOfAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfAccess(), null);
return hasValidTermsOfAccess;
}
}
@@ -1039,7 +1040,7 @@ public Set getFileIdsInVersionFromSolr(Long datasetVersionId, String patte
// Unlimited number of search results:
// (but we are searching within one dataset(version), so it should be manageable)
- solrQuery.setRows(Integer.MAX_VALUE);
+ solrQuery.setRows(MAX_VALUE);
logger.fine("Solr query (file search): " + solrQuery);
@@ -1940,9 +1941,9 @@ public void handleChangeButton() {
/*
Issue 8646: necessary for the access popup which is shared by the dataset page and the file page
*/
- setFileAccessRequest(workingVersion.getTermsOfUseAndAccess().isFileAccessRequest());
- setTermsOfAccess(workingVersion.getTermsOfUseAndAccess().getTermsOfAccess());
-
+ setFileAccessRequest(workingVersion.getTermsOfAccess().isFileAccessRequest());
+ setTermsOfAccess(workingVersion.getTermsOfAccess().getTermsOfAccess());
+
resetVersionUI();
}
@@ -2275,8 +2276,8 @@ private String init(boolean initFull) {
JH.addMessage(FacesMessage.SEVERITY_WARN, BundleUtil.getStringFromBundle("dataset.message.label.fileAccess"),
BundleUtil.getStringFromBundle("dataset.message.publicInstall"));
}
- setFileAccessRequest(workingVersion.getTermsOfUseAndAccess().isFileAccessRequest());
- setTermsOfAccess(workingVersion.getTermsOfUseAndAccess().getTermsOfAccess());
+ setFileAccessRequest(workingVersion.getTermsOfAccess().isFileAccessRequest());
+ setTermsOfAccess(workingVersion.getTermsOfAccess().getTermsOfAccess());
resetVersionUI();
// FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Add New Dataset", " - Enter metadata to create the dataset's citation. You can add more metadata about this dataset after it's created."));
@@ -2704,11 +2705,11 @@ private void refreshSelectedFiles(List filesToRefresh){
if (readOnly) {
dataset = datasetService.find(dataset.getId());
}
- String termsOfAccess = workingVersion.getTermsOfUseAndAccess().getTermsOfAccess();
- boolean requestAccess = workingVersion.getTermsOfUseAndAccess().isFileAccessRequest();
+ String termsOfAccess = workingVersion.getTermsOfAccess().getTermsOfAccess();
+ boolean requestAccess = workingVersion.getTermsOfAccess().isFileAccessRequest();
workingVersion = dataset.getOrCreateEditVersion();
- workingVersion.getTermsOfUseAndAccess().setTermsOfAccess(termsOfAccess);
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(requestAccess);
+ workingVersion.getTermsOfAccess().setTermsOfAccess(termsOfAccess);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(requestAccess);
List newSelectedFiles = new ArrayList<>();
for (FileMetadata fmd : filesToRefresh){
for (FileMetadata fmdn: workingVersion.getFileMetadatas()){
@@ -2778,7 +2779,7 @@ public void edit(EditMode editMode) {
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Dataset Metadata", " - Add more metadata about your dataset to help others easily find it."));
} else if (editMode.equals(EditMode.LICENSE)){
if(!isHasValidTermsOfAccess()){
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(true);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(true);
}
JH.addMessage(FacesMessage.SEVERITY_INFO, BundleUtil.getStringFromBundle("dataset.message.editTerms.label"), BundleUtil.getStringFromBundle("dataset.message.editTerms.message"));
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Dataset License and Terms", " - Update your dataset's license and terms of use."));
@@ -3793,8 +3794,8 @@ private void restrictFiles(List filesToRestrict, boolean restricte
}
if (restricted) { // get values from access popup
- workingVersion.getTermsOfUseAndAccess().setTermsOfAccess(termsOfAccess);
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(fileAccessRequest);
+ workingVersion.getTermsOfAccess().setTermsOfAccess(termsOfAccess);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(fileAccessRequest);
}
@@ -3975,8 +3976,8 @@ public void setEnteredFileAccessRequest(Boolean fileAccessRequest) {
public String saveWithTermsOfUse() {
- workingVersion.getTermsOfUseAndAccess().setTermsOfAccess(enteredTermsOfAccess);
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(enteredFileAccessRequest);
+ workingVersion.getTermsOfAccess().setTermsOfAccess(enteredTermsOfAccess);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(enteredFileAccessRequest);
return save();
}
@@ -3984,7 +3985,7 @@ public void validateDeaccessionReason(FacesContext context, UIComponent toValida
UIInput reasonRadio = (UIInput) toValidate.getAttributes().get("reasonRadio");
Object reasonRadioValue = reasonRadio.getValue();
- Integer radioVal = new Integer(reasonRadioValue.toString());
+ Integer radioVal = parseInt(reasonRadioValue.toString());
if (radioVal == 7 && (value == null || value.toString().isEmpty())) {
((UIInput) toValidate).setValid(false);
@@ -5534,7 +5535,7 @@ public boolean isFileAccessRequestMultiButtonRequired(){
if (workingVersion == null) {
return false;
}
- if (!workingVersion.getTermsOfUseAndAccess().isFileAccessRequest()){
+ if (!workingVersion.getTermsOfAccess().isFileAccessRequest()){
// return false;
}
for (FileMetadata fmd : workingVersion.getFileMetadatas()){
diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
index 4bff7150b97..828e6827cd8 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
@@ -25,10 +25,13 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
+import static java.util.stream.Collectors.joining;
+
/**
*
* @author skraffmiller
@@ -140,9 +143,13 @@ public enum VersionState {
private List fileMetadatas = new ArrayList();
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)
- @JoinColumn(name = "termsOfUseAndAccess_id")
- private TermsOfUseAndAccess termsOfUseAndAccess;
+ @JoinColumn(name = "termsofaccess_id")
+ private TermsOfAccess termsOfAccess;
+ @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)
+ @JoinColumn(name = "default_termsofuseorlicense_id")
+ private TermsOfUseOrLicense termsOfUseOrLicense;
+
@OneToMany(mappedBy = "datasetVersion", orphanRemoval = true, cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
private List datasetFields = new ArrayList();
@@ -305,12 +312,20 @@ public void setFileMetadatas(List fileMetadatas) {
this.fileMetadatas = fileMetadatas;
}
- public TermsOfUseAndAccess getTermsOfUseAndAccess() {
- return termsOfUseAndAccess;
+ public TermsOfAccess getTermsOfAccess() {
+ return termsOfAccess;
+ }
+
+ public void setTermsOfAccess(TermsOfAccess termsOfAccess) {
+ this.termsOfAccess = termsOfAccess;
+ }
+
+ public TermsOfUseOrLicense getTermsOfUseOrLicense() {
+ return termsOfUseOrLicense;
}
- public void setTermsOfUseAndAccess(TermsOfUseAndAccess termsOfUseAndAccess) {
- this.termsOfUseAndAccess = termsOfUseAndAccess;
+ public void setTermsOfUseOrLicense(TermsOfUseOrLicense termsOfUseOrLicense) {
+ this.termsOfUseOrLicense = termsOfUseOrLicense;
}
public List getDatasetFields() {
@@ -661,10 +676,15 @@ public void updateDefaultValuesFromTemplate(Template template) {
if (!template.getDatasetFields().isEmpty()) {
this.setDatasetFields(this.copyDatasetFields(template.getDatasetFields()));
}
- if (template.getTermsOfUseAndAccess() != null) {
- TermsOfUseAndAccess terms = template.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ if (template.getTermsOfAccess() != null) {
+ TermsOfAccess terms = template.getTermsOfAccess().copyTermsOfAccess();
+ terms.setDatasetVersion(this);
+ this.setTermsOfAccess(terms);
+ }
+ if (template.getTermsOfUseOrLicense() != null) {
+ TermsOfUseOrLicense terms = template.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
terms.setDatasetVersion(this);
- this.setTermsOfUseAndAccess(terms);
+ this.setTermsOfUseOrLicense(terms);
}
}
@@ -691,15 +711,25 @@ public DatasetVersion cloneDatasetVersion(){
fm.createCopyInVersion(dsv);
}
- if (this.getTermsOfUseAndAccess()!= null){
- TermsOfUseAndAccess terms = this.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ if (this.getTermsOfAccess() != null){
+ TermsOfAccess terms = this.getTermsOfAccess().copyTermsOfAccess();
+ terms.setDatasetVersion(dsv);
+ dsv.setTermsOfAccess(terms);
+ } else {
+ TermsOfAccess terms = new TermsOfAccess();
+ terms.setDatasetVersion(dsv);
+ dsv.setTermsOfAccess(terms);
+ }
+
+ if (this.getTermsOfUseOrLicense() != null){
+ TermsOfUseOrLicense terms = this.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
terms.setDatasetVersion(dsv);
- dsv.setTermsOfUseAndAccess(terms);
+ dsv.setTermsOfUseOrLicense(terms);
} else {
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
+ TermsOfUseOrLicense terms = new TermsOfUseOrLicense();
terms.setDatasetVersion(dsv);
- // terms.setLicense(TermsOfUseAndAccess.License.CC0);
- dsv.setTermsOfUseAndAccess(terms);
+ // terms.setLicense(License.CC0);
+ dsv.setTermsOfUseOrLicense(terms);
}
dsv.setDataset(this.getDataset());
@@ -711,11 +741,14 @@ public void initDefaultValues(License license) {
// from template or user entry
this.setDatasetFields(new ArrayList<>());
this.setDatasetFields(this.initDatasetFields());
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
- terms.setDatasetVersion(this);
- terms.setLicense(license);
- terms.setFileAccessRequest(true);
- this.setTermsOfUseAndAccess(terms);
+ TermsOfAccess termsOfAccess = new TermsOfAccess();
+ TermsOfUseOrLicense termsOfUseOrLicense = new TermsOfUseOrLicense();
+ termsOfAccess.setDatasetVersion(this);
+ termsOfUseOrLicense.setDatasetVersion(this);
+ termsOfUseOrLicense.setLicense(license);
+ termsOfAccess.setFileAccessRequest(true);
+ this.setTermsOfAccess(termsOfAccess);
+ this.setTermsOfUseOrLicense(termsOfUseOrLicense);
}
@@ -1808,25 +1841,34 @@ public Set validate() {
}
}
}
-
-
- TermsOfUseAndAccess toua = this.termsOfUseAndAccess;
- //Only need to test Terms of Use and Access if there are restricted files
- if (toua != null && this.isHasRestrictedFile()) {
- Set> constraintViolations = validator.validate(toua);
- if (constraintViolations.size() > 0) {
- ConstraintViolation violation = constraintViolations.iterator().next();
- String message = BundleUtil.getStringFromBundle("dataset.message.toua.invalid");
- logger.info(message);
- this.termsOfUseAndAccess.setValidationMessage(message);
- returnSet.add(violation);
+
+ if (this.termsOfAccess != null) {
+ var violations = validator.validate(this.termsOfAccess);
+ if (violations.size() > 0) {
+ returnSet.add(getViolation(violations, this.termsOfAccess.getValidationMessage()));
+ }
+ }
+ if (this.termsOfUseOrLicense != null) {
+ var violations = validator.validate(this.termsOfUseOrLicense);
+ if (violations.size() > 0) {
+ returnSet.add(getViolation(violations, this.termsOfUseOrLicense.getValidationMessage()));
}
}
-
return returnSet;
}
-
+
+ private ConstraintViolation getViolation(Set> violations, String msg) {
+ String validationMessage = violations.stream()
+ .map(cv -> cv.getMessage() + " (Invalid value:" + cv.getInvalidValue() + ")")
+ .collect(joining(", ", "Validation Failed: ", "."));
+ logger.info(validationMessage);
+ return violations.stream()
+ .filter(v -> Objects.equals(v.getMessage(), msg))
+ .findFirst()
+ .orElseGet(() -> violations.iterator().next());
+ }
+
public List getWorkflowComments() {
return workflowComments;
}
@@ -2046,8 +2088,7 @@ public String getJsonLd() {
* We used to include "https://schema.org/version/3.3" in the output for
* "schemaVersion".
*/
- TermsOfUseAndAccess terms = this.getTermsOfUseAndAccess();
- if (terms != null) {
+ if (this.getTermsOfUseOrLicense() != null) {
job.add("license",DatasetUtil.getLicenseURI(this));
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java
index fd52e0c4df4..369e1e96605 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java
@@ -208,22 +208,52 @@ public DatasetVersionDifference(DatasetVersion newVersion, DatasetVersion origin
int b = dsfb[0].getDatasetFieldType().getMetadataBlock().getId().intValue();
return Integer.valueOf(a).compareTo(b);
});
- getTermsDifferences();
+ getTermsOfAccessDifferences();
+ getTermsOfUseOrLicenseDifferences();
}
- private void getTermsDifferences() {
+ private void getTermsOfAccessDifferences() {
- TermsOfUseAndAccess originalTerms = originalVersion.getTermsOfUseAndAccess();
+ TermsOfAccess originalTerms = originalVersion.getTermsOfAccess();
if(originalTerms == null) {
- originalTerms = new TermsOfUseAndAccess();
+ originalTerms = new TermsOfAccess();
}
// newTerms should never be null
- TermsOfUseAndAccess newTerms = newVersion.getTermsOfUseAndAccess();
+ TermsOfAccess newTerms = newVersion.getTermsOfAccess();
if(newTerms == null) {
logger.warning("New version does not have TermsOfUseAndAccess");
- newTerms = new TermsOfUseAndAccess();
+ newTerms = new TermsOfAccess();
+ }
+
+ checkAndAddToChangeList(originalTerms.getTermsOfAccess(), newTerms.getTermsOfAccess(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.termsOfAccess"));
+ checkAndAddToChangeList(originalTerms.getDataAccessPlace(), newTerms.getDataAccessPlace(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace"));
+ checkAndAddToChangeList(originalTerms.getOriginalArchive(), newTerms.getOriginalArchive(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive"));
+ checkAndAddToChangeList(originalTerms.getAvailabilityStatus(), newTerms.getAvailabilityStatus(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus"));
+ checkAndAddToChangeList(originalTerms.getContactForAccess(), newTerms.getContactForAccess(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess"));
+ checkAndAddToChangeList(originalTerms.getSizeOfCollection(), newTerms.getSizeOfCollection(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection"));
+ checkAndAddToChangeList(originalTerms.getStudyCompletion(), newTerms.getStudyCompletion(),
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion"));
+ }
+
+ private void getTermsOfUseOrLicenseDifferences() {
+
+ TermsOfUseOrLicense originalTerms = originalVersion.getTermsOfUseOrLicense();
+ if(originalTerms == null) {
+ originalTerms = new TermsOfUseOrLicense();
+ }
+ // newTerms should never be null
+ TermsOfUseOrLicense newTerms = newVersion.getTermsOfUseOrLicense();
+ if(newTerms == null) {
+ logger.warning("New version does not have TermsOfUseAndAccess");
+ newTerms = new TermsOfUseOrLicense();
}
//get license name or bundle val for none to test for differences
@@ -233,37 +263,23 @@ private void getTermsDifferences() {
checkAndAddToChangeList(originalLicenseName, newLicenseName,
BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.license"));
checkAndAddToChangeList(originalTerms.getTermsOfUse(), newTerms.getTermsOfUse(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.header"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.header"));
checkAndAddToChangeList(originalTerms.getConfidentialityDeclaration(), newTerms.getConfidentialityDeclaration(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration"));
checkAndAddToChangeList(originalTerms.getSpecialPermissions(), newTerms.getSpecialPermissions(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions"));
checkAndAddToChangeList(originalTerms.getRestrictions(), newTerms.getRestrictions(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions"));
checkAndAddToChangeList(originalTerms.getCitationRequirements(), newTerms.getCitationRequirements(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements"));
checkAndAddToChangeList(originalTerms.getDepositorRequirements(), newTerms.getDepositorRequirements(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements"));
checkAndAddToChangeList(originalTerms.getConditions(), newTerms.getConditions(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions"));
checkAndAddToChangeList(originalTerms.getDisclaimer(), newTerms.getDisclaimer(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer"));
- checkAndAddToChangeList(originalTerms.getTermsOfAccess(), newTerms.getTermsOfAccess(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess"));
- checkAndAddToChangeList(originalTerms.getDataAccessPlace(), newTerms.getDataAccessPlace(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace"));
- checkAndAddToChangeList(originalTerms.getOriginalArchive(), newTerms.getOriginalArchive(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive"));
- checkAndAddToChangeList(originalTerms.getAvailabilityStatus(), newTerms.getAvailabilityStatus(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus"));
- checkAndAddToChangeList(originalTerms.getContactForAccess(), newTerms.getContactForAccess(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess"));
- checkAndAddToChangeList(originalTerms.getSizeOfCollection(), newTerms.getSizeOfCollection(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection"));
- checkAndAddToChangeList(originalTerms.getStudyCompletion(), newTerms.getStudyCompletion(),
- BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion"));
+ BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer"));
}
-
+
private void checkAndAddToChangeList(String originalTerm, String newTerm,
String termLabel) {
originalTerm = StringUtil.nullToEmpty(originalTerm);
diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java
index adcc4d38c68..718c027cbc7 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionServiceBean.java
@@ -353,9 +353,9 @@ public boolean isVersionDefaultCustomTerms(DatasetVersion datasetVersion) {
//SEK - belt and suspenders here, but this is where the bug 10719 first manifested
if (datasetVersion != null && datasetVersion.getId() != null) {
try {
- TermsOfUseAndAccess toua = (TermsOfUseAndAccess) em.createNamedQuery("TermsOfUseAndAccess.findByDatasetVersionIdAndDefaultTerms")
- .setParameter("id", datasetVersion.getId()).setParameter("defaultTerms", TermsOfUseAndAccess.DEFAULT_NOTERMS).getSingleResult();
- if (toua != null && datasetVersion.getTermsOfUseAndAccess().getLicense() == null) {
+ TermsOfUseOrLicense toua = (TermsOfUseOrLicense) em.createNamedQuery("TermsOfUseOrLicense.findByDatasetVersionIdAndDefaultTerms")
+ .setParameter("id", datasetVersion.getId()).setParameter("defaultTerms", TermsOfUseOrLicense.DEFAULT_NOTERMS).getSingleResult();
+ if (toua != null && datasetVersion.getTermsOfUseOrLicense().getLicense() == null) {
return true;
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java b/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java
index 56831834c31..52b37560e04 100644
--- a/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java
@@ -778,8 +778,8 @@ public void setVersionString(String versionString) {
public void restrictFiles(boolean restricted) throws UnsupportedOperationException {
if (restricted) { // get values from access popup
- workingVersion.getTermsOfUseAndAccess().setTermsOfAccess(termsOfAccess);
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(fileAccessRequest);
+ workingVersion.getTermsOfAccess().setTermsOfAccess(termsOfAccess);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(fileAccessRequest);
}
String fileNames = null;
@@ -852,7 +852,7 @@ public Boolean isHasValidTermsOfAccess() {
hasValidTermsOfAccess = true;
return hasValidTermsOfAccess;
} else {
- hasValidTermsOfAccess = TermsOfUseAndAccessValidator.isTOUAValid(workingVersion.getTermsOfUseAndAccess(), null);
+ hasValidTermsOfAccess = TermsOfAccessValidator.isTOUAValid(workingVersion.getTermsOfAccess(), null);
return hasValidTermsOfAccess;
}
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java
index 438d889dc7f..969f553782d 100644
--- a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java
+++ b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java
@@ -40,6 +40,7 @@
import jakarta.persistence.ManyToOne;
import jakarta.persistence.NamedNativeQuery;
import jakarta.persistence.OneToMany;
+import jakarta.persistence.OneToOne;
import jakarta.persistence.OrderBy;
import jakarta.persistence.PostLoad;
import jakarta.persistence.SqlResultSetMapping;
@@ -144,6 +145,10 @@ public class FileMetadata implements Serializable {
@JoinColumn(nullable=false)
private DataFile dataFile;
+ @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)
+ @JoinColumn(name = "termsofuseorlicense_id")
+ private TermsOfUseOrLicense termsOfUseOrLicense;
+
/**
* There are two types of provenance types and this "free-form" type is
* represented in the GUI as text box the user can type into. The other type
@@ -183,10 +188,11 @@ public FileMetadata createCopyInVersion(DatasetVersion dsv) {
fmd.setRestricted( isRestricted() );
fmd.setDirectoryLabel(getDirectoryLabel());
fmd.setProvFreeForm(getProvFreeForm());
+ fmd.setTermsOfUseOrLicense(null);
dsv.getFileMetadatas().add(fmd);
return fmd;
}
-
+
public String getLabel() {
getLabelNoExtension();
return label;
@@ -845,5 +851,12 @@ public Set validate() {
return returnSet;
}
-
+
+ public TermsOfUseOrLicense getTermsOfUseOrLicense() {
+ return termsOfUseOrLicense;
+ }
+
+ public void setTermsOfUseOrLicense(TermsOfUseOrLicense termsOfUseOrLicense) {
+ this.termsOfUseOrLicense = termsOfUseOrLicense;
+ }
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java
index 698a9f94de6..733e1802bb7 100644
--- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java
@@ -239,8 +239,8 @@ public String init() {
}
}
- //termsOfAccess = fileMetadata.getDatasetVersion().getTermsOfUseAndAccess().getTermsOfAccess();
- //fileAccessRequest = fileMetadata.getDatasetVersion().getTermsOfUseAndAccess().isFileAccessRequest();
+ //termsOfAccess = fileMetadata.getDatasetVersion().getTermsOfAccess().getTermsOfAccess();
+ //fileAccessRequest = fileMetadata.getDatasetVersion().getTermsOfAccess().isFileAccessRequest();
this.guestbookResponse = this.guestbookResponseService.initGuestbookResponseForFragment(fileMetadata, session);
@@ -513,8 +513,8 @@ public String restrictFile(boolean restricted) throws CommandException{
String fileNames = null;
editDataset = this.file.getOwner();
if (restricted) { // get values from access popup
- editDataset.getOrCreateEditVersion().getTermsOfUseAndAccess().setTermsOfAccess(termsOfAccess);
- editDataset.getOrCreateEditVersion().getTermsOfUseAndAccess().setFileAccessRequest(fileAccessRequest);
+ editDataset.getOrCreateEditVersion().getTermsOfAccess().setTermsOfAccess(termsOfAccess);
+ editDataset.getOrCreateEditVersion().getTermsOfAccess().setFileAccessRequest(fileAccessRequest);
}
//using this method to update the terms for datasets that are out of compliance
// with Terms of Access requirement - may get her with a file that is already restricted
@@ -913,7 +913,7 @@ public Boolean isHasValidTermsOfAccess() {
hasValidTermsOfAccess = true;
return hasValidTermsOfAccess;
} else {
- hasValidTermsOfAccess = TermsOfUseAndAccessValidator.isTOUAValid(fileMetadata.getDatasetVersion().getTermsOfUseAndAccess(), null);
+ hasValidTermsOfAccess = TermsOfAccessValidator.isTOUAValid(fileMetadata.getDatasetVersion().getTermsOfAccess(), null);
return hasValidTermsOfAccess;
}
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/Template.java b/src/main/java/edu/harvard/iq/dataverse/Template.java
index 5082db5e736..8b12ad2eddc 100644
--- a/src/main/java/edu/harvard/iq/dataverse/Template.java
+++ b/src/main/java/edu/harvard/iq/dataverse/Template.java
@@ -113,15 +113,27 @@ public String getCreateDate() {
}
@OneToOne(cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval=true)
- @JoinColumn(name = "termsOfUseAndAccess_id")
- private TermsOfUseAndAccess termsOfUseAndAccess;
+ @JoinColumn(name = "termsofaccess_id")
+ private TermsOfAccess termsOfAccess;
- public TermsOfUseAndAccess getTermsOfUseAndAccess() {
- return termsOfUseAndAccess;
+ public TermsOfAccess getTermsOfAccess() {
+ return termsOfAccess;
}
- public void setTermsOfUseAndAccess(TermsOfUseAndAccess termsOfUseAndAccess) {
- this.termsOfUseAndAccess = termsOfUseAndAccess;
+ public void setTermsOfAccess(TermsOfAccess termsOfAccess) {
+ this.termsOfAccess = termsOfAccess;
+ }
+
+ @OneToOne(cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval=true)
+ @JoinColumn(name = "termsofuseorlicense_id")
+ private TermsOfUseOrLicense termsOfUseOrLicense;
+
+ public TermsOfUseOrLicense getTermsOfUseOrLicense() {
+ return termsOfUseOrLicense;
+ }
+
+ public void setTermsOfUseOrLicense(TermsOfUseOrLicense termsOfUseOrLicense) {
+ this.termsOfUseOrLicense = termsOfUseOrLicense;
}
@OneToMany(mappedBy = "template", orphanRemoval = true, cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
@@ -359,17 +371,26 @@ public Template cloneNewTemplate(Template source) {
if (latestVersion.getDatasetFields() != null && !latestVersion.getDatasetFields().isEmpty()) {
newTemplate.setDatasetFields(newTemplate.copyDatasetFields(source.getDatasetFields()));
}
- TermsOfUseAndAccess terms = null;
- if(source.getTermsOfUseAndAccess() != null){
- terms = source.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ TermsOfAccess termsOfAccess = null;
+ if(source.getTermsOfAccess() != null){
+ termsOfAccess = source.getTermsOfAccess().copyTermsOfAccess();
} else {
- terms = new TermsOfUseAndAccess();
- // terms.setLicense(TermsOfUseAndAccess.defaultLicense);
- terms.setFileAccessRequest(true);
+ termsOfAccess = new TermsOfAccess();
+ termsOfAccess.setFileAccessRequest(true);
}
- terms.setTemplate(newTemplate);
- newTemplate.setTermsOfUseAndAccess(terms);
+ termsOfAccess.setTemplate(newTemplate);
+ newTemplate.setTermsOfAccess(termsOfAccess);
+ TermsOfUseOrLicense termsOfUseOrLicense = null;
+ if(source.getTermsOfUseOrLicense() != null){
+ termsOfUseOrLicense = source.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
+ } else {
+ termsOfUseOrLicense = new TermsOfUseOrLicense();
+ // terms.setLicense(TermsOfUseAndAccess.defaultLicense);
+ }
+ termsOfUseOrLicense.setTemplate(newTemplate);
+ newTemplate.setTermsOfUseOrLicense(termsOfUseOrLicense);
+
newTemplate.getInstructionsMap().putAll(source.getInstructionsMap());
newTemplate.updateInstructions();
return newTemplate;
diff --git a/src/main/java/edu/harvard/iq/dataverse/TemplatePage.java b/src/main/java/edu/harvard/iq/dataverse/TemplatePage.java
index 279944beaa7..af56c9dfd2f 100644
--- a/src/main/java/edu/harvard/iq/dataverse/TemplatePage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/TemplatePage.java
@@ -135,10 +135,16 @@ public String init() {
template.setDataverse(dataverse);
template.setMetadataValueBlocks(settingsWrapper.getSystemMetadataBlocks());
- if (template.getTermsOfUseAndAccess() != null) {
- TermsOfUseAndAccess terms = template.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ if (template.getTermsOfAccess() != null) {
+ TermsOfAccess terms = template.getTermsOfAccess().copyTermsOfAccess();
terms.setTemplate(template);
- template.setTermsOfUseAndAccess(terms);
+ template.setTermsOfAccess(terms);
+ }
+
+ if (template.getTermsOfUseOrLicense() != null) {
+ TermsOfUseOrLicense terms = template.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
+ terms.setTemplate(template);
+ template.setTermsOfUseOrLicense(terms);
}
updateDatasetFieldInputLevels();
@@ -147,11 +153,16 @@ public String init() {
editMode = TemplatePage.EditMode.CREATE;
template = new Template(this.dataverse, settingsWrapper.getSystemMetadataBlocks());
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
- terms.setFileAccessRequest(true);
- terms.setTemplate(template);
- terms.setLicense(licenseServiceBean.getDefault());
- template.setTermsOfUseAndAccess(terms);
+
+ TermsOfAccess toa = new TermsOfAccess();
+ toa.setTemplate(template);
+ template.setTermsOfAccess(toa);
+
+ TermsOfUseOrLicense toual = new TermsOfUseOrLicense();
+ toual.setTemplate(template);
+ toual.setLicense(licenseServiceBean.getDefault());
+ template.setTermsOfUseOrLicense(toual);
+
updateDatasetFieldInputLevels();
} else {
throw new RuntimeException("On Template page without id or ownerid."); // improve error handling
diff --git a/src/main/java/edu/harvard/iq/dataverse/TermsOfAccess.java b/src/main/java/edu/harvard/iq/dataverse/TermsOfAccess.java
new file mode 100644
index 00000000000..c3bcaafe358
--- /dev/null
+++ b/src/main/java/edu/harvard/iq/dataverse/TermsOfAccess.java
@@ -0,0 +1,202 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package edu.harvard.iq.dataverse;
+
+import java.io.Serializable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
+import jakarta.persistence.Transient;
+
+/**
+ *
+ *
+ * @author skraffmi
+ */
+@Entity
+@Table(name = "termsofaccess")
+@ValidateTermsOfAccess
+public class TermsOfAccess implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ @OneToOne(mappedBy = "termsOfAccess")
+ private DatasetVersion datasetVersion;
+
+ public DatasetVersion getDatasetVersion() {
+ return datasetVersion;
+ }
+
+ public void setDatasetVersion(DatasetVersion datasetVersion) {
+ this.datasetVersion = datasetVersion;
+ }
+
+ @OneToOne(mappedBy = "termsOfAccess")
+ private Template template;
+
+ public Template getTemplate() {
+ return template;
+ }
+
+ public void setTemplate(Template template) {
+ this.template = template;
+ }
+
+
+ @Column(name = "termsofaccess", columnDefinition = "TEXT")
+ private String termsOfAccess;
+
+ @Column(name = "dataaccessplace", columnDefinition = "TEXT")
+ private String dataAccessPlace;
+
+ @Column(name = "originalarchive", columnDefinition = "TEXT")
+ private String originalArchive;
+
+ @Column(name = "availabilitystatus", columnDefinition = "TEXT")
+ private String availabilityStatus;
+
+ @Column(name = "contactforaccess", columnDefinition = "TEXT")
+ private String contactForAccess;
+
+ @Column(name = "sizeofcollection", columnDefinition = "TEXT")
+ private String sizeOfCollection;
+
+ @Column(name = "studycompletion", columnDefinition = "TEXT")
+ private String studyCompletion;
+
+ @Column(name = "fileaccessrequest")
+ private boolean fileAccessRequest;
+
+ public boolean isFileAccessRequest() {
+ return fileAccessRequest;
+ }
+
+ public void setFileAccessRequest(boolean fileAccessRequest) {
+ this.fileAccessRequest = fileAccessRequest;
+ }
+
+ public String getTermsOfAccess() {
+ return termsOfAccess;
+ }
+
+ public void setTermsOfAccess(String termsOfAccess) {
+ this.termsOfAccess = termsOfAccess;
+ }
+
+ public String getDataAccessPlace() {
+ return dataAccessPlace;
+ }
+
+ public void setDataAccessPlace(String dataAccessPlace) {
+ this.dataAccessPlace = dataAccessPlace;
+ }
+
+ public String getOriginalArchive() {
+ return originalArchive;
+ }
+
+ public void setOriginalArchive(String originalArchive) {
+ this.originalArchive = originalArchive;
+ }
+
+ public String getAvailabilityStatus() {
+ return availabilityStatus;
+ }
+
+ public void setAvailabilityStatus(String availabilityStatus) {
+ this.availabilityStatus = availabilityStatus;
+ }
+
+ public String getContactForAccess() {
+ return contactForAccess;
+ }
+
+ public void setContactForAccess(String contactForAccess) {
+ this.contactForAccess = contactForAccess;
+ }
+
+ public String getSizeOfCollection() {
+ return sizeOfCollection;
+ }
+
+ public void setSizeOfCollection(String sizeOfCollection) {
+ this.sizeOfCollection = sizeOfCollection;
+ }
+
+ public String getStudyCompletion() {
+ return studyCompletion;
+ }
+
+ public void setStudyCompletion(String studyCompletion) {
+ this.studyCompletion = studyCompletion;
+ }
+
+
+ public TermsOfAccess copyTermsOfAccess(){
+
+ TermsOfAccess retVal = new TermsOfAccess();
+ retVal.setAvailabilityStatus(this.getAvailabilityStatus());
+ retVal.setContactForAccess(this.getContactForAccess());
+ retVal.setDataAccessPlace(this.getDataAccessPlace());
+ retVal.setOriginalArchive(this.getOriginalArchive());
+ retVal.setSizeOfCollection(this.getSizeOfCollection());
+ retVal.setStudyCompletion(this.getStudyCompletion());
+ retVal.setTermsOfAccess(this.getTermsOfAccess());
+ retVal.setFileAccessRequest(this.isFileAccessRequest());
+ return retVal;
+ }
+
+ @Transient
+ private String validationMessage;
+
+ public String getValidationMessage() {
+ return validationMessage;
+ }
+
+ public void setValidationMessage(String validationMessage) {
+ this.validationMessage = validationMessage;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 0;
+ hash += (id != null ? id.hashCode() : 0);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ // TODO: Warning - this method won't work in the case the id fields are not set
+ if (!(object instanceof TermsOfAccess)) {
+ return false;
+ }
+ TermsOfAccess other = (TermsOfAccess) object;
+ if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getCanonicalName() + "[ id=" + id + " ]";
+ }
+
+}
diff --git a/src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccessValidator.java b/src/main/java/edu/harvard/iq/dataverse/TermsOfAccessValidator.java
similarity index 68%
rename from src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccessValidator.java
rename to src/main/java/edu/harvard/iq/dataverse/TermsOfAccessValidator.java
index ca38a305d63..bca89f240da 100644
--- a/src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccessValidator.java
+++ b/src/main/java/edu/harvard/iq/dataverse/TermsOfAccessValidator.java
@@ -13,35 +13,35 @@
*
* @author skraffmi
*/
-public class TermsOfUseAndAccessValidator implements ConstraintValidator {
+public class TermsOfAccessValidator implements ConstraintValidator {
@Override
- public void initialize(ValidateTermsOfUseAndAccess constraintAnnotation) {
+ public void initialize(ValidateTermsOfAccess constraintAnnotation) {
}
@Override
- public boolean isValid(TermsOfUseAndAccess value, ConstraintValidatorContext context) {
-
+ public boolean isValid(TermsOfAccess value, ConstraintValidatorContext context) {
+
return isTOUAValid(value, context);
}
-
- public static boolean isTOUAValid(TermsOfUseAndAccess value, ConstraintValidatorContext context){
-
+
+ public static boolean isTOUAValid(TermsOfAccess value, ConstraintValidatorContext context){
+
//if part of a template it is valid
if (value.getTemplate() != null){
return true;
}
-
- //If there are no restricted files then terms are valid
+
+ //If there are no restricted files then terms are valid
if (!value.getDatasetVersion().isHasRestrictedFile()) {
return true;
}
/*If there are restricted files then the version
- must allow access requests or have terms of access filled in.
+ must have terms of access filled in.
*/
- boolean valid = value.isFileAccessRequest() == true || (value.getTermsOfAccess() != null && !value.getTermsOfAccess().isEmpty());
+ boolean valid = value.isFileAccessRequest() || (value.getTermsOfAccess() != null && !value.getTermsOfAccess().isEmpty());
if (!valid) {
try {
if (context != null) {
@@ -57,3 +57,4 @@ public static boolean isTOUAValid(TermsOfUseAndAccess value, ConstraintValidator
return valid;
}
}
+
diff --git a/src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccess.java b/src/main/java/edu/harvard/iq/dataverse/TermsOfUseOrLicense.java
similarity index 65%
rename from src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccess.java
rename to src/main/java/edu/harvard/iq/dataverse/TermsOfUseOrLicense.java
index c1e76aee2ab..bdab9c8ff27 100644
--- a/src/main/java/edu/harvard/iq/dataverse/TermsOfUseAndAccess.java
+++ b/src/main/java/edu/harvard/iq/dataverse/TermsOfUseOrLicense.java
@@ -14,23 +14,23 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import edu.harvard.iq.dataverse.license.License;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
-
@NamedQueries({
- // TermsOfUseAndAccess.findByDatasetVersionIdAndDefaultTerms
- // is used to determine if the dataset terms were set by the multi license support update
+ // TermsOfUseOrLicense.findByDatasetVersionIdAndDefaultTerms
+ // is used to determine if the dataset terms were set by the multi license support update
// as part of the 5.10 release.
-
- @NamedQuery(name = "TermsOfUseAndAccess.findByDatasetVersionIdAndDefaultTerms",
- query = "SELECT o FROM TermsOfUseAndAccess o, DatasetVersion dv WHERE "
+
+ @NamedQuery(name = "TermsOfUseOrLicense.findByDatasetVersionIdAndDefaultTerms",
+ query = "SELECT o FROM TermsOfUseOrLicense o, DatasetVersion dv WHERE "
+ "dv.id =:id "
- + "AND dv.termsOfUseAndAccess.id = o.id "
+ + "AND dv.termsOfUseOrLicense.id = o.id "
+ "AND o.termsOfUse =:defaultTerms "
- + "AND o.confidentialityDeclaration IS null "
+ + "AND o.confidentialityDeclaration IS null "
+ "AND o.specialPermissions IS null "
+ "AND o.restrictions IS null "
+ "AND o.citationRequirements IS null "
@@ -42,13 +42,12 @@
/**
*
- *
+ *
* @author skraffmi
*/
@Entity
-@ValidateTermsOfUseAndAccess
-public class TermsOfUseAndAccess implements Serializable {
-
+@Table(name = "termsofuseorlicense")
+public class TermsOfUseOrLicense implements Serializable {
public static final String DEFAULT_NOTERMS = "This dataset is made available without information on how it can be used. You should communicate with the Contact(s) specified before use.";
@Id
@@ -62,8 +61,8 @@ public Long getId() {
public void setId(Long id) {
this.id = id;
}
-
- @OneToOne(mappedBy = "termsOfUseAndAccess")
+
+ @OneToOne(mappedBy = "termsOfUseOrLicense")
private DatasetVersion datasetVersion;
public DatasetVersion getDatasetVersion() {
@@ -73,8 +72,8 @@ public DatasetVersion getDatasetVersion() {
public void setDatasetVersion(DatasetVersion datasetVersion) {
this.datasetVersion = datasetVersion;
}
-
- @OneToOne(mappedBy = "termsOfUseAndAccess")
+
+ @OneToOne(mappedBy = "termsOfUseOrLicense")
private Template template;
public Template getTemplate() {
@@ -84,66 +83,35 @@ public Template getTemplate() {
public void setTemplate(Template template) {
this.template = template;
}
-
+
@ManyToOne
- @JoinColumn(name="license_id")
+ @JoinColumn(name = "license_id")
private License license;
- @Column(columnDefinition="TEXT")
+ @Column(name = "termsofuse", columnDefinition = "TEXT")
private String termsOfUse;
-
- @Column(columnDefinition="TEXT")
- private String termsOfAccess;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "confidentialitydeclaration", columnDefinition = "TEXT")
private String confidentialityDeclaration;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "specialpermissions", columnDefinition = "TEXT")
private String specialPermissions;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "restrictions", columnDefinition = "TEXT")
private String restrictions;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "citationrequirements", columnDefinition = "TEXT")
private String citationRequirements;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "depositorrequirements", columnDefinition = "TEXT")
private String depositorRequirements;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "conditions", columnDefinition = "TEXT")
private String conditions;
-
- @Column(columnDefinition="TEXT")
+
+ @Column(name = "disclaimer", columnDefinition = "TEXT")
private String disclaimer;
-
- @Column(columnDefinition="TEXT")
- private String dataAccessPlace;
-
- @Column(columnDefinition="TEXT")
- private String originalArchive;
-
- @Column(columnDefinition="TEXT")
- private String availabilityStatus;
-
- @Column(columnDefinition="TEXT")
- private String contactForAccess;
-
- @Column(columnDefinition="TEXT")
- private String sizeOfCollection;
-
- @Column(columnDefinition="TEXT")
- private String studyCompletion;
-
- private boolean fileAccessRequest;
-
- public boolean isFileAccessRequest() {
- return fileAccessRequest;
- }
- public void setFileAccessRequest(boolean fileAccessRequest) {
- this.fileAccessRequest = fileAccessRequest;
- }
-
public License getLicense() {
return license;
}
@@ -168,14 +136,6 @@ public void setTermsOfUse(String termsOfUse) {
}
}
- public String getTermsOfAccess() {
- return termsOfAccess;
- }
-
- public void setTermsOfAccess(String termsOfAccess) {
- this.termsOfAccess = termsOfAccess;
- }
-
public String getConfidentialityDeclaration() {
return confidentialityDeclaration;
}
@@ -260,66 +220,9 @@ public void setDisclaimer(String disclaimer) {
}
}
- public String getDataAccessPlace() {
- return dataAccessPlace;
- }
+ public TermsOfUseOrLicense copyTermsOfUseOrLicense(){
- public void setDataAccessPlace(String dataAccessPlace) {
- this.dataAccessPlace = dataAccessPlace;
- }
-
- public String getOriginalArchive() {
- return originalArchive;
- }
-
- public void setOriginalArchive(String originalArchive) {
- this.originalArchive = originalArchive;
- }
-
- public String getAvailabilityStatus() {
- return availabilityStatus;
- }
-
- public void setAvailabilityStatus(String availabilityStatus) {
- this.availabilityStatus = availabilityStatus;
- }
-
- public String getContactForAccess() {
- return contactForAccess;
- }
-
- public void setContactForAccess(String contactForAccess) {
- this.contactForAccess = contactForAccess;
- }
-
- public String getSizeOfCollection() {
- return sizeOfCollection;
- }
-
- public void setSizeOfCollection(String sizeOfCollection) {
- this.sizeOfCollection = sizeOfCollection;
- }
-
- public String getStudyCompletion() {
- return studyCompletion;
- }
-
- public void setStudyCompletion(String studyCompletion) {
- this.studyCompletion = studyCompletion;
- }
-
-
- public TermsOfUseAndAccess copyTermsOfUseAndAccess(){
-
- TermsOfUseAndAccess retVal = new TermsOfUseAndAccess();
- retVal.setAvailabilityStatus(this.getAvailabilityStatus());
- retVal.setContactForAccess(this.getContactForAccess());
- retVal.setDataAccessPlace(this.getDataAccessPlace());
- retVal.setOriginalArchive(this.getOriginalArchive());
- retVal.setSizeOfCollection(this.getSizeOfCollection());
- retVal.setStudyCompletion(this.getStudyCompletion());
- retVal.setTermsOfAccess(this.getTermsOfAccess());
- retVal.setFileAccessRequest(this.isFileAccessRequest());
+ TermsOfUseOrLicense retVal = new TermsOfUseOrLicense();
retVal.setLicense(this.getLicense());
if (license == null) {
retVal.setTermsOfUse(this.getTermsOfUse());
@@ -345,7 +248,7 @@ private void clearCustomTermsVariables(){
conditions = null;
disclaimer = null;
}
-
+
@Transient
private String validationMessage;
@@ -356,7 +259,7 @@ public String getValidationMessage() {
public void setValidationMessage(String validationMessage) {
this.validationMessage = validationMessage;
}
-
+
@Override
public int hashCode() {
int hash = 0;
@@ -367,10 +270,10 @@ public int hashCode() {
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
- if (!(object instanceof TermsOfUseAndAccess)) {
+ if (!(object instanceof TermsOfUseOrLicense)) {
return false;
}
- TermsOfUseAndAccess other = (TermsOfUseAndAccess) object;
+ TermsOfUseOrLicense other = (TermsOfUseOrLicense) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
@@ -379,7 +282,8 @@ public boolean equals(Object object) {
@Override
public String toString() {
- return "edu.harvard.iq.dataverse.TermsOfUseAndAccess[ id=" + id + " ]";
+ return this.getClass().getCanonicalName() + "[ id=" + id + " ]";
}
-
+
}
+
diff --git a/src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfUseAndAccess.java b/src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfAccess.java
similarity index 87%
rename from src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfUseAndAccess.java
rename to src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfAccess.java
index f55e93af674..e74e3cb0be2 100644
--- a/src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfUseAndAccess.java
+++ b/src/main/java/edu/harvard/iq/dataverse/ValidateTermsOfAccess.java
@@ -19,9 +19,9 @@
*/
@Target({TYPE})
@Retention(RUNTIME)
-@Constraint(validatedBy = {TermsOfUseAndAccessValidator.class})
+@Constraint(validatedBy = {TermsOfAccessValidator.class})
@Documented
-public @interface ValidateTermsOfUseAndAccess {
+public @interface ValidateTermsOfAccess {
String message() default "Failed Validation Terms Of Use and Access";
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 cdb27fd5f21..20106018075 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Access.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Access.java
@@ -35,6 +35,7 @@
import jakarta.ejb.EJB;
import jakarta.inject.Inject;
import jakarta.json.*;
+import jakarta.json.JsonObjectBuilder;
import jakarta.persistence.TypedQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.ws.rs.*;
@@ -1797,7 +1798,7 @@ public Response allowAccessRequest(@Context ContainerRequestContext crc,
dataverseRequest = createDataverseRequest(getRequestUser(crc));
- dataset.getOrCreateEditVersion().getTermsOfUseAndAccess().setFileAccessRequest(allowRequest);
+ dataset.getOrCreateEditVersion().getTermsOfAccess().setFileAccessRequest(allowRequest);
try {
engineSvc.submit(new UpdateDatasetVersionCommand(dataset, dataverseRequest));
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 1b549b10a6b..325194a01eb 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java
@@ -938,16 +938,18 @@ public Response updateDraftVersion(@Context ContainerRequestContext crc,
if (updateDraft) {
final DatasetVersion editVersion = ds.getOrCreateEditVersion();
editVersion.setDatasetFields(incomingVersion.getDatasetFields());
- editVersion.setTermsOfUseAndAccess(incomingVersion.getTermsOfUseAndAccess());
- editVersion.getTermsOfUseAndAccess().setDatasetVersion(editVersion);
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(editVersion.getTermsOfUseAndAccess(), null);
+ editVersion.setTermsOfAccess(incomingVersion.getTermsOfAccess());
+ editVersion.getTermsOfAccess().setDatasetVersion(editVersion);
+ editVersion.setTermsOfUseOrLicense(incomingVersion.getTermsOfUseOrLicense());
+ editVersion.getTermsOfUseOrLicense().setDatasetVersion(editVersion);
+ boolean hasValidTerms = TermsOfAccessValidator.isTOUAValid(editVersion.getTermsOfAccess(), null);
if (!hasValidTerms) {
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
Dataset managedDataset = execCommand(new UpdateDatasetVersionCommand(ds, req));
managedVersion = managedDataset.getOrCreateEditVersion();
} else {
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(incomingVersion.getTermsOfUseAndAccess(), null);
+ boolean hasValidTerms = TermsOfAccessValidator.isTOUAValid(incomingVersion.getTermsOfAccess(), null);
if (!hasValidTerms) {
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
@@ -1030,8 +1032,9 @@ public Response updateVersionMetadata(@Context ContainerRequestContext crc,
//Get the current draft or create a new version to update
DatasetVersion dsv = ds.getOrCreateEditVersion();
dsv = JSONLDUtil.updateDatasetVersionMDFromJsonLD(dsv, jsonLDBody, metadataBlockService, datasetFieldSvc, !replaceTerms, false, licenseSvc);
- dsv.getTermsOfUseAndAccess().setDatasetVersion(dsv);
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(dsv.getTermsOfUseAndAccess(), null);
+ dsv.getTermsOfAccess().setDatasetVersion(dsv);
+ dsv.getTermsOfUseOrLicense().setDatasetVersion(dsv);
+ boolean hasValidTerms = TermsOfAccessValidator.isTOUAValid(dsv.getTermsOfAccess(), null);
if (!hasValidTerms) {
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
@@ -1069,7 +1072,8 @@ public Response deleteMetadata(@Context ContainerRequestContext crc,
//Get the current draft or create a new version to update
DatasetVersion dsv = ds.getOrCreateEditVersion();
dsv = JSONLDUtil.deleteDatasetVersionMDFromJsonLD(dsv, jsonLDBody, metadataBlockService, licenseSvc);
- dsv.getTermsOfUseAndAccess().setDatasetVersion(dsv);
+ dsv.getTermsOfAccess().setDatasetVersion(dsv);
+ dsv.getTermsOfUseOrLicense().setDatasetVersion(dsv);
DatasetVersion managedVersion;
Dataset managedDataset = execCommand(new UpdateDatasetVersionCommand(ds, req));
managedVersion = managedDataset.getLatestVersion();
@@ -1108,8 +1112,9 @@ private Response processDatasetFieldDataDelete(String jsonBody, String id, Datav
Dataset ds = findDatasetOrDie(id);
JsonObject json = JsonUtil.getJsonObject(jsonBody);
//Get the current draft or create a new version to update
- DatasetVersion dsv = ds.getOrCreateEditVersion();
- dsv.getTermsOfUseAndAccess().setDatasetVersion(dsv);
+ DatasetVersion dsv = ds.getOrCreateEditVersion();
+ dsv.getTermsOfAccess().setDatasetVersion(dsv);
+ dsv.getTermsOfUseOrLicense().setDatasetVersion(dsv);
List fields = new LinkedList<>();
DatasetField singleField = null;
@@ -1313,13 +1318,13 @@ public Response editVersionTermsOfAccess(@Context ContainerRequestContext crc,
JsonObject json = JsonUtil.getJsonObject(jsonBody);
- TermsOfUseAndAccess toua = jsonParser().parseTermsOfAccess(json);
+ TermsOfAccess toa = jsonParser().parseTermsOfAccess(json);
- if (publicInstall && (toua.isFileAccessRequest() || !toua.getTermsOfAccess().isEmpty())){
+ if (publicInstall && (toa.isFileAccessRequest() || !toa.getTermsOfAccess().isEmpty())){
return error(BAD_REQUEST, "Setting File Access Request or Terms of Access is not permitted on a public installation.");
}
- DatasetVersion updatedVersion = execCommand(new UpdateDatasetTermsOfAccessCommand(dataset, toua, createDataverseRequest(getRequestUser(crc)))).getLatestVersion();
+ DatasetVersion updatedVersion = execCommand(new UpdateDatasetTermsOfAccessCommand(dataset, toa, createDataverseRequest(getRequestUser(crc)))).getLatestVersion();
return ok(json(updatedVersion, true));
@@ -1390,8 +1395,7 @@ public Response publishDataset(@Context ContainerRequestContext crc,
Dataset ds = findDatasetOrDie(id);
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(ds.getLatestVersion().getTermsOfUseAndAccess(), null);
- if (!hasValidTerms) {
+ if (!TermsOfAccessValidator.isTOUAValid(ds.getLatestVersion().getTermsOfAccess(), null)) {
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
@@ -1643,9 +1647,7 @@ public Response createFileEmbargo(@Context ContainerRequestContext crc, @Paramet
return ex.getResponse();
}
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfUseAndAccess(), null);
-
- if (!hasValidTerms){
+ if (!TermsOfAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfAccess(), null)){
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
@@ -1935,9 +1937,7 @@ public Response createFileRetention(@Context ContainerRequestContext crc, @Param
return ex.getResponse();
}
- boolean hasValidTerms = TermsOfUseAndAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfUseAndAccess(), null);
-
- if (!hasValidTerms){
+ if (!TermsOfAccessValidator.isTOUAValid(dataset.getLatestVersion().getTermsOfAccess(), null)){
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
@@ -6748,7 +6748,7 @@ public Response updateLicense(@Context ContainerRequestContext crc,
return ok(BundleUtil.getStringFromBundle("datasets.api.updateLicense.success"));
} else if (requestBody.getCustomTerms() != null) {
CustomTermsDTO customTerms = requestBody.getCustomTerms();
- execCommand(new UpdateDatasetLicenseCommand(req, dataset, customTerms.toTermsOfUseAndAccess()));
+ execCommand(new UpdateDatasetLicenseCommand(req, dataset, customTerms.toTermsOfUseOrLicense()));
return ok(BundleUtil.getStringFromBundle("datasets.api.updateLicense.success"));
} else {
return badRequest(BundleUtil.getStringFromBundle("datasets.api.updateLicense.licenseNameIsEmpty"));
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 8e4a83f48b9..4758622401e 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
@@ -445,8 +445,9 @@ public Response createDataset(@Context ContainerRequestContext crc,
version.setMinorVersionNumber(null);
version.setVersionNumber(null);
version.setVersionState(DatasetVersion.VersionState.DRAFT);
- version.getTermsOfUseAndAccess().setFileAccessRequest(true);
- version.getTermsOfUseAndAccess().setDatasetVersion(version);
+ version.getTermsOfAccess().setFileAccessRequest(true);
+ version.getTermsOfAccess().setDatasetVersion(version);
+ version.getTermsOfUseOrLicense().setDatasetVersion(version);
ds.setAuthority(null);
ds.setIdentifier(null);
@@ -512,8 +513,9 @@ public Response createDatasetFromJsonLd(@Context ContainerRequestContext crc,
version.setMinorVersionNumber(null);
version.setVersionNumber(null);
version.setVersionState(DatasetVersion.VersionState.DRAFT);
- version.getTermsOfUseAndAccess().setFileAccessRequest(true);
- version.getTermsOfUseAndAccess().setDatasetVersion(version);
+ version.getTermsOfAccess().setFileAccessRequest(true);
+ version.getTermsOfAccess().setDatasetVersion(version);
+ version.getTermsOfUseOrLicense().setDatasetVersion(version);
ds.setAuthority(null);
ds.setIdentifier(null);
@@ -2426,7 +2428,7 @@ public Response updateTemplateLicenseTerms(@Context ContainerRequestContext crc,
return ok(BundleUtil.getStringFromBundle("dataverses.api.update.template.license.success"));
} else if (requestBody.getCustomTerms() != null) {
CustomTermsDTO customTerms = requestBody.getCustomTerms();
- execCommand(new UpdateTemplateLicenseCommand(createDataverseRequest(getRequestUser(crc)), template, dataverse, customTerms.toTermsOfUseAndAccess()));
+ execCommand(new UpdateTemplateLicenseCommand(createDataverseRequest(getRequestUser(crc)), template, dataverse, customTerms.toTermsOfUseOrLicense()));
return ok(BundleUtil.getStringFromBundle("dataverses.api.update.template.license.success"));
} else {
return badRequest(BundleUtil.getStringFromBundle("datasets.api.updateLicense.licenseNameIsEmpty"));
@@ -2455,7 +2457,7 @@ public Response updateTemplateTermsOfAccess(@Context ContainerRequestContext crc
JsonObject json = JsonUtil.getJsonObject(jsonBody);
- TermsOfUseAndAccess toua = jsonParser().parseTermsOfAccess(json);
+ TermsOfAccess toua = jsonParser().parseTermsOfAccess(json);
if (publicInstall && (toua.isFileAccessRequest() || !toua.getTermsOfAccess().isEmpty())){
return error(BAD_REQUEST, "Setting File Access Request or Terms of Access is not permitted on a public installation.");
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 458faf790ec..ba08b99ea58 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Files.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Files.java
@@ -197,7 +197,7 @@ public Response restrictFileInDataset(@Context ContainerRequestContext crc,
engineSvc.submit(new UpdateDatasetVersionCommand(dataFile.getOwner(), dataverseRequest));
} catch (IllegalCommandException ex) {
//special case where terms of use are out of compliance
- if (!TermsOfUseAndAccessValidator.isTOUAValid(dataFile.getOwner().getLatestVersion().getTermsOfUseAndAccess(), null)) {
+ if (!TermsOfAccessValidator.isTOUAValid(dataFile.getOwner().getLatestVersion().getTermsOfAccess(), null)) {
return conflict(BundleUtil.getStringFromBundle("dataset.message.toua.invalid"));
}
return error(BAD_REQUEST, "Problem saving datafile " + dataFile.getDisplayName() + ": " + ex.getLocalizedMessage());
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/StatementManagerImpl.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/StatementManagerImpl.java
index 95763e0eafb..576785656b1 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/StatementManagerImpl.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/StatementManagerImpl.java
@@ -74,7 +74,8 @@ public Statement getStatement(String editUri, Map map, AuthCrede
// in the statement, the element is called "updated"
Date lastUpdatedFinal = new Date();
Date lastUpdateTime = dataset.getLatestVersion().getLastUpdateTime();
- dataset.getLatestVersion().getTermsOfUseAndAccess().setDatasetVersion(dataset.getLatestVersion());
+ dataset.getLatestVersion().getTermsOfAccess().setDatasetVersion(dataset.getLatestVersion());
+ dataset.getLatestVersion().getTermsOfUseOrLicense().setDatasetVersion(dataset.getLatestVersion());
if (lastUpdateTime != null) {
lastUpdatedFinal = lastUpdateTime;
} else {
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java
index 22b6ee05e48..92c9b7eeede 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java
@@ -6,7 +6,8 @@
import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
import edu.harvard.iq.dataverse.DatasetFieldType;
import edu.harvard.iq.dataverse.DatasetVersion;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfAccess;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.dataset.DatasetUtil;
@@ -159,10 +160,14 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate
throw new SwordError("Custom Terms (dcterms:rights) are not allowed.");
}
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
- datasetVersionToMutate.setTermsOfUseAndAccess(terms);
- terms.setDatasetVersion(datasetVersionToMutate);
-
+ TermsOfAccess termsOfAccess = new TermsOfAccess();
+ datasetVersionToMutate.setTermsOfAccess(termsOfAccess);
+ termsOfAccess.setDatasetVersion(datasetVersionToMutate);
+
+ TermsOfUseOrLicense termsOfUseOrLicense = new TermsOfUseOrLicense();
+ datasetVersionToMutate.setTermsOfUseOrLicense(termsOfUseOrLicense);
+ termsOfUseOrLicense.setDatasetVersion(datasetVersionToMutate);
+
if (listOfLicensesProvided == null) {
License existingLicense = DatasetUtil.getLicense(datasetVersionToMutate);
if (existingLicense != null) {
@@ -180,9 +185,9 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate
defaultLicense = null;
}
}
- terms.setLicense(defaultLicense);
- terms.setFileAccessRequest(datasetVersionToMutate.getTermsOfUseAndAccess().isFileAccessRequest());
- terms.setDatasetVersion(datasetVersionToMutate);
+ termsOfUseOrLicense.setLicense(defaultLicense);
+ termsOfAccess.setFileAccessRequest(datasetVersionToMutate.getTermsOfAccess().isFileAccessRequest());
+ termsOfAccess.setDatasetVersion(datasetVersionToMutate);
setTermsOfUse(datasetVersionToMutate, dcterms, defaultLicense);
}
return;
@@ -196,7 +201,7 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate
throw new SwordError("License provided was blank.");
}
if (StringUtils.equalsIgnoreCase(licenseProvided, BundleUtil.getStringFromBundle("license.custom"))){
- terms.setLicense(null);
+ termsOfUseOrLicense.setLicense(null);
setTermsOfUse(datasetVersionToMutate, dcterms, null);
} else {
License licenseToSet = licenseServiceBean.getByNameOrUri(licenseProvided);
@@ -207,14 +212,14 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate
}
throw new SwordError("Couldn't find an active license with: " + licenseProvided + ". Valid licenses: " + licenses);
}
- terms.setLicense(licenseToSet);
+ termsOfUseOrLicense.setLicense(licenseToSet);
setTermsOfUse(datasetVersionToMutate, dcterms, licenseToSet);
}
}
private void setTermsOfUse(DatasetVersion datasetVersionToMutate, Map> dcterms, License providedLicense) throws SwordError {
if (providedLicense != null) {
- String existingTermsOfUse = datasetVersionToMutate.getTermsOfUseAndAccess().getTermsOfUse();
+ String existingTermsOfUse = datasetVersionToMutate.getTermsOfUseOrLicense().getTermsOfUse();
if (existingTermsOfUse != null) {
throw new SwordError("Can not change license to \"" + providedLicense.getName() + "\" due to existing Terms of Use (dcterms:rights): \"" + existingTermsOfUse + "\". You can specify a Custom license.");
}
@@ -240,7 +245,7 @@ private void setTermsOfUse(DatasetVersion datasetVersionToMutate, Map cv.getRootBean() instanceof TermsOfUseAndAccess)
+ .filter(cv -> cv.getRootBean() instanceof TermsOfAccess)
.map(cv -> cv.toString());
for (ConstraintViolation cv : constraintViolations){
- if (cv.getRootBean() instanceof TermsOfUseAndAccess){
+ if (cv.getRootBean() instanceof TermsOfAccess){
throw new IllegalCommandException(validationMessage, this);
}
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateTemplateCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateTemplateCommand.java
index 35f562ff84c..d62fa8116a3 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateTemplateCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateTemplateCommand.java
@@ -42,7 +42,8 @@ public Template execute(CommandContext ctxt) throws CommandException {
template.setDataverse(dataverse);
template.setMetadataValueBlocks(getSystemMetadataBlocks(ctxt));
- updateTermsOfUseAndAccess(ctxt, template);
+ updateTermsOfUseOrLicense(ctxt, template);
+ updateTermsOfAccess(ctxt, template);
updateDatasetFieldInputLevels(template, ctxt);
DatasetFieldUtil.tidyUpFields(template.getDatasetFields(), false);
@@ -61,12 +62,18 @@ public Template execute(CommandContext ctxt) throws CommandException {
return createdTemplate;
}
- private static void updateTermsOfUseAndAccess(CommandContext ctxt, Template template) {
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
- terms.setFileAccessRequest(true);
- terms.setTemplate(template);
- terms.setLicense(ctxt.licenses().getDefault());
- template.setTermsOfUseAndAccess(terms);
+ private static void updateTermsOfUseOrLicense(CommandContext ctxt, Template template) {
+ TermsOfUseOrLicense touol = new TermsOfUseOrLicense();
+ touol.setTemplate(template);
+ touol.setLicense(ctxt.licenses().getDefault());
+ template.setTermsOfUseOrLicense(touol);
+ }
+
+ private static void updateTermsOfAccess(CommandContext ctxt, Template template) {
+ var toa = new TermsOfAccess();
+ toa.setFileAccessRequest(true);
+ toa.setTemplate(template);
+ template.setTermsOfAccess(toa);
}
private void updateDatasetFieldInputLevels(Template template, CommandContext ctxt) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CuratePublishedDatasetVersionCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CuratePublishedDatasetVersionCommand.java
index 1c57a9d4647..eea538738eb 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CuratePublishedDatasetVersionCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CuratePublishedDatasetVersionCommand.java
@@ -1,5 +1,7 @@
package edu.harvard.iq.dataverse.engine.command.impl;
+import edu.harvard.iq.dataverse.CurationStatus;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
@@ -14,8 +16,7 @@
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetField;
import edu.harvard.iq.dataverse.DatasetVersion;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
-import edu.harvard.iq.dataverse.CurationStatus;
+import edu.harvard.iq.dataverse.TermsOfAccess;
import edu.harvard.iq.dataverse.DataFile;
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.RoleAssignment;
@@ -71,17 +72,31 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
// final DatasetVersion editVersion = getDataset().getEditVersion();
DatasetFieldUtil.tidyUpFields(updateVersion.getDatasetFields(), true);
- TermsOfUseAndAccess oldTerms = updateVersion.getTermsOfUseAndAccess();
- TermsOfUseAndAccess newTerms = newVersion.getTermsOfUseAndAccess();
- newTerms.setDatasetVersion(updateVersion);
- updateVersion.setTermsOfUseAndAccess(newTerms);
+ // Merge the new version into our JPA context
+ ctxt.em().merge(updateVersion);
+
+ TermsOfAccess oldTermsOfAccess = updateVersion.getTermsOfAccess();
+ TermsOfAccess newTermsOfAccess = newVersion.getTermsOfAccess();
+ newTermsOfAccess.setDatasetVersion(updateVersion);
+ updateVersion.setTermsOfAccess(newTermsOfAccess);
+ //Put old terms on version that will be deleted....
+ newVersion.setTermsOfAccess(oldTermsOfAccess);
+ TermsOfUseOrLicense oldTermsOfUseOrLicense = updateVersion.getTermsOfUseOrLicense();
+ TermsOfUseOrLicense newTermsOfUseOrLicense = newVersion.getTermsOfUseOrLicense();
+ newTermsOfUseOrLicense.setDatasetVersion(updateVersion);
+ updateVersion.setTermsOfUseOrLicense(newTermsOfUseOrLicense);
+ //Put old terms on version that will be deleted....
+ newVersion.setTermsOfUseOrLicense(oldTermsOfUseOrLicense);
+
//Version Note
updateVersion.setVersionNote(newVersion.getVersionNote());
-
+
// Clear unnecessary terms relationships ....
- newVersion.setTermsOfUseAndAccess(null);
- oldTerms.setDatasetVersion(null);
+ newVersion.setTermsOfUseOrLicense(null);
+ newVersion.setTermsOfAccess(null);
+ oldTermsOfAccess.setDatasetVersion(null);
+ oldTermsOfUseOrLicense.setDatasetVersion(null);
// Without this there's a db exception related to the oldTerms being referenced
// by the datasetversion table at the flush around line 212
ctxt.em().flush();
@@ -90,7 +105,7 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
validateOrDie(updateVersion, isValidateLenient());
//Also set the fileaccessrequest boolean on the dataset to match the new terms
- getDataset().setFileAccessRequest(updateVersion.getTermsOfUseAndAccess().isFileAccessRequest());
+ getDataset().setFileAccessRequest(updateVersion.getTermsOfAccess().isFileAccessRequest());
List newComments = newVersion.getWorkflowComments();
if (newComments!=null && newComments.size() >0) {
for(WorkflowComment wfc: newComments) {
@@ -116,12 +131,12 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
if (status != null && StringUtils.isNotBlank(status.getLabel())) {
updateVersion.addCurationStatus(new CurationStatus(null, updateVersion, getRequest().getAuthenticatedUser()));
}
-
+
// we have to merge to update the database but not flush because
// we don't want to create two draft versions!
Dataset tempDataset = getDataset();
updateVersion = tempDataset.getLatestVersionForCopy();
-
+
// Look for file metadata changes and update published metadata if needed
List pubFmds = updateVersion.getFileMetadatas();
int pubFileCount = pubFmds.size();
@@ -231,7 +246,7 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
setDataset(savedDataset);
updateDatasetUser(ctxt);
-
+
// ToDo - see if there are other DatasetVersionUser entries unique to the draft
// version that should be moved to the last published version
// As this command is intended for minor fixes, often done by the person pushing
@@ -244,7 +259,7 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
public boolean onSuccess(CommandContext ctxt, Object r) {
boolean retVal = true;
Dataset d = (Dataset) r;
-
+
ctxt.index().asyncIndexDataset(d, true);
// And the exported metadata files
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java
index be47861316f..a52b6d025f0 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java
@@ -167,7 +167,7 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
}
version.setLastUpdateTime(getTimestamp());
theDataset.setModificationTime(getTimestamp());
- theDataset.setFileAccessRequest(theDataset.getLatestVersion().getTermsOfUseAndAccess().isFileAccessRequest());
+ theDataset.setFileAccessRequest(theDataset.getLatestVersion().getTermsOfAccess().isFileAccessRequest());
//Use dataset pub date (which may not be the current date for migrated datasets)
updateFiles(new Timestamp(version.getReleaseTime().getTime()), ctxt);
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java
index df7cbc94c8d..5dcbd2fe742 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java
@@ -1,6 +1,7 @@
package edu.harvard.iq.dataverse.engine.command.impl;
import edu.harvard.iq.dataverse.*;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
@@ -8,11 +9,11 @@
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException;
+import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.workflow.Workflow;
import edu.harvard.iq.dataverse.workflow.WorkflowContext;
import edu.harvard.iq.dataverse.workflow.WorkflowContext.TriggerType;
-
import jakarta.persistence.OptimisticLockException;
import java.util.List;
@@ -89,8 +90,8 @@ public PublishDatasetResult execute(CommandContext ctxt) throws CommandException
} else {
// major, non-first release
- theDataset.getLatestVersion().setVersionNumber(new Long(theDataset.getVersionNumber() + 1));
- theDataset.getLatestVersion().setMinorVersionNumber(new Long(0));
+ theDataset.getLatestVersion().setVersionNumber(theDataset.getVersionNumber() + 1L);
+ theDataset.getLatestVersion().setMinorVersionNumber(0L);
}
// Perform any optional validation steps, if defined:
@@ -192,10 +193,12 @@ private void verifyCommandArguments(CommandContext ctxt) throws IllegalCommandEx
if ( ! getUser().isAuthenticated() ) {
throw new IllegalCommandException("Only authenticated users can release a Dataset. Please authenticate and try again.", this);
}
-
- if (getDataset().getLatestVersion().getTermsOfUseAndAccess() == null
- || (getDataset().getLatestVersion().getTermsOfUseAndAccess().getLicense() == null
- && StringUtil.isEmpty(getDataset().getLatestVersion().getTermsOfUseAndAccess().getTermsOfUse()))) {
+
+ var termsOfUseOrLicense = getDataset().getLatestVersion().getTermsOfUseOrLicense();
+ if (termsOfUseOrLicense == null || (
+ termsOfUseOrLicense.getLicense() == null
+ && StringUtil.isEmpty(termsOfUseOrLicense.getTermsOfUse())
+ )) {
throw new IllegalCommandException("Dataset must have a valid license or Custom Terms Of Use configured before it can be published.", this);
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/RestrictFileCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/RestrictFileCommand.java
index 2387e5fb31b..8f13587ce13 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/RestrictFileCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/RestrictFileCommand.java
@@ -73,12 +73,12 @@ protected void executeImpl(CommandContext ctxt) throws CommandException {
else {
Dataset dataset = file.getOwner();
DatasetVersion workingVersion = dataset.getOrCreateEditVersion();
+ if (workingVersion.getTermsOfAccess() == null) {
+ workingVersion.setTermsOfAccess(new TermsOfAccess());
+ }
if (restrict && fileAccessRequest != null) {
- if (workingVersion.getTermsOfUseAndAccess() == null) {
- workingVersion.setTermsOfUseAndAccess(new TermsOfUseAndAccess());
- }
- workingVersion.getTermsOfUseAndAccess().setFileAccessRequest(fileAccessRequest);
- workingVersion.getTermsOfUseAndAccess().setTermsOfAccess(termsOfAccess);
+ workingVersion.getTermsOfAccess().setFileAccessRequest(fileAccessRequest);
+ workingVersion.getTermsOfAccess().setTermsOfAccess(termsOfAccess);
}
// We need the FileMetadata for the file in the draft dataset version and the
// file we have may still reference the fmd from the prior released version
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetFieldsCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetFieldsCommand.java
index e52954eb4f8..9d96da87e0e 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetFieldsCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetFieldsCommand.java
@@ -36,7 +36,8 @@ public UpdateDatasetFieldsCommand(Dataset dataset, List updatedFie
@Override
public Dataset execute(CommandContext ctxt) throws CommandException {
DatasetVersion datasetVersion = dataset.getOrCreateEditVersion();
- datasetVersion.getTermsOfUseAndAccess().setDatasetVersion(datasetVersion);
+ datasetVersion.getTermsOfUseOrLicense().setDatasetVersion(datasetVersion);
+ datasetVersion.getTermsOfAccess().setDatasetVersion(datasetVersion);
String validationErrors = ctxt.datasetFieldsValidator().validateFields(updatedFields, datasetVersion);
if (!validationErrors.isEmpty()) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetLicenseCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetLicenseCommand.java
index 0d85dbb6f37..f649697842b 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetLicenseCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetLicenseCommand.java
@@ -2,7 +2,7 @@
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetVersion;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.*;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
@@ -15,16 +15,16 @@
@RequiredPermissions(Permission.EditDataset)
public class UpdateDatasetLicenseCommand extends AbstractDatasetCommand {
private License license = null;
- private TermsOfUseAndAccess customTermsOfUseAndAccess = null;
+ private TermsOfUseOrLicense customTermsOfUseOrLicense = null;
public UpdateDatasetLicenseCommand(DataverseRequest aRequest, Dataset dataset, License license) {
super(aRequest, dataset);
this.license = license;
}
- public UpdateDatasetLicenseCommand(DataverseRequest aRequest, Dataset dataset, TermsOfUseAndAccess customTermsOfUseAndAccess) {
+ public UpdateDatasetLicenseCommand(DataverseRequest aRequest, Dataset dataset, TermsOfUseOrLicense customTermsOfUseOrLicense) {
super(aRequest, dataset);
- this.customTermsOfUseAndAccess = customTermsOfUseAndAccess;
+ this.customTermsOfUseOrLicense = customTermsOfUseOrLicense;
}
@@ -38,18 +38,18 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
if (!license.isActive()) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.licenseNotActive", List.of(license.getName())), this);
}
- TermsOfUseAndAccess termsOfUseAndAccess = datasetVersion.getTermsOfUseAndAccess();
- termsOfUseAndAccess.setLicense(license);
+ TermsOfUseOrLicense termsOfUseOrLicense = datasetVersion.getTermsOfUseOrLicense();
+ termsOfUseOrLicense.setLicense(license);
savedDataset = ctxt.engine().submit(new UpdateDatasetVersionCommand(getDataset(), getRequest()));
- } else if (customTermsOfUseAndAccess != null) {
- if (customTermsOfUseAndAccess.getTermsOfUse() == null || customTermsOfUseAndAccess.getTermsOfUse().isBlank()) {
+ } else if (customTermsOfUseOrLicense != null) {
+ if (customTermsOfUseOrLicense.getTermsOfUse() == null || customTermsOfUseOrLicense.getTermsOfUse().isBlank()) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.customTermsOfUseNotProvided"), this);
}
- TermsOfUseAndAccess termsToUpdate = datasetVersion.getTermsOfUseAndAccess();
- applyCustomTerms(termsToUpdate, customTermsOfUseAndAccess);
+ TermsOfUseOrLicense termsToUpdate = datasetVersion.getTermsOfUseOrLicense();
+ applyCustomTerms(termsToUpdate, customTermsOfUseOrLicense);
termsToUpdate.setLicense(null);
- datasetVersion.setTermsOfUseAndAccess(termsToUpdate);
+ datasetVersion.setTermsOfUseOrLicense(termsToUpdate);
savedDataset = ctxt.engine().submit(new UpdateDatasetVersionCommand(getDataset(), getRequest()));
}
return savedDataset;
@@ -59,10 +59,10 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
* Copies all custom term-related fields from the 'source' object
* to the 'target' object.
*
- * @param target The TermsOfUseAndAccess object to be modified
- * @param source The TermsOfUseAndAccess object containing the new data
+ * @param target The TermsOfUseOrLicense object to be modified
+ * @param source The TermsOfUseOrLicense object containing the new data
*/
- private void applyCustomTerms(TermsOfUseAndAccess target, TermsOfUseAndAccess source) {
+ private void applyCustomTerms(TermsOfUseOrLicense target, TermsOfUseOrLicense source) {
target.setTermsOfUse(source.getTermsOfUse());
target.setConfidentialityDeclaration(source.getConfidentialityDeclaration());
target.setSpecialPermissions(source.getSpecialPermissions());
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetTermsOfAccessCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetTermsOfAccessCommand.java
index 62833edfa46..a8445369e93 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetTermsOfAccessCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetTermsOfAccessCommand.java
@@ -3,7 +3,8 @@
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetVersion;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfAccess;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
@@ -20,18 +21,19 @@ public class UpdateDatasetTermsOfAccessCommand extends AbstractDatasetCommand{
private License license = null;
- private TermsOfUseAndAccess customTermsOfUseAndAccess = null;
+ private TermsOfUseOrLicense customTermsOfUseOrLicense = null;
private Template template;
public UpdateTemplateLicenseCommand(DataverseRequest request, Template template, Dataverse dataverse, License license) {
@@ -31,17 +31,17 @@ public UpdateTemplateLicenseCommand(DataverseRequest request, Template template,
this.license = license;
}
- public UpdateTemplateLicenseCommand(DataverseRequest request, Template template, Dataverse dataverse, TermsOfUseAndAccess customTermsOfUseAndAccess) {
+ public UpdateTemplateLicenseCommand(DataverseRequest request, Template template, Dataverse dataverse, TermsOfUseOrLicense customTermsOfUseOrLicense) {
super(request, dataverse);
this.template = template;
- this.customTermsOfUseAndAccess = customTermsOfUseAndAccess;
+ this.customTermsOfUseOrLicense = customTermsOfUseOrLicense;
}
@Override
public Template execute(CommandContext ctxt) throws CommandException {
Template savedTemplate;
- if (license == null && customTermsOfUseAndAccess == null) {
+ if (license == null && customTermsOfUseOrLicense == null) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.customTermsOfUseNotProvided"), this);
}
@@ -49,18 +49,18 @@ public Template execute(CommandContext ctxt) throws CommandException {
if (!license.isActive()) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.licenseNotActive", List.of(license.getName())), this);
}
- TermsOfUseAndAccess termsOfUseAndAccess = template.getTermsOfUseAndAccess();
+ TermsOfUseOrLicense termsOfUseAndAccess = template.getTermsOfUseOrLicense();
termsOfUseAndAccess.setLicense(license);
savedTemplate = ctxt.templates().save(template);
} else {
- if (customTermsOfUseAndAccess.getTermsOfUse() == null || customTermsOfUseAndAccess.getTermsOfUse().isBlank()) {
+ if (customTermsOfUseOrLicense.getTermsOfUse() == null || customTermsOfUseOrLicense.getTermsOfUse().isBlank()) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.customTermsOfUseNotProvided"), this);
}
- TermsOfUseAndAccess termsToUpdate = template.getTermsOfUseAndAccess();
- applyCustomTerms(termsToUpdate, customTermsOfUseAndAccess);
- template.setTermsOfUseAndAccess(termsToUpdate);
- template.getTermsOfUseAndAccess().setLicense(null);
+ TermsOfUseOrLicense termsToUpdate = template.getTermsOfUseOrLicense();
+ applyCustomTerms(termsToUpdate, customTermsOfUseOrLicense);
+ template.setTermsOfUseOrLicense(termsToUpdate);
+ template.getTermsOfUseOrLicense().setLicense(null);
savedTemplate = ctxt.templates().save(template);
}
@@ -75,7 +75,7 @@ public Template execute(CommandContext ctxt) throws CommandException {
* @param target The TermsOfUseAndAccess object to be modified
* @param source The TermsOfUseAndAccess object containing the new data
*/
- private void applyCustomTerms(TermsOfUseAndAccess target, TermsOfUseAndAccess source) {
+ private void applyCustomTerms(TermsOfUseOrLicense target, TermsOfUseOrLicense source) {
target.setTermsOfUse(source.getTermsOfUse());
target.setConfidentialityDeclaration(source.getConfidentialityDeclaration());
target.setSpecialPermissions(source.getSpecialPermissions());
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateTermsOfAccessCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateTermsOfAccessCommand.java
index cc07a150e5d..e6c23d6d091 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateTermsOfAccessCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateTermsOfAccessCommand.java
@@ -2,7 +2,7 @@
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.Template;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfAccess;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
@@ -20,32 +20,32 @@
@RequiredPermissions(Permission.EditDataverse)
public class UpdateTemplateTermsOfAccessCommand extends AbstractCommand {
- private TermsOfUseAndAccess customTermsOfUseAndAccess = null;
+ private TermsOfAccess customTermsOfAccess = null;
private Template template;
- public UpdateTemplateTermsOfAccessCommand(DataverseRequest request, Template template, Dataverse dataverse, TermsOfUseAndAccess customTermsOfUseAndAccess) {
+ public UpdateTemplateTermsOfAccessCommand(DataverseRequest request, Template template, Dataverse dataverse, TermsOfAccess customTermsOfAccess) {
super(request, dataverse);
this.template = template;
- this.customTermsOfUseAndAccess = customTermsOfUseAndAccess;
+ this.customTermsOfAccess = customTermsOfAccess;
}
@Override
public Template execute(CommandContext ctxt) throws CommandException {
Template savedTemplate;
- if (customTermsOfUseAndAccess == null) {
+ if (customTermsOfAccess == null) {
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("updateDatasetLicenseCommand.errors.customTermsOfUseNotProvided"), this);
}
- TermsOfUseAndAccess termsToUpdate = template.getTermsOfUseAndAccess();
- applyCustomTerms(termsToUpdate, customTermsOfUseAndAccess);
- template.setTermsOfUseAndAccess(termsToUpdate);
+ TermsOfAccess termsToUpdate = template.getTermsOfAccess();
+ applyCustomTermsOfAccess(termsToUpdate, customTermsOfAccess);
+ template.setTermsOfAccess(termsToUpdate);
savedTemplate = ctxt.templates().save(template);
return savedTemplate;
}
- private void applyCustomTerms(TermsOfUseAndAccess target, TermsOfUseAndAccess source) {
+ private void applyCustomTermsOfAccess(TermsOfAccess target, TermsOfAccess source) {
target.setFileAccessRequest(source.isFileAccessRequest());
target.setTermsOfAccess(source.getTermsOfAccess());
diff --git a/src/main/java/edu/harvard/iq/dataverse/license/License.java b/src/main/java/edu/harvard/iq/dataverse/license/License.java
index 88766cde73b..b35ee3f08b2 100644
--- a/src/main/java/edu/harvard/iq/dataverse/license/License.java
+++ b/src/main/java/edu/harvard/iq/dataverse/license/License.java
@@ -1,5 +1,6 @@
package edu.harvard.iq.dataverse.license;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -11,8 +12,6 @@
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
-
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
@@ -87,12 +86,12 @@ public class License {
@Column(name = "scheme_uri")
private String schemeUri;
-
+
@Column(name = "language_code")
private String languageCode;
- @OneToMany(mappedBy = "license")
- private List termsOfUseAndAccess;
+ @OneToMany(mappedBy="license")
+ private List termsOfUseOrLicense;
public License() {
}
@@ -182,12 +181,12 @@ public void setDefault(boolean isDefault) {
this.isDefault = isDefault;
}
- public List getTermsOfUseAndAccess() {
- return termsOfUseAndAccess;
+ public List getTermsOfUseOrLicense() {
+ return termsOfUseOrLicense;
}
- public void setTermsOfUseAndAccess(List termsOfUseAndAccess) {
- this.termsOfUseAndAccess = termsOfUseAndAccess;
+ public void setTermsOfUseOrLicense(List termsOfUseOrLicense) {
+ this.termsOfUseOrLicense = termsOfUseOrLicense;
}
public Long getSortOrder() {
diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java
index 954ddc46f36..c3d32dffed3 100644
--- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java
+++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java
@@ -2,6 +2,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InvalidObjectException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
@@ -27,6 +28,7 @@
import javax.xml.stream.XMLStreamWriter;
import edu.harvard.iq.dataverse.*;
+import edu.harvard.iq.dataverse.engine.command.exception.InvalidCommandArgumentsException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.ocpsoft.common.util.Strings;
@@ -1277,10 +1279,13 @@ private void writeAccessRights(XMLStreamWriter xmlw, DvObject dvObject) throws X
dv = df.getOwner().getLatestVersionForCopy();
closed = df.isRestricted();
+ } else {
+ var msg = "Expected Dataset or DataFile but got " + dvObject.getClass().getName();
+ logger.warning(msg);
+ throw new RuntimeException(msg);
}
- TermsOfUseAndAccess terms = dv.getTermsOfUseAndAccess();
- boolean requestsAllowed = terms.isFileAccessRequest();
- License license = terms.getLicense();
+ boolean requestsAllowed = dv.getTermsOfAccess().isFileAccessRequest();
+ License license = dv.getTermsOfUseOrLicense().getLicense();
if (requestsAllowed && closed) {
xmlw.writeAttribute("rightsURI", "info:eu-repo/semantics/restrictedAccess");
@@ -1364,7 +1369,7 @@ private void writeAccessRights(XMLStreamWriter xmlw, DvObject dvObject) throws X
}
}
} else {
-
+
// No label or notice info - we'll still add a pointer to the project
xmlw.writeStartElement("rights"); //
xmlw.writeAttribute("rightsURI", projectUrl); // repeated in @id in evv
@@ -1415,7 +1420,7 @@ private void writeLocalContextNoticeRightsElement(XMLStreamWriter xmlw, String p
}
xmlw.writeEndElement(); //
}
-
+
private void writeLocalContextLabelRightsElement(XMLStreamWriter xmlw, String projectUrl, JsonObject labelObject) throws XMLStreamException {
xmlw.writeStartElement("rights"); //
xmlw.writeAttribute("rightsURI", projectUrl); // repeated in @id in evv
diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java
index 8132c5e113d..b4c71fb2208 100644
--- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java
@@ -31,7 +31,7 @@
import edu.harvard.iq.dataverse.GlobalId;
import edu.harvard.iq.dataverse.PermissionServiceBean;
import edu.harvard.iq.dataverse.Retention;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUserServiceBean;
import edu.harvard.iq.dataverse.batch.util.LoggingUtil;
@@ -2028,17 +2028,17 @@ private List getDataversePathsFromSegments(List dataversePathSeg
}
private void addLicenseToSolrDoc(SolrInputDocument solrInputDocument, DatasetVersion datasetVersion) {
- if (datasetVersion != null && datasetVersion.getTermsOfUseAndAccess() != null) {
- //test to see if the terms of use are the default set in 5.10 - if so and there's no license then don't add license to solr doc.
+ if (datasetVersion != null && datasetVersion.getTermsOfUseOrLicense() != null) {
+ //test to see if the terms of use are the default set in 5.10 - if so and there's no license then don't add license to solr doc.
//fixes 10513
- if(TermsOfUseAndAccess.DEFAULT_NOTERMS.equals(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse())) {
+ if(TermsOfUseOrLicense.DEFAULT_NOTERMS.equals(datasetVersion.getTermsOfUseOrLicense().getTermsOfUse())) {
return;
}
String licenseName = "Custom Terms";
- if (datasetVersion.getTermsOfUseAndAccess().getLicense() != null) {
- licenseName = datasetVersion.getTermsOfUseAndAccess().getLicense().getName();
- } else if (datasetVersion.getTermsOfUseAndAccess().getTermsOfUse() == null) {
+ if (datasetVersion.getTermsOfUseOrLicense().getLicense() != null) {
+ licenseName = datasetVersion.getTermsOfUseOrLicense().getLicense().getName();
+ } else if (datasetVersion.getTermsOfUseOrLicense().getTermsOfUse() == null) {
// this fixes #10513 for datasets harvested in oai_dc - these
// have neither the license id, nor any actual custom terms
return;
diff --git a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java
index 6ac4a3225fc..ee6d6334a5c 100644
--- a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java
+++ b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java
@@ -1175,20 +1175,21 @@ private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) {
return false;
}
// 1. License and Terms of Use:
- if (datasetVersion.getTermsOfUseAndAccess() != null) {
- License license = DatasetUtil.getLicense(datasetVersion);
- if ((license == null && StringUtils.isNotBlank(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse()))
- || (license != null && !license.isDefault())) {
- logger.fine("Popup required because of license or terms of use.");
- return true;
- }
-
+ if (datasetVersion.getTermsOfAccess() != null) {
// 2. Terms of Access:
- if (!(datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess() == null) && !datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess().equals("")) {
+ if (!(datasetVersion.getTermsOfAccess().getTermsOfAccess() == null) && !datasetVersion.getTermsOfAccess().getTermsOfAccess().isEmpty()) {
logger.fine("Popup required because of terms of access.");
return true;
}
}
+ if (datasetVersion.getTermsOfUseOrLicense() != null) {
+ License license = DatasetUtil.getLicense(datasetVersion);
+ if ((license == null && StringUtils.isNotBlank(datasetVersion.getTermsOfUseOrLicense().getTermsOfUse()))
+ || (license != null && !license.isDefault())) {
+ logger.fine("Popup required because of license.");
+ return true;
+ }
+ }
//No decision based on the criteria above
return null;
}
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 c29354d63f7..d982ee52605 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
@@ -1,7 +1,21 @@
package edu.harvard.iq.dataverse.util.bagit;
-import edu.harvard.iq.dataverse.*;
+import edu.harvard.iq.dataverse.DataFile;
+import edu.harvard.iq.dataverse.Dataset;
+import edu.harvard.iq.dataverse.DatasetField;
+import edu.harvard.iq.dataverse.DatasetFieldCompoundValue;
+import edu.harvard.iq.dataverse.DatasetFieldConstant;
+import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
+import edu.harvard.iq.dataverse.DatasetFieldType;
+import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.DatasetVersion.VersionState;
+import edu.harvard.iq.dataverse.Dataverse;
+import edu.harvard.iq.dataverse.DvObjectContainer;
+import edu.harvard.iq.dataverse.Embargo;
+import edu.harvard.iq.dataverse.FileMetadata;
+import edu.harvard.iq.dataverse.Retention;
+import edu.harvard.iq.dataverse.TermsOfAccess;
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import edu.harvard.iq.dataverse.branding.BrandingUtil;
import edu.harvard.iq.dataverse.export.OAI_OREExporter;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
@@ -138,30 +152,31 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) {
aggBuilder.add(JsonLDTerm.schemaOrg("creativeWorkStatus").getLabel(), vs.name());
}
- TermsOfUseAndAccess terms = version.getTermsOfUseAndAccess();
- if (terms.getLicense() != null) {
+ TermsOfAccess termsOfAccess = version.getTermsOfAccess();
+ TermsOfUseOrLicense termsOfUseOrLicense = version.getTermsOfUseOrLicense();
+ if (termsOfUseOrLicense.getLicense() != null) {
aggBuilder.add(JsonLDTerm.schemaOrg("license").getLabel(),
- terms.getLicense().getUri().toString());
+ termsOfUseOrLicense.getLicense().getUri().toString());
} else {
- addIfNotNull(aggBuilder, JsonLDTerm.termsOfUse, terms.getTermsOfUse());
- addIfNotNull(aggBuilder, JsonLDTerm.confidentialityDeclaration, terms.getConfidentialityDeclaration());
- addIfNotNull(aggBuilder, JsonLDTerm.specialPermissions, terms.getSpecialPermissions());
- addIfNotNull(aggBuilder, JsonLDTerm.restrictions, terms.getRestrictions());
- addIfNotNull(aggBuilder, JsonLDTerm.citationRequirements, terms.getCitationRequirements());
- addIfNotNull(aggBuilder, JsonLDTerm.depositorRequirements, terms.getDepositorRequirements());
- addIfNotNull(aggBuilder, JsonLDTerm.conditions, terms.getConditions());
- addIfNotNull(aggBuilder, JsonLDTerm.disclaimer, terms.getDisclaimer());
+ addIfNotNull(aggBuilder, JsonLDTerm.termsOfUse, termsOfUseOrLicense.getTermsOfUse());
+ addIfNotNull(aggBuilder, JsonLDTerm.confidentialityDeclaration, termsOfUseOrLicense.getConfidentialityDeclaration());
+ addIfNotNull(aggBuilder, JsonLDTerm.specialPermissions, termsOfUseOrLicense.getSpecialPermissions());
+ addIfNotNull(aggBuilder, JsonLDTerm.restrictions, termsOfUseOrLicense.getRestrictions());
+ addIfNotNull(aggBuilder, JsonLDTerm.citationRequirements, termsOfUseOrLicense.getCitationRequirements());
+ addIfNotNull(aggBuilder, JsonLDTerm.depositorRequirements, termsOfUseOrLicense.getDepositorRequirements());
+ addIfNotNull(aggBuilder, JsonLDTerm.conditions, termsOfUseOrLicense.getConditions());
+ addIfNotNull(aggBuilder, JsonLDTerm.disclaimer, termsOfUseOrLicense.getDisclaimer());
}
// Add fileTermsofAccess as an object since it is compound
JsonObjectBuilder fAccess = JsonUtil.createObjectBuilder();
- addIfNotNull(fAccess, JsonLDTerm.termsOfAccess, terms.getTermsOfAccess());
- addIfNotNull(fAccess, JsonLDTerm.fileRequestAccess, terms.isFileAccessRequest());
- addIfNotNull(fAccess, JsonLDTerm.dataAccessPlace, terms.getDataAccessPlace());
- addIfNotNull(fAccess, JsonLDTerm.originalArchive, terms.getOriginalArchive());
- addIfNotNull(fAccess, JsonLDTerm.availabilityStatus, terms.getAvailabilityStatus());
- addIfNotNull(fAccess, JsonLDTerm.contactForAccess, terms.getContactForAccess());
- addIfNotNull(fAccess, JsonLDTerm.sizeOfCollection, terms.getSizeOfCollection());
- addIfNotNull(fAccess, JsonLDTerm.studyCompletion, terms.getStudyCompletion());
+ addIfNotNull(fAccess, JsonLDTerm.termsOfAccess, termsOfAccess.getTermsOfAccess());
+ addIfNotNull(fAccess, JsonLDTerm.fileRequestAccess, termsOfAccess.isFileAccessRequest());
+ addIfNotNull(fAccess, JsonLDTerm.dataAccessPlace, termsOfAccess.getDataAccessPlace());
+ addIfNotNull(fAccess, JsonLDTerm.originalArchive, termsOfAccess.getOriginalArchive());
+ addIfNotNull(fAccess, JsonLDTerm.availabilityStatus, termsOfAccess.getAvailabilityStatus());
+ addIfNotNull(fAccess, JsonLDTerm.contactForAccess, termsOfAccess.getContactForAccess());
+ addIfNotNull(fAccess, JsonLDTerm.sizeOfCollection, termsOfAccess.getSizeOfCollection());
+ addIfNotNull(fAccess, JsonLDTerm.studyCompletion, termsOfAccess.getStudyCompletion());
JsonObject fAccessObject = fAccess.build();
if (!fAccessObject.isEmpty()) {
aggBuilder.add(JsonLDTerm.fileTermsOfAccess.getLabel(), fAccessObject);
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 3b15c303601..7db0bce3cce 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
@@ -17,7 +17,7 @@
import java.util.TreeMap;
import java.util.logging.Logger;
-
+import edu.harvard.iq.dataverse.TermsOfUseOrLicense;
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
@@ -41,7 +41,7 @@
import edu.harvard.iq.dataverse.GlobalId;
import edu.harvard.iq.dataverse.MetadataBlock;
import edu.harvard.iq.dataverse.MetadataBlockServiceBean;
-import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
+import edu.harvard.iq.dataverse.TermsOfAccess;
import org.apache.commons.lang3.StringUtils;
import com.apicatalog.jsonld.JsonLd;
@@ -160,7 +160,8 @@ public static DatasetVersion updateDatasetVersionMDFromJsonLD(DatasetVersion dsv
fieldByTypeMap.put(dsf.getDatasetFieldType(), dsf);
}
- TermsOfUseAndAccess terms = (dsv.getTermsOfUseAndAccess() != null) ? dsv.getTermsOfUseAndAccess().copyTermsOfUseAndAccess() : new TermsOfUseAndAccess();
+ TermsOfAccess termsOfAccess = (dsv.getTermsOfAccess() != null) ? dsv.getTermsOfAccess().copyTermsOfAccess() : new TermsOfAccess();
+ TermsOfUseOrLicense termsOfUseOrLicense = (dsv.getTermsOfUseOrLicense() != null) ? dsv.getTermsOfUseOrLicense().copyTermsOfUseOrLicense() : new TermsOfUseOrLicense();
for (String key : jsonld.keySet()) {
@@ -202,25 +203,25 @@ public static DatasetVersion updateDatasetVersionMDFromJsonLD(DatasetVersion dsv
}
else if (datasetTerms.contains(key)) {
// Other Dataset-level TermsOfUseAndAccess
- if (!append || !isSet(terms, key)) {
+ if (!append || !isSet(termsOfAccess, termsOfUseOrLicense, key)) {
if (key.equals(JsonLDTerm.schemaOrg("license").getUrl())) {
if (jsonld.containsKey(JsonLDTerm.termsOfUse.getUrl())) {
throw new BadRequestException("Cannot specify " + JsonLDTerm.schemaOrg("license").getUrl() + " and " + JsonLDTerm.termsOfUse.getUrl());
}
if (StringUtils.isEmpty(jsonld.getString(key))) {
- setSemTerm(terms, key, licenseSvc.getDefault());
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, key, licenseSvc.getDefault());
}
else {
License license = licenseSvc.getByNameOrUri(jsonld.getString(key));
if (license == null) throw new BadRequestException("Invalid license");
- setSemTerm(terms, key, license);
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, key, license);
}
}
else if (key.equals("https://dataverse.org/schema/core#fileRequestAccess")) {
- setSemTerm(terms, key, jsonld.getBoolean(key));
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, key, jsonld.getBoolean(key));
}
else {
- setSemTerm(terms, key, jsonld.getString(key));
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, key, jsonld.getString(key));
}
}
else {
@@ -231,11 +232,11 @@ else if (key.equals("https://dataverse.org/schema/core#fileRequestAccess")) {
JsonObject fAccessObject = jsonld.getJsonObject(JsonLDTerm.fileTermsOfAccess.getUrl());
for (String fileKey : fAccessObject.keySet()) {
if (datafileTerms.contains(fileKey)) {
- if (!append || !isSet(terms, fileKey)) {
+ if (!append || !isSet(termsOfAccess, termsOfUseOrLicense, fileKey)) {
if (fileKey.equals(JsonLDTerm.fileRequestAccess.getUrl())) {
- setSemTerm(terms, fileKey, fAccessObject.getBoolean(fileKey));
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, fileKey, fAccessObject.getBoolean(fileKey));
} else {
- setSemTerm(terms, fileKey, fAccessObject.getString(fileKey));
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, fileKey, fAccessObject.getString(fileKey));
}
} else {
throw new BadRequestException(
@@ -250,8 +251,10 @@ else if (key.equals("https://dataverse.org/schema/core#fileRequestAccess")) {
}
}
}
- dsv.setTermsOfUseAndAccess(terms);
- terms.setDatasetVersion(dsv);
+ dsv.setTermsOfAccess(termsOfAccess);
+ termsOfAccess.setDatasetVersion(dsv);
+ dsv.setTermsOfUseOrLicense(termsOfUseOrLicense);
+ termsOfUseOrLicense.setDatasetVersion(dsv);
dsv.setDatasetFields(dsfl);
return dsv;
@@ -286,7 +289,8 @@ public static DatasetVersion deleteDatasetVersionMDFromJsonLD(DatasetVersion dsv
fieldByTypeMap.put(dsf.getDatasetFieldType(), dsf);
}
- TermsOfUseAndAccess terms = dsv.getTermsOfUseAndAccess().copyTermsOfUseAndAccess();
+ TermsOfAccess termsOfAccess = dsv.getTermsOfAccess().copyTermsOfAccess();
+ TermsOfUseOrLicense termsOfUseOrLicense = dsv.getTermsOfUseOrLicense().copyTermsOfUseOrLicense();
//Iterate through input json
for (String key : jsonld.keySet()) {
@@ -318,14 +322,14 @@ public static DatasetVersion deleteDatasetVersionMDFromJsonLD(DatasetVersion dsv
boolean found=false;
if (key.equals(JsonLDTerm.schemaOrg("license").getUrl())) {
if(licenseSvc.getByNameOrUri(jsonld.getString(key)) != null) {
- setSemTerm(terms, key, licenseSvc.getDefault());
+ setSemTerm(termsOfAccess, termsOfUseOrLicense, key, licenseSvc.getDefault());
} else {
throw new BadRequestException(
"Term: " + key + " with value: " + jsonld.getString(key) + " not found.");
}
found=true;
} else if (datasetTerms.contains(key)) {
- if(!deleteIfSemTermMatches(terms, key, jsonld.get(key))) {
+ if(!deleteIfSemTermMatches(termsOfAccess, termsOfUseOrLicense, key, jsonld.get(key))) {
throw new BadRequestException(
"Term: " + key + " with value: " + jsonld.getString(key) + " not found.");
}
@@ -334,7 +338,7 @@ public static DatasetVersion deleteDatasetVersionMDFromJsonLD(DatasetVersion dsv
JsonObject fAccessObject = jsonld.getJsonObject(JsonLDTerm.fileTermsOfAccess.getUrl());
for (String fileKey : fAccessObject.keySet()) {
if (datafileTerms.contains(fileKey)) {
- if(!deleteIfSemTermMatches(terms, key, jsonld.get(key))) {
+ if(!deleteIfSemTermMatches(termsOfAccess, termsOfUseOrLicense, key, jsonld.get(key))) {
throw new BadRequestException(
"Term: " + key + " with value: " + jsonld.getString(key) + " not found.");
}
@@ -346,7 +350,8 @@ public static DatasetVersion deleteDatasetVersionMDFromJsonLD(DatasetVersion dsv
"Term: " + key + " not found.");
}
- dsv.setTermsOfUseAndAccess(terms);
+ dsv.setTermsOfUseOrLicense(termsOfUseOrLicense);
+ dsv.setTermsOfAccess(termsOfAccess);
}
}
}
@@ -686,100 +691,100 @@ public static LocalDateTime getDateTimeFrom(String dateString) {
"https://dataverse.org/schema/core#contactForAccess", "https://dataverse.org/schema/core#sizeOfCollection",
"https://dataverse.org/schema/core#studyCompletion"));
- public static boolean isSet(TermsOfUseAndAccess terms, String semterm) {
+ public static boolean isSet(TermsOfAccess termsOfAccess, TermsOfUseOrLicense termsOfUseOrLicense, String semterm) {
switch (semterm) {
case "http://schema.org/license":
- return terms.getLicense() != null;
+ return termsOfUseOrLicense.getLicense() != null;
case "https://dataverse.org/schema/core#termsOfUse":
- return !StringUtils.isBlank(terms.getTermsOfUse());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getTermsOfUse());
case "https://dataverse.org/schema/core#confidentialityDeclaration":
- return !StringUtils.isBlank(terms.getConfidentialityDeclaration());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getConfidentialityDeclaration());
case "https://dataverse.org/schema/core#specialPermissions":
- return !StringUtils.isBlank(terms.getSpecialPermissions());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getSpecialPermissions());
case "https://dataverse.org/schema/core#restrictions":
- return !StringUtils.isBlank(terms.getRestrictions());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getRestrictions());
case "https://dataverse.org/schema/core#citationRequirements":
- return !StringUtils.isBlank(terms.getCitationRequirements());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getCitationRequirements());
case "https://dataverse.org/schema/core#depositorRequirements":
- return !StringUtils.isBlank(terms.getDepositorRequirements());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getDepositorRequirements());
case "https://dataverse.org/schema/core#conditions":
- return !StringUtils.isBlank(terms.getConditions());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getConditions());
case "https://dataverse.org/schema/core#disclaimer":
- return !StringUtils.isBlank(terms.getDisclaimer());
+ return !StringUtils.isBlank(termsOfUseOrLicense.getDisclaimer());
case "https://dataverse.org/schema/core#termsOfAccess":
- return !StringUtils.isBlank(terms.getTermsOfAccess());
+ return !StringUtils.isBlank(termsOfAccess.getTermsOfAccess());
case "https://dataverse.org/schema/core#fileRequestAccess":
- return !terms.isFileAccessRequest();
+ return !termsOfAccess.isFileAccessRequest();
case "https://dataverse.org/schema/core#dataAccessPlace":
- return !StringUtils.isBlank(terms.getDataAccessPlace());
+ return !StringUtils.isBlank(termsOfAccess.getDataAccessPlace());
case "https://dataverse.org/schema/core#originalArchive":
- return !StringUtils.isBlank(terms.getOriginalArchive());
+ return !StringUtils.isBlank(termsOfAccess.getOriginalArchive());
case "https://dataverse.org/schema/core#availabilityStatus":
- return !StringUtils.isBlank(terms.getAvailabilityStatus());
+ return !StringUtils.isBlank(termsOfAccess.getAvailabilityStatus());
case "https://dataverse.org/schema/core#contactForAccess":
- return !StringUtils.isBlank(terms.getContactForAccess());
+ return !StringUtils.isBlank(termsOfAccess.getContactForAccess());
case "https://dataverse.org/schema/core#sizeOfCollection":
- return !StringUtils.isBlank(terms.getSizeOfCollection());
+ return !StringUtils.isBlank(termsOfAccess.getSizeOfCollection());
case "https://dataverse.org/schema/core#studyCompletion":
- return !StringUtils.isBlank(terms.getStudyCompletion());
+ return !StringUtils.isBlank(termsOfAccess.getStudyCompletion());
default:
logger.warning("isSet called for " + semterm);
return false;
}
}
- public static void setSemTerm(TermsOfUseAndAccess terms, String semterm, Object value) {
+ public static void setSemTerm(TermsOfAccess termsOfAccess, TermsOfUseOrLicense termsOfUseOrLicense, String semterm, Object value) {
switch (semterm) {
case "http://schema.org/license":
- terms.setLicense((License) value);
+ termsOfUseOrLicense.setLicense((License) value);
break;
case "https://dataverse.org/schema/core#termsOfUse":
- terms.setTermsOfUse((String) value);
+ termsOfUseOrLicense.setTermsOfUse((String) value);
break;
case "https://dataverse.org/schema/core#confidentialityDeclaration":
- terms.setConfidentialityDeclaration((String) value);
+ termsOfUseOrLicense.setConfidentialityDeclaration((String) value);
break;
case "https://dataverse.org/schema/core#specialPermissions":
- terms.setSpecialPermissions((String) value);
+ termsOfUseOrLicense.setSpecialPermissions((String) value);
break;
case "https://dataverse.org/schema/core#restrictions":
- terms.setRestrictions((String) value);
+ termsOfUseOrLicense.setRestrictions((String) value);
break;
case "https://dataverse.org/schema/core#citationRequirements":
- terms.setCitationRequirements((String) value);
+ termsOfUseOrLicense.setCitationRequirements((String) value);
break;
case "https://dataverse.org/schema/core#depositorRequirements":
- terms.setDepositorRequirements((String) value);
+ termsOfUseOrLicense.setDepositorRequirements((String) value);
break;
case "https://dataverse.org/schema/core#conditions":
- terms.setConditions((String) value);
+ termsOfUseOrLicense.setConditions((String) value);
break;
case "https://dataverse.org/schema/core#disclaimer":
- terms.setDisclaimer((String) value);
+ termsOfUseOrLicense.setDisclaimer((String) value);
break;
case "https://dataverse.org/schema/core#termsOfAccess":
- terms.setTermsOfAccess((String) value);
+ termsOfAccess.setTermsOfAccess((String) value);
break;
case "https://dataverse.org/schema/core#fileRequestAccess":
- terms.setFileAccessRequest((boolean) value);
+ termsOfAccess.setFileAccessRequest((boolean) value);
break;
case "https://dataverse.org/schema/core#dataAccessPlace":
- terms.setDataAccessPlace((String) value);
+ termsOfAccess.setDataAccessPlace((String) value);
break;
case "https://dataverse.org/schema/core#originalArchive":
- terms.setOriginalArchive((String) value);
+ termsOfAccess.setOriginalArchive((String) value);
break;
case "https://dataverse.org/schema/core#availabilityStatus":
- terms.setAvailabilityStatus((String) value);
+ termsOfAccess.setAvailabilityStatus((String) value);
break;
case "https://dataverse.org/schema/core#contactForAccess":
- terms.setContactForAccess((String) value);
+ termsOfAccess.setContactForAccess((String) value);
break;
case "https://dataverse.org/schema/core#sizeOfCollection":
- terms.setSizeOfCollection((String) value);
+ termsOfAccess.setSizeOfCollection((String) value);
break;
case "https://dataverse.org/schema/core#studyCompletion":
- terms.setStudyCompletion((String) value);
+ termsOfAccess.setStudyCompletion((String) value);
break;
default:
logger.warning("setSemTerm called for " + semterm);
@@ -787,7 +792,7 @@ public static void setSemTerm(TermsOfUseAndAccess terms, String semterm, Object
}
}
- private static boolean deleteIfSemTermMatches(TermsOfUseAndAccess terms, String semterm, JsonValue jsonValue) {
+ private static boolean deleteIfSemTermMatches(TermsOfAccess termsOfAcces, TermsOfUseOrLicense termsOfUseOrLicense, String semterm, JsonValue jsonValue) {
boolean foundTerm=false;
String val = null;
if(jsonValue.getValueType().equals(ValueType.STRING)) {
@@ -796,98 +801,98 @@ private static boolean deleteIfSemTermMatches(TermsOfUseAndAccess terms, String
switch (semterm) {
case "https://dataverse.org/schema/core#termsOfUse":
- if(terms.getTermsOfUse().equals(val)) {
- terms.setTermsOfUse(null);
+ if(termsOfUseOrLicense.getTermsOfUse().equals(val)) {
+ termsOfUseOrLicense.setTermsOfUse(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#confidentialityDeclaration":
- if(terms.getConfidentialityDeclaration().equals(val)) {
- terms.setConfidentialityDeclaration(null);
+ if(termsOfUseOrLicense.getConfidentialityDeclaration().equals(val)) {
+ termsOfUseOrLicense.setConfidentialityDeclaration(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#specialPermissions":
- if(terms.getSpecialPermissions().equals(val)) {
- terms.setSpecialPermissions(null);
+ if(termsOfUseOrLicense.getSpecialPermissions().equals(val)) {
+ termsOfUseOrLicense.setSpecialPermissions(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#restrictions":
- if(terms.getRestrictions().equals(val)) {
- terms.setRestrictions(null);
+ if(termsOfUseOrLicense.getRestrictions().equals(val)) {
+ termsOfUseOrLicense.setRestrictions(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#citationRequirements":
- if(terms.getCitationRequirements().equals(val)) {
- terms.setCitationRequirements(null);
+ if(termsOfUseOrLicense.getCitationRequirements().equals(val)) {
+ termsOfUseOrLicense.setCitationRequirements(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#depositorRequirements":
- if(terms.getDepositorRequirements().equals(val)) {
- terms.setDepositorRequirements(null);
+ if(termsOfUseOrLicense.getDepositorRequirements().equals(val)) {
+ termsOfUseOrLicense.setDepositorRequirements(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#conditions":
- if(terms.getConditions().equals(val)) {
- terms.setConditions(null);
+ if(termsOfUseOrLicense.getConditions().equals(val)) {
+ termsOfUseOrLicense.setConditions(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#disclaimer":
- if(terms.getDisclaimer().equals(val)) {
- terms.setDisclaimer(null);
+ if(termsOfUseOrLicense.getDisclaimer().equals(val)) {
+ termsOfUseOrLicense.setDisclaimer(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#termsOfAccess":
- if(terms.getTermsOfAccess().equals(val)) {
- terms.setTermsOfAccess(null);
+ if(termsOfAcces.getTermsOfAccess().equals(val)) {
+ termsOfAcces.setTermsOfAccess(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#fileRequestAccess":
- if(terms.isFileAccessRequest() && (jsonValue.equals(JsonValue.TRUE))) {
- terms.setFileAccessRequest(false);
+ if(termsOfAcces.isFileAccessRequest() && (jsonValue.equals(JsonValue.TRUE))) {
+ termsOfAcces.setFileAccessRequest(false);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#dataAccessPlace":
- if(terms.getDataAccessPlace().equals(val)) {
- terms.setDataAccessPlace(null);
+ if(termsOfAcces.getDataAccessPlace().equals(val)) {
+ termsOfAcces.setDataAccessPlace(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#originalArchive":
- if(terms.getOriginalArchive().equals(val)) {
- terms.setOriginalArchive(null);
+ if(termsOfAcces.getOriginalArchive().equals(val)) {
+ termsOfAcces.setOriginalArchive(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#availabilityStatus":
- if(terms.getAvailabilityStatus().equals(val)) {
- terms.setAvailabilityStatus(null);
+ if(termsOfAcces.getAvailabilityStatus().equals(val)) {
+ termsOfAcces.setAvailabilityStatus(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#contactForAccess":
- if(terms.getContactForAccess().equals(val)) {
- terms.setContactForAccess(null);
+ if(termsOfAcces.getContactForAccess().equals(val)) {
+ termsOfAcces.setContactForAccess(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#sizeOfCollection":
- if(terms.getSizeOfCollection().equals(val)) {
- terms.setSizeOfCollection(null);
+ if(termsOfAcces.getSizeOfCollection().equals(val)) {
+ termsOfAcces.setSizeOfCollection(null);
foundTerm=true;
}
break;
case "https://dataverse.org/schema/core#studyCompletion":
- if(terms.getStudyCompletion().equals(val)) {
- terms.setStudyCompletion(null);
+ if(termsOfAcces.getStudyCompletion().equals(val)) {
+ termsOfAcces.setStudyCompletion(null);
foundTerm=true;
}
break;
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 14a605c1c83..59b49495a06 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
@@ -358,35 +358,35 @@ public static > List parseEnumsFromArray(JsonArray enumsArr
return enums;
}
- public TermsOfUseAndAccess parseTermsOfUseAndAccess(JsonObject obj) throws JsonParseException {
- JsonObject terms = obj.getJsonObject("termsOfUseAndAccess");
- TermsOfUseAndAccess toaa = new TermsOfUseAndAccess();
- toaa.setTermsOfUse(terms.getString("termsOfUse", null));
- toaa.setConfidentialityDeclaration(terms.getString("confidentialityDeclaration", null));
- toaa.setSpecialPermissions(terms.getString("specialPermissions", null));
- toaa.setRestrictions(terms.getString("restrictions", null));
- toaa.setCitationRequirements(terms.getString("citationRequirements", null));
- toaa.setDepositorRequirements(terms.getString("depositorRequirements", null));
- toaa.setConditions(terms.getString("conditions", null));
- toaa.setDisclaimer(terms.getString("disclaimer", null));
- return parseTermsOfAccess(obj, toaa);
+ public TermsOfUseOrLicense parseTermsOfUseAndLicesne(JsonObject obj) throws JsonParseException {
+ JsonObject terms = obj.getJsonObject("termsOfUseOrLicense");
+ TermsOfUseOrLicense toal = new TermsOfUseOrLicense();
+ toal.setTermsOfUse(terms.getString("termsOfUse", null));
+ toal.setConfidentialityDeclaration(terms.getString("confidentialityDeclaration", null));
+ toal.setSpecialPermissions(terms.getString("specialPermissions", null));
+ toal.setRestrictions(terms.getString("restrictions", null));
+ toal.setCitationRequirements(terms.getString("citationRequirements", null));
+ toal.setDepositorRequirements(terms.getString("depositorRequirements", null));
+ toal.setConditions(terms.getString("conditions", null));
+ toal.setDisclaimer(terms.getString("disclaimer", null));
+ return toal;
}
- public TermsOfUseAndAccess parseTermsOfAccess(JsonObject obj) throws JsonParseException {
+ public TermsOfAccess parseTermsOfAccess(JsonObject obj) throws JsonParseException {
return parseTermsOfAccess(obj, null);
}
- public TermsOfUseAndAccess parseTermsOfAccess(JsonObject obj, TermsOfUseAndAccess touaIn) throws JsonParseException {
- //This only gets values associated with the terms of access for restricted files when no TermsOfUseAndAccess object provided
+ public TermsOfAccess parseTermsOfAccess(JsonObject obj, TermsOfAccess touaIn) throws JsonParseException {
+ //This only gets values associated with the terms of access for restricted files when no TermsOfAccess object provided
// or added to an existing object when provided
JsonObject terms;
- TermsOfUseAndAccess toaa;
+ TermsOfAccess toaa;
if (touaIn == null) {
terms = obj.getJsonObject("customTermsOfAccess");
- toaa = new TermsOfUseAndAccess();
+ toaa = new TermsOfAccess();
} else {
- terms = obj.getJsonObject("termsOfUseAndAccess");
+ terms = obj.getJsonObject("termsOfAccess");
toaa = touaIn;
}
@@ -398,7 +398,6 @@ public TermsOfUseAndAccess parseTermsOfAccess(JsonObject obj, TermsOfUseAndAcces
toaa.setContactForAccess(terms.getString("contactForAccess", null));
toaa.setSizeOfCollection(terms.getString("sizeOfCollection", null));
toaa.setStudyCompletion(terms.getString("studyCompletion", null));
- toaa.setConfidentialityDeclaration(terms.getString("confidentialityDeclaration", null));
return toaa;
}
@@ -490,13 +489,14 @@ public DatasetVersion parseDatasetVersion(JsonObject obj, DatasetVersion dsv) th
dsv.setArchiveTime(parseTime(obj.getString("archiveTime", null)));
dsv.setUNF(obj.getString("UNF", null));
// Terms of Use related fields
- TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
+ TermsOfAccess termsOfAccess = new TermsOfAccess();
+ TermsOfUseOrLicense termsOfUseOrLicense = new TermsOfUseOrLicense();
License license = null;
if (obj.containsKey("license")) {
try {
- // This method will attempt to parse the license in the format
+ // This method will attempt to parse the license in the format
// in which it appears in our json exports, as a compound
// field, for ex.:
// "license": {
@@ -506,35 +506,35 @@ public DatasetVersion parseDatasetVersion(JsonObject obj, DatasetVersion dsv) th
license = parseLicense(obj.getJsonObject("license"));
} catch (ClassCastException cce) {
logger.fine("class cast exception parsing the license section (will try parsing as a string)");
- // attempt to parse as string:
+ // attempt to parse as string:
// i.e. this is for backward compatibility, after the bug in #9155
- // was fixed, with the old style of encoding the license info
- // in input json, for ex.:
+ // was fixed, with the old style of encoding the license info
+ // in input json, for ex.:
// "license" : "CC0 1.0"
license = parseLicense(obj.getString("license", null));
}
}
- terms.setTermsOfUse(obj.getString("termsOfUse", null));
- terms.setConfidentialityDeclaration(obj.getString("confidentialityDeclaration", null));
- terms.setSpecialPermissions(obj.getString("specialPermissions", null));
- terms.setRestrictions(obj.getString("restrictions", null));
- terms.setCitationRequirements(obj.getString("citationRequirements", null));
- terms.setDepositorRequirements(obj.getString("depositorRequirements", null));
- terms.setConditions(obj.getString("conditions", null));
- terms.setDisclaimer(obj.getString("disclaimer", null));
+ termsOfUseOrLicense.setTermsOfUse(obj.getString("termsOfUse", null));
+ termsOfUseOrLicense.setConfidentialityDeclaration(obj.getString("confidentialityDeclaration", null));
+ termsOfUseOrLicense.setSpecialPermissions(obj.getString("specialPermissions", null));
+ termsOfUseOrLicense.setRestrictions(obj.getString("restrictions", null));
+ termsOfUseOrLicense.setCitationRequirements(obj.getString("citationRequirements", null));
+ termsOfUseOrLicense.setDepositorRequirements(obj.getString("depositorRequirements", null));
+ termsOfUseOrLicense.setConditions(obj.getString("conditions", null));
+ termsOfUseOrLicense.setDisclaimer(obj.getString("disclaimer", null));
if (license == null) {
// If no license was provided or the provided license was invalid,
// we check if terms were provided.
- boolean termsProvided = terms.getTermsOfUse() != null
- || terms.getConfidentialityDeclaration() != null
- || terms.getSpecialPermissions() != null
- || terms.getRestrictions() != null
- || terms.getCitationRequirements() != null
- || terms.getDepositorRequirements() != null
- || terms.getConditions() != null
- || terms.getDisclaimer() != null;
+ boolean termsProvided = termsOfUseOrLicense.getTermsOfUse() != null
+ || termsOfUseOrLicense.getConfidentialityDeclaration() != null
+ || termsOfUseOrLicense.getSpecialPermissions() != null
+ || termsOfUseOrLicense.getRestrictions() != null
+ || termsOfUseOrLicense.getCitationRequirements() != null
+ || termsOfUseOrLicense.getDepositorRequirements() != null
+ || termsOfUseOrLicense.getConditions() != null
+ || termsOfUseOrLicense.getDisclaimer() != null;
if (!FeatureFlags.DO_NOT_ASSUME_DEFAULT_LICENSE.enabled()) {
if (!termsProvided) {
@@ -561,17 +561,33 @@ public DatasetVersion parseDatasetVersion(JsonObject obj, DatasetVersion dsv) th
}
}
- terms.setLicense(license);
- terms.setTermsOfAccess(obj.getString("termsOfAccess", null));
- terms.setDataAccessPlace(obj.getString("dataAccessPlace", null));
- terms.setOriginalArchive(obj.getString("originalArchive", null));
- terms.setAvailabilityStatus(obj.getString("availabilityStatus", null));
- terms.setContactForAccess(obj.getString("contactForAccess", null));
- terms.setSizeOfCollection(obj.getString("sizeOfCollection", null));
- terms.setStudyCompletion(obj.getString("studyCompletion", null));
- terms.setFileAccessRequest(obj.getBoolean("fileAccessRequest", false));
- dsv.setTermsOfUseAndAccess(terms);
- terms.setDatasetVersion(dsv);
+ if (license == null) {
+ termsOfUseOrLicense.setLicense(license);
+ termsOfUseOrLicense.setTermsOfUse(obj.getString("termsOfUse", null));
+ termsOfUseOrLicense.setConfidentialityDeclaration(obj.getString("confidentialityDeclaration", null));
+ termsOfUseOrLicense.setSpecialPermissions(obj.getString("specialPermissions", null));
+ termsOfUseOrLicense.setRestrictions(obj.getString("restrictions", null));
+ termsOfUseOrLicense.setCitationRequirements(obj.getString("citationRequirements", null));
+ termsOfUseOrLicense.setDepositorRequirements(obj.getString("depositorRequirements", null));
+ termsOfUseOrLicense.setConditions(obj.getString("conditions", null));
+ termsOfUseOrLicense.setDisclaimer(obj.getString("disclaimer", null));
+ } else {
+ termsOfUseOrLicense.setLicense(license);
+ }
+ termsOfAccess.setTermsOfAccess(obj.getString("termsOfAccess", null));
+ termsOfAccess.setDataAccessPlace(obj.getString("dataAccessPlace", null));
+ termsOfAccess.setOriginalArchive(obj.getString("originalArchive", null));
+ termsOfAccess.setAvailabilityStatus(obj.getString("availabilityStatus", null));
+ termsOfAccess.setContactForAccess(obj.getString("contactForAccess", null));
+ termsOfAccess.setSizeOfCollection(obj.getString("sizeOfCollection", null));
+ termsOfAccess.setStudyCompletion(obj.getString("studyCompletion", null));
+ termsOfAccess.setFileAccessRequest(obj.getBoolean("fileAccessRequest", false));
+
+ dsv.setTermsOfAccess(termsOfAccess);
+ termsOfAccess.setDatasetVersion(dsv);
+
+ dsv.setTermsOfUseOrLicense(termsOfUseOrLicense);
+ termsOfUseOrLicense.setDatasetVersion(dsv);
JsonObject metadataBlocks = obj.getJsonObject("metadataBlocks");
if (metadataBlocks == null){
@@ -798,7 +814,7 @@ public List parseMetadataBlocks(JsonObject json) throws JsonParseE
}
return fields;
}
-
+
public Map parseRequestBodyInstructionsMap(JsonObject jsonObject) {
Map instructionsMap = new HashMap<>();
JsonArray instructionsJsonArray = jsonObject.getJsonArray("instructions");
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 27f4c33e2c0..0cd797da20b 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
@@ -702,26 +702,27 @@ public static JsonObjectBuilder json(DatasetVersion dsv, List anonymized
bld.add("license", jsonLicense(dsv));
} else {
// Custom terms
- bld.add("termsOfUse", dsv.getTermsOfUseAndAccess().getTermsOfUse())
- .add("confidentialityDeclaration", dsv.getTermsOfUseAndAccess().getConfidentialityDeclaration())
- .add("specialPermissions", dsv.getTermsOfUseAndAccess().getSpecialPermissions())
- .add("restrictions", dsv.getTermsOfUseAndAccess().getRestrictions())
- .add("citationRequirements", dsv.getTermsOfUseAndAccess().getCitationRequirements())
- .add("depositorRequirements", dsv.getTermsOfUseAndAccess().getDepositorRequirements())
- .add("conditions", dsv.getTermsOfUseAndAccess().getConditions())
- .add("disclaimer", dsv.getTermsOfUseAndAccess().getDisclaimer());
- }
- bld.add("termsOfAccess", dsv.getTermsOfUseAndAccess().getTermsOfAccess())
- .add("dataAccessPlace", dsv.getTermsOfUseAndAccess().getDataAccessPlace())
- .add("originalArchive", dsv.getTermsOfUseAndAccess().getOriginalArchive())
- .add("availabilityStatus", dsv.getTermsOfUseAndAccess().getAvailabilityStatus())
- .add("contactForAccess", dsv.getTermsOfUseAndAccess().getContactForAccess())
- .add("sizeOfCollection", dsv.getTermsOfUseAndAccess().getSizeOfCollection())
- .add("studyCompletion", dsv.getTermsOfUseAndAccess().getStudyCompletion())
- .add("fileAccessRequest", dsv.getTermsOfUseAndAccess().isFileAccessRequest());
+ bld.add("termsOfUse", dsv.getTermsOfUseOrLicense().getTermsOfUse())
+ .add("confidentialityDeclaration", dsv.getTermsOfUseOrLicense().getConfidentialityDeclaration())
+ .add("specialPermissions", dsv.getTermsOfUseOrLicense().getSpecialPermissions())
+ .add("restrictions", dsv.getTermsOfUseOrLicense().getRestrictions())
+ .add("citationRequirements", dsv.getTermsOfUseOrLicense().getCitationRequirements())
+ .add("depositorRequirements", dsv.getTermsOfUseOrLicense().getDepositorRequirements())
+ .add("conditions", dsv.getTermsOfUseOrLicense().getConditions())
+ .add("disclaimer", dsv.getTermsOfUseOrLicense().getDisclaimer());
+ }
+ bld.add("termsOfAccess", dsv.getTermsOfAccess().getTermsOfAccess())
+ .add("dataAccessPlace", dsv.getTermsOfAccess().getDataAccessPlace())
+ .add("originalArchive", dsv.getTermsOfAccess().getOriginalArchive())
+ .add("availabilityStatus", dsv.getTermsOfAccess().getAvailabilityStatus())
+ .add("contactForAccess", dsv.getTermsOfAccess().getContactForAccess())
+ .add("sizeOfCollection", dsv.getTermsOfAccess().getSizeOfCollection())
+ .add("studyCompletion", dsv.getTermsOfAccess().getStudyCompletion())
+ .add("fileAccessRequest", dsv.getTermsOfAccess().isFileAccessRequest());
+
if(includeMetadataBlocks) {
bld.add("metadataBlocks",
- jsonByBlocks(dsv.getDatasetFields(), anonymizedFieldTypeNamesList, ignoreSettingExcludeEmailFromExport));
+ jsonByBlocks(dsv.getDatasetFields(), anonymizedFieldTypeNamesList, ignoreSettingExcludeEmailFromExport));
}
if(returnOwners){
bld.add("isPartOf", getOwnersFromDvObject(dataset));
@@ -729,7 +730,6 @@ public static JsonObjectBuilder json(DatasetVersion dsv, List anonymized
if (includeFiles) {
bld.add("files", jsonFileMetadatas(dsv.getFileMetadatas(), forExportDataProvider));
}
-
return bld;
}
@@ -1818,33 +1818,39 @@ public static JsonObjectBuilder jsonTemplate(Template template) {
.add("usageCount", template.getUsageCount())
.add("createTime", template.getCreateTime().toString())
.add("createDate", template.getCreateDate())
- .add("termsOfUseAndAccess", jsonTermsOfUseAndAccess(template.getTermsOfUseAndAccess()))
+ .add("termsOfAccess", jsonTermsOfAccess(template.getTermsOfAccess()))
+ .add("termsOfUseOrLicense", jsonTermsOfUseOrLicense(template.getTermsOfUseOrLicense()))
.add("datasetFields", jsonByBlocks(template.getDatasetFields()))
.add("instructions", jsonTemplateInstructions(template.getInstructionsMap()))
.add("dataverseAlias", template.getDataverse().getAlias());
}
- public static JsonObjectBuilder jsonTermsOfUseAndAccess(TermsOfUseAndAccess termsOfUseAndAccess) {
- License license = termsOfUseAndAccess.getLicense();
+ public static JsonObjectBuilder jsonTermsOfUseOrLicense(TermsOfUseOrLicense termsOfUseOrLicense) {
+ License license = termsOfUseOrLicense.getLicense();
return jsonObjectBuilder()
- .add("id", termsOfUseAndAccess.getId())
+ .add("id", termsOfUseOrLicense.getId())
.add("license", license != null ? json(license) : null)
- .add("termsOfUse", termsOfUseAndAccess.getTermsOfUse())
- .add("termsOfAccess", termsOfUseAndAccess.getTermsOfAccess())
- .add("confidentialityDeclaration", termsOfUseAndAccess.getConfidentialityDeclaration())
- .add("specialPermissions", termsOfUseAndAccess.getSpecialPermissions())
- .add("restrictions", termsOfUseAndAccess.getRestrictions())
- .add("citationRequirements", termsOfUseAndAccess.getCitationRequirements())
- .add("depositorRequirements", termsOfUseAndAccess.getDepositorRequirements())
- .add("conditions", termsOfUseAndAccess.getConditions())
- .add("disclaimer", termsOfUseAndAccess.getDisclaimer())
- .add("dataAccessPlace", termsOfUseAndAccess.getDataAccessPlace())
- .add("originalArchive", termsOfUseAndAccess.getOriginalArchive())
- .add("availabilityStatus", termsOfUseAndAccess.getAvailabilityStatus())
- .add("sizeOfCollection", termsOfUseAndAccess.getSizeOfCollection())
- .add("studyCompletion", termsOfUseAndAccess.getStudyCompletion())
- .add("contactForAccess", termsOfUseAndAccess.getContactForAccess())
- .add("fileAccessRequest", termsOfUseAndAccess.isFileAccessRequest());
+ .add("termsOfUse", termsOfUseOrLicense.getTermsOfUse())
+ .add("confidentialityDeclaration", termsOfUseOrLicense.getConfidentialityDeclaration())
+ .add("specialPermissions", termsOfUseOrLicense.getSpecialPermissions())
+ .add("restrictions", termsOfUseOrLicense.getRestrictions())
+ .add("citationRequirements", termsOfUseOrLicense.getCitationRequirements())
+ .add("depositorRequirements", termsOfUseOrLicense.getDepositorRequirements())
+ .add("conditions", termsOfUseOrLicense.getConditions())
+ .add("disclaimer", termsOfUseOrLicense.getDisclaimer());
+ }
+
+ public static JsonObjectBuilder jsonTermsOfAccess(TermsOfAccess termsOfAccess) {
+ return jsonObjectBuilder()
+ .add("id", termsOfAccess.getId())
+ .add("termsOfAccess", termsOfAccess.getTermsOfAccess())
+ .add("dataAccessPlace", termsOfAccess.getDataAccessPlace())
+ .add("originalArchive", termsOfAccess.getOriginalArchive())
+ .add("availabilityStatus", termsOfAccess.getAvailabilityStatus())
+ .add("sizeOfCollection", termsOfAccess.getSizeOfCollection())
+ .add("studyCompletion", termsOfAccess.getStudyCompletion())
+ .add("contactForAccess", termsOfAccess.getContactForAccess())
+ .add("fileAccessRequest", termsOfAccess.isFileAccessRequest());
}
public static JsonArrayBuilder jsonTemplateInstructions(Map templateInstructions) {
diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties
index 66dd1d1d659..b91da01cb79 100644
--- a/src/main/java/propertyFiles/Bundle.properties
+++ b/src/main/java/propertyFiles/Bundle.properties
@@ -2106,8 +2106,8 @@ file.dataFilesTab.terms.list.termsOfAccess.description.line.2=Learn about restri
file.dataFilesTab.terms.list.termsOfAccess.restrictedFiles=Restricted Files
file.dataFilesTab.terms.list.termsOfAccess.restrictedFiles.title=The number of restricted files in this dataset.
file.dataFilesTab.terms.list.termsOfAccess.restrictedFiles.txt=There {0, choice, 0#are|1#is|2#are} {0} restricted {0, choice, 0#files|1#file|2#files} in this dataset.
-file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess=Terms of Access for Restricted Files
-file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess.title=Information on how and if users can access restricted files in this Dataset
+file.dataFilesTab.terms.list.termsOfAccess.termsOfAccess=Terms of Access for Restricted Files
+file.dataFilesTab.terms.list.termsOfAccess.termsOfAccess.title=Information on how and if users can access restricted files in this Dataset
file.dataFilesTab.terms.list.termsOfAccess.requestAccess=Request Access
file.dataFilesTab.terms.list.termsOfAccess.requestAccess.title=If checked, users can request access to the restricted files in this dataset.
file.dataFilesTab.terms.list.termsOfAccess.requestAccess.request=Users may request access to files.
diff --git a/src/main/resources/db/migration/V6.11.1__DD2318-split-termsofuseandaccess.sql b/src/main/resources/db/migration/V6.11.1__DD2318-split-termsofuseandaccess.sql
new file mode 100644
index 00000000000..eb27abf0d56
--- /dev/null
+++ b/src/main/resources/db/migration/V6.11.1__DD2318-split-termsofuseandaccess.sql
@@ -0,0 +1,137 @@
+CREATE TABLE IF NOT EXISTS termsofaccess (
+ id BIGSERIAL NOT NULL,
+ availabilitystatus TEXT,
+ contactforaccess TEXT,
+ dataaccessplace TEXT,
+ originalarchive TEXT,
+ sizeofcollection TEXT,
+ studycompletion TEXT,
+ termsofaccess TEXT,
+ fileaccessrequest BOOLEAN,
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE IF NOT EXISTS termsofuseorlicense (
+ id BIGSERIAL NOT NULL,
+ citationrequirements TEXT,
+ conditions TEXT,
+ confidentialitydeclaration TEXT,
+ depositorrequirements TEXT,
+ disclaimer TEXT,
+ license_id BIGINT,
+ restrictions TEXT,
+ specialpermissions TEXT,
+ termsofuse TEXT,
+ PRIMARY KEY (id)
+);
+
+DO $$
+BEGIN
+ ALTER TABLE datasetversion ADD COLUMN IF NOT EXISTS termsofaccess_id BIGINT;
+ ALTER TABLE datasetversion ADD COLUMN IF NOT EXISTS default_termsofuseorlicense_id BIGINT;
+ ALTER TABLE template ADD COLUMN IF NOT EXISTS termsofaccess_id BIGINT;
+ ALTER TABLE template ADD COLUMN IF NOT EXISTS termsofuseorlicense_id BIGINT;
+ ALTER TABLE filemetadata ADD COLUMN IF NOT EXISTS termsofuseorlicense_id BIGINT;
+
+ CREATE INDEX IF NOT EXISTS index_datasetversion_default_termsofuseorlicense_id
+ ON datasetversion (default_termsofuseorlicense_id);
+
+ BEGIN
+ ALTER TABLE termsofuseorlicense ADD CONSTRAINT fk_termsofuseorlicense_license_id FOREIGN KEY (license_id) REFERENCES license(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_termsofuseorlicense_license_id already exists';
+ END;
+ BEGIN
+ ALTER TABLE datasetversion ADD CONSTRAINT fk_datasetversion_default_termsofuseorlicense_id FOREIGN KEY (default_termsofuseorlicense_id) REFERENCES termsofuseorlicense(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_datasetversion_default_termsofuseorlicense_id already exists';
+ END;
+ BEGIN
+ ALTER TABLE datasetversion ADD CONSTRAINT fk_datasetversion_termsofaccess_id FOREIGN KEY (termsofaccess_id) REFERENCES termsofaccess(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_datasetversion_termsofaccess_id already exists';
+ END;
+ BEGIN
+ ALTER TABLE template ADD CONSTRAINT fk_template_termsofuseorlicense_id FOREIGN KEY (termsofuseorlicense_id) REFERENCES termsofuseorlicense(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_template_termsofuseorlicense_id already exists';
+ END;
+ BEGIN
+ ALTER TABLE template ADD CONSTRAINT fk_template_termsofaccess_id FOREIGN KEY (termsofaccess_id) REFERENCES termsofaccess(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_template_termsofaccess_id already exists';
+ END;
+ BEGIN
+ ALTER TABLE filemetadata ADD CONSTRAINT fk_filemetadata_termsofuseorlicense_id FOREIGN KEY (termsofuseorlicense_id) REFERENCES termsofuseorlicense(id);
+ EXCEPTION
+ WHEN duplicate_object THEN RAISE NOTICE 'Table constraint fk_filemetadata_termsofuseorlicense_id already exists';
+ END;
+
+ -- Migrate data from the old table termsofuseandaccess to the new tables termsofuseorlicense and termsofaccess
+
+ IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema='public' AND table_name='termsofuseandaccess') THEN
+ INSERT INTO termsofuseorlicense (id, citationrequirements, conditions, confidentialitydeclaration, depositorrequirements, disclaimer, license_id, restrictions, specialpermissions, termsofuse)
+ SELECT id, citationrequirements, conditions, confidentialitydeclaration, depositorrequirements, disclaimer, license_id, restrictions, specialpermissions, termsofuse
+ FROM termsofuseandaccess
+ ON CONFLICT (id) DO NOTHING;
+
+ INSERT INTO termsofaccess (id, availabilitystatus, contactforaccess, dataaccessplace, originalarchive, sizeofcollection, studycompletion, termsofaccess, fileaccessrequest)
+ SELECT id, availabilitystatus, contactforaccess, dataaccessplace, originalarchive, sizeofcollection, studycompletion, termsofaccess, fileaccessrequest
+ FROM termsofuseandaccess
+ ON CONFLICT (id) DO NOTHING;
+
+ END IF;
+
+ -- Migrate old references to termsofuseandaccess to termsofaccess and termsofuseorlicense in datasetversion and template tables
+
+ IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='datasetversion' AND column_name='termsofuseandaccess_id') THEN
+ UPDATE datasetversion
+ SET termsofaccess_id = termsofuseandaccess_id,
+ default_termsofuseorlicense_id = termsofuseandaccess_id
+ WHERE termsofaccess_id IS NULL OR default_termsofuseorlicense_id IS NULL;
+ END IF;
+ IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='template' AND column_name='termsofuseandaccess_id') THEN
+ UPDATE template
+ SET termsofaccess_id = termsofuseandaccess_id,
+ termsofuseorlicense_id = termsofuseandaccess_id
+ WHERE termsofaccess_id IS NULL OR termsofuseorlicense_id IS NULL;
+ END IF;
+
+ -- Drop the old termsofuseandaccess references, since we have migrated the data to the new tables.
+
+ DROP INDEX IF EXISTS index_datasetversion_termsofuseandaccess_id;
+ ALTER TABLE public.datasetversion DROP CONSTRAINT IF EXISTS fk_datasetversion_termsofuseandaccess_id;
+ ALTER TABLE datasetversion DROP COLUMN IF EXISTS termsofuseandaccess_id;
+
+ ALTER TABLE public.template DROP CONSTRAINT IF EXISTS fk_template_termsofuseandaccess_id;
+ ALTER TABLE template DROP COLUMN IF EXISTS termsofuseandaccess_id;
+
+ -- termsofuseorlicense for filemetadata prepares the new functionality, we don't need to drop old references from this table.
+
+ -- Drop the old termsofuseandaccess table, since we migrated the content and dropped the references
+
+ ALTER TABLE IF EXISTS public.termsofuseandaccess DROP CONSTRAINT IF EXISTS fk_termsofuseandaccess_license_id;
+ ALTER TABLE IF EXISTS public.termsofuseandaccess DROP CONSTRAINT IF EXISTS fk_termsofuseandcesss_license_id; -- typo in the past? cleaning up anyway
+ DROP TABLE IF EXISTS termsofuseandaccess;
+
+ -- Grant privileges to dvnuser for the new tables and sequences
+
+ GRANT SELECT, INSERT, UPDATE, DELETE ON termsofaccess TO dvnuser;
+ GRANT SELECT, INSERT, UPDATE, DELETE ON termsofuseorlicense TO dvnuser;
+ GRANT USAGE, SELECT ON SEQUENCE termsofaccess_id_seq TO dvnuser;
+ GRANT USAGE, SELECT ON SEQUENCE termsofuseorlicense_id_seq TO dvnuser;
+END
+$$;
+
+DO $$
+BEGIN
+ -- Reset the sequences for termsofaccess and termsofuseorlicense tables to the max id value.
+ -- We have migrated data from the old termsofuseandaccess table, and we want to avoid conflicts with new inserts.
+ IF EXISTS (SELECT 1 FROM termsofaccess) THEN
+ PERFORM setval('termsofaccess_id_seq', MAX(id)) FROM termsofaccess;
+ END IF;
+ IF EXISTS (SELECT 1 FROM termsofuseorlicense) THEN
+ PERFORM setval('termsofuseorlicense_id_seq', MAX(id)) FROM termsofuseorlicense;
+ END IF;
+END
+$$;
diff --git a/src/main/webapp/dataset-license-terms.xhtml b/src/main/webapp/dataset-license-terms.xhtml
index af055b13899..b338565e7e6 100644
--- a/src/main/webapp/dataset-license-terms.xhtml
+++ b/src/main/webapp/dataset-license-terms.xhtml
@@ -7,11 +7,11 @@
xmlns:o="http://omnifaces.org/ui"
xmlns:jsf="http://xmlns.jcp.org/jsf">
-
-
+
@@ -53,7 +53,7 @@
-
+
@@ -69,99 +69,99 @@
-
+
-
- #{DatasetUtil:getLocalizedLicenseDetails(termsOfUseAndAccess.license,'NAME')}
+
+ #{DatasetUtil:getLocalizedLicenseDetails(termsOfUseOrLicense.license,'NAME')}
-
-