Adding variables management
This commit is contained in:
parent
46738f588d
commit
d93351144d
|
@ -1,14 +1,19 @@
|
|||
package org.gcube.common.software.analyser;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.gcube.com.fasterxml.jackson.databind.SerializationFeature;
|
||||
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;
|
||||
import org.gcube.common.software.utils.Utils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -22,45 +27,49 @@ public class SoftwareConceptAnalyser {
|
|||
public static final String CONCEPT_FILENAME_EXTENSION = ".json";
|
||||
|
||||
protected ObjectMapper objectMapper;
|
||||
protected JsonNode jsonNode;
|
||||
|
||||
public SoftwareConceptAnalyser() {
|
||||
this.objectMapper = new ObjectMapper();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(SoftwareVersion.DATETIME_PATTERN);
|
||||
this.objectMapper.setDateFormat(sdf);
|
||||
this.objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
|
||||
public SoftwareConceptAnalyser(File jsonFile) throws Exception {
|
||||
this.objectMapper = Utils.getObjectMapper();
|
||||
this.jsonNode = objectMapper.readTree(jsonFile);
|
||||
}
|
||||
|
||||
public SoftwareConcept getSoftwareConcept(File jsonFile) throws Exception {
|
||||
SoftwareConcept softwareConcept = objectMapper.readValue(jsonFile, SoftwareConcept.class);
|
||||
return softwareConcept;
|
||||
public SoftwareConceptAnalyser(String json) throws Exception {
|
||||
this.objectMapper = Utils.getObjectMapper();
|
||||
this.jsonNode = objectMapper.readTree(json);
|
||||
}
|
||||
|
||||
public SoftwareConcept getSoftwareConcept(String json) throws Exception {
|
||||
SoftwareConcept softwareConcept = objectMapper.readValue(json, SoftwareConcept.class);
|
||||
return softwareConcept;
|
||||
protected JsonNode actualize(JsonNode version) throws Exception {
|
||||
Variables variables = objectMapper.treeToValue(version, Variables.class);
|
||||
Set<String> missingVariables = variables.parse();
|
||||
if(missingVariables.size()>0) {
|
||||
throw new Exception("");
|
||||
}
|
||||
JsonNode swVersion = objectMapper.convertValue(variables.getProperties(), JsonNode.class);
|
||||
return swVersion;
|
||||
}
|
||||
|
||||
public void analyse(SoftwareConcept softwareConcept) throws Exception {
|
||||
public void analyse() throws Exception {
|
||||
JsonNode concept = jsonNode.get("concept");
|
||||
SoftwareConcept softwareConcept = objectMapper.treeToValue(concept, SoftwareConcept.class);
|
||||
ArrayNode versions = (ArrayNode) jsonNode.get("versions");
|
||||
|
||||
String name = softwareConcept.getName();
|
||||
SoftwareVersion previous = null;
|
||||
|
||||
|
||||
List<SoftwareVersion> depositionVersions = softwareConcept.getDepositionVersions();
|
||||
for(int i=0; i<depositionVersions.size(); i++) {
|
||||
for(int i=0; i<versions.size(); i++) {
|
||||
JsonNode version = Utils.merge(concept, versions.get(i));
|
||||
version = actualize(version);
|
||||
SoftwareVersion softwareVersion = objectMapper.treeToValue(version, SoftwareVersion.class);
|
||||
|
||||
SoftwareVersion softwareVersion = depositionVersions.get(i);
|
||||
|
||||
softwareVersion.setSoftwareConcept(softwareConcept);
|
||||
softwareVersion.setPrevious(previous);
|
||||
if((i+1)<depositionVersions.size()) {
|
||||
softwareVersion.setNext(depositionVersions.get(i+1));
|
||||
}
|
||||
previous.setNext(softwareVersion);
|
||||
|
||||
logger.trace("Going to process {} {} (previous version {})",
|
||||
name, softwareVersion.getVersion(),
|
||||
softwareVersion.getPrevious()!=null ? softwareVersion.getPrevious().getVersion(): null);
|
||||
|
||||
SoftwareVersionAnalyser softwareVersionAnalyser = new SoftwareVersionAnalyser(objectMapper, softwareVersion);
|
||||
SoftwareVersionAnalyser softwareVersionAnalyser = new SoftwareVersionAnalyser(softwareVersion);
|
||||
softwareVersionAnalyser.setFirst(i==0);
|
||||
softwareVersionAnalyser.analyse();
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import org.gcube.common.software.model.SoftwareVersion;
|
||||
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;
|
||||
|
||||
|
@ -16,12 +17,10 @@ public class SoftwareVersionAnalyser {
|
|||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SoftwareConceptAnalyser.class);
|
||||
|
||||
protected ObjectMapper objectMapper;
|
||||
protected SoftwareVersion softwareVersion;
|
||||
protected boolean first;
|
||||
|
||||
public SoftwareVersionAnalyser(ObjectMapper objectMapper, SoftwareVersion softwareVersion) {
|
||||
this.objectMapper = objectMapper;
|
||||
public SoftwareVersionAnalyser(SoftwareVersion softwareVersion) {
|
||||
this.softwareVersion = softwareVersion;
|
||||
}
|
||||
|
||||
|
@ -34,6 +33,7 @@ public class SoftwareVersionAnalyser {
|
|||
}
|
||||
|
||||
public void analyse() throws Exception {
|
||||
ObjectMapper objectMapper = Utils.getObjectMapper();
|
||||
logger.debug("SoftwareVersion: {}", objectMapper.writeValueAsString(softwareVersion));
|
||||
|
||||
List<SoftwareVersionPublisher> svps = SoftwareVersionPublisher.getPublishers();
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package org.gcube.common.software.model;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
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.node.ArrayNode;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
|
@ -13,21 +16,52 @@ import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
|||
public class SoftwareConcept {
|
||||
|
||||
public static final String NAME_PROPERTY_NAME = "name";
|
||||
public static final String GROUP_PROPERTY_NAME = "group";
|
||||
public static final String TITLE_PROPERTY_NAME = "title";
|
||||
public static final String LICENSE_PROPERTY_NAME = "license";
|
||||
public static final String KEYWORDS_PROPERTY_NAME = "keywords";
|
||||
public static final String DESCRIPTION_PROPERTY_NAME = "description";
|
||||
public static final String PUBLISH_PROPERTY_NAME = "publish";
|
||||
public static final String EXPORT_PROPERTY_NAME = "export";
|
||||
public static final String AUTHORS_PROPERTY_NAME = "authors";
|
||||
public static final String FILES_PROPERTY_NAME = "files";
|
||||
public static final String CODE_LOCATION_PROPERTY_NAME = "code_location";
|
||||
public static final String CODE_LOCATION_TEXT_PROPERTY_NAME = "code_location_text";
|
||||
public static final String VERSIONS_PROPERTY_NAME = "versions";
|
||||
public static final String METADATA_PROPERTY_NAME = "metadata";
|
||||
public static final String DOI_URL_PROPERTY_NAME = "doi_url";
|
||||
public static final String GRANTS_PROPERTY_NAME = "grants";
|
||||
public static final String PUBLISH_PROPERTY_NAME = "publish";
|
||||
public static final String EXPORT_PROPERTY_NAME = "export";
|
||||
|
||||
@JsonProperty(NAME_PROPERTY_NAME)
|
||||
protected String name;
|
||||
|
||||
@JsonProperty(GROUP_PROPERTY_NAME)
|
||||
protected String group;
|
||||
|
||||
@JsonProperty(TITLE_PROPERTY_NAME)
|
||||
protected String title;
|
||||
|
||||
@JsonProperty(LICENSE_PROPERTY_NAME)
|
||||
protected JsonNode license;
|
||||
|
||||
@JsonProperty(KEYWORDS_PROPERTY_NAME)
|
||||
protected Set<String> keywords;
|
||||
|
||||
@JsonProperty(DESCRIPTION_PROPERTY_NAME)
|
||||
protected String description;
|
||||
|
||||
@JsonProperty(AUTHORS_PROPERTY_NAME)
|
||||
protected ArrayNode authors;
|
||||
|
||||
@JsonProperty(FILES_PROPERTY_NAME)
|
||||
protected List<SoftwareVersionFile> files;
|
||||
|
||||
@JsonProperty(CODE_LOCATION_PROPERTY_NAME)
|
||||
protected String codeLocation;
|
||||
|
||||
@JsonProperty(DOI_URL_PROPERTY_NAME)
|
||||
protected URL doiURL;
|
||||
|
||||
@JsonProperty(AUTHORS_PROPERTY_NAME)
|
||||
protected JsonNode grants;
|
||||
|
||||
@JsonProperty(PUBLISH_PROPERTY_NAME)
|
||||
@JsonFormat(shape=JsonFormat.Shape.STRING)
|
||||
protected ElaborationType publish;
|
||||
|
@ -36,32 +70,54 @@ public class SoftwareConcept {
|
|||
@JsonFormat(shape=JsonFormat.Shape.STRING)
|
||||
protected ElaborationType export;
|
||||
|
||||
@JsonProperty(FILES_PROPERTY_NAME)
|
||||
protected List<SoftwareVersionFile> files;
|
||||
|
||||
@JsonProperty(CODE_LOCATION_PROPERTY_NAME)
|
||||
protected String codeLocation;
|
||||
|
||||
@JsonProperty(CODE_LOCATION_TEXT_PROPERTY_NAME)
|
||||
protected String codeLocationAdditionalDescription;
|
||||
|
||||
@JsonProperty(VERSIONS_PROPERTY_NAME)
|
||||
protected List<SoftwareVersion> depositionVersions;
|
||||
|
||||
@JsonProperty(METADATA_PROPERTY_NAME)
|
||||
protected JsonNode metadata;
|
||||
|
||||
@JsonIgnore
|
||||
protected Variables variables;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public JsonNode getLicense() {
|
||||
return license;
|
||||
}
|
||||
|
||||
public Set<String> getKeywords() {
|
||||
return keywords;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public ArrayNode getAuthors() {
|
||||
return authors;
|
||||
}
|
||||
|
||||
public List<SoftwareVersionFile> getFiles() {
|
||||
return files;
|
||||
}
|
||||
|
||||
public String getCodeLocation() {
|
||||
return codeLocation;
|
||||
}
|
||||
|
||||
public URL getDOIURL() {
|
||||
return doiURL;
|
||||
}
|
||||
|
||||
public void setDOIURL(URL doiURL) {
|
||||
this.doiURL = doiURL;
|
||||
}
|
||||
|
||||
public JsonNode getGrants() {
|
||||
return grants;
|
||||
}
|
||||
|
||||
public ElaborationType getPublish() {
|
||||
return publish;
|
||||
}
|
||||
|
@ -69,33 +125,5 @@ public class SoftwareConcept {
|
|||
public ElaborationType getExport() {
|
||||
return export;
|
||||
}
|
||||
|
||||
public List<SoftwareVersionFile> getFiles() {
|
||||
return files;
|
||||
}
|
||||
|
||||
public String getCodeLocation() {
|
||||
return codeLocation;
|
||||
}
|
||||
|
||||
public String getCodeLocationAdditionalDescription() {
|
||||
return codeLocationAdditionalDescription;
|
||||
}
|
||||
|
||||
public List<SoftwareVersion> getDepositionVersions() {
|
||||
return depositionVersions;
|
||||
}
|
||||
|
||||
public JsonNode getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public Variables getVariables() {
|
||||
if(variables==null) {
|
||||
|
||||
}
|
||||
return variables;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,57 +1,26 @@
|
|||
package org.gcube.common.software.model;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.gcube.com.fasterxml.jackson.annotation.JsonGetter;
|
||||
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import org.gcube.com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import org.gcube.com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||
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.ArrayNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.TextNode;
|
||||
import org.gcube.common.software.utils.Utils;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public class SoftwareVersion {
|
||||
|
||||
/**
|
||||
* DateTime Pattern to be used to serialize Dates
|
||||
*/
|
||||
public static final String DATETIME_PATTERN = "yyyy-MM-dd";
|
||||
|
||||
public static String getDateAsString(Date date) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);
|
||||
return simpleDateFormat.format(date);
|
||||
}
|
||||
public class SoftwareVersion extends SoftwareConcept {
|
||||
|
||||
public static final String VERSION_PROPERTY_NAME = "version";
|
||||
public static final String DATE_PROPERTY_NAME = "date";
|
||||
public static final String FILES_PROPERTY_NAME = "files";
|
||||
public static final String GCUBE_RELEASE_VERSION_PROPERTY_NAME = "gcube_release_version";
|
||||
public static final String GCUBE_RELEASE_TICKET_PROPERTY_NAME = "gcube_release_ticket";
|
||||
public static final String CODE_LOCATION_PROPERTY_NAME = "code_location";
|
||||
public static final String CONCEPT_DOI_URL_PROPERTY_NAME = "concept_doi_url";
|
||||
public static final String DOI_URL_PROPERTY_NAME = "doi_url";
|
||||
public static final String PUBLISH_PROPERTY_NAME = SoftwareConcept.PUBLISH_PROPERTY_NAME;
|
||||
public static final String EXPORT_PROPERTY_NAME = SoftwareConcept.EXPORT_PROPERTY_NAME;
|
||||
public static final String METADATA_PROPERTY_NAME = "metadata";
|
||||
public static final String VERISON_DOI_URL_PROPERTY_NAME = "version_doi_url";
|
||||
|
||||
@JsonIgnore
|
||||
protected SoftwareConcept softwareConcept;
|
||||
|
||||
@JsonIgnore
|
||||
protected SoftwareVersion previous;
|
||||
|
||||
|
@ -65,50 +34,23 @@ public class SoftwareVersion {
|
|||
protected String version;
|
||||
|
||||
@JsonProperty(DATE_PROPERTY_NAME)
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = SoftwareVersion.DATETIME_PATTERN)
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = Utils.DATETIME_PATTERN)
|
||||
protected Date date;
|
||||
|
||||
@JsonProperty(FILES_PROPERTY_NAME)
|
||||
protected List<SoftwareVersionFile> files;
|
||||
|
||||
@JsonProperty(GCUBE_RELEASE_VERSION_PROPERTY_NAME)
|
||||
protected String gCubeReleaseVersion;
|
||||
|
||||
@JsonProperty(GCUBE_RELEASE_TICKET_PROPERTY_NAME)
|
||||
protected URL gCubeReleaseTicket;
|
||||
|
||||
@JsonProperty(CODE_LOCATION_PROPERTY_NAME)
|
||||
protected Object codeLocation;
|
||||
@JsonProperty(VERISON_DOI_URL_PROPERTY_NAME)
|
||||
protected URL versionDOIURL;
|
||||
|
||||
@JsonProperty(CONCEPT_DOI_URL_PROPERTY_NAME)
|
||||
protected URL conceptDOIURL;
|
||||
|
||||
@JsonProperty(DOI_URL_PROPERTY_NAME)
|
||||
protected URL doiURL;
|
||||
|
||||
@JsonProperty(PUBLISH_PROPERTY_NAME)
|
||||
protected Boolean publish;
|
||||
|
||||
@JsonProperty(EXPORT_PROPERTY_NAME)
|
||||
protected Boolean export;
|
||||
|
||||
@JsonProperty(METADATA_PROPERTY_NAME)
|
||||
protected JsonNode metadata;
|
||||
|
||||
public SoftwareVersion() {
|
||||
this.newDeposition = false;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public SoftwareConcept getSoftwareConcept() {
|
||||
return softwareConcept;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public void setSoftwareConcept(SoftwareConcept softwareConcept) {
|
||||
this.softwareConcept = softwareConcept;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public SoftwareVersion getPrevious() {
|
||||
return previous;
|
||||
|
@ -161,53 +103,6 @@ public class SoftwareVersion {
|
|||
public void setDate(Date date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
protected List<SoftwareVersionFile> parseFiles(List<SoftwareVersionFile> filesToParse){
|
||||
List<SoftwareVersionFile> files = new ArrayList<>();
|
||||
for(SoftwareVersionFile f : filesToParse) {
|
||||
SoftwareVersionFile file = new SoftwareVersionFile();
|
||||
file.setDesiredName(replaceVariables(f.getDesiredName()));
|
||||
try {
|
||||
file.setURL(replaceVariables(f.getURL().toString()));
|
||||
} catch (MalformedURLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
files.add(file);
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
protected void replaceVariablesInfiles(List<SoftwareVersionFile> files) {
|
||||
for(SoftwareVersionFile file : files) {
|
||||
file.setDesiredName(replaceVariables(file.getDesiredName()));
|
||||
try {
|
||||
file.setURL(replaceVariables(file.getURL().toString()));
|
||||
} catch (MalformedURLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<SoftwareVersionFile> getFiles() {
|
||||
if(files!=null) {
|
||||
return parseFiles(files);
|
||||
}
|
||||
return parseFiles(softwareConcept.getFiles());
|
||||
}
|
||||
|
||||
@JsonGetter(value = FILES_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
protected List<SoftwareVersionFile> getFilesForSerialization() {
|
||||
return files;
|
||||
}
|
||||
|
||||
@JsonSetter(value = FILES_PROPERTY_NAME)
|
||||
public void setFiles(List<SoftwareVersionFile> files) {
|
||||
this.files = files;
|
||||
}
|
||||
|
||||
@JsonGetter(value = GCUBE_RELEASE_VERSION_PROPERTY_NAME)
|
||||
public String getGCubeReleaseVersion() {
|
||||
|
@ -229,205 +124,14 @@ public class SoftwareVersion {
|
|||
this.gCubeReleaseTicket = gCubeReleaseTicket;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public URL getCodeLocation() throws MalformedURLException {
|
||||
if(codeLocation!=null) {
|
||||
if(codeLocation instanceof Boolean && ((Boolean) codeLocation)==false) {
|
||||
return null;
|
||||
}
|
||||
return new URL(replaceVariables(codeLocation.toString()));
|
||||
}
|
||||
return new URL(replaceVariables(softwareConcept.getCodeLocation().toString()));
|
||||
}
|
||||
|
||||
@JsonGetter(value = CODE_LOCATION_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
public Object getCodeLocationForSerialization() throws MalformedURLException {
|
||||
return codeLocation;
|
||||
}
|
||||
|
||||
@JsonSetter(value = CODE_LOCATION_PROPERTY_NAME)
|
||||
public void setCodeLocation(Object codeLocation) throws Exception {
|
||||
if(codeLocation instanceof Boolean) {
|
||||
if(((Boolean) codeLocation)==false) {
|
||||
this.codeLocation = new Boolean(false);
|
||||
return;
|
||||
}else {
|
||||
throw new RuntimeException(CODE_LOCATION_PROPERTY_NAME + " can only be false or the URL of the code_location");
|
||||
}
|
||||
}
|
||||
this.codeLocation = new URL((String) codeLocation);
|
||||
}
|
||||
|
||||
@JsonGetter(CONCEPT_DOI_URL_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
public URL getConceptDOIURL() {
|
||||
return conceptDOIURL;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public void setConceptDOIURL(URL conceptDOIURL) {
|
||||
this.conceptDOIURL = conceptDOIURL;
|
||||
}
|
||||
|
||||
@JsonSetter(CONCEPT_DOI_URL_PROPERTY_NAME)
|
||||
public void setConceptDOIURL(String conceptDOIURL) throws MalformedURLException {
|
||||
try {
|
||||
this.conceptDOIURL = new URL(conceptDOIURL);
|
||||
} catch (Exception e) {
|
||||
this.conceptDOIURL = null;
|
||||
}
|
||||
}
|
||||
|
||||
@JsonGetter(DOI_URL_PROPERTY_NAME)
|
||||
public URL getDOIURL() {
|
||||
return doiURL;
|
||||
@JsonGetter(VERISON_DOI_URL_PROPERTY_NAME)
|
||||
public URL getVersionDOIURL() {
|
||||
return versionDOIURL;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public void setDOIURL(URL doiURL) {
|
||||
this.doiURL = doiURL;
|
||||
}
|
||||
|
||||
@JsonSetter(DOI_URL_PROPERTY_NAME)
|
||||
public void setDOIURL(String doiURL) throws MalformedURLException {
|
||||
try {
|
||||
this.doiURL = new URL(doiURL);
|
||||
} catch (Exception e) {
|
||||
this.doiURL = null;
|
||||
}
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public Boolean getPublish() {
|
||||
if(publish!=null) {
|
||||
return publish;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@JsonGetter(PUBLISH_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
public Boolean getPublishForSerialization() {
|
||||
return publish;
|
||||
}
|
||||
|
||||
@JsonSetter(PUBLISH_PROPERTY_NAME)
|
||||
public void setPublish(Boolean publish) {
|
||||
this.publish = publish;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public Boolean getExport() {
|
||||
if(export!=null) {
|
||||
return export;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@JsonGetter(EXPORT_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
public Boolean getExportForSerialization() {
|
||||
return export;
|
||||
}
|
||||
|
||||
@JsonSetter(EXPORT_PROPERTY_NAME)
|
||||
public void setExport(Boolean export) {
|
||||
this.export = export;
|
||||
}
|
||||
|
||||
|
||||
@JsonIgnore
|
||||
protected ObjectNode parseObjectNode(ObjectNode objectNode) {
|
||||
Iterator<String> iterator = objectNode.fieldNames();
|
||||
while (iterator.hasNext()) {
|
||||
String name = iterator.next();
|
||||
JsonNode jn = objectNode.get(name);
|
||||
jn = parseJsonNode(jn);
|
||||
objectNode.replace(name, jn);
|
||||
}
|
||||
return objectNode;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
protected ArrayNode parseArrayNode(ArrayNode arrayNode) {
|
||||
for(int i=0; i<arrayNode.size(); i++) {
|
||||
JsonNode jn = arrayNode.get(i);
|
||||
jn = parseJsonNode(jn);
|
||||
arrayNode.set(i, jn);
|
||||
}
|
||||
return arrayNode;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
protected JsonNode parseJsonNode(JsonNode jsonNode) {
|
||||
switch (jsonNode.getNodeType()) {
|
||||
case OBJECT:
|
||||
return parseObjectNode((ObjectNode) jsonNode);
|
||||
|
||||
case ARRAY:
|
||||
return parseArrayNode((ArrayNode) jsonNode);
|
||||
|
||||
case STRING:
|
||||
String text = jsonNode.asText();
|
||||
text = replaceVariables(text);
|
||||
TextNode textNode = new TextNode(text);
|
||||
return textNode;
|
||||
|
||||
default:
|
||||
return jsonNode;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
protected String replaceVariables(String stringToAnalise) {
|
||||
String s = Utils.replaceVariable("name", softwareConcept.getName(), stringToAnalise);
|
||||
s = Utils.replaceVariable("version", version, s);
|
||||
s = Utils.replaceVariable("date", SoftwareVersion.getDateAsString(date), s);
|
||||
return s;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public JsonNode getMetadata() throws Exception {
|
||||
if(metadata!=null) {
|
||||
return metadata;
|
||||
|
||||
}
|
||||
JsonNode jsonNode = softwareConcept.getMetadata().deepCopy();
|
||||
jsonNode = parseJsonNode(jsonNode);
|
||||
|
||||
if(getCodeLocation()!=null) {
|
||||
ObjectNode objectNode = (ObjectNode) jsonNode;
|
||||
String description = objectNode.get("description").asText();
|
||||
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
stringWriter.append(description);
|
||||
|
||||
String codeLocationText = softwareConcept.getCodeLocationAdditionalDescription();
|
||||
codeLocationText = replaceVariables(codeLocationText);
|
||||
codeLocationText = Utils.replaceVariable("code_location", getCodeLocation().toString(), codeLocationText);
|
||||
|
||||
stringWriter.append(codeLocationText);
|
||||
|
||||
TextNode textNode = new TextNode(stringWriter.toString());
|
||||
objectNode.replace("description", textNode);
|
||||
|
||||
}
|
||||
|
||||
return jsonNode;
|
||||
}
|
||||
|
||||
|
||||
@JsonGetter(METADATA_PROPERTY_NAME)
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
protected JsonNode getMetadataJsonGetter() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@JsonSetter(METADATA_PROPERTY_NAME)
|
||||
public void setMetadata(JsonNode metadata) {
|
||||
this.metadata = metadata;
|
||||
public void setVersionDOIURL(URL versionDOIURL) {
|
||||
this.versionDOIURL = versionDOIURL;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,31 +24,12 @@ public class Variables {
|
|||
PATTERN = Pattern.compile(REGEX);
|
||||
}
|
||||
|
||||
protected Set<String> keysToBeExcluded;
|
||||
protected Map<String, Object> properties;
|
||||
|
||||
public Variables() {
|
||||
properties = new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public void setKeysToBeExcluded(Set<String> keysToBeExcluded) {
|
||||
if(keysToBeExcluded==null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(this.keysToBeExcluded!=null) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.keysToBeExcluded = keysToBeExcluded;
|
||||
if(properties!=null) {
|
||||
for(String key : keysToBeExcluded) {
|
||||
properties.remove(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the variables used in the String provided as argument
|
||||
* @param string the string to analyze to find variables
|
||||
|
@ -101,7 +82,7 @@ public class Variables {
|
|||
return missingVariables;
|
||||
}
|
||||
|
||||
protected Set<String> parse() throws Exception {
|
||||
public Set<String> parse() throws Exception {
|
||||
Set<String> missingVariables = parseAndReplace();
|
||||
while(missingVariables.size()>0) {
|
||||
Set<String> newMissingVariables = parseAndReplace();
|
||||
|
@ -126,33 +107,26 @@ public class Variables {
|
|||
|
||||
@JsonAnySetter
|
||||
public void addProperty(String key, Object value) {
|
||||
if(keysToBeExcluded!=null && keysToBeExcluded.contains(key)) {
|
||||
return;
|
||||
}
|
||||
this.properties.put(key, value);
|
||||
this.properties.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add to this object the missing properties
|
||||
* and replace the properties already present
|
||||
* with the values contained in the provided
|
||||
* object as argument
|
||||
* @param variables the properties to merge with this object
|
||||
* @throws Exception
|
||||
*/
|
||||
@JsonIgnore
|
||||
public void merge(Variables variables) throws Exception {
|
||||
Map<String, Object> properties = variables.getProperties();
|
||||
Set<String> keys = properties.keySet();
|
||||
for(String key : keys) {
|
||||
if(keysToBeExcluded!=null && keysToBeExcluded.contains(key)) {
|
||||
return;
|
||||
}
|
||||
Object value = properties.get(key);
|
||||
this.properties.put(key, value);
|
||||
}
|
||||
parse();
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Add to this object the missing properties
|
||||
// * and replace the properties already present
|
||||
// * with the values contained in the provided
|
||||
// * object as argument
|
||||
// * @param variables the properties to merge with this object
|
||||
// * @throws Exception
|
||||
// */
|
||||
// @JsonIgnore
|
||||
// public void merge(Variables variables) throws Exception {
|
||||
// Map<String, Object> properties = variables.getProperties();
|
||||
// Set<String> keys = properties.keySet();
|
||||
// for(String key : keys) {
|
||||
// Object value = properties.get(key);
|
||||
// this.properties.put(key, value);
|
||||
// }
|
||||
// parse();
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
@ -5,12 +5,11 @@ import java.io.File;
|
|||
import java.io.FileWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
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.model.ElaborationType;
|
||||
import org.gcube.common.software.model.SoftwareConcept;
|
||||
import org.gcube.common.software.model.SoftwareVersion;
|
||||
import org.gcube.common.software.process.export.SoftwareVersionExporter;
|
||||
import org.gcube.common.software.utils.FileUtils;
|
||||
import org.gcube.common.software.utils.Utils;
|
||||
|
@ -28,14 +27,9 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
public static final String TEMPLATE_FILENAME = "biblatex.template";
|
||||
|
||||
public void export() throws Exception {
|
||||
SoftwareConcept softwareConcept = softwareVersion.getSoftwareConcept();
|
||||
String name = softwareConcept.getName();
|
||||
String name = softwareVersion.getName();
|
||||
|
||||
ElaborationType export = softwareConcept.getExport();
|
||||
|
||||
if(!softwareVersion.getExport()) {
|
||||
export = ElaborationType.NONE;
|
||||
}
|
||||
ElaborationType export = softwareVersion.getExport();
|
||||
|
||||
switch (export) {
|
||||
case ALL:
|
||||
|
@ -74,8 +68,7 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
}
|
||||
|
||||
private String getCitationID() {
|
||||
SoftwareConcept softwareConcept = softwareVersion.getSoftwareConcept();
|
||||
String name = softwareConcept.getName().toLowerCase();
|
||||
String name = softwareVersion.getName();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
stringBuffer.append(name);
|
||||
stringBuffer.append("_");
|
||||
|
@ -89,8 +82,7 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
return title;
|
||||
}
|
||||
|
||||
private String getAuthors(JsonNode metadata) {
|
||||
ArrayNode arrayNode = (ArrayNode) metadata.get("creators");
|
||||
private String getAuthors(ArrayNode arrayNode) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
int size = arrayNode.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
|
@ -114,17 +106,12 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
// private String getLicense(JsonNode metadata) {
|
||||
// String license = metadata.get("license").asText();
|
||||
// return license;
|
||||
// }
|
||||
|
||||
private String getKeywords(JsonNode metadata) {
|
||||
ArrayNode arrayNode = (ArrayNode) metadata.get("keywords");
|
||||
private String getKeywords(Set<String> keywords) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
int size = arrayNode.size();
|
||||
int size = keywords.size();
|
||||
String[] array = keywords.toArray(new String[size]);
|
||||
for (int i = 0; i < size; i++) {
|
||||
stringBuffer.append(arrayNode.get(i).asText());
|
||||
stringBuffer.append(array[i]);
|
||||
if (i < (size - 1)) {
|
||||
stringBuffer.append(", ");
|
||||
}
|
||||
|
@ -161,24 +148,22 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
// }
|
||||
|
||||
protected String parseTemplate(String template) {
|
||||
SoftwareConcept softwareConcept = softwareVersion.getSoftwareConcept();
|
||||
JsonNode metadata = softwareConcept.getMetadata();
|
||||
JsonNode metadata = null; // softwareConcept.getMetadata();
|
||||
String s = Utils.replaceVariable("citation_id", getCitationID(), template);
|
||||
s = Utils.replaceVariable("author", getAuthors(metadata), s);
|
||||
s = Utils.replaceVariable("author", getAuthors(softwareVersion.getAuthors()), s);
|
||||
s = Utils.replaceVariable("title", getTitle(metadata), s);
|
||||
s = Utils.replaceVariable("description", softwareConcept.getDescription(), s);
|
||||
s = Utils.replaceVariable("date", SoftwareVersion.getDateAsString(softwareVersion.getDate()), s);
|
||||
s = Utils.replaceVariable("description", softwareVersion.getDescription(), s);
|
||||
s = Utils.replaceVariable("date", Utils.getDateAsString(softwareVersion.getDate()), s);
|
||||
s = Utils.replaceVariable("version", softwareVersion.getVersion(), s);
|
||||
s = Utils.replaceVariable("doi", softwareVersion.getDOIURL().toString(), s);
|
||||
s = Utils.replaceVariable("keywords", getKeywords(metadata), s);
|
||||
s = Utils.replaceVariable("doi", softwareVersion.getVersionDOIURL().toString(), s);
|
||||
s = Utils.replaceVariable("keywords", getKeywords(softwareVersion.getKeywords()), s);
|
||||
// s = Utils.replaceVariable("license", getLicense(metadata), s);
|
||||
// s = addNotes(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
protected void generate() throws Exception {
|
||||
SoftwareConcept softwareConcept = softwareVersion.getSoftwareConcept();
|
||||
String name = softwareConcept.getName();
|
||||
String name = softwareVersion.getName();
|
||||
logger.info("Going to export {} {} in BibLaTex format.", name, softwareVersion.getVersion());
|
||||
|
||||
String template = getTemplate();
|
||||
|
@ -201,7 +186,7 @@ public class BibLaTeXSoftwareVersionExporter extends SoftwareVersionExporter {
|
|||
}
|
||||
|
||||
protected File getExportFile() {
|
||||
String name = softwareVersion.getSoftwareConcept().getName();
|
||||
String name = softwareVersion.getName();
|
||||
File file = new File(name + EXPORT_FILENAME_EXTENSION);
|
||||
return file;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
|||
import org.gcube.common.gxhttp.request.GXHTTPStringRequest;
|
||||
import org.gcube.common.software.config.Config;
|
||||
import org.gcube.common.software.model.ElaborationType;
|
||||
import org.gcube.common.software.model.SoftwareConcept;
|
||||
import org.gcube.common.software.model.SoftwareVersionFile;
|
||||
import org.gcube.common.software.process.publish.SoftwareVersionPublisher;
|
||||
import org.glassfish.jersey.client.ClientProperties;
|
||||
|
@ -114,7 +113,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
}
|
||||
|
||||
protected void addFilesToDeposition(List<File> files ) throws Exception {
|
||||
String depositID = getZenodoIDFromDOIURL(softwareVersion.getDOIURL());
|
||||
String depositID = getZenodoIDFromDOIURL(softwareVersion.getVersionDOIURL());
|
||||
String newFilePath = DEPOSTION_FILES_PATH.replace(":id", depositID);
|
||||
URL url = new URL(zenodoBaseURL, newFilePath);
|
||||
|
||||
|
@ -149,11 +148,13 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
gxHTTPStringRequest.header("Content-Type", "application/json");
|
||||
gxHTTPStringRequest.header("Accept", "application/json");
|
||||
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getDOIURL());
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getVersionDOIURL());
|
||||
gxHTTPStringRequest.path(DEPOSITION_PATH.replace(":id", id));
|
||||
|
||||
ObjectNode body = objectMapper.createObjectNode();
|
||||
body.set(METADATA_FIELD_NAME, softwareVersion.getMetadata());
|
||||
|
||||
ObjectNode metadata = generateMetadata();
|
||||
body.set(METADATA_FIELD_NAME, metadata);
|
||||
|
||||
HttpURLConnection httpURLConnection = gxHTTPStringRequest.put(objectMapper.writeValueAsString(body));
|
||||
getResponse(httpURLConnection);
|
||||
|
@ -167,7 +168,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
gxHTTPStringRequest.header("Content-Type", "application/json");
|
||||
gxHTTPStringRequest.header("Accept", "application/json");
|
||||
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getDOIURL());
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getVersionDOIURL());
|
||||
gxHTTPStringRequest.path(DEPOSTION_PUBLISH_PATH.replace(":id", id));
|
||||
|
||||
HttpURLConnection httpURLConnection = gxHTTPStringRequest.post();
|
||||
|
@ -272,19 +273,26 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
gxHTTPStringRequest.path(DEPOSITIONS_COLLECTION_PATH);
|
||||
|
||||
ObjectNode body = objectMapper.createObjectNode();
|
||||
body.set(METADATA_FIELD_NAME, softwareVersion.getMetadata());
|
||||
|
||||
ObjectNode metadata = generateMetadata();
|
||||
body.set(METADATA_FIELD_NAME, metadata);
|
||||
|
||||
HttpURLConnection httpURLConnection = gxHTTPStringRequest.post(objectMapper.writeValueAsString(body));
|
||||
response = getResponse(httpURLConnection);
|
||||
|
||||
URL conceptDOIURL = createZenodoDOIURLFromID(response.get("conceptrecid").asText());
|
||||
softwareVersion.setConceptDOIURL(conceptDOIURL);
|
||||
softwareVersion.setDOIURL(conceptDOIURL);
|
||||
URL doiURL = new URL(ZENODO_DOI_URL_BASE_PATH + response.get("id").asText());
|
||||
softwareVersion.setDOIURL(doiURL);
|
||||
softwareVersion.setVersionDOIURL(doiURL);
|
||||
|
||||
finalize();
|
||||
}
|
||||
|
||||
private ObjectNode generateMetadata() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
public void update() throws Exception {
|
||||
// Enabled softwareConcept edit
|
||||
GXHTTPStringRequest gxHTTPStringRequest = GXHTTPStringRequest.newRequest(zenodoBaseURL.toString());
|
||||
|
@ -292,7 +300,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
gxHTTPStringRequest.from(GUCBE_ZENODO_SOFTWARE_DEPOSIT);
|
||||
gxHTTPStringRequest.queryParams(getAccessTokenQueryParamters());
|
||||
gxHTTPStringRequest.header("Accept", "application/json");
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getDOIURL());
|
||||
String id = getZenodoIDFromDOIURL(softwareVersion.getVersionDOIURL());
|
||||
gxHTTPStringRequest.path(DEPOSTION_EDIT_PATH.replace(":id", id));
|
||||
HttpURLConnection httpURLConnection = gxHTTPStringRequest.post();
|
||||
getResponse(httpURLConnection);
|
||||
|
@ -331,7 +339,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
gxHTTPStringRequest.queryParams(getAccessTokenQueryParamters());
|
||||
gxHTTPStringRequest.header("Content-Type", "application/json");
|
||||
gxHTTPStringRequest.header("Accept", "application/json");
|
||||
String conceptID = getZenodoIDFromDOIURL(softwareVersion.getConceptDOIURL());
|
||||
String conceptID = getZenodoIDFromDOIURL(softwareVersion.getDOIURL());
|
||||
gxHTTPStringRequest.path(RECORD_PATH.replace(":id", conceptID));
|
||||
HttpURLConnection httpURLConnection = gxHTTPStringRequest.get();
|
||||
JsonNode jsonNode = getResponse(httpURLConnection);
|
||||
|
@ -343,7 +351,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
* this should avoid errors on softwareConcept.
|
||||
*/
|
||||
String latestVersionDOI = jsonNode.get("links").get("doi").asText();
|
||||
String previousVersionDOI = softwareVersion.getPrevious().getDOIURL().toString();
|
||||
String previousVersionDOI = softwareVersion.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.");
|
||||
|
@ -385,7 +393,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
|
||||
// The reserved DOI of this created new version will be
|
||||
URL doiURL = new URL(response.get("doi_url").asText());
|
||||
softwareVersion.setDOIURL(doiURL);
|
||||
softwareVersion.setVersionDOIURL(doiURL);
|
||||
|
||||
// Remove previous depositionFiles
|
||||
deletePreviousFiles();
|
||||
|
@ -394,14 +402,9 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
}
|
||||
|
||||
public void publish() throws Exception {
|
||||
SoftwareConcept softwareConcept = softwareVersion.getSoftwareConcept();
|
||||
String name = softwareConcept.getName();
|
||||
String name = softwareVersion.getName();
|
||||
|
||||
ElaborationType publish = softwareConcept.getPublish();
|
||||
|
||||
if(!softwareVersion.getPublish()) {
|
||||
publish = ElaborationType.NONE;
|
||||
}
|
||||
ElaborationType publish = softwareVersion.getPublish();
|
||||
|
||||
if(publish==ElaborationType.NONE) {
|
||||
logger.info("Deposit is disabled for {} {}.",
|
||||
|
@ -409,7 +412,7 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
return;
|
||||
}
|
||||
|
||||
if(softwareVersion.getDOIURL()!=null) {
|
||||
if(softwareVersion.getVersionDOIURL()!=null) {
|
||||
|
||||
softwareVersion.setNewDeposition(false);
|
||||
|
||||
|
@ -430,7 +433,8 @@ public class ZenodoSoftwareVersionPublisher extends SoftwareVersionPublisher {
|
|||
name , softwareVersion.getVersion());
|
||||
|
||||
softwareVersion.setNewDeposition(true);
|
||||
if(softwareVersion.getConceptDOIURL()==null) {
|
||||
|
||||
if(softwareVersion.getDOIURL()==null) {
|
||||
create();
|
||||
}else {
|
||||
newVersion();
|
||||
|
|
|
@ -1,11 +1,57 @@
|
|||
package org.gcube.common.software.utils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.gcube.com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public class Utils {
|
||||
|
||||
/**
|
||||
* DateTime Pattern to be used to serialize Dates
|
||||
*/
|
||||
public static final String DATETIME_PATTERN = "yyyy-MM-dd";
|
||||
|
||||
public static String getDateAsString(Date date) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);
|
||||
return simpleDateFormat.format(date);
|
||||
}
|
||||
|
||||
protected static ObjectMapper objectMapper;
|
||||
|
||||
static {
|
||||
objectMapper = new ObjectMapper();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(Utils.DATETIME_PATTERN);
|
||||
objectMapper.setDateFormat(sdf);
|
||||
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
|
||||
}
|
||||
|
||||
public static ObjectMapper getObjectMapper() {
|
||||
return objectMapper;
|
||||
}
|
||||
|
||||
public static String replaceVariable(String variableName, String replace, String s) {
|
||||
return s.replaceAll("\\{\\{" + variableName + "\\}\\}", replace);
|
||||
}
|
||||
|
||||
/*
|
||||
* Merge all the properties contained in version in concept
|
||||
*/
|
||||
public static JsonNode merge(JsonNode concept, JsonNode version) {
|
||||
ObjectNode clonedConcept = concept.deepCopy();
|
||||
Iterator<String> iterator = version.fieldNames();
|
||||
while (iterator.hasNext()) {
|
||||
String fieldName = iterator.next();
|
||||
JsonNode value = version.get(fieldName);
|
||||
clonedConcept.replace(fieldName, value.deepCopy());
|
||||
}
|
||||
return clonedConcept;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,10 +15,9 @@ public class SoftwareConceptAnalyserTest {
|
|||
|
||||
@Test
|
||||
public void testUsingTestFile() throws Exception {
|
||||
SoftwareConceptAnalyser softwareConceptAnalyser = new SoftwareConceptAnalyser();
|
||||
File file = FileUtils.getFileFromFilename(FILENAME);
|
||||
SoftwareConcept softwareConcept = softwareConceptAnalyser.getSoftwareConcept(file);
|
||||
softwareConceptAnalyser.analyse(softwareConcept);
|
||||
SoftwareConceptAnalyser softwareConceptAnalyser = new SoftwareConceptAnalyser(file);
|
||||
softwareConceptAnalyser.analyse();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package org.gcube.common.software.model;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.gcube.common.software.analyser.SoftwareConceptAnalyser;
|
||||
import org.gcube.common.software.analyser.SoftwareConceptAnalyserTest;
|
||||
import org.gcube.common.software.utils.FileUtils;
|
||||
import org.gcube.common.software.utils.Utils;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -28,24 +28,25 @@ public class VariablesTest {
|
|||
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
SoftwareConceptAnalyser softwareConceptAnalyser = new SoftwareConceptAnalyser();
|
||||
File file = FileUtils.getFileFromFilename(SoftwareConceptAnalyserTest.FILENAME);
|
||||
SoftwareConcept softwareConcept = softwareConceptAnalyser.getSoftwareConcept(file);
|
||||
ObjectMapper objectMapper = Utils.getObjectMapper();
|
||||
JsonNode jsonNode = objectMapper.readTree(file);
|
||||
JsonNode concept = jsonNode.get("concept");
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
String serialized = objectMapper.writeValueAsString(softwareConcept);
|
||||
Variables variables = objectMapper.readValue(serialized, Variables.class);
|
||||
Set<String> keyToBeExcluded = new HashSet<>();
|
||||
keyToBeExcluded.add("versions");
|
||||
variables.setKeysToBeExcluded(keyToBeExcluded);
|
||||
logger.info("{}", objectMapper.writeValueAsString(concept));
|
||||
|
||||
logger.info("Variables are {}\n\n", variables.getProperties());
|
||||
Variables variables = objectMapper.treeToValue(concept, Variables.class);
|
||||
|
||||
// logger.info("Variables are {}\n\n", variables.getProperties());
|
||||
|
||||
Set<String> missingVariables = variables.parse();
|
||||
|
||||
logger.info("Variables after parsing are {}\\n\\n", variables.getProperties());
|
||||
|
||||
logger.info("Missing variables are {}", missingVariables);
|
||||
|
||||
// logger.info("Variables after parsing are {}\\n\\n", variables.getProperties());
|
||||
|
||||
|
||||
JsonNode swConcept = objectMapper.convertValue(variables.getProperties(), JsonNode.class);
|
||||
logger.info("{}", objectMapper.writeValueAsString(swConcept));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,30 +1,141 @@
|
|||
{
|
||||
"name": "gcat",
|
||||
"publish": "ALL",
|
||||
"export": "ALL",
|
||||
"description": "gCube Catalogue (gCat) Service allows any client to publish on the gCube Catalogue.",
|
||||
"files":
|
||||
[
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
"concept": {
|
||||
"name": "gcat",
|
||||
"title": "gCube Catalogue (gCat) Service {{version}}",
|
||||
"license": {
|
||||
"id": "EUPL-1.1",
|
||||
"url": "https://opensource.org/licenses/EUPL-1.1"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-catalogue/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"code_location_text": "\n\n<p>The official source code location of this software version is available at:</p>\n\n<p><a href=\"{{code_location}}\">{{code_location}}</a></p>",
|
||||
"versions":
|
||||
[
|
||||
"keywords": ["gCube", "Catalogue", "D4Science"],
|
||||
"description": "gCube Catalogue (gCat) Service allows to publish items in the gCube Catalogue.",
|
||||
"authors": [
|
||||
{
|
||||
"affiliation": "Istituto di Scienza e Tecnologie dell'Informazione \"A. Faedo\" - CNR, Italy",
|
||||
"name": "Frosini, Luca",
|
||||
"orcid": "0000-0003-3183-2291"
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/{{group}}/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"grants": [
|
||||
{
|
||||
"id": "004260",
|
||||
"name": "DILIGENT",
|
||||
"url": "https://cordis.europa.eu/project/id/004260"
|
||||
},
|
||||
{
|
||||
"id": "212488",
|
||||
"name": "D4Science",
|
||||
"url": "https://cordis.europa.eu/project/id/212488"
|
||||
},
|
||||
{
|
||||
"id": "239019",
|
||||
"name": "D4Science-II",
|
||||
"url": "https://cordis.europa.eu/project/id/239019"
|
||||
},
|
||||
{
|
||||
"id": "283465",
|
||||
"name": "ENVRI",
|
||||
"url": "https://cordis.europa.eu/project/id/283465"
|
||||
},
|
||||
{
|
||||
"id": "283644",
|
||||
"name": "iMarine",
|
||||
"url": "https://cordis.europa.eu/project/id/283644"
|
||||
},
|
||||
{
|
||||
"id": "288754",
|
||||
"name": "EUBrazilOpenBio",
|
||||
"url": "https://cordis.europa.eu/project/id/288754"
|
||||
},
|
||||
{
|
||||
"id": "654024",
|
||||
"name": "SoBigData",
|
||||
"url": "https://cordis.europa.eu/project/id/654024"
|
||||
},
|
||||
{
|
||||
"id": "654119",
|
||||
"name": "PARTHENOS",
|
||||
"url": "https://cordis.europa.eu/project/id/654119"
|
||||
},
|
||||
{
|
||||
"id": "654142",
|
||||
"name": "EGI-Engage",
|
||||
"url": "https://cordis.europa.eu/project/id/654142"
|
||||
},
|
||||
{
|
||||
"id": "654182",
|
||||
"name": "ENVRI PLUS",
|
||||
"url": "https://cordis.europa.eu/project/id/654182"
|
||||
},
|
||||
{
|
||||
"id": "675680",
|
||||
"name": "BlueBRIDGE",
|
||||
"url": "https://cordis.europa.eu/project/id/675680"
|
||||
},
|
||||
{
|
||||
"id": "727610",
|
||||
"name": "PerformFISH",
|
||||
"url": "https://cordis.europa.eu/project/id/727610"
|
||||
},
|
||||
{
|
||||
"id": "731001",
|
||||
"name": "AGINFRA PLUS",
|
||||
"url": "https://cordis.europa.eu/project/id/731001"
|
||||
},
|
||||
{
|
||||
"id": "818194",
|
||||
"name": "DESIRA",
|
||||
"url": "https://cordis.europa.eu/project/id/818194"
|
||||
},
|
||||
{
|
||||
"id": "823914",
|
||||
"name": "ARIADNEplus",
|
||||
"url": "https://cordis.europa.eu/project/id/823914"
|
||||
},
|
||||
{
|
||||
"id": "824091",
|
||||
"name": "RISIS 2",
|
||||
"url": "https://cordis.europa.eu/project/id/824091"
|
||||
},
|
||||
{
|
||||
"id": "857650",
|
||||
"name": "EOSC-Pillar",
|
||||
"url": "https://cordis.europa.eu/project/id/857650"
|
||||
},
|
||||
{
|
||||
"id": "862409",
|
||||
"name": "Blue Cloud",
|
||||
"url": "https://cordis.europa.eu/project/id/862409"
|
||||
},
|
||||
{
|
||||
"id": "871042",
|
||||
"name": "SoBigData-PlusPlus",
|
||||
"url": "https://cordis.europa.eu/project/id/871042"
|
||||
}
|
||||
],
|
||||
"publish": "ALL",
|
||||
"export": "ALL"
|
||||
},
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"date": "2019-01-10",
|
||||
"group": "data-publishing",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repositories/gcube-snapshots/content/org/gcube/data-publishing/gcat/1.0.0-SNAPSHOT/gcat-1.0.0-20190109.172827-2.war",
|
||||
|
@ -33,15 +144,16 @@
|
|||
],
|
||||
"gcube_release_version": null,
|
||||
"gcube_release_ticket": null,
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139446",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1139446",
|
||||
"code_location": null,
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"date": "2019-02-26",
|
||||
"group": "data-publishing",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.1.0-4.13.1-177071/gcat-1.1.0-4.13.1-177071-src.zip",
|
||||
|
@ -54,15 +166,16 @@
|
|||
],
|
||||
"gcube_release_version": "4.13.1",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/12988",
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1140461",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1140461",
|
||||
"code_location": null,
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.2.0",
|
||||
"date": "2019-05-20",
|
||||
"group": "data-publishing",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repositories/gcube-snapshots/content/org/gcube/data-publishing/gcat/1.2.0-SNAPSHOT/gcat-1.2.0-20190520.132914-10.war",
|
||||
|
@ -71,15 +184,16 @@
|
|||
],
|
||||
"gcube_release_version": null,
|
||||
"gcube_release_ticket": null,
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1140750",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1140750",
|
||||
"code_location": null,
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.3.0",
|
||||
"date": "2019-06-27",
|
||||
"group": "data-publishing",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.3.0-4.14.0-179505/gcat-1.3.0-4.14.0-179505-src.zip",
|
||||
|
@ -92,352 +206,158 @@
|
|||
],
|
||||
"gcube_release_version": "4.14.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/16743",
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143572",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143572",
|
||||
"code_location": null,
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.0",
|
||||
"date": "2019-11-20",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "4.15.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/17294",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143583",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143583",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.1",
|
||||
"date": "2019-12-20",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "4.18.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/18335",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143585",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143585",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.2",
|
||||
"date": "2020-02-14",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "4.20.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/18507",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143586",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143586",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.3",
|
||||
"date": "2020-06-16",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "4.23.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/19322",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143587",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143587",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.4",
|
||||
"date": "2021-02-24",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.0.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/20648",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143589",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143589",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.5",
|
||||
"date": "2021-03-31",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.1.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/20920",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143590",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1143590",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"date": "2021-05-04",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.2.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/19738",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139069",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1139069",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"date": "2022-01-27",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.7.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/21685/",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139070",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1139070",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.2.0",
|
||||
"date": "2022-05-12",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.11.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/22943",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139322",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1139322",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.3.0",
|
||||
"date": "2022-07-22",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"group": "data-publishing",
|
||||
"gcube_release_version": "5.13.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23374",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139680",
|
||||
"version_doi_url": "https://doi.org/10.5072/zenodo.1139680",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.4.0",
|
||||
"date": "2022-09-16",
|
||||
"group": "data-catalogue",
|
||||
"gcube_release_version": "5.13.1",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23650",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url" : "https://doi.org/10.5072/zenodo.1144798",
|
||||
"version_doi_url" : "https://doi.org/10.5072/zenodo.1144798",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.4.1",
|
||||
"date": "2022-12-07",
|
||||
"group": "data-catalogue",
|
||||
"gcube_release_version": "5.14.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23885",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url" : "https://doi.org/10.5072/zenodo.1144799",
|
||||
"version_doi_url" : "https://doi.org/10.5072/zenodo.1144799",
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"publish": false,
|
||||
"export": true
|
||||
}
|
||||
],
|
||||
"metadata":
|
||||
{
|
||||
"access_right": "open",
|
||||
"creators":
|
||||
[
|
||||
{
|
||||
"affiliation": "Istituto di Scienza e Tecnologie dell'Informazione \"A. Faedo\" - CNR, Italy",
|
||||
"name": "Frosini, Luca",
|
||||
"orcid": "0000-0003-3183-2291"
|
||||
}
|
||||
],
|
||||
"description": "<p><a href=\"https://www.gcube-system.org/\">gCube</a> Catalogue (gCat) Service allows any client to publish on the gCube Catalogue.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> is an open-source software toolkit used for building and operating Hybrid Data Infrastructures enabling the dynamic deployment of Virtual Research Environments, such as the <a href=\"https://www.d4science.org/\">D4Science Infrastructure</a>, by favouring the realisation of reuse-oriented policies.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> has been used to successfully build and operate infrastructures and virtual research environments for application domains ranging from biodiversity to environmental data management and cultural heritage.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> offers components supporting typical data management workflows including data access, curation, processing, and visualisation on a large set of data typologies ranging from primary biodiversity data to geospatial and tabular data.</p>\n\n<p><a href=\"https://www.d4science.org/\">D4Science</a> is a Hybrid Data Infrastructure combining over 500 software components and integrating data from more than 50 different data providers into a coherent and managed system of hardware, software, and data resources. The D4Science infrastructure drastically reduces the cost of ownership, maintenance, and operation thanks to the exploitation of gCube.</p>\n\n<p> </p>",
|
||||
"grants":
|
||||
[
|
||||
{
|
||||
"id": "212488"
|
||||
},
|
||||
{
|
||||
"id": "239019"
|
||||
},
|
||||
{
|
||||
"id": "283465"
|
||||
},
|
||||
{
|
||||
"id": "283644"
|
||||
},
|
||||
{
|
||||
"id": "288754"
|
||||
},
|
||||
{
|
||||
"id": "654024"
|
||||
},
|
||||
{
|
||||
"id": "654119"
|
||||
},
|
||||
{
|
||||
"id": "654142"
|
||||
},
|
||||
{
|
||||
"id": "654182"
|
||||
},
|
||||
{
|
||||
"id": "675680"
|
||||
},
|
||||
{
|
||||
"id": "727610"
|
||||
},
|
||||
{
|
||||
"id": "731001"
|
||||
},
|
||||
{
|
||||
"id": "818194"
|
||||
},
|
||||
{
|
||||
"id": "823914"
|
||||
},
|
||||
{
|
||||
"id": "824091"
|
||||
},
|
||||
{
|
||||
"id": "857650"
|
||||
},
|
||||
{
|
||||
"id": "862409"
|
||||
},
|
||||
{
|
||||
"id": "871042"
|
||||
}
|
||||
],
|
||||
"keywords":
|
||||
[
|
||||
"gCube",
|
||||
"Catalogue",
|
||||
"D4Science"
|
||||
],
|
||||
"license": "EUPL-1.1",
|
||||
"publication_date": "{{date}}",
|
||||
"title": "gCube Catalogue (gCat) Service {{version}}",
|
||||
"upload_type": "software",
|
||||
"version": "{{version}}"
|
||||
"publishers": {
|
||||
"ZenodoSoftwareVersionPublisher" :{
|
||||
"html_description": "<p><a href=\"https://www.gcube-system.org/\">gCube</a> Catalogue (gCat) Service allows any client to publish items in the gCube Catalogue.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> is an open-source software toolkit used for building and operating Hybrid Data Infrastructures enabling the dynamic deployment of Virtual Research Environments, such as the <a href=\"https://www.d4science.org/\">D4Science Infrastructure</a>, by favouring the realisation of reuse-oriented policies.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> has been used to successfully build and operate infrastructures and virtual research environments for application domains ranging from biodiversity to environmental data management and cultural heritage.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> offers components supporting typical data management workflows including data access, curation, processing, and visualisation on a large set of data typologies ranging from primary biodiversity data to geospatial and tabular data.</p>\n\n<p><a href=\"https://www.d4science.org/\">D4Science</a> is a Hybrid Data Infrastructure combining over 500 software components and integrating data from more than 50 different data providers into a coherent and managed system of hardware, software, and data resources. The D4Science infrastructure drastically reduces the cost of ownership, maintenance, and operation thanks to the exploitation of gCube.</p>\n\n<p> </p>",
|
||||
"html_code_location": "\n\n<p>The official source code location of this software version is available at:</p>\n\n<p><a href=\"{{code_location}}\">{{code_location}}</a></p>"
|
||||
}
|
||||
},
|
||||
"exporters": {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,443 @@
|
|||
{
|
||||
"name": "gcat",
|
||||
"publish": "ALL",
|
||||
"export": "ALL",
|
||||
"description": "gCube Catalogue (gCat) Service allows any client to publish on the gCube Catalogue.",
|
||||
"files":
|
||||
[
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-catalogue/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"code_location": "https://code-repo.d4science.org/gCubeSystem/{{name}}/releases/tag/v{{version}}",
|
||||
"code_location_text": "\n\n<p>The official source code location of this software version is available at:</p>\n\n<p><a href=\"{{code_location}}\">{{code_location}}</a></p>",
|
||||
"versions":
|
||||
[
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"date": "2019-01-10",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repositories/gcube-snapshots/content/org/gcube/data-publishing/gcat/1.0.0-SNAPSHOT/gcat-1.0.0-20190109.172827-2.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": null,
|
||||
"gcube_release_ticket": null,
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139446",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"date": "2019-02-26",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.1.0-4.13.1-177071/gcat-1.1.0-4.13.1-177071-src.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.1.0-4.13.1-177071/gcat-1.1.0-4.13.1-177071.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.13.1",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/12988",
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1140461",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.2.0",
|
||||
"date": "2019-05-20",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repositories/gcube-snapshots/content/org/gcube/data-publishing/gcat/1.2.0-SNAPSHOT/gcat-1.2.0-20190520.132914-10.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": null,
|
||||
"gcube_release_ticket": null,
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1140750",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.3.0",
|
||||
"date": "2019-06-27",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.3.0-4.14.0-179505/gcat-1.3.0-4.14.0-179505-src.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/gcat/1.3.0-4.14.0-179505/gcat-1.3.0-4.14.0-179505.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.14.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/16743",
|
||||
"code_location": false,
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143572",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.0",
|
||||
"date": "2019-11-20",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.15.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/17294",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143583",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.1",
|
||||
"date": "2019-12-20",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.18.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/18335",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143585",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.2",
|
||||
"date": "2020-02-14",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.20.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/18507",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143586",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.3",
|
||||
"date": "2020-06-16",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "4.23.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/19322",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143587",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.4",
|
||||
"date": "2021-02-24",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.0.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/20648",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143589",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "1.4.5",
|
||||
"date": "2021-03-31",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.1.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/20920",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139445",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1143590",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"date": "2021-05-04",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.2.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/19738",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139069",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"date": "2022-01-27",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.7.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/21685/",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139070",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.2.0",
|
||||
"date": "2022-05-12",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.11.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/22943",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139322",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.3.0",
|
||||
"date": "2022-07-22",
|
||||
"files": [
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.zip",
|
||||
"desired_name": "{{name}}-v{{version}}.zip"
|
||||
},
|
||||
{
|
||||
"url": "https://code-repo.d4science.org/gCubeSystem/{{name}}/archive/v{{version}}.tar.gz",
|
||||
"desired_name": "{{name}}-v{{version}}.tar.gz"
|
||||
},
|
||||
{
|
||||
"url": "https://nexus.d4science.org/nexus/service/local/repo_groups/gcube-releases-all/content/org/gcube/data-publishing/{{name}}/{{version}}/{{name}}-{{version}}.war",
|
||||
"desired_name": "{{name}}-v{{version}}.war"
|
||||
}
|
||||
],
|
||||
"gcube_release_version": "5.13.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23374",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url": "https://doi.org/10.5072/zenodo.1139680",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.4.0",
|
||||
"date": "2022-09-16",
|
||||
"gcube_release_version": "5.13.1",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23650",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url" : "https://doi.org/10.5072/zenodo.1144798",
|
||||
"publish": false,
|
||||
"export": true
|
||||
},
|
||||
{
|
||||
"version": "2.4.1",
|
||||
"date": "2022-12-07",
|
||||
"gcube_release_version": "5.14.0",
|
||||
"gcube_release_ticket": "https://support.d4science.org/issues/23885",
|
||||
"concept_doi_url": "https://doi.org/10.5072/zenodo.1139068",
|
||||
"doi_url" : "https://doi.org/10.5072/zenodo.1144799",
|
||||
"publish": false,
|
||||
"export": true
|
||||
}
|
||||
],
|
||||
"metadata":
|
||||
{
|
||||
"access_right": "open",
|
||||
"creators":
|
||||
[
|
||||
{
|
||||
"affiliation": "Istituto di Scienza e Tecnologie dell'Informazione \"A. Faedo\" - CNR, Italy",
|
||||
"name": "Frosini, Luca",
|
||||
"orcid": "0000-0003-3183-2291"
|
||||
}
|
||||
],
|
||||
"description": "<p><a href=\"https://www.gcube-system.org/\">gCube</a> Catalogue (gCat) Service allows any client to publish on the gCube Catalogue.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> is an open-source software toolkit used for building and operating Hybrid Data Infrastructures enabling the dynamic deployment of Virtual Research Environments, such as the <a href=\"https://www.d4science.org/\">D4Science Infrastructure</a>, by favouring the realisation of reuse-oriented policies.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> has been used to successfully build and operate infrastructures and virtual research environments for application domains ranging from biodiversity to environmental data management and cultural heritage.</p>\n\n<p><a href=\"https://www.gcube-system.org/\">gCube</a> offers components supporting typical data management workflows including data access, curation, processing, and visualisation on a large set of data typologies ranging from primary biodiversity data to geospatial and tabular data.</p>\n\n<p><a href=\"https://www.d4science.org/\">D4Science</a> is a Hybrid Data Infrastructure combining over 500 software components and integrating data from more than 50 different data providers into a coherent and managed system of hardware, software, and data resources. The D4Science infrastructure drastically reduces the cost of ownership, maintenance, and operation thanks to the exploitation of gCube.</p>\n\n<p> </p>",
|
||||
"grants":
|
||||
[
|
||||
{
|
||||
"id": "212488"
|
||||
},
|
||||
{
|
||||
"id": "239019"
|
||||
},
|
||||
{
|
||||
"id": "283465"
|
||||
},
|
||||
{
|
||||
"id": "283644"
|
||||
},
|
||||
{
|
||||
"id": "288754"
|
||||
},
|
||||
{
|
||||
"id": "654024"
|
||||
},
|
||||
{
|
||||
"id": "654119"
|
||||
},
|
||||
{
|
||||
"id": "654142"
|
||||
},
|
||||
{
|
||||
"id": "654182"
|
||||
},
|
||||
{
|
||||
"id": "675680"
|
||||
},
|
||||
{
|
||||
"id": "727610"
|
||||
},
|
||||
{
|
||||
"id": "731001"
|
||||
},
|
||||
{
|
||||
"id": "818194"
|
||||
},
|
||||
{
|
||||
"id": "823914"
|
||||
},
|
||||
{
|
||||
"id": "824091"
|
||||
},
|
||||
{
|
||||
"id": "857650"
|
||||
},
|
||||
{
|
||||
"id": "862409"
|
||||
},
|
||||
{
|
||||
"id": "871042"
|
||||
}
|
||||
],
|
||||
"keywords":
|
||||
[
|
||||
"gCube",
|
||||
"Catalogue",
|
||||
"D4Science"
|
||||
],
|
||||
"license": "EUPL-1.1",
|
||||
"publication_date": "{{date}}",
|
||||
"title": "gCube Catalogue (gCat) Service {{version}}",
|
||||
"upload_type": "software",
|
||||
"version": "{{version}}"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue