From 4ec73ea05d83662d01d32ffc37bc901686710ac9 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Sat, 8 Feb 2025 10:36:25 -0500 Subject: [PATCH] initial code --- .../harvard/iq/dataverse/license/License.java | 72 ++++++++++++++++--- .../pidproviders/doi/XmlMetadataTemplate.java | 19 ++++- .../iq/dataverse/util/json/JsonPrinter.java | 9 +++ src/main/resources/db/migration/V6.5.0.6.sql | 5 ++ 4 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/db/migration/V6.5.0.6.sql 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 fe19073ab8d..88766cde73b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/license/License.java +++ b/src/main/java/edu/harvard/iq/dataverse/license/License.java @@ -52,22 +52,22 @@ @UniqueConstraint(columnNames = "uri")} ) public class License { - public static String CC0 = "http://creativecommons.org/publicdomain/zero/1.0"; + public static String CC0 = "http://creativecommons.org/publicdomain/zero/1.0"; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(columnDefinition="TEXT", nullable = false, unique = true) + @Column(columnDefinition = "TEXT", nullable = false, unique = true) private String name; - @Column(columnDefinition="TEXT") + @Column(columnDefinition = "TEXT") private String shortDescription; - @Column(columnDefinition="TEXT", nullable = false, unique = true) + @Column(columnDefinition = "TEXT", nullable = false, unique = true) private String uri; - @Column(columnDefinition="TEXT") + @Column(columnDefinition = "TEXT") private String iconUrl; @Column(nullable = false) @@ -78,8 +78,20 @@ public class License { @Column(nullable = false, columnDefinition = "BIGINT NOT NULL DEFAULT 0") private Long sortOrder; + + @Column(name = "rights_identifier") + private String rightsIdentifier; + + @Column(name = "rights_identifier_scheme") + private String rightsIdentifierScheme; + + @Column(name = "scheme_uri") + private String schemeUri; - @OneToMany(mappedBy="license") + @Column(name = "language_code") + private String languageCode; + + @OneToMany(mappedBy = "license") private List termsOfUseAndAccess; public License() { @@ -186,18 +198,55 @@ public void setSortOrder(Long sortOrder) { this.sortOrder = sortOrder; } + public String getRightsIdentifier() { + return rightsIdentifier; + } + + public void setRightsIdentifier(String rightsIdentifier) { + this.rightsIdentifier = rightsIdentifier; + } + + public String getRightsIdentifierScheme() { + return rightsIdentifierScheme; + } + + public void setRightsIdentifierScheme(String rightsIdentifierScheme) { + this.rightsIdentifierScheme = rightsIdentifierScheme; + } + + public String getSchemeUri() { + return schemeUri; + } + + public void setSchemeUri(String schemeUri) { + this.schemeUri = schemeUri; + } + + public String getLanguageCode() { + return languageCode; + } + + public void setLanguageCode(String languageCode) { + this.languageCode = languageCode; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; License license = (License) o; - return active == license.active && id.equals(license.id) && name.equals(license.name) && shortDescription.equals(license.shortDescription) && uri.equals(license.uri) && Objects.equals(iconUrl, license.iconUrl) - && Objects.equals(sortOrder, license.sortOrder); + return active == license.active && id.equals(license.id) && name.equals(license.name) + && shortDescription.equals(license.shortDescription) && uri.equals(license.uri) + && Objects.equals(iconUrl, license.iconUrl) && Objects.equals(sortOrder, license.sortOrder) + && Objects.equals(rightsIdentifier, license.rightsIdentifier) + && Objects.equals(rightsIdentifierScheme, license.rightsIdentifierScheme) + && Objects.equals(schemeUri, license.schemeUri); } @Override public int hashCode() { - return Objects.hash(id, name, shortDescription, uri, iconUrl, active, sortOrder); + return Objects.hash(id, name, shortDescription, uri, iconUrl, active, sortOrder, rightsIdentifier, + rightsIdentifierScheme, schemeUri); } @Override @@ -211,7 +260,10 @@ public String toString() { ", active=" + active + ", isDefault=" + isDefault + ", sortOrder=" + sortOrder + + ", rightsIdentifier='" + rightsIdentifier + '\'' + + ", rightsIdentifierScheme='" + rightsIdentifierScheme + '\'' + + ", schemeUri='" + schemeUri + '\'' + '}'; } - + } 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 201a5f5f781..1621467c7b8 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 @@ -1251,10 +1251,25 @@ private void writeAccessRights(XMLStreamWriter xmlw, DvObject dvObject) throws X } xmlw.writeEndElement(); // xmlw.writeStartElement("rights"); // - + if (license != null) { xmlw.writeAttribute("rightsURI", license.getUri().toString()); - xmlw.writeCharacters(license.getName()); + xmlw.writeCharacters(license.getShortDescription()); + + if (license.getRightsIdentifier() != null) { + xmlw.writeAttribute("rightsIdentifier", license.getRightsIdentifier()); + } + if (license.getRightsIdentifierScheme() != null) { + xmlw.writeAttribute("rightsIdentifierScheme", license.getRightsIdentifierScheme()); + } + if (license.getSchemeUri() != null) { + xmlw.writeAttribute("schemeURI", license.getSchemeUri()); + } + String langCode = license.getLanguageCode(); + if (StringUtils.isBlank(langCode)) { + langCode = "en"; + } + xmlw.writeAttribute("xml:lang", langCode); } else { xmlw.writeAttribute("rightsURI", DatasetUtil.getLicenseURI(dv)); xmlw.writeCharacters(BundleUtil.getStringFromBundle("license.custom.description")); 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 f155eec4619..3921ff4bb29 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 @@ -1431,6 +1431,15 @@ private static JsonObjectBuilder jsonLicense(DatasetVersion dsv) { if (licenseIconUri != null) { licenseJsonObjectBuilder.add("iconUri", licenseIconUri); } + License license = DatasetUtil.getLicense(dsv); + if(license != null) { + licenseJsonObjectBuilder.add("rightsIdentifier",license.getRightsIdentifier()) + .add("rightsIdentifierScheme", license.getRightsIdentifierScheme()) + .add("schemeUri", license.getSchemeUri()) + .add("languageCode", license.getLanguageCode()); + } else { + licenseJsonObjectBuilder.add("languageCode", BundleUtil.getDefaultLocale().getLanguage()); + } return licenseJsonObjectBuilder; } diff --git a/src/main/resources/db/migration/V6.5.0.6.sql b/src/main/resources/db/migration/V6.5.0.6.sql new file mode 100644 index 00000000000..f1810984341 --- /dev/null +++ b/src/main/resources/db/migration/V6.5.0.6.sql @@ -0,0 +1,5 @@ +ALTER TABLE license +ADD COLUMN rights_identifier IF NOT EXISTS VARCHAR(255), +ADD COLUMN rights_identifier_scheme IF NOT EXISTS VARCHAR(255), +ADD COLUMN scheme_uri IF NOT EXISTS VARCHAR(255); +ADD COLUMN language_code IF NOT EXISTS VARCHAR(5); \ No newline at end of file