diff --git a/src/main/java/org/gcube/common/software/analyser/SoftwareConfigAnalyser.java b/src/main/java/org/gcube/common/software/analyser/SoftwareConfigAnalyser.java index f5fd4e4..1ee85df 100644 --- a/src/main/java/org/gcube/common/software/analyser/SoftwareConfigAnalyser.java +++ b/src/main/java/org/gcube/common/software/analyser/SoftwareConfigAnalyser.java @@ -2,8 +2,6 @@ package org.gcube.common.software.analyser; import java.io.File; import java.net.URL; -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -63,6 +61,9 @@ public class SoftwareConfigAnalyser { SoftwareConfig softwareConfig = objectMapper.treeToValue(originalGlobal, SoftwareConfig.class); softwareConfig.setOriginalJson(originalGlobal); + ObjectNode global = originalGlobal.deepCopy(); + global.remove(SoftwareConfig.EXPORT_FILENAME_PROPERTY_NAME); + ArrayNode versions = (ArrayNode) jsonNode.get(VERSIONS_PROPERTY_NAME); SoftwareVersionConfig previous = null; @@ -76,7 +77,7 @@ public class SoftwareConfigAnalyser { exportingVersions.add(originalVersion); - JsonNode version = Utils.merge(originalGlobal, originalVersion); + JsonNode version = Utils.merge(global, originalVersion); SoftwareVersionConfig softwareVersion = actualize(version); softwareVersion.setOriginalJson(originalVersion); @@ -149,8 +150,7 @@ public class SoftwareConfigAnalyser { toBeExported.replace(VERSIONS_PROPERTY_NAME, exportingVersions); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); - String fileName = simpleDateFormat.format(Calendar.getInstance().getTime()); + String fileName = softwareConfig.getExportFileName(); File file = new File(fileName+EXPORT_FILENAME_EXTENSION); objectMapper.writeValue(file, toBeExported); diff --git a/src/main/java/org/gcube/common/software/model/SoftwareConfig.java b/src/main/java/org/gcube/common/software/model/SoftwareConfig.java index 8f85b06..f44d802 100644 --- a/src/main/java/org/gcube/common/software/model/SoftwareConfig.java +++ b/src/main/java/org/gcube/common/software/model/SoftwareConfig.java @@ -1,11 +1,15 @@ package org.gcube.common.software.model; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.LinkedHashMap; import java.util.Map; import org.gcube.com.fasterxml.jackson.annotation.JsonAnyGetter; import org.gcube.com.fasterxml.jackson.annotation.JsonAnySetter; import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore; +import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; +import org.gcube.com.fasterxml.jackson.annotation.JsonSetter; import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; @@ -14,6 +18,11 @@ import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; */ public class SoftwareConfig { + public static final String EXPORT_FILENAME_PROPERTY_NAME = "export_filename"; + + @JsonProperty(EXPORT_FILENAME_PROPERTY_NAME) + protected String exportFileName; + protected Map additionalProperties; @JsonIgnore @@ -23,6 +32,24 @@ public class SoftwareConfig { this.additionalProperties = new LinkedHashMap<>(); } + @JsonIgnore + public String getExportFileName() { + if(exportFileName==null) { + if(additionalProperties.containsKey(EXPORT_FILENAME_PROPERTY_NAME)) { + exportFileName = additionalProperties.get(EXPORT_FILENAME_PROPERTY_NAME).asText(); + }else { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + exportFileName = simpleDateFormat.format(Calendar.getInstance().getTime()); + } + } + return exportFileName; + } + + @JsonSetter(EXPORT_FILENAME_PROPERTY_NAME) + public void setExportFileName(String exportFileName) { + this.exportFileName = exportFileName; + } + @JsonIgnore public ObjectNode getOriginalJson() { return originalJson; @@ -33,7 +60,6 @@ public class SoftwareConfig { this.originalJson = originalJson; } - @JsonAnyGetter public Map getAdditionalProperties() { return additionalProperties; diff --git a/src/main/java/org/gcube/common/software/model/SoftwareVersionConfig.java b/src/main/java/org/gcube/common/software/model/SoftwareVersionConfig.java index a7c8f1e..5b9178a 100644 --- a/src/main/java/org/gcube/common/software/model/SoftwareVersionConfig.java +++ b/src/main/java/org/gcube/common/software/model/SoftwareVersionConfig.java @@ -2,22 +2,26 @@ package org.gcube.common.software.model; import java.net.URL; import java.util.Date; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.gcube.com.fasterxml.jackson.annotation.JsonAnyGetter; +import org.gcube.com.fasterxml.jackson.annotation.JsonAnySetter; import org.gcube.com.fasterxml.jackson.annotation.JsonFormat; import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore; import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; 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.utils.Utils; /** * @author Luca Frosini (ISTI - CNR) */ -public class SoftwareVersionConfig extends SoftwareConfig { +public class SoftwareVersionConfig { public static final String NAME_PROPERTY_NAME = "name"; public static final String VERSION_PROPERTY_NAME = "version"; @@ -44,6 +48,9 @@ public class SoftwareVersionConfig extends SoftwareConfig { @JsonIgnore protected Boolean newDeposition; + @JsonIgnore + protected ObjectNode originalJson; + @JsonProperty(NAME_PROPERTY_NAME) protected String name; @@ -87,8 +94,11 @@ public class SoftwareVersionConfig extends SoftwareConfig { @JsonProperty(EXPORTERS_PROPERTY_NAME) protected Map exporters; + protected Map additionalProperties; + public SoftwareVersionConfig() { this.newDeposition = false; + this.additionalProperties = new LinkedHashMap<>(); } @JsonIgnore @@ -135,6 +145,16 @@ public class SoftwareVersionConfig extends SoftwareConfig { return variables; } + @JsonIgnore + public ObjectNode getOriginalJson() { + return originalJson; + } + + @JsonIgnore + public void setOriginalJson(ObjectNode originalJson) { + this.originalJson = originalJson; + } + public String getName() { return name; } @@ -199,4 +219,19 @@ public class SoftwareVersionConfig extends SoftwareConfig { return exporters; } + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + @JsonAnySetter + public void addAdditionalProperty(String key, JsonNode value) { + this.additionalProperties.put(key, value); + } + + @JsonIgnore + public JsonNode getAdditionalProperty(String key) { + return this.additionalProperties.get(key); + } + } \ No newline at end of file diff --git a/src/main/java/org/gcube/common/software/process/SoftwareVersionProcessor.java b/src/main/java/org/gcube/common/software/process/SoftwareVersionProcessor.java index 5803989..6e3f54e 100644 --- a/src/main/java/org/gcube/common/software/process/SoftwareVersionProcessor.java +++ b/src/main/java/org/gcube/common/software/process/SoftwareVersionProcessor.java @@ -1,6 +1,7 @@ package org.gcube.common.software.process; import org.gcube.common.software.model.ProcessorConfig; +import org.gcube.common.software.model.SoftwareConfig; import org.gcube.common.software.model.SoftwareVersionConfig; /** @@ -8,25 +9,25 @@ import org.gcube.common.software.model.SoftwareVersionConfig; */ public abstract class SoftwareVersionProcessor { + protected SoftwareConfig softwareConfig; protected SoftwareVersionConfig softwareVersion; protected ProcessorConfig processorConfig; - protected boolean first; - public SoftwareVersionConfig getSoftwareVersion() { + public SoftwareConfig getSoftwareConfig() { + return softwareConfig; + } + + public void setSoftwareConfig(SoftwareConfig softwareConfig) { + this.softwareConfig = softwareConfig; + } + + public SoftwareVersionConfig getSoftwareVersionConfig() { return softwareVersion; } - public void setSoftwareVersion(SoftwareVersionConfig softwareVersion) { - this.softwareVersion = softwareVersion; - } - - public boolean isFirst() { - return first; - } - - public void setFirst(boolean first) { - this.first = first; + public void setSoftwareVersion(SoftwareVersionConfig softwareVersionConfig) { + this.softwareVersion = softwareVersionConfig; } public ProcessorConfig getProcessorConfig() { @@ -36,5 +37,13 @@ public abstract class SoftwareVersionProcessor { public void setProcessorConfig(ProcessorConfig processorConfig) { this.processorConfig = processorConfig; } + + public boolean isFirst() { + return first; + } + + public void setFirst(boolean first) { + this.first = first; + } } diff --git a/src/main/java/org/gcube/common/software/process/export/biblatex/BibLaTeXSoftwareVersionExporter.java b/src/main/java/org/gcube/common/software/process/export/biblatex/BibLaTeXSoftwareVersionExporter.java index 5d5171a..cb0cfe8 100644 --- a/src/main/java/org/gcube/common/software/process/export/biblatex/BibLaTeXSoftwareVersionExporter.java +++ b/src/main/java/org/gcube/common/software/process/export/biblatex/BibLaTeXSoftwareVersionExporter.java @@ -183,8 +183,8 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter { } protected File getExportFile() { - String name = softwareVersion.getName(); - File file = new File(name + EXPORT_FILENAME_EXTENSION); + String fileName = softwareConfig.getExportFileName(); + File file = new File(fileName + EXPORT_FILENAME_EXTENSION); return file; } diff --git a/src/test/resources/exported-gcat-from-scratch.json b/src/test/resources/exported-gcat-from-scratch.json index 05be9d0..092ae01 100644 --- a/src/test/resources/exported-gcat-from-scratch.json +++ b/src/test/resources/exported-gcat-from-scratch.json @@ -151,7 +151,8 @@ "BibLaTeXSoftwareVersionExporter": { "elaboration": "ALL" } - } + }, + "export_filename": "{{name}}" }, "versions": [ diff --git a/src/test/resources/gcat-from-scratch.json b/src/test/resources/gcat-from-scratch.json index b1212b9..a1d85c4 100644 --- a/src/test/resources/gcat-from-scratch.json +++ b/src/test/resources/gcat-from-scratch.json @@ -141,7 +141,8 @@ "BibLaTeXSoftwareVersionExporter": { "elaboration": "ALL" } - } + }, + "export_filename": "{{name}}" }, "versions": [ { diff --git a/src/test/resources/gcat-test-sandbox.json b/src/test/resources/gcat-test-sandbox.json index 4b9d546..84882e4 100644 --- a/src/test/resources/gcat-test-sandbox.json +++ b/src/test/resources/gcat-test-sandbox.json @@ -141,7 +141,8 @@ "BibLaTeXSoftwareVersionExporter": { "elaboration": "ALL" } - } + }, + "export_filename": "{{name}}" }, "versions": [ {