diff --git a/src/main/java/org/gcube/common/software/analyser/SoftwareConceptAnalyser.java b/src/main/java/org/gcube/common/software/analyser/SoftwareConceptAnalyser.java index 8262ac6..b1b9c8a 100644 --- a/src/main/java/org/gcube/common/software/analyser/SoftwareConceptAnalyser.java +++ b/src/main/java/org/gcube/common/software/analyser/SoftwareConceptAnalyser.java @@ -7,6 +7,7 @@ import java.util.concurrent.TimeUnit; 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.model.SoftwareConcept; import org.gcube.common.software.model.SoftwareVersion; import org.gcube.common.software.model.Variables; @@ -23,6 +24,11 @@ public class SoftwareConceptAnalyser { public static final String CONCEPT_FILENAME_EXTENSION = ".json"; + public static final String CONCEPT_PROPERTY_NAME = "concept"; + public static final String VERSIONS_PROPERTY_NAME = "versions"; + public static final String PUBLISHERS_PROPERTY_NAME = "publishers"; + public static final String EXPORTERS_PROPERTY_NAME = "exporters"; + protected ObjectMapper objectMapper; protected JsonNode jsonNode; @@ -51,15 +57,20 @@ public class SoftwareConceptAnalyser { } public void analyse() throws Exception { - JsonNode concept = jsonNode.get("concept"); + ObjectNode concept = (ObjectNode) jsonNode.get(CONCEPT_PROPERTY_NAME); SoftwareConcept softwareConcept = objectMapper.treeToValue(concept, SoftwareConcept.class); - ArrayNode versions = (ArrayNode) jsonNode.get("versions"); + ArrayNode versions = (ArrayNode) jsonNode.get(VERSIONS_PROPERTY_NAME); String name = softwareConcept.getName(); SoftwareVersion previous = null; + ArrayNode exportingVersions = objectMapper.createArrayNode(); + for(int i=0; i0) { + JsonNode originalVersion = exportingVersions.get(0); + if(originalVersion.has(SoftwareVersion.DOI_URL_PROPERTY_NAME)) { + concept.replace(SoftwareConcept.DOI_URL_PROPERTY_NAME, originalVersion.get(SoftwareVersion.DOI_URL_PROPERTY_NAME)); + } + } + toBeExported.replace(CONCEPT_PROPERTY_NAME, concept); + toBeExported.replace(VERSIONS_PROPERTY_NAME, exportingVersions); + toBeExported.replace(PUBLISHERS_PROPERTY_NAME, jsonNode.get(PUBLISHERS_PROPERTY_NAME).deepCopy()); + toBeExported.replace(EXPORTERS_PROPERTY_NAME, jsonNode.get(EXPORTERS_PROPERTY_NAME).deepCopy()); + File file = new File(name+CONCEPT_FILENAME_EXTENSION); - objectMapper.writeValue(file, softwareConcept); + objectMapper.writeValue(file, toBeExported); + } } diff --git a/src/main/java/org/gcube/common/software/analyser/SoftwareVersionAnalyser.java b/src/main/java/org/gcube/common/software/analyser/SoftwareVersionAnalyser.java index eb3e6ac..2c10b2c 100644 --- a/src/main/java/org/gcube/common/software/analyser/SoftwareVersionAnalyser.java +++ b/src/main/java/org/gcube/common/software/analyser/SoftwareVersionAnalyser.java @@ -1,6 +1,5 @@ package org.gcube.common.software.analyser; -import java.io.File; import java.net.URL; import java.util.List; @@ -11,7 +10,6 @@ import org.gcube.common.software.model.SoftwareVersionFile; import org.gcube.common.software.model.Variables; import org.gcube.common.software.process.export.SoftwareVersionExporter; import org.gcube.common.software.process.publish.SoftwareVersionPublisher; -import org.gcube.common.software.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,7 +52,7 @@ public class SoftwareVersionAnalyser { svf.setDesiredName(desiredName); } - ObjectNode publishers = (ObjectNode) originalJson.get("publishers"); + ObjectNode publishers = (ObjectNode) originalJson.get(SoftwareConceptAnalyser.PUBLISHERS_PROPERTY_NAME).deepCopy(); List svps = SoftwareVersionPublisher.getPublishers(); for(SoftwareVersionPublisher svp: svps) { JsonNode conf = publishers.get(svp.getClass().getSimpleName()); @@ -64,7 +62,7 @@ public class SoftwareVersionAnalyser { svp.publish(); } - ObjectNode exporters = (ObjectNode) originalJson.get("exporters"); + ObjectNode exporters = (ObjectNode) originalJson.get(SoftwareConceptAnalyser.EXPORTERS_PROPERTY_NAME).deepCopy(); List sves = SoftwareVersionExporter.getExporters(); for(SoftwareVersionExporter sve: sves) { JsonNode conf = publishers.get(exporters.getClass().getSimpleName());