Skip to content

Commit 83b21f0

Browse files
authored
DD-420 multi license UI (#73)
* First changes for multi-license UI. * Add prototype multi-license support in UI. * Add TermsOfUse changes and Custom terms. * Revert adjustments in install.sh from last commit. * Remove old license code in TermsOfUseAndAccess and references to them. * Make Publish Dataset license fields conditional again. * Remove borders of fields in Publish Dataset.
1 parent 0273c0f commit 83b21f0

27 files changed

Lines changed: 357 additions & 166 deletions

src/main/java/edu/harvard/iq/dataverse/Dataset.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -298,15 +298,15 @@ public void setVersions(List<DatasetVersion> versions) {
298298
this.versions = versions;
299299
}
300300

301-
private DatasetVersion createNewDatasetVersion(Template template, FileMetadata fmVarMet) {
301+
private DatasetVersion createNewDatasetVersion(Template template, FileMetadata fmVarMet, License license) {
302302
DatasetVersion dsv = new DatasetVersion();
303303
dsv.setVersionState(DatasetVersion.VersionState.DRAFT);
304304
dsv.setFileMetadatas(new ArrayList<>());
305305
DatasetVersion latestVersion;
306306

307307
//if the latest version has values get them copied over
308308
if (template != null) {
309-
dsv.updateDefaultValuesFromTemplate(template);
309+
dsv.updateDefaultValuesFromTemplate(template, license);
310310
setVersions(new ArrayList());
311311
} else {
312312
latestVersion = getLatestVersionForCopy();
@@ -324,7 +324,7 @@ private DatasetVersion createNewDatasetVersion(Template template, FileMetadata f
324324
} else {
325325
TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
326326
terms.setDatasetVersion(dsv);
327-
terms.setLicense(TermsOfUseAndAccess.License.CC0);
327+
terms.setLicense(license);
328328
dsv.setTermsOfUseAndAccess(terms);
329329
}
330330

@@ -380,18 +380,18 @@ private DatasetVersion createNewDatasetVersion(Template template, FileMetadata f
380380
* @return The edit version {@code this}.
381381
*/
382382
public DatasetVersion getEditVersion() {
383-
return getEditVersion(null, null);
383+
return getEditVersion(null, null, null);
384384
}
385385

386386
public DatasetVersion getEditVersion(FileMetadata fm) {
387-
return getEditVersion(null, fm);
387+
return getEditVersion(null, fm, null);
388388
}
389389

390-
public DatasetVersion getEditVersion(Template template, FileMetadata fm) {
390+
public DatasetVersion getEditVersion(Template template, FileMetadata fm, License license) {
391391
DatasetVersion latestVersion = this.getLatestVersion();
392392
if (!latestVersion.isWorkingCopy() || template != null) {
393393
// if the latest version is released or archived, create a new version for editing
394-
return createNewDatasetVersion(template, fm);
394+
return createNewDatasetVersion(template, fm, license);
395395
} else {
396396
// else, edit existing working copy
397397
return latestVersion;
@@ -402,11 +402,11 @@ public DatasetVersion getEditVersion(Template template, FileMetadata fm) {
402402
* @todo Investigate if this method should be deprecated in favor of
403403
* createNewDatasetVersion.
404404
*/
405-
public DatasetVersion getCreateVersion() {
405+
public DatasetVersion getCreateVersion(License license) {
406406
DatasetVersion dsv = new DatasetVersion();
407407
dsv.setVersionState(DatasetVersion.VersionState.DRAFT);
408408
dsv.setDataset(this);
409-
dsv.initDefaultValues();
409+
dsv.initDefaultValues(license);
410410
this.setVersions(new ArrayList<>());
411411
getVersions().add(0, dsv);
412412
return dsv;

src/main/java/edu/harvard/iq/dataverse/DatasetPage.java

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package edu.harvard.iq.dataverse;
22

3+
import edu.harvard.iq.dataverse.api.FetchException;
34
import edu.harvard.iq.dataverse.provenance.ProvPopupFragmentBean;
45
import edu.harvard.iq.dataverse.api.AbstractApiBean;
56
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
@@ -72,6 +73,7 @@
7273
import java.util.Set;
7374
import java.util.Collection;
7475
import java.util.logging.Logger;
76+
import java.util.stream.Collectors;
7577
import javax.ejb.EJB;
7678
import javax.ejb.EJBException;
7779
import javax.faces.application.FacesMessage;
@@ -232,6 +234,8 @@ public enum DisplayMode {
232234
@Inject
233235
MakeDataCountLoggingServiceBean mdcLogService;
234236
@Inject DataverseHeaderFragment dataverseHeaderFragment;
237+
@Inject
238+
LicenseServiceBean licenseServiceBean;
235239

236240
private Dataset dataset = new Dataset();
237241

@@ -284,6 +288,7 @@ public enum DisplayMode {
284288
private List<SelectItem> linkingDVSelectItems;
285289
private Dataverse linkingDataverse;
286290
private Dataverse selectedHostDataverse;
291+
private List<SelectItem> licenseSelectItems;
287292

288293
public Dataverse getSelectedHostDataverse() {
289294
return selectedHostDataverse;
@@ -332,6 +337,16 @@ public boolean isShowIngestSuccess() {
332337
public void setShowIngestSuccess(boolean showIngestSuccess) {
333338
this.showIngestSuccess = showIngestSuccess;
334339
}
340+
341+
private Long licenseId;
342+
343+
public Long getLicenseId() {
344+
return licenseId;
345+
}
346+
347+
public void setLicenseId(Long licenseId) {
348+
this.licenseId = licenseId;
349+
}
335350

336351
// TODO: Consider renaming "configureTools" to "fileConfigureTools".
337352
List<ExternalTool> configureTools = new ArrayList<>();
@@ -1190,6 +1205,14 @@ public void setLinkingDataverseId(Long linkingDataverseId) {
11901205
this.linkingDataverseId = linkingDataverseId;
11911206
}
11921207

1208+
public List<SelectItem> getLicenseSelectItems() {
1209+
return licenseSelectItems;
1210+
}
1211+
1212+
public void setLicenseSelectItems(List<SelectItem> licenseSelectItems) {
1213+
this.licenseSelectItems = licenseSelectItems;
1214+
}
1215+
11931216

11941217

11951218
public void updateReleasedVersions(){
@@ -1593,10 +1616,10 @@ public void updateSelectedTemplate(ValueChangeEvent event) {
15931616
selectedTemplate = (Template) event.getNewValue();
15941617
if (selectedTemplate != null) {
15951618
//then create new working version from the selected template
1596-
workingVersion.updateDefaultValuesFromTemplate(selectedTemplate);
1619+
workingVersion.updateDefaultValuesFromTemplate(selectedTemplate, licenseServiceBean.getCC0());
15971620
updateDatasetFieldInputLevels();
15981621
} else {
1599-
workingVersion.initDefaultValues();
1622+
workingVersion.initDefaultValues(licenseServiceBean.getCC0());
16001623
updateDatasetFieldInputLevels();
16011624
}
16021625
resetVersionUI();
@@ -1953,10 +1976,10 @@ private String init(boolean initFull) {
19531976
selectedTemplate = testT;
19541977
}
19551978
}
1956-
workingVersion = dataset.getEditVersion(selectedTemplate, null);
1979+
workingVersion = dataset.getEditVersion(selectedTemplate, null, licenseServiceBean.getCC0());
19571980
updateDatasetFieldInputLevels();
19581981
} else {
1959-
workingVersion = dataset.getCreateVersion();
1982+
workingVersion = dataset.getCreateVersion(licenseServiceBean.getCC0());
19601983
updateDatasetFieldInputLevels();
19611984
}
19621985

@@ -2018,7 +2041,9 @@ private String init(boolean initFull) {
20182041
previewTools = externalToolService.findFileToolsByType(ExternalTool.Type.PREVIEW);
20192042
datasetExploreTools = externalToolService.findDatasetToolsByType(ExternalTool.Type.EXPLORE);
20202043
rowsPerPage = 10;
2021-
2044+
licenseSelectItems = licenseServiceBean.listAll().stream()
2045+
.map(license -> new SelectItem(license.getId().toString(), license.getName()))
2046+
.collect(Collectors.toList());
20222047

20232048

20242049
return null;
@@ -2383,7 +2408,7 @@ public void edit(EditMode editMode) {
23832408
dataset = datasetService.find(dataset.getId());
23842409
}
23852410
workingVersion = dataset.getEditVersion();
2386-
clone = workingVersion.cloneDatasetVersion();
2411+
clone = workingVersion.cloneDatasetVersion(licenseServiceBean.getCC0());
23872412
if (editMode == EditMode.INFO) {
23882413
// ?
23892414
} else if (editMode == EditMode.FILE) {
@@ -2395,6 +2420,10 @@ public void edit(EditMode editMode) {
23952420
JH.addMessage(FacesMessage.SEVERITY_INFO, BundleUtil.getStringFromBundle("dataset.message.editMetadata.label"), BundleUtil.getStringFromBundle("dataset.message.editMetadata.message"));
23962421
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Dataset Metadata", " - Add more metadata about your dataset to help others easily find it."));
23972422
} else if (editMode.equals(EditMode.LICENSE)){
2423+
License license = dataset.getEditVersion().getTermsOfUseAndAccess().getLicense();
2424+
if (license != null) {
2425+
licenseId = license.getId();
2426+
}
23982427
JH.addMessage(FacesMessage.SEVERITY_INFO, BundleUtil.getStringFromBundle("dataset.message.editTerms.label"), BundleUtil.getStringFromBundle("dataset.message.editTerms.message"));
23992428
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Dataset License and Terms", " - Update your dataset's license and terms of use."));
24002429
}
@@ -3405,6 +3434,7 @@ public String save() {
34053434
if (!filesToBeDeleted.isEmpty()) {
34063435
deleteStorageLocations = datafileService.getPhysicalFilesToDelete(filesToBeDeleted);
34073436
}
3437+
setLicense(dataset.getEditVersion());
34083438
cmd = new UpdateDatasetVersionCommand(dataset, dvRequestService.getDataverseRequest(), filesToBeDeleted, clone );
34093439
((UpdateDatasetVersionCommand) cmd).setValidateLenient(true);
34103440
}
@@ -3433,8 +3463,10 @@ public String save() {
34333463
logger.log(Level.SEVERE, "CommandException, when attempting to update the dataset: " + ex.getMessage(), ex);
34343464
populateDatasetUpdateFailureMessage();
34353465
return returnToDraftVersion();
3466+
} catch (FetchException e) {
3467+
logger.log(Level.SEVERE,"Exception: " + e.getMessage());
34363468
}
3437-
3469+
34383470
// Have we just deleted some draft datafiles (successfully)?
34393471
// finalize the physical file deletes:
34403472
// (DataFileService will double-check that the datafiles no
@@ -3532,6 +3564,21 @@ public String save() {
35323564

35333565
return returnToDraftVersion();
35343566
}
3567+
3568+
/**
3569+
* Sets the license to null if id is null, otherwise sets it to a license.
3570+
*
3571+
* @param editVersion
3572+
*/
3573+
private void setLicense(DatasetVersion editVersion) throws FetchException {
3574+
TermsOfUseAndAccess terms = editVersion.getTermsOfUseAndAccess();
3575+
if (licenseId == null) {
3576+
terms.setLicense(null);
3577+
} else {
3578+
License license = licenseServiceBean.getById(licenseId);
3579+
terms.setLicense(license);
3580+
}
3581+
}
35353582

35363583
private void populateDatasetUpdateFailureMessage(){
35373584
if (editMode == null) {

src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ public boolean isHasNonPackageFile(){
551551
return !this.fileMetadatas.get(0).getDataFile().getContentType().equals(DataFileServiceBean.MIME_TYPE_PACKAGE_FILE);
552552
}
553553

554-
public void updateDefaultValuesFromTemplate(Template template) {
554+
public void updateDefaultValuesFromTemplate(Template template, edu.harvard.iq.dataverse.License license) {
555555
if (!template.getDatasetFields().isEmpty()) {
556556
this.setDatasetFields(this.copyDatasetFields(template.getDatasetFields()));
557557
}
@@ -562,13 +562,13 @@ public void updateDefaultValuesFromTemplate(Template template) {
562562
} else {
563563
TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
564564
terms.setDatasetVersion(this);
565-
terms.setLicense(TermsOfUseAndAccess.License.CC0);
565+
terms.setLicense(license);
566566
terms.setDatasetVersion(this);
567567
this.setTermsOfUseAndAccess(terms);
568568
}
569569
}
570570

571-
public DatasetVersion cloneDatasetVersion(){
571+
public DatasetVersion cloneDatasetVersion(edu.harvard.iq.dataverse.License license){
572572
DatasetVersion dsv = new DatasetVersion();
573573
dsv.setVersionState(this.getPriorVersionState());
574574
dsv.setFileMetadatas(new ArrayList<>());
@@ -586,7 +586,7 @@ public DatasetVersion cloneDatasetVersion(){
586586
} else {
587587
TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
588588
terms.setDatasetVersion(dsv);
589-
terms.setLicense(TermsOfUseAndAccess.License.CC0);
589+
terms.setLicense(license);
590590
dsv.setTermsOfUseAndAccess(terms);
591591
}
592592

@@ -618,14 +618,14 @@ public DatasetVersion cloneDatasetVersion(){
618618

619619
}
620620

621-
public void initDefaultValues() {
621+
public void initDefaultValues(edu.harvard.iq.dataverse.License license) {
622622
//first clear then initialize - in case values were present
623623
// from template or user entry
624624
this.setDatasetFields(new ArrayList<>());
625625
this.setDatasetFields(this.initDatasetFields());
626626
TermsOfUseAndAccess terms = new TermsOfUseAndAccess();
627627
terms.setDatasetVersion(this);
628-
terms.setLicense(TermsOfUseAndAccess.License.CC0);
628+
terms.setLicense(license);
629629
this.setTermsOfUseAndAccess(terms);
630630

631631
}
@@ -1858,7 +1858,7 @@ public String getJsonLd() {
18581858
if (terms != null) {
18591859
JsonObjectBuilder license = Json.createObjectBuilder().add("@type", "Dataset");
18601860

1861-
if (TermsOfUseAndAccess.License.CC0.equals(terms.getLicense())) {
1861+
if (terms.getLicense() != null && TermsOfUseAndAccess.defaultLicense.equals(terms.getLicense().getName())) {
18621862
license.add("text", "CC0").add("url", "https://creativecommons.org/publicdomain/zero/1.0/");
18631863
} else {
18641864
String termsOfUse = terms.getTermsOfUse();

src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ public enum Referrer {
134134
@Inject ProvPopupFragmentBean provPopupFragmentBean;
135135
@Inject
136136
SettingsWrapper settingsWrapper;
137+
@Inject
138+
LicenseServiceBean licenseServiceBean;
137139

138140
private Dataset dataset = new Dataset();
139141

@@ -511,7 +513,7 @@ public String init() {
511513
return permissionsWrapper.notAuthorized();
512514
}
513515

514-
clone = workingVersion.cloneDatasetVersion();
516+
clone = workingVersion.cloneDatasetVersion(licenseServiceBean.getCC0());
515517
this.maxFileUploadSizeInBytes = systemConfig.getMaxFileUploadSizeForStore(dataset.getEffectiveStorageDriverId());
516518
this.multipleUploadFilesLimit = systemConfig.getMultipleUploadFilesLimit();
517519

@@ -534,7 +536,8 @@ public String init() {
534536
datafileService,
535537
permissionService,
536538
commandEngine,
537-
systemConfig);
539+
systemConfig,
540+
licenseServiceBean);
538541

539542
fileReplacePageHelper = new FileReplacePageHelper(addReplaceFileHelper,
540543
dataset,

src/main/java/edu/harvard/iq/dataverse/License.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.net.URI;
44
import java.net.URISyntaxException;
5+
import java.util.List;
56
import java.util.Objects;
67
import javax.persistence.Column;
78
import javax.persistence.Entity;
@@ -10,6 +11,7 @@
1011
import javax.persistence.Id;
1112
import javax.persistence.NamedQueries;
1213
import javax.persistence.NamedQuery;
14+
import javax.persistence.OneToMany;
1315
import javax.persistence.Table;
1416
import javax.persistence.UniqueConstraint;
1517

@@ -23,6 +25,8 @@
2325
query = "SELECT l FROM License l WHERE l.id=:id"),
2426
@NamedQuery( name="License.findByName",
2527
query = "SELECT l FROM License l WHERE l.name=:name"),
28+
@NamedQuery( name="License.findDefault",
29+
query = "SELECT l FROM License l WHERE l.name='CC0'"),
2630
@NamedQuery( name="License.findByNameOrUri",
2731
query = "SELECT l FROM License l WHERE l.name=:name OR l.uri=:uri"),
2832
@NamedQuery( name="License.deleteById",
@@ -55,6 +59,9 @@ public class License {
5559

5660
@Column(nullable = false)
5761
private boolean active;
62+
63+
@OneToMany(mappedBy="license")
64+
private List<TermsOfUseAndAccess> termsOfUseAndAccess;
5865

5966
public License() {
6067
}
@@ -123,17 +130,20 @@ public void setActive(boolean active) {
123130
this.active = active;
124131
}
125132

133+
public List<TermsOfUseAndAccess> getTermsOfUseAndAccess() {
134+
return termsOfUseAndAccess;
135+
}
136+
137+
public void setTermsOfUseAndAccess(List<TermsOfUseAndAccess> termsOfUseAndAccess) {
138+
this.termsOfUseAndAccess = termsOfUseAndAccess;
139+
}
140+
126141
@Override
127142
public boolean equals(Object o) {
128143
if (this == o) return true;
129144
if (o == null || getClass() != o.getClass()) return false;
130145
License license = (License) o;
131-
return active == license.active &&
132-
Objects.equals(id, license.id) &&
133-
Objects.equals(name, license.name) &&
134-
Objects.equals(shortDescription, license.shortDescription) &&
135-
Objects.equals(uri, license.uri) &&
136-
Objects.equals(iconUrl, license.iconUrl);
146+
return active == license.active && id.equals(license.id) && name.equals(license.name) && shortDescription.equals(license.shortDescription) && uri.equals(license.uri) && iconUrl.equals(license.iconUrl);
137147
}
138148

139149
@Override

0 commit comments

Comments
 (0)