Fixed corner case

This commit is contained in:
Luca Frosini 2023-01-12 11:59:48 +01:00
parent 9c286b40f7
commit 05cf8ee1c9
2 changed files with 36 additions and 9 deletions

View File

@ -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; i<versions.size(); i++) {
JsonNode version = Utils.merge(concept, versions.get(i));
ObjectNode originalVersion = (ObjectNode) versions.get(i).deepCopy();
exportingVersions.add(originalVersion);
JsonNode version = Utils.merge(concept, originalVersion);
SoftwareVersion softwareVersion = actualize(version);
softwareVersion.setPrevious(previous);
@ -78,12 +89,30 @@ public class SoftwareConceptAnalyser {
previous = softwareVersion;
/* Need to export the original file with the version doi */
if(!originalVersion.has(SoftwareVersion.VERISON_DOI_URL_PROPERTY_NAME) && softwareVersion.getVersionDOIURL()!=null) {
originalVersion.put(SoftwareVersion.VERISON_DOI_URL_PROPERTY_NAME, softwareVersion.getVersionDOIURL().toString());
}
Thread.sleep(TimeUnit.SECONDS.toMillis(2));
}
logger.debug("{}", objectMapper.writeValueAsString(softwareConcept));
ObjectNode toBeExported = objectMapper.createObjectNode();
if(concept.get(SoftwareConcept.DOI_URL_PROPERTY_NAME)==null && exportingVersions.size()>0) {
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);
}
}

View File

@ -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<SoftwareVersionPublisher> 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<SoftwareVersionExporter> sves = SoftwareVersionExporter.getExporters();
for(SoftwareVersionExporter sve: sves) {
JsonNode conf = publishers.get(exporters.getClass().getSimpleName());