diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/RDAManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/RDAManager.java index f7c9efde8..4462a36ea 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/RDAManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/RDAManager.java @@ -1,5 +1,6 @@ package eu.eudat.logic.managers; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.DMP; @@ -11,6 +12,7 @@ import org.springframework.stereotype.Component; import javax.transaction.Transactional; import java.io.IOException; +import java.io.Serializable; import java.text.SimpleDateFormat; @Component @@ -30,18 +32,40 @@ public class RDAManager { Dmp rdaDmp = dmpRDAMapper.toRDA(dmp); ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z")); + mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")); - result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rdaDmp); + DMPWrap wrap = new DMPWrap(rdaDmp); + result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(wrap); return result; } public DMP convertToEntity(String json) throws IOException { ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z")); + mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")); - Dmp rda = mapper.readValue(json, Dmp.class); + + Dmp rda = mapper.readValue(json, DMPWrap.class).getDmp(); return dmpRDAMapper.toEntity(rda); } + + public static class DMPWrap implements Serializable { + @JsonProperty("dmp") + private Dmp dmp; + + public DMPWrap() { + } + + public DMPWrap(Dmp dmp) { + this.dmp = dmp; + } + + public Dmp getDmp() { + return dmp; + } + + public void setDmp(Dmp dmp) { + this.dmp = dmp; + } + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java index 04e094086..72c967f3a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java @@ -70,7 +70,9 @@ public class DmpRDAMapper { Map result = ProjectRDAMapper.toEntity(rda.getProject().get(0), apiContext); entity.setProject((Project) result.get("project")); result.entrySet().stream().filter(entry -> entry.getKey().startsWith("grant")).forEach(entry -> entity.setGrant((Grant) entry.getValue())); - entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).collect(Collectors.toSet())); + if (((List) rda.getAdditionalProperties().get("templates")) != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { + entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).collect(Collectors.toSet())); + } return entity; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java index 2dd3f6cc2..8edba7ce4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java @@ -1,10 +1,14 @@ package eu.eudat.models.rda.mapper; import eu.eudat.data.dao.criteria.GrantCriteria; +import eu.eudat.data.entities.Funder; import eu.eudat.data.entities.Grant; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.rda.Funding; +import java.util.Date; +import java.util.UUID; + public class FundingRDAMapper { public static Funding toRDA(Grant grant) { @@ -27,6 +31,29 @@ public class FundingRDAMapper { public static Grant toEntity(Funding rda, ApiContext apiContext) { GrantCriteria criteria = new GrantCriteria(); criteria.setReference(rda.getGrantId().getIdentifier()); - return apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().getWithCriteria(criteria).getSingle(); + Grant grant; + try { + grant = apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().getWithCriteria(criteria).getSingle(); + }catch (Exception e) { + grant = new Grant(); + grant.setId(UUID.randomUUID()); + grant.setLabel(rda.getGrantId().getIdentifier()); + grant.setStatus((short)1); + grant.setCreated(new Date()); + grant.setModified(new Date()); + grant.setType(0); + grant.setFunder(new Funder()); + grant.getFunder().setId(UUID.randomUUID()); + grant.getFunder().setLabel(rda.getFunderId().getIdentifier()); + grant.getFunder().setStatus((short)1); + grant.getFunder().setCreated(new Date()); + grant.getFunder().setModified(new Date()); + grant.getFunder().setType(0); + grant.getFunder().setReference(rda.getFunderId().getType().toString()+"::"+rda.getFunderId().getIdentifier()); + grant.setReference(rda.getGrantId().getType().toString()+"::"+rda.getGrantId().getIdentifier()); + Funder funder = apiContext.getOperationsContext().getDatabaseRepository().getFunderDao().createOrUpdate(grant.getFunder()); + grant = apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().createOrUpdate(grant); + } + return grant; } }