From 10805399fece9535aa1637e9aae88f0bd6a941c3 Mon Sep 17 00:00:00 2001 From: Olivier Maury <Olivier.Maury@inrae.fr> Date: Tue, 28 Jan 2025 15:18:53 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20ajouter=20la=20propri=C3=A9t=C3=A9=20da?= =?UTF-8?q?tasetversion.license?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 13 ++--- sido-gwt/pom.xml | 2 +- .../dataverseclient/DataverseHandler.java | 2 +- .../sido/gwt/server/metadata/License.java | 13 +++++ .../sido/gwt/server/metadata/Licenses.java | 57 +++++++++++++++++++ .../gwt/server/metadata/MetadataParser.java | 46 +-------------- .../sido/gwt/server/metadata/licenses.json | 11 ++++ .../sido/gwt/server/metadata/licenses.txt | 2 - .../sido/gwt/server/metadata/licensesen.txt | 2 - .../sido/gwt/server/metadata/licensesfr.txt | 2 - .../gwt/server/metadata/LicensesTest.java | 21 +++++++ .../gwt/server/metadata/package-info.java | 4 -- verification/pom.xml | 26 ++++----- 13 files changed, 121 insertions(+), 80 deletions(-) create mode 100644 sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/License.java create mode 100644 sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/Licenses.java create mode 100644 sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.json delete mode 100644 sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.txt delete mode 100644 sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesen.txt delete mode 100644 sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesfr.txt create mode 100644 sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/LicensesTest.java delete mode 100644 sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/package-info.java diff --git a/pom.xml b/pom.xml index 8fcd0df7..8b1f91f9 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ <junit.version>4.13.2</junit.version> <log4j.version>2.22.1</log4j.version> <lombok.version>1.18.30</lombok.version> - <apache.poi.version>5.2.5</apache.poi.version> + <apache.poi.version>5.4.0</apache.poi.version> <checkstyle.config.location>file://${basedir}/config/sun_checks.xml</checkstyle.config.location> <checkstyle.failsOnError>false</checkstyle.failsOnError> <checkstyle.includeResources>false</checkstyle.includeResources> @@ -175,19 +175,14 @@ </dependency> <dependency> <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml-schemas</artifactId> - <version>4.1.2</version> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-collections4</artifactId> - <version>4.4</version> + <artifactId>poi-ooxml-lite</artifactId> + <version>${apache.poi.version}</version> </dependency> <!-- Dependency for POI, will be missing in sido-verification if not present --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> - <version>2.15.1</version> + <version>2.18.0</version> </dependency> </dependencies> </dependencyManagement> diff --git a/sido-gwt/pom.xml b/sido-gwt/pom.xml index 20bb9569..cdecea17 100644 --- a/sido-gwt/pom.xml +++ b/sido-gwt/pom.xml @@ -372,7 +372,7 @@ <dependency> <groupId>com.researchspace</groupId> <artifactId>dataverse-client-java</artifactId> - <version>1.0.2</version> + <version>1.0.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> diff --git a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/dataverseclient/DataverseHandler.java b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/dataverseclient/DataverseHandler.java index d973da0f..b8145f1e 100644 --- a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/dataverseclient/DataverseHandler.java +++ b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/dataverseclient/DataverseHandler.java @@ -319,7 +319,7 @@ public class DataverseHandler implements Runnable { private void uploadWorkbookFile(final String doi, final File workbookFile, final String workBookName) throws IOException, ReachDataverseException { LOGGER.traceEntry(workBookName); - LOGGER.info("Uploading to Dataverse: " + workBookName); + LOGGER.info("Uploading to Dataverse: {} from {}", workBookName, workbookFile.getAbsolutePath()); final Identifier identifier = new Identifier(); // Construct persistent ID identifier.setPersistentId("doi:" + doi); diff --git a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/License.java b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/License.java new file mode 100644 index 00000000..2d0c0e85 --- /dev/null +++ b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/License.java @@ -0,0 +1,13 @@ +package fr.soeretempo.sido.gwt.server.metadata; + +import lombok.Data; + +/** + * License definition for ERDG. + */ +@Data +public class License { + private String name; + private String iconUri; + private String uri; +} diff --git a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/Licenses.java b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/Licenses.java new file mode 100644 index 00000000..9e4880e7 --- /dev/null +++ b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/Licenses.java @@ -0,0 +1,57 @@ +package fr.soeretempo.sido.gwt.server.metadata; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.researchspace.dataverse.entities.DatasetLicense; + +import fr.soeretempo.sido.gwt.server.utils.FileUtils; +import lombok.extern.log4j.Log4j2; + +/** + * Licenses definitions for ERDG. + */ +@Log4j2 +public class Licenses { + + /** + * Available licenses. + */ + private static Map<String, DatasetLicense> matches = new HashMap<>(); + + /** + * Read file. + */ + private static void init() { + final ObjectMapper mapper = JsonMapper.builder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) // + .build(); + try { + final String content = FileUtils.getFileContent(Licenses.class, "licenses.json"); + matches = mapper.readValue(content, new TypeReference<Map<String, DatasetLicense>>() { + }); + } catch (final IOException e) { + LOGGER.fatal("This should never occur as the file must exist.", e); + } + } + + /** + * @param key license key (eg.: LO 2.0) + * @return found license or empty + */ + public static Optional<DatasetLicense> get(final String key) { + if (matches.isEmpty()) { + init(); + } + if (matches.containsKey(key)) { + return Optional.of(matches.get(key)); + } + return Optional.empty(); + } +} diff --git a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/MetadataParser.java b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/MetadataParser.java index b2660a8e..414c9c56 100644 --- a/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/MetadataParser.java +++ b/sido-gwt/src/main/java/fr/soeretempo/sido/gwt/server/metadata/MetadataParser.java @@ -7,16 +7,11 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.format.DateTimeParseException; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -843,7 +838,7 @@ public class MetadataParser { if (language != null && !language.isEmpty()) { languages.add(language); } - if (productionPlace != null && !productionPlace.isEmpty()) { + if (productionPlace != null && !productionPlace.isEmpty() && !productionPlaces.contains(productionPlace)) { productionPlaces.add(productionPlace); } parsedLine++; @@ -937,47 +932,10 @@ public class MetadataParser { .collect(Collectors.joining(",")); final List<String> licenseShortenings = dataDao.findStringValues( dataset.getId(), license[0], license[1], license[2], workbooks); - final List<String> licenseBodies = new ArrayList<>(); - final Map<String, String> licenseMap = getLicensesMap(); for (final String shortening : licenseShortenings) { - if (licenseMap.containsKey(shortening)) { - licenseBodies.add(licenseMap.get(shortening)); - } else { - licenseBodies.add(shortening); - } - } - metadataReport.getDatasetFacade().setTermsOfUse(String.join("<br>", licenseBodies)); - } - } - - private Map<String, String> getLicensesMap() { - final Map<String, String> licensesMap = new HashMap<>(); - final String propertiesFileName = "licenses.txt"; - // For now, licenses are in a common file with en / fr - // if (parserLocale.getLanguage().equals(new Locale("fr").getLanguage())) { - // propertiesFileName += "fr.txt"; - // } else { - // propertiesFileName += "en.txt"; - // } - final URL resource = this.getClass().getResource(propertiesFileName); - if (resource == null) { - throw new IllegalArgumentException(propertiesFileName + " not found!"); - } - try { - final List<String> lines = Files.readAllLines( - Paths.get(resource.toURI()), - Charset.defaultCharset()); - for (final String line : lines) { - if (!line.isBlank()) { - final String[] split = line.split("=", 2); - licensesMap.put(split[0], split[1]); - } + Licenses.get(shortening).ifPresent(metadataReport.getDatasetFacade()::setLicense); } - } catch (final IOException | URISyntaxException e) { - LOGGER.error(e.getLocalizedMessage()); - return new HashMap<>(); } - return licensesMap; } private void setTimePeriodCovered(final Dataset dataset, final Map<String, String[]> mappedColumns) { diff --git a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.json b/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.json new file mode 100644 index 00000000..d8661b6d --- /dev/null +++ b/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.json @@ -0,0 +1,11 @@ +{ + "LO 2.0": { + "name": "etalab 2.0", + "uri": "https://spdx.org/licenses/etalab-2.0.html", + "iconUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Logo-licence-ouverte2.svg/25px-Logo-licence-ouverte2.svg.png" + }, + "OdbL": { + "name": "ODbL-1.0", + "uri": "https://spdx.org/licenses/ODbL-1.0.html" + } +} \ No newline at end of file diff --git a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.txt b/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.txt deleted file mode 100644 index a28c574a..00000000 --- a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licenses.txt +++ /dev/null @@ -1,2 +0,0 @@ -LO 2.0=<img src="https://www.etalab.gouv.fr/wp-content/uploads/2011/10/licence-ouverte-open-licence.gif" alt="Licence Ouverte" height="100"> <a href="https://www.etalab.gouv.fr/licence-ouverte-open-licence" rel="nofollow" target="_blank">Licence Ouverte / Open Licence Version 2.0</a> compatible CC BY -OdbL=Available under the Open Database License: <a href="https://opendatacommons.org/licenses/odbl/1.0/">http://opendatacommons.org/licenses/odbl/1.0/</a>. Any rights in individual contents of the database are licensed under the Database Contents License: <a href="https://opendatacommons.org/licenses/dbcl/1.0/">http://opendatacommons.org/licenses/dbcl/1.0/</a> \ No newline at end of file diff --git a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesen.txt b/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesen.txt deleted file mode 100644 index a28c574a..00000000 --- a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesen.txt +++ /dev/null @@ -1,2 +0,0 @@ -LO 2.0=<img src="https://www.etalab.gouv.fr/wp-content/uploads/2011/10/licence-ouverte-open-licence.gif" alt="Licence Ouverte" height="100"> <a href="https://www.etalab.gouv.fr/licence-ouverte-open-licence" rel="nofollow" target="_blank">Licence Ouverte / Open Licence Version 2.0</a> compatible CC BY -OdbL=Available under the Open Database License: <a href="https://opendatacommons.org/licenses/odbl/1.0/">http://opendatacommons.org/licenses/odbl/1.0/</a>. Any rights in individual contents of the database are licensed under the Database Contents License: <a href="https://opendatacommons.org/licenses/dbcl/1.0/">http://opendatacommons.org/licenses/dbcl/1.0/</a> \ No newline at end of file diff --git a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesfr.txt b/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesfr.txt deleted file mode 100644 index a28c574a..00000000 --- a/sido-gwt/src/main/resources/fr/soeretempo/sido/gwt/server/metadata/licensesfr.txt +++ /dev/null @@ -1,2 +0,0 @@ -LO 2.0=<img src="https://www.etalab.gouv.fr/wp-content/uploads/2011/10/licence-ouverte-open-licence.gif" alt="Licence Ouverte" height="100"> <a href="https://www.etalab.gouv.fr/licence-ouverte-open-licence" rel="nofollow" target="_blank">Licence Ouverte / Open Licence Version 2.0</a> compatible CC BY -OdbL=Available under the Open Database License: <a href="https://opendatacommons.org/licenses/odbl/1.0/">http://opendatacommons.org/licenses/odbl/1.0/</a>. Any rights in individual contents of the database are licensed under the Database Contents License: <a href="https://opendatacommons.org/licenses/dbcl/1.0/">http://opendatacommons.org/licenses/dbcl/1.0/</a> \ No newline at end of file diff --git a/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/LicensesTest.java b/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/LicensesTest.java new file mode 100644 index 00000000..fcdc906d --- /dev/null +++ b/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/LicensesTest.java @@ -0,0 +1,21 @@ +package fr.soeretempo.sido.gwt.server.metadata; + +import static org.junit.Assert.assertFalse; + +import java.util.Optional; + +import org.junit.Test; + +import com.researchspace.dataverse.entities.DatasetLicense; + +/** + * Ensure licenses.json is well read. + */ +public class LicensesTest { + + @Test + public void getLO() { + final Optional<DatasetLicense> actual = Licenses.get("LO 2.0"); + assertFalse(actual.isEmpty()); + } +} diff --git a/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/package-info.java b/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/package-info.java deleted file mode 100644 index ca0cdf83..00000000 --- a/sido-gwt/src/test/java/fr/soeretempo/sido/gwt/server/metadata/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Contains test classes related to the reading, conversion and processing of metadata. - */ -package fr.soeretempo.sido.gwt.server.metadata; diff --git a/verification/pom.xml b/verification/pom.xml index 487f236c..72a7e102 100644 --- a/verification/pom.xml +++ b/verification/pom.xml @@ -69,21 +69,17 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi</artifactId> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml</artifactId> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml-schemas</artifactId> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-collections4</artifactId> - </dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi</artifactId> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml</artifactId> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml-lite</artifactId> + </dependency> </dependencies> <build> <plugins> -- GitLab