From 85a36d12e5294e088bda03bc7d1c3de4ebf3c68a Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Thu, 31 Aug 2023 11:31:14 +0200 Subject: [PATCH] Refactoring library --- docs/index.rst | 15 +++- .../common/software/analyser/Analyser.java | 78 +++++++++---------- .../software/analyser/AnalyserFactory.java | 8 +- .../common/software/model/GlobalConfig.java | 10 +-- ...porterConfig.java => ProcessorConfig.java} | 6 +- ...fig.java => SoftwareArtifactMetadata.java} | 14 ++-- .../SoftwareArtifactProcessor.java | 32 ++++---- .../biblatex/BibLaTeXExporter.java | 22 +++--- .../zenodo/ZenodoExporter.java | 74 +++++++++--------- .../common/software/utils/FileUtils.java | 2 +- src/test/resources/gcat-from-scratch.json | 2 +- src/test/resources/gcat-test-sandbox.json | 2 +- 12 files changed, 137 insertions(+), 128 deletions(-) rename src/main/java/org/gcube/common/software/model/{ExporterConfig.java => ProcessorConfig.java} (91%) rename src/main/java/org/gcube/common/software/model/{SoftwareArtifactConfig.java => SoftwareArtifactMetadata.java} (94%) rename src/main/java/org/gcube/common/software/{export => processor}/SoftwareArtifactProcessor.java (65%) rename src/main/java/org/gcube/common/software/{export => processor}/biblatex/BibLaTeXExporter.java (86%) rename src/main/java/org/gcube/common/software/{export => processor}/zenodo/ZenodoExporter.java (86%) diff --git a/docs/index.rst b/docs/index.rst index 80bb44e..6964623 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -14,19 +14,29 @@ The library currently offers two processors: Other processors can be easily added in the future by extending the ``SoftwareArtifactProcessor`` class. + +The Core of the Library +======================= + The core class of the library is ``Analyser``, which must be initialized with: * a configuration (JSON Object); * a list of software artifacts described by their metadata (JSON Array). -The configuration must contain at least the list of exporters to be used and their configuration parameters. +The configuration must contain: + +* The list of processors to be used and their configuration parameters (required); +* A optional set of metadata which will be used as default metadata for all software artifacts defined in the list. + + + Exporter configuration requires at least the ``elaboration`` property, which can assume the following values (see ``ElaborationType`` enumerated): * **ALL**: The exporter analyses all the software artifacts; * **UPDATE_ONLY**: The exporter analyes only the software artifact to be updated in the target; * **NEW**: The exporter analyses only the software artifact that does not yet exist in the target; -* **NONE**: Does not export the software artifact in the target, but each software artifact is elaborated for the exporting without effectively doing it. It is a dry run. +* **NONE**: Does not export the software artifact in the target, but each software artifact is elaborated without effectively exporting it. It is a dry run. The processors are executed in the order they are defined. A processor could produce metadata itself (e.g., the obtained Zenodo DOI). @@ -34,7 +44,6 @@ The input metadata + the metadata generated by a processor are made available to At the end of the processing phase, the library produces the actualized output of all the software artifact metadata. -Moreover, the configuration can optionally include an arbitrary set of metadata used as default metadata for all software artifacts defined in the list. The list of software artifacts contains an arbitrary set of metadata. It depends on the processor using certain metadata, among others. diff --git a/src/main/java/org/gcube/common/software/analyser/Analyser.java b/src/main/java/org/gcube/common/software/analyser/Analyser.java index 9745fd9..44c5abf 100644 --- a/src/main/java/org/gcube/common/software/analyser/Analyser.java +++ b/src/main/java/org/gcube/common/software/analyser/Analyser.java @@ -13,12 +13,12 @@ import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; -import org.gcube.common.software.export.SoftwareArtifactProcessor; -import org.gcube.common.software.model.ExporterConfig; +import org.gcube.common.software.model.ProcessorConfig; import org.gcube.common.software.model.GlobalConfig; -import org.gcube.common.software.model.SoftwareArtifactConfig; +import org.gcube.common.software.model.SoftwareArtifactMetadata; import org.gcube.common.software.model.SoftwareArtifactFile; import org.gcube.common.software.model.Variables; +import org.gcube.common.software.processor.SoftwareArtifactProcessor; import org.gcube.common.software.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class Analyser { protected File outputDirectory; protected ObjectNode globalConfiguration; - protected ArrayNode versionConfigurations; + protected ArrayNode artifactMetadataArray; public Analyser() throws Exception { this.objectMapper = Utils.getObjectMapper(); @@ -52,16 +52,16 @@ public class Analyser { this.globalConfiguration = originalGlobal.deepCopy(); } - public ArrayNode getVersionConfigurations() { - return versionConfigurations; + public ArrayNode getArtifactMetadataArray() { + return artifactMetadataArray; } - public void setVersionConfigurations(ArrayNode originalVersions) { - this.versionConfigurations = originalVersions.deepCopy(); + public void setArtifactMetadataArray(ArrayNode original) { + this.artifactMetadataArray = original.deepCopy(); } - protected SoftwareArtifactConfig actualizeSoftwareVersionConfig(JsonNode version) throws Exception { - ((ObjectNode) version).remove(GlobalConfig.EXPORTERS_PROPERTY_NAME); + protected SoftwareArtifactMetadata actualizeSoftwareArtifactConfig(JsonNode version) throws Exception { + ((ObjectNode) version).remove(GlobalConfig.PROCESSORS_PROPERTY_NAME); Variables variables = objectMapper.treeToValue(version, Variables.class); Set missingVariables = variables.parse(); int size = missingVariables.size(); @@ -70,7 +70,7 @@ public class Analyser { missingVariables.toArray(new String[size]).toString()); } JsonNode swVersion = objectMapper.convertValue(variables.getProperties(), JsonNode.class); - SoftwareArtifactConfig softwareVersionConfig = objectMapper.treeToValue(swVersion, SoftwareArtifactConfig.class); + SoftwareArtifactMetadata softwareVersionConfig = objectMapper.treeToValue(swVersion, SoftwareArtifactMetadata.class); List svfs = softwareVersionConfig.getFiles(); for(SoftwareArtifactFile svf : svfs) { @@ -94,22 +94,22 @@ public class Analyser { return globalConfig; } - protected ExporterConfig actualizeExporterConfig(ExporterConfig exporterConfig, SoftwareArtifactConfig softwareVersionConfig) throws Exception { - ObjectNode versionNode = objectMapper.valueToTree(softwareVersionConfig); + protected ProcessorConfig actualizeProcessorConfig(ProcessorConfig processorConfig, SoftwareArtifactMetadata softwareArtifactMetadata) throws Exception { + ObjectNode versionNode = objectMapper.valueToTree(softwareArtifactMetadata); Variables versionVariables = objectMapper.treeToValue(versionNode, Variables.class); - ObjectNode node = objectMapper.valueToTree(exporterConfig); + ObjectNode node = objectMapper.valueToTree(processorConfig); Variables variables = objectMapper.treeToValue(node, Variables.class); variables.parseWith(versionVariables); JsonNode ec = objectMapper.convertValue(variables.getProperties(), JsonNode.class); - return objectMapper.treeToValue(ec, ExporterConfig.class); + return objectMapper.treeToValue(ec, ProcessorConfig.class); } - protected void checkExporters(Set availableExporterNames, Set requestedExporterNames) throws Exception { - if(!availableExporterNames.containsAll(requestedExporterNames)) { - requestedExporterNames.removeAll(availableExporterNames); - throw new Exception("The following requested exporters does not exists " + requestedExporterNames); + protected void checkProcessors(Set availableProcessorNames, Set requestedProcessorNames) throws Exception { + if(!availableProcessorNames.containsAll(requestedProcessorNames)) { + requestedProcessorNames.removeAll(availableProcessorNames); + throw new Exception("The following requested exporters does not exists " + requestedProcessorNames); } } @@ -118,9 +118,9 @@ public class Analyser { GlobalConfig globalConfig = getGlobalConfig(globalConfiguration); - Map> availableExporters = SoftwareArtifactProcessor.getAvailableExporters(); - Map requestedExporters = globalConfig.getExporters(); - checkExporters(availableExporters.keySet(), requestedExporters.keySet()); + Map> availableProcessors = SoftwareArtifactProcessor.getAvailableProcessors(); + Map requestedProcessors = globalConfig.getProcessorConfigurations(); + checkProcessors(availableProcessors.keySet(), requestedProcessors.keySet()); if(outputDirectory==null) { outputDirectory = new File(globalConfig.getFileName()); @@ -130,37 +130,37 @@ public class Analyser { Files.createDirectories(outputDirectory.toPath()); } - SoftwareArtifactConfig previous = null; + SoftwareArtifactMetadata previous = null; int i = 0; List outputFiles = new ArrayList<>(); - for(i=0; i exporterClass = availableExporters.get(className); + Class processorClass = availableProcessors.get(className); - ExporterConfig exporterConfig = requestedExporters.get(className); - exporterConfig = actualizeExporterConfig(exporterConfig, softwareVersionConfig); + ProcessorConfig processorConfig = requestedProcessors.get(className); + processorConfig = actualizeProcessorConfig(processorConfig, softwareArtifactMetadata); - SoftwareArtifactProcessor sve = exporterClass.newInstance(); + SoftwareArtifactProcessor sve = processorClass.newInstance(); sve.setOutputDirectory(outputDirectory); sve.setGlobalConfig(globalConfig); - sve.setSoftwareVersionConfig(softwareVersionConfig); - sve.setExporterConfig(exporterConfig); + sve.setSoftwareArtifactConfig(softwareArtifactMetadata); + sve.setExporterConfig(processorConfig); sve.setFirst(i==0); - boolean last = i==(versionConfigurations.size()-1); + boolean last = i==(artifactMetadataArray.size()-1); sve.setLast(last); sve.export(); @@ -171,7 +171,7 @@ public class Analyser { Thread.sleep(TimeUnit.SECONDS.toMillis(2)); - previous = softwareVersionConfig; + previous = softwareArtifactMetadata; } return outputFiles; diff --git a/src/main/java/org/gcube/common/software/analyser/AnalyserFactory.java b/src/main/java/org/gcube/common/software/analyser/AnalyserFactory.java index d77f0b2..a6a7fc5 100644 --- a/src/main/java/org/gcube/common/software/analyser/AnalyserFactory.java +++ b/src/main/java/org/gcube/common/software/analyser/AnalyserFactory.java @@ -32,10 +32,10 @@ public class AnalyserFactory { public static Analyser getAnalyser(JsonNode jsonNode) throws Exception { Analyser analyser = new Analyser(); - ObjectNode originalGlobal = (ObjectNode) jsonNode.get(CONFIGURATION_PROPERTY_NAME); - analyser.setGlobalConfiguration(originalGlobal); - ArrayNode originalVersions = (ArrayNode) jsonNode.get(ARTIFACTS_PROPERTY_NAME); - analyser.setVersionConfigurations(originalVersions); + ObjectNode originalGlobalConfiguration = (ObjectNode) jsonNode.get(CONFIGURATION_PROPERTY_NAME); + analyser.setGlobalConfiguration(originalGlobalConfiguration); + ArrayNode originalArtifactMetadataArray = (ArrayNode) jsonNode.get(ARTIFACTS_PROPERTY_NAME); + analyser.setArtifactMetadataArray(originalArtifactMetadataArray); return analyser; } diff --git a/src/main/java/org/gcube/common/software/model/GlobalConfig.java b/src/main/java/org/gcube/common/software/model/GlobalConfig.java index b956eeb..62a84b6 100644 --- a/src/main/java/org/gcube/common/software/model/GlobalConfig.java +++ b/src/main/java/org/gcube/common/software/model/GlobalConfig.java @@ -20,10 +20,10 @@ public class GlobalConfig { public static final String EXPORT_FILENAME_PROPERTY_NAME = "export_filename"; - public static final String EXPORTERS_PROPERTY_NAME = "exporters"; + public static final String PROCESSORS_PROPERTY_NAME = "processors"; - @JsonProperty(EXPORTERS_PROPERTY_NAME) - protected Map exporters; + @JsonProperty(PROCESSORS_PROPERTY_NAME) + protected Map processorConfigurations; protected Map properties; @@ -34,8 +34,8 @@ public class GlobalConfig { this.properties = new LinkedHashMap<>(); } - public Map getExporters() { - return exporters; + public Map getProcessorConfigurations() { + return processorConfigurations; } @JsonIgnore diff --git a/src/main/java/org/gcube/common/software/model/ExporterConfig.java b/src/main/java/org/gcube/common/software/model/ProcessorConfig.java similarity index 91% rename from src/main/java/org/gcube/common/software/model/ExporterConfig.java rename to src/main/java/org/gcube/common/software/model/ProcessorConfig.java index e23da56..0cd28ce 100644 --- a/src/main/java/org/gcube/common/software/model/ExporterConfig.java +++ b/src/main/java/org/gcube/common/software/model/ProcessorConfig.java @@ -13,7 +13,7 @@ import org.gcube.com.fasterxml.jackson.databind.JsonNode; /** * @author Luca Frosini (ISTI - CNR) */ -public class ExporterConfig { +public class ProcessorConfig { public static final String ELABORATION_PROPERTY_NAME = "elaboration"; @@ -23,11 +23,11 @@ public class ExporterConfig { protected Map properties; - public ExporterConfig() { + public ProcessorConfig() { properties = new LinkedHashMap<>(); } - public ElaborationType getElaboration() { + public ElaborationType getElaborationType() { return elaboration; } diff --git a/src/main/java/org/gcube/common/software/model/SoftwareArtifactConfig.java b/src/main/java/org/gcube/common/software/model/SoftwareArtifactMetadata.java similarity index 94% rename from src/main/java/org/gcube/common/software/model/SoftwareArtifactConfig.java rename to src/main/java/org/gcube/common/software/model/SoftwareArtifactMetadata.java index 0273bae..3475af8 100644 --- a/src/main/java/org/gcube/common/software/model/SoftwareArtifactConfig.java +++ b/src/main/java/org/gcube/common/software/model/SoftwareArtifactMetadata.java @@ -21,7 +21,7 @@ import org.gcube.common.software.utils.Utils; * @author Luca Frosini (ISTI - CNR) * TO BE GENERALIZED */ -public class SoftwareArtifactConfig { +public class SoftwareArtifactMetadata { public static final String PREVIOUS_CONCEPT_DOI_VALUE = "PREVIOUS"; @@ -40,10 +40,10 @@ public class SoftwareArtifactConfig { public static final String GRANTS_PROPERTY_NAME = "grants"; @JsonIgnore - protected SoftwareArtifactConfig previous; + protected SoftwareArtifactMetadata previous; @JsonIgnore - protected SoftwareArtifactConfig next; + protected SoftwareArtifactMetadata next; @JsonIgnore protected Boolean newDeposition; @@ -92,18 +92,18 @@ public class SoftwareArtifactConfig { protected Map additionalProperties; - public SoftwareArtifactConfig() { + public SoftwareArtifactMetadata() { this.newDeposition = false; this.additionalProperties = new LinkedHashMap<>(); } @JsonIgnore - public SoftwareArtifactConfig getPrevious() { + public SoftwareArtifactMetadata getPrevious() { return previous; } @JsonIgnore - public void setPrevious(SoftwareArtifactConfig previous) { + public void setPrevious(SoftwareArtifactMetadata previous) { this.previous = previous; if(previous!=null) { this.previous.next = this; @@ -111,7 +111,7 @@ public class SoftwareArtifactConfig { } @JsonIgnore - public SoftwareArtifactConfig getNext() { + public SoftwareArtifactMetadata getNext() { return next; } diff --git a/src/main/java/org/gcube/common/software/export/SoftwareArtifactProcessor.java b/src/main/java/org/gcube/common/software/processor/SoftwareArtifactProcessor.java similarity index 65% rename from src/main/java/org/gcube/common/software/export/SoftwareArtifactProcessor.java rename to src/main/java/org/gcube/common/software/processor/SoftwareArtifactProcessor.java index a345261..868bbdf 100644 --- a/src/main/java/org/gcube/common/software/export/SoftwareArtifactProcessor.java +++ b/src/main/java/org/gcube/common/software/processor/SoftwareArtifactProcessor.java @@ -1,14 +1,14 @@ -package org.gcube.common.software.export; +package org.gcube.common.software.processor; import java.io.File; import java.util.HashMap; import java.util.Map; -import org.gcube.common.software.export.biblatex.BibLaTeXExporter; -import org.gcube.common.software.export.zenodo.ZenodoExporter; -import org.gcube.common.software.model.ExporterConfig; +import org.gcube.common.software.model.ProcessorConfig; import org.gcube.common.software.model.GlobalConfig; -import org.gcube.common.software.model.SoftwareArtifactConfig; +import org.gcube.common.software.model.SoftwareArtifactMetadata; +import org.gcube.common.software.processor.biblatex.BibLaTeXExporter; +import org.gcube.common.software.processor.zenodo.ZenodoExporter; /** * @author Luca Frosini (ISTI - CNR) @@ -27,14 +27,14 @@ public abstract class SoftwareArtifactProcessor { availableProcessors.put(clz.getSimpleName(), clz); } - public static Map> getAvailableExporters() { + public static Map> getAvailableProcessors() { return availableProcessors; } protected File outputDirectory; protected GlobalConfig globalConfig; - protected SoftwareArtifactConfig softwareVersionConfig; - protected ExporterConfig exporterConfig; + protected SoftwareArtifactMetadata softwareArtifactMetadata; + protected ProcessorConfig processorConfig; protected boolean first; protected boolean last; @@ -57,20 +57,20 @@ public abstract class SoftwareArtifactProcessor { this.globalConfig = globalConfig; } - public SoftwareArtifactConfig getSoftwareVersionConfig() { - return softwareVersionConfig; + public SoftwareArtifactMetadata getSoftwareArtifactConfig() { + return softwareArtifactMetadata; } - public void setSoftwareVersionConfig(SoftwareArtifactConfig softwareVersionConfig) { - this.softwareVersionConfig = softwareVersionConfig; + public void setSoftwareArtifactConfig(SoftwareArtifactMetadata softwareArtifactMetadata) { + this.softwareArtifactMetadata = softwareArtifactMetadata; } - public ExporterConfig getExporterConfig() { - return exporterConfig; + public ProcessorConfig getExporterConfig() { + return processorConfig; } - public void setExporterConfig(ExporterConfig processorConfig) { - this.exporterConfig = processorConfig; + public void setExporterConfig(ProcessorConfig processorConfig) { + this.processorConfig = processorConfig; } public void setFirst(boolean first) { diff --git a/src/main/java/org/gcube/common/software/export/biblatex/BibLaTeXExporter.java b/src/main/java/org/gcube/common/software/processor/biblatex/BibLaTeXExporter.java similarity index 86% rename from src/main/java/org/gcube/common/software/export/biblatex/BibLaTeXExporter.java rename to src/main/java/org/gcube/common/software/processor/biblatex/BibLaTeXExporter.java index 024bc3f..a3bf4e7 100644 --- a/src/main/java/org/gcube/common/software/export/biblatex/BibLaTeXExporter.java +++ b/src/main/java/org/gcube/common/software/processor/biblatex/BibLaTeXExporter.java @@ -1,4 +1,4 @@ -package org.gcube.common.software.export.biblatex; +package org.gcube.common.software.processor.biblatex; import java.io.BufferedWriter; import java.io.File; @@ -9,9 +9,9 @@ import java.util.Set; import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; -import org.gcube.common.software.export.SoftwareArtifactProcessor; import org.gcube.common.software.model.ElaborationType; import org.gcube.common.software.model.Variables; +import org.gcube.common.software.processor.SoftwareArtifactProcessor; import org.gcube.common.software.utils.FileUtils; import org.gcube.common.software.utils.Utils; import org.slf4j.Logger; @@ -41,9 +41,9 @@ public class BibLaTeXExporter extends SoftwareArtifactProcessor { exportFile.createNewFile(); } - String title = softwareVersionConfig.getTitle(); + String title = softwareArtifactMetadata.getTitle(); - ElaborationType export = exporterConfig.getElaboration(); + ElaborationType export = processorConfig.getElaborationType(); switch (export) { case ALL: @@ -51,7 +51,7 @@ public class BibLaTeXExporter extends SoftwareArtifactProcessor { break; case UPDATE_ONLY: - if (softwareVersionConfig.isNewDeposition()) { + if (softwareArtifactMetadata.isNewDeposition()) { logger.info("Skipping export for {}.", title); return; } @@ -59,7 +59,7 @@ public class BibLaTeXExporter extends SoftwareArtifactProcessor { break; case NEW: - if (!softwareVersionConfig.isNewDeposition()) { + if (!softwareArtifactMetadata.isNewDeposition()) { logger.info("Skipping export for {}.", title); return; } @@ -157,10 +157,10 @@ public class BibLaTeXExporter extends SoftwareArtifactProcessor { protected String parseTemplate(String template) throws Exception { String s = template; - s = Utils.replaceVariable("author", getAuthors(softwareVersionConfig.getAuthors()), s); - s = Utils.replaceVariable("keywords", getKeywords(softwareVersionConfig.getKeywords()), s); + s = Utils.replaceVariable("author", getAuthors(softwareArtifactMetadata.getAuthors()), s); + s = Utils.replaceVariable("keywords", getKeywords(softwareArtifactMetadata.getKeywords()), s); - Variables variables = softwareVersionConfig.getVariables(); + Variables variables = softwareArtifactMetadata.getVariables(); s = variables.replaceAllVariables(s); // s = addNotes(s); @@ -168,8 +168,8 @@ public class BibLaTeXExporter extends SoftwareArtifactProcessor { } protected void generate() throws Exception { - String title = softwareVersionConfig.getTitle(); - if(softwareVersionConfig.getVersionDOIURL()==null) { + String title = softwareArtifactMetadata.getTitle(); + if(softwareArtifactMetadata.getVersionDOIURL()==null) { logger.info("No Version DOI URL for {}. It will not be exported in BibLaTex format.", title); return; } diff --git a/src/main/java/org/gcube/common/software/export/zenodo/ZenodoExporter.java b/src/main/java/org/gcube/common/software/processor/zenodo/ZenodoExporter.java similarity index 86% rename from src/main/java/org/gcube/common/software/export/zenodo/ZenodoExporter.java rename to src/main/java/org/gcube/common/software/processor/zenodo/ZenodoExporter.java index d92a891..f76d631 100644 --- a/src/main/java/org/gcube/common/software/export/zenodo/ZenodoExporter.java +++ b/src/main/java/org/gcube/common/software/processor/zenodo/ZenodoExporter.java @@ -1,4 +1,4 @@ -package org.gcube.common.software.export.zenodo; +package org.gcube.common.software.processor.zenodo; import java.io.BufferedReader; import java.io.File; @@ -30,9 +30,9 @@ import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; import org.gcube.common.gxhttp.request.GXHTTPStringRequest; import org.gcube.common.software.analyser.AnalyserFactory; import org.gcube.common.software.config.Config; -import org.gcube.common.software.export.SoftwareArtifactProcessor; import org.gcube.common.software.model.ElaborationType; -import org.gcube.common.software.model.SoftwareArtifactConfig; +import org.gcube.common.software.model.SoftwareArtifactMetadata; +import org.gcube.common.software.processor.SoftwareArtifactProcessor; import org.gcube.common.software.model.SoftwareArtifactFile; import org.gcube.common.software.utils.Utils; import org.glassfish.jersey.client.ClientProperties; @@ -97,7 +97,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { } protected void addFilesToDeposition(List files ) throws Exception { - String depositID = getZenodoIDFromDOIURL(softwareVersionConfig.getVersionDOIURL()); + String depositID = getZenodoIDFromDOIURL(softwareArtifactMetadata.getVersionDOIURL()); String newFilePath = DEPOSTION_FILES_PATH.replace(":id", depositID); URL url = new URL(zenodoBaseURL, newFilePath); @@ -132,7 +132,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { gxHTTPStringRequest.header("Content-Type", "application/json"); gxHTTPStringRequest.header("Accept", "application/json"); - String id = getZenodoIDFromDOIURL(softwareVersionConfig.getVersionDOIURL()); + String id = getZenodoIDFromDOIURL(softwareArtifactMetadata.getVersionDOIURL()); gxHTTPStringRequest.path(DEPOSITION_PATH.replace(":id", id)); ObjectNode metadata = generateMetadata(); @@ -149,7 +149,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { gxHTTPStringRequest.header("Content-Type", "application/json"); gxHTTPStringRequest.header("Accept", "application/json"); - String id = getZenodoIDFromDOIURL(softwareVersionConfig.getVersionDOIURL()); + String id = getZenodoIDFromDOIURL(softwareArtifactMetadata.getVersionDOIURL()); gxHTTPStringRequest.path(DEPOSTION_PUBLISH_PATH.replace(":id", id)); HttpURLConnection httpURLConnection = gxHTTPStringRequest.post(); @@ -158,7 +158,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { protected void finalize() throws Exception { List files = new ArrayList<>(); - for(SoftwareArtifactFile svf : softwareVersionConfig.getFiles()) { + for(SoftwareArtifactFile svf : softwareArtifactMetadata.getFiles()) { File file = svf.downloadFile(); files.add(file); Thread.sleep(TimeUnit.SECONDS.toMillis(1)); @@ -273,23 +273,23 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { response = getResponse(httpURLConnection); String conceptDOIURL = createZenodoDOIURLFromID(response.get("conceptrecid").asText()); - softwareVersionConfig.setConceptDOIURL(conceptDOIURL); + softwareArtifactMetadata.setConceptDOIURL(conceptDOIURL); String versionDOIURL = createZenodoDOIURLFromID(response.get("id").asText()); - softwareVersionConfig.setVersionDOIURL(versionDOIURL); + softwareArtifactMetadata.setVersionDOIURL(versionDOIURL); finalize(); } private ArrayNode getAuthors(){ - ArrayNode authors = softwareVersionConfig.getAuthors().deepCopy(); + ArrayNode authors = softwareArtifactMetadata.getAuthors().deepCopy(); return authors; } private String getDescription() { StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append(softwareVersionConfig.getAdditionalProperty(HTML_DESCRIPTION_CONFIG_FIELD_NAME).asText()); + stringBuffer.append(softwareArtifactMetadata.getAdditionalProperty(HTML_DESCRIPTION_CONFIG_FIELD_NAME).asText()); - if(exporterConfig.getProperty(ADDITIONAL_HTML_DESCRIPTION_CONFIG_FIELD_NAME)!=null) { - String additionalHTMLDescription = exporterConfig.getProperty(ADDITIONAL_HTML_DESCRIPTION_CONFIG_FIELD_NAME).asText(); + if(processorConfig.getProperty(ADDITIONAL_HTML_DESCRIPTION_CONFIG_FIELD_NAME)!=null) { + String additionalHTMLDescription = processorConfig.getProperty(ADDITIONAL_HTML_DESCRIPTION_CONFIG_FIELD_NAME).asText(); stringBuffer.append(additionalHTMLDescription); } @@ -299,12 +299,12 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { private ArrayNode getGrants(){ ObjectMapper objectMapper = Utils.getObjectMapper(); ArrayNode grants = objectMapper.createArrayNode(); - ArrayNode arrayNode = (ArrayNode) exporterConfig.getProperty(SKIP_GRANTS_CONFIG_FIELD_NAME); + ArrayNode arrayNode = (ArrayNode) processorConfig.getProperty(SKIP_GRANTS_CONFIG_FIELD_NAME); Set idToSkip = new HashSet<>(); for(JsonNode idNode : arrayNode) { idToSkip.add(idNode.asText()); } - for(JsonNode g : softwareVersionConfig.getGrants()) { + for(JsonNode g : softwareArtifactMetadata.getGrants()) { String id = g.get("id").asText(); if(idToSkip.contains(id)) { continue; @@ -317,7 +317,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { } private ArrayNode getKeywords(){ - Set keywords = softwareVersionConfig.getKeywords(); + Set keywords = softwareArtifactMetadata.getKeywords(); ObjectMapper objectMapper = Utils.getObjectMapper(); ArrayNode keywordsArrayNode = objectMapper.createArrayNode(); for(String keyword : keywords) { @@ -327,15 +327,15 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { } private ArrayNode getCommunities() { - return (ArrayNode) softwareVersionConfig.getAdditionalProperty(COMMUNITIES_FIELD_NAME); + return (ArrayNode) softwareArtifactMetadata.getAdditionalProperty(COMMUNITIES_FIELD_NAME); } private String getLicense() { - return softwareVersionConfig.getLicense().get("id").asText(); + return softwareArtifactMetadata.getLicense().get("id").asText(); } private String getDate() { - return Utils.getDateAsString(softwareVersionConfig.getDate()); + return Utils.getDateAsString(softwareArtifactMetadata.getDate()); } private ObjectNode generateMetadata() { @@ -352,8 +352,8 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { metadata.replace("keywords", getKeywords()); metadata.put("license", getLicense()); metadata.put("publication_date", getDate()); - metadata.put("title", softwareVersionConfig.getTitle()); - metadata.put("version", softwareVersionConfig.getVersion()); + metadata.put("title", softwareArtifactMetadata.getTitle()); + metadata.put("version", softwareArtifactMetadata.getVersion()); metadatWrapper.set(METADATA_FIELD_NAME, metadata); return metadatWrapper; @@ -366,7 +366,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { gxHTTPStringRequest.from(GUCBE_ZENODO_SOFTWARE_DEPOSIT); gxHTTPStringRequest.queryParams(getAccessTokenQueryParamters()); gxHTTPStringRequest.header("Accept", "application/json"); - String id = getZenodoIDFromDOIURL(softwareVersionConfig.getVersionDOIURL()); + String id = getZenodoIDFromDOIURL(softwareArtifactMetadata.getVersionDOIURL()); gxHTTPStringRequest.path(DEPOSTION_EDIT_PATH.replace(":id", id)); HttpURLConnection httpURLConnection = gxHTTPStringRequest.post(); getResponse(httpURLConnection); @@ -406,7 +406,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { gxHTTPStringRequest.header("Content-Type", "application/json"); gxHTTPStringRequest.header("Accept", "application/json"); - String conceptDOIURL = softwareVersionConfig.getConceptDOIURL(); + String conceptDOIURL = softwareArtifactMetadata.getConceptDOIURL(); String conceptID = getZenodoIDFromDOIURL(conceptDOIURL); gxHTTPStringRequest.path(RECORD_PATH.replace(":id", conceptID)); HttpURLConnection httpURLConnection = gxHTTPStringRequest.get(); @@ -419,13 +419,13 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { * this should avoid errors on softwareConcept. */ String latestVersionDOI = jsonNode.get("links").get("doi").asText(); - String previousVersionDOI = softwareVersionConfig.getPrevious().getVersionDOIURL().toString(); + String previousVersionDOI = softwareArtifactMetadata.getPrevious().getVersionDOIURL().toString(); if(previousVersionDOI.compareTo(latestVersionDOI)!=0) { logger.error("Zenodo obtained latest DOI {} != {} DOI from previous version", latestVersionDOI, previousVersionDOI); throw new RuntimeException("It seems that your json is not up to date with Zenodo."); } String latestVersionVersion = jsonNode.get("metadata").get("version").asText(); - String previousVersionVersion = softwareVersionConfig.getPrevious().getVersion().toString(); + String previousVersionVersion = softwareArtifactMetadata.getPrevious().getVersion().toString(); if(latestVersionVersion.compareTo(previousVersionVersion)!=0) { logger.error("Zenodo obtained latest Version {} != {} Version from previous version", latestVersionVersion, previousVersionVersion); throw new RuntimeException("It seems that your json is not up to date with Zenodo."); @@ -461,7 +461,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { // The reserved DOI of this created new version will be String newVersionDOIURL = response.get("doi_url").asText(); - softwareVersionConfig.setVersionDOIURL(newVersionDOIURL); + softwareArtifactMetadata.setVersionDOIURL(newVersionDOIURL); // Remove previous depositionFiles deletePreviousFiles(); @@ -471,7 +471,7 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { protected String getConfig(String propertyName) throws Exception { String conf = null; - JsonNode node = exporterConfig.getProperty(propertyName); + JsonNode node = processorConfig.getProperty(propertyName); if(node == null || node.getNodeType()==JsonNodeType.NULL) { conf = Config.getProperties().getProperty(propertyName); } @@ -499,18 +499,18 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { getZenodoConnectionConfig(); - String title = softwareVersionConfig.getTitle(); + String title = softwareArtifactMetadata.getTitle(); - ElaborationType publish = exporterConfig.getElaboration(); + ElaborationType publish = processorConfig.getElaborationType(); if(publish==ElaborationType.NONE) { logger.info("Zenodo Deposit is disabled for {}.",title); return; } - if(softwareVersionConfig.getVersionDOIURL()!=null) { + if(softwareArtifactMetadata.getVersionDOIURL()!=null) { - softwareVersionConfig.setNewDeposition(false); + softwareArtifactMetadata.setNewDeposition(false); if(publish==ElaborationType.ALL || publish==ElaborationType.UPDATE_ONLY) { @@ -525,9 +525,9 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { publish==ElaborationType.NEW) { logger.info("Going to deposit {}", title); - softwareVersionConfig.setNewDeposition(true); + softwareArtifactMetadata.setNewDeposition(true); - if(softwareVersionConfig.getConceptDOIURL()==null) { + if(softwareArtifactMetadata.getConceptDOIURL()==null) { create(); }else { newVersion(); @@ -542,16 +542,16 @@ public class ZenodoExporter extends SoftwareArtifactProcessor { ObjectNode toBeExported = objectMapper.createObjectNode(); toBeExported.replace(AnalyserFactory.CONFIGURATION_PROPERTY_NAME, globalConfig.getOriginalJson().deepCopy()); ArrayNode array = objectMapper.createArrayNode(); - SoftwareArtifactConfig previous = softwareVersionConfig; + SoftwareArtifactMetadata previous = softwareArtifactMetadata; boolean firstNode = true; while(previous!=null){ ObjectNode node = previous.getOriginalJson().deepCopy(); - node.put(SoftwareArtifactConfig.CONCEPT_DOI_URL_PROPERTY_NAME, previous.getConceptDOIURL()); + node.put(SoftwareArtifactMetadata.CONCEPT_DOI_URL_PROPERTY_NAME, previous.getConceptDOIURL()); if(firstNode) { - toBeExported.put(SoftwareArtifactConfig.CONCEPT_DOI_URL_PROPERTY_NAME, previous.getConceptDOIURL()); + toBeExported.put(SoftwareArtifactMetadata.CONCEPT_DOI_URL_PROPERTY_NAME, previous.getConceptDOIURL()); firstNode = false; } - node.put(SoftwareArtifactConfig.VERSION_DOI_URL_PROPERTY_NAME, previous.getVersionDOIURL()); + node.put(SoftwareArtifactMetadata.VERSION_DOI_URL_PROPERTY_NAME, previous.getVersionDOIURL()); array.insert(0, node); previous = previous.getPrevious(); } diff --git a/src/main/java/org/gcube/common/software/utils/FileUtils.java b/src/main/java/org/gcube/common/software/utils/FileUtils.java index 662646d..7a39eb0 100644 --- a/src/main/java/org/gcube/common/software/utils/FileUtils.java +++ b/src/main/java/org/gcube/common/software/utils/FileUtils.java @@ -3,7 +3,7 @@ package org.gcube.common.software.utils; import java.io.File; import java.net.URL; -import org.gcube.common.software.export.biblatex.BibLaTeXExporter; +import org.gcube.common.software.processor.biblatex.BibLaTeXExporter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/test/resources/gcat-from-scratch.json b/src/test/resources/gcat-from-scratch.json index 1141170..2c46b2b 100644 --- a/src/test/resources/gcat-from-scratch.json +++ b/src/test/resources/gcat-from-scratch.json @@ -135,7 +135,7 @@ } ], "export_filename": "{{name}}", - "exporters": { + "processors": { "ZenodoExporter": { "elaboration": "NONE", "skip_grants": ["004260"], diff --git a/src/test/resources/gcat-test-sandbox.json b/src/test/resources/gcat-test-sandbox.json index 2191b5f..fc32b31 100644 --- a/src/test/resources/gcat-test-sandbox.json +++ b/src/test/resources/gcat-test-sandbox.json @@ -136,7 +136,7 @@ } ], "export_filename": "{{name}}", - "exporters": { + "processors": { "ZenodoExporter": { "elaboration": "NONE", "skip_grants": ["004260"],