diff --git a/pom.xml b/pom.xml index 8fcd0df7275c73b385711e8267a1665edd1d00f1..8b1f91f9cec4043fa9001f82dfc216ed707af5b9 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 20bb956969657db133ec98c4adfe38df9cd64cbb..cdecea17b1dc97bc2487fe54668acc3e35a9fdb8 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 d973da0f87c6f6f82f0dd6a96b4090dd5f5ed24f..b8145f1eaa0e4afe63438ec7a7f9a029ea356621 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 0000000000000000000000000000000000000000..2d0c0e85d7069f2fb97f1008f342bdcc2723bc13 --- /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 0000000000000000000000000000000000000000..9e4880e70e57c77a4381f226dbc87969f4709ec8 --- /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 b2660a8ea3c48d4f97432a82a0b53570474402c5..414c9c5679bfa03b8b845d381af8952f00ddc55b 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 0000000000000000000000000000000000000000..d8661b6d8455cf44b4cd6826b65f571f0385cf61 --- /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 a28c574a66a34138d8ad0c439d74c31abb0c7ef4..0000000000000000000000000000000000000000 --- 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 a28c574a66a34138d8ad0c439d74c31abb0c7ef4..0000000000000000000000000000000000000000 --- 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 a28c574a66a34138d8ad0c439d74c31abb0c7ef4..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..fcdc906d16e713ad0622a3e232791ebd5bd080ae --- /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 ca0cdf834ac1d4bf5ec6ab2a772a06c0a1008b98..0000000000000000000000000000000000000000 --- 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 487f236c86fe28d0de2b0721d55fdeb95bad37a4..72a7e1023ace591db90da067ee7401c2513adf2a 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>