diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java index a15cc77ef67b28a92b84309856aef6f3e4aea9d3..37b776c5e0946c6b4dc1a09d211be3906b38b5ac 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java @@ -40,6 +40,7 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Stream; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.bson.types.ObjectId; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -104,6 +105,19 @@ public class ElsterTransferRemoteService { .contentType(downloadAnhangDetails.getMimeType()).build(); } + private static String getVorgangId(final DownloadAnhangDetails downloadAnhangDetails) { + try { + if (Objects.nonNull(downloadAnhangDetails) && StringUtils.isNotEmpty(downloadAnhangDetails.getDateiBezeichnung())) { + var dateiBezeichnung = downloadAnhangDetails.getDateiBezeichnung(); + return dateiBezeichnung.substring(VORGANG_ID_REFIX.length(), VORGANG_ID_REFIX.length() + ObjectId.get().toHexString().length()); + } + } catch (Exception e) { + LOG.error("Error extracting VorgangId from Dateibezeichnung. Returning null"); + } + + return null; + } + public AuftragAngelegt send(PostfachNachricht nachricht) { var auftrag = createBereitstellungsAuftrag(nachricht); @@ -186,7 +200,7 @@ public class ElsterTransferRemoteService { var antworten = loadAntworten(); return antworten.getDatensaetze().stream() - .map(this::getAntwort); + .map(this::getAntwort).filter(nachricht -> nachricht.getVorgangId() != null); } public AntwortDetailsList loadAntworten() { @@ -200,13 +214,19 @@ public class ElsterTransferRemoteService { .direction(PostfachNachricht.Direction.IN) .mailBody(postfachProperties.getBody()); - if (Objects.nonNull(antwortDetails.getZuordnungskriterium())) { - var nachrichtId = ObjectIdToUUIDConverter.toObjectId(antwortDetails.getZuordnungskriterium()); - + if (Objects.nonNull(antwortDetails.getZuordnungskriterium()) && CollectionUtils.isNotEmpty(antwortDetails.getAnhaenge())) { nachrichtBuilder - .referencedNachricht(nachrichtId.toHexString()) - .replyOption(PostfachNachricht.ReplyOption.POSSIBLE) - .attachments(getAttachmentIds(antwortDetails, nachrichtId)); + .replyOption(PostfachNachricht.ReplyOption.POSSIBLE); + + var nachrichtId = ObjectIdToUUIDConverter.toObjectId(antwortDetails.getZuordnungskriterium()); + // TODO update to new API as soon the new api is available. + var vorgangId = getVorgangId(antwortDetails.getAnhaenge().getFirst()); + if (Objects.nonNull(vorgangId)) { + nachrichtBuilder.vorgangId(vorgangId).attachments(getAttachmentIds(antwortDetails, new ObjectId(vorgangId))); + } else { + LOG.warn("This nachricht with AntwortDetails {} will be ignored right now. FIXME when new api is available", antwortDetails); + nachrichtBuilder.referencedNachricht(nachrichtId.toHexString()).attachments(getAttachmentIds(antwortDetails, nachrichtId)); + } } return nachrichtBuilder.build(); @@ -241,13 +261,12 @@ public class ElsterTransferRemoteService { if (Objects.nonNull(data)) { // TODO update to new API as soon the new api is available. Save to file here and then upload attachment try (var dataIn = new ByteArrayInputStream(data)) { - if (Objects.isNull(nachrichtId) && Objects.nonNull(downloadAnhangDetails) && StringUtils.isNotEmpty( - downloadAnhangDetails.getDateiBezeichnung())) { + if (Objects.isNull(nachrichtId)) { // can be removed when new api is available - var dateiBezeichnung = downloadAnhangDetails.getDateiBezeichnung(); - var vorgangId = dateiBezeichnung.substring(VORGANG_ID_REFIX.length(), - VORGANG_ID_REFIX.length() + ObjectId.get().toHexString().length()); - fileIdOptional = storeToOzgCloud(downloadAnhangDetails, vorgangId, dataIn); + var vorgangId = getVorgangId(downloadAnhangDetails); + if (Objects.nonNull(vorgangId)) { + fileIdOptional = storeToOzgCloud(downloadAnhangDetails, vorgangId, dataIn); + } } else { // use new api here // fileIdOptional = storeToOzgCloud(downloadAnhangDetails, nachrichtId, dataIn); diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java index a42340e3ef765f70acf21c244deb6f825e991c80..e67e915f9683517c259e886eed79f5013d724c10 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java @@ -51,15 +51,12 @@ import de.ozgcloud.nachrichten.postfach.muk.transfer.ElsterTransferRemoteService @ITCase public class MukPostfachRemoteServiceITCase { private static final String DOWNLOAD_URL = "/rest/abholauftrag/12345/download/be123456789011122233301234567890?anhang=3"; - + private static WireMockServer wireMockServer; @Autowired private MukPostfachRemoteService mukPostfachRemoteService; - @Autowired private MukPostfachProperties properties; - private static WireMockServer wireMockServer; - @BeforeAll static void startWireMockServer() { wireMockServer = new WireMockServer(); @@ -132,12 +129,20 @@ public class MukPostfachRemoteServiceITCase { } @Test + void shouldNotLoadAntwortenBecauseNoVorgangIdInDateibezeichnung() { + var antworten = mukPostfachRemoteService.getAllMessages(); + + verify(getRequestedFor(urlEqualTo(ANTWORTEN_ENDPOINT))); + assertThat(antworten).isEmpty(); + } + + @Test + @Disabled("Need to be fixed when new API is available") void shouldLoadAntworten() { var antworten = mukPostfachRemoteService.getAllMessages(); verify(getRequestedFor(urlEqualTo(ANTWORTEN_ENDPOINT))); assertThat(antworten).isNotEmpty(); - } @Test