diff --git a/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/DirectIndexController.java b/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/DirectIndexController.java index 23d6e5df..563433b7 100644 --- a/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/DirectIndexController.java +++ b/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/DirectIndexController.java @@ -33,22 +33,34 @@ public class DirectIndexController extends AbstractDnetController { private XmlRecordConverter xmlRecordConverter; @PostMapping("/") - public String feedResult(@RequestBody final ResultEntry pub) throws DirectIndexApiException { - log.debug(pub); + public String feedResult(@RequestBody final ResultEntry r) throws DirectIndexApiException { + log.debug(r); final RecordInfo info = new RecordInfo(); - if (StringUtils.isNotBlank(pub.getOpenaireId())) { - info.setId(pub.getOpenaireId()); - info.setOperation("UPDATE"); - } else if (StringUtils.isNoneBlank(pub.getOriginalId(), pub.getCollectedFromId())) { - info.setId(xmlRecordConverter.calculateOpenaireId(pub.getOriginalId(), pub.getCollectedFromId())); + if (StringUtils.isNotBlank(r.getOpenaireId())) { + if (r.getOpenaireId().matches("^\\w{12}::\\w{32}$")) { + info.setId(r.getOpenaireId()); + info.setOperation("UPDATE"); + } else { + throw new DirectIndexApiException("Invalid openaireId: " + r.getOpenaireId() + " - regex ^\\w{12}::\\w{32}$ not matched"); + } + } else if (StringUtils.isNoneBlank(r.getOriginalId(), r.getCollectedFromId())) { + final String openaireId = xmlRecordConverter.calculateOpenaireId(r.getOriginalId(), r.getCollectedFromId()); + r.setOpenaireId(openaireId); + info.setId(openaireId); info.setOperation("INSERT"); } else { throw new DirectIndexApiException("Missing identifier fields: [openaireId] or [originalId, collectedFromId]"); } + if (StringUtils.isBlank(r.getTitle())) { throw new DirectIndexApiException("A required field is missing: title"); } + if (StringUtils.isBlank(r.getUrl())) { throw new DirectIndexApiException("A required field is missing: url"); } + if (StringUtils.isBlank(r.getAccessRightCode())) { throw new DirectIndexApiException("A required field is missing: accessRightCode"); } + if (StringUtils.isBlank(r.getResourceType())) { throw new DirectIndexApiException("A required field is missing: resourceType"); } + if (StringUtils.isBlank(r.getCollectedFromId())) { throw new DirectIndexApiException("A required field is missing: collectedFromId"); } + if (StringUtils.isBlank(r.getType())) { throw new DirectIndexApiException("A required field is missing: type"); } - info.setBody(pub.toJson()); - info.setType(pub.getType()); + info.setBody(r.toJson()); + info.setType(r.getType()); info.setCreatedBy("TODO"); // TODO info.setCreationDate(OffsetDateTime.now()); info.setExecutionDate(null); diff --git a/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverter.java b/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverter.java index c3d9e007..a7068e0a 100644 --- a/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverter.java +++ b/apps/dnet-directindex-api/src/main/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverter.java @@ -39,27 +39,9 @@ public class XmlRecordConverter { public String convert(final ResultEntry r) throws DirectIndexApiException { - if (StringUtils.isBlank(r.getOriginalId()) && StringUtils.isBlank(r.getOpenaireId())) { - throw new DirectIndexApiException("One of the following fields is required: originalId or openaireId"); - } - if (StringUtils.isBlank(r.getTitle())) { throw new DirectIndexApiException("A required field is missing: title"); } - if (StringUtils.isBlank(r.getUrl())) { throw new DirectIndexApiException("A required field is missing: url"); } - if (StringUtils.isBlank(r.getAccessRightCode())) { throw new DirectIndexApiException("A required field is missing: accessRightCode"); } - if (StringUtils.isBlank(r.getResourceType())) { throw new DirectIndexApiException("A required field is missing: resourceType"); } - if (StringUtils.isBlank(r.getCollectedFromId())) { throw new DirectIndexApiException("A required field is missing: collectedFromId"); } - if (StringUtils.isBlank(r.getType())) { throw new DirectIndexApiException("A required field is missing: type"); } - final DatasourceEntry collectedFromEntry = getDatasourceInfo(r.getCollectedFromId()); final DatasourceEntry hostedByEntry = getDatasourceInfo(r.getHostedById()); - if (StringUtils.isBlank(r.getOpenaireId())) { - r.setOpenaireId(calculateOpenaireId(r.getOriginalId(), collectedFromEntry)); - } - - if (!r.getOpenaireId().matches("^\\w{12}::\\w{32}$")) { - throw new DirectIndexApiException("Invalid openaireId: " + r.getOpenaireId() + " - regex ^\\w{12}::\\w{32}$ not matched"); - } - final VelocityContext vc = new VelocityContext(); vc.put("esc", (Function) s -> StringEscapeUtils.escapeXml11(s)); vc.put("util", new OpenAIRESubmitterUtils(community_api)); diff --git a/apps/dnet-directindex-api/src/test/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverterTest.java b/apps/dnet-directindex-api/src/test/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverterTest.java index 8fe28334..34124824 100644 --- a/apps/dnet-directindex-api/src/test/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverterTest.java +++ b/apps/dnet-directindex-api/src/test/java/eu/dnetlib/openaire/directindex/mapping/XmlRecordConverterTest.java @@ -1,6 +1,5 @@ package eu.dnetlib.openaire.directindex.mapping; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; @@ -28,7 +27,6 @@ import org.mockito.quality.Strictness; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.openaire.directindex.DirectIndexApiException; import eu.dnetlib.openaire.directindex.input.DatasourceEntry; import eu.dnetlib.openaire.directindex.input.PidEntry; import eu.dnetlib.openaire.directindex.input.ResultEntry; @@ -230,11 +228,6 @@ public class XmlRecordConverterTest { } - @Test - public void testAsIndexRecord_wrongOpenaireId() throws Exception { - assertThrows(DirectIndexApiException.class, () -> testAsIndexRecord_json("test_record_wrong_openaireId.json")); - } - @Test public void testAsIndexRecord_json_zenodo() throws Exception {