diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java index bb1a00cc86aaf1daf2e710a51a22e8d92377efc4..54562447257da8fbf25cd295bdb33422d2c39906 100644 --- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java +++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java @@ -38,4 +38,5 @@ class FormSolutionsFileMapperUtils { ByteArrayInputStream base64ContentStream = new ByteArrayInputStream(base64FileContent.getBytes()); return Base64.getDecoder().wrap(base64ContentStream); } + } \ No newline at end of file diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java index 586ecf147f7fb5a139c8a481790a346c75e2456d..f6e4e1599d36d38727a6f3727ef9b83aaeea872e 100644 --- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java +++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java @@ -23,7 +23,7 @@ */ package de.itvsh.kop.eingangsadapter.formsolutions; -import java.io.ByteArrayInputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -33,7 +33,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.springframework.http.MediaType; @@ -59,7 +58,9 @@ class FormSolutionsRepresentationsMapper { List<IncomingFile> mapRepresentations(Map<String, Object> plainMap, Optional<String> json) { List<IncomingFile> representations = new ArrayList<>(); - Optional.ofNullable((String) plainMap.get(PDF)).filter(StringUtils::isNoneEmpty).ifPresent(data -> representations.add(buildPdfFile(data))); + Optional.ofNullable((String) plainMap.get(PDF)) + .filter(StringUtils::isNoneEmpty) + .ifPresent(data -> representations.add(buildPdfFile(data))); json.ifPresent(jsonData -> representations.add(buildJsonFile(jsonData))); @@ -67,24 +68,25 @@ class FormSolutionsRepresentationsMapper { } private IncomingFile buildJsonFile(String jsonData) { - var size = getSize(new ByteArrayInputStream(jsonData.getBytes())); + var jsonFile = writeFile(jsonData); + return IncomingFile.builder() - .id(UUID.randomUUID().toString()) - .contentStream(new ByteArrayInputStream(jsonData.getBytes())) + .file(jsonFile.toFile()) .contentType(JSON_CONTENT_TYPE) .name(FILE_NAME_JSON_REP) - .size(size) + .size(getFileSize(jsonFile)) .build(); } private IncomingFile buildPdfFile(String data) { - var size = getSize(FormSolutionsFileMapperUtils.decodeFile(data)); + var zipFile = writeFile(FormSolutionsFileMapperUtils.decodeFile(data)); + return IncomingFile.builder() - .id(UUID.randomUUID().toString()) + .file(zipFile.toFile()) .contentStream(FormSolutionsFileMapperUtils.decodeFile(data)) .contentType(PDF_CONTENT_TYPE) .name(FILE_NAME_PDF_REP) - .size(size) + .size(getFileSize(zipFile)) .build(); } @@ -96,11 +98,24 @@ class FormSolutionsRepresentationsMapper { return size; } + Path writeFile(String stringData) { + try { + Path tmpFile = createTmpFile(); + + try (var writer = new FileWriter(tmpFile.toFile())) { + writer.write(stringData); + writer.flush(); + } + + return tmpFile; + } catch (IOException e) { + throw new TechnicalException("Error writing file to temp file.", e); + } + } + Path writeFile(InputStream contentStream) { - Path tmpFile; try { - tmpFile = Files.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX); - tmpFile.toFile().deleteOnExit(); + var tmpFile = createTmpFile(); Files.copy(contentStream, tmpFile, StandardCopyOption.REPLACE_EXISTING); contentStream.close(); @@ -110,6 +125,12 @@ class FormSolutionsRepresentationsMapper { } } + private Path createTmpFile() throws IOException { + var tmpFile = Files.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX); + tmpFile.toFile().deleteOnExit(); + return tmpFile; + } + long getFileSize(Path path) { try { return Files.size(path); diff --git a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java index 6631cc4bc955a8db6ba6fe369149e6cb4903f276..96033bf41979ee4a9c1e6a892380784f4b0ad676 100644 --- a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java +++ b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java @@ -32,23 +32,19 @@ import static org.mockito.Mockito.*; import java.io.IOException; import java.io.InputStream; -import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.Optional; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.Mock; import org.mockito.Spy; import de.itvsh.kop.common.errorhandling.TechnicalException; import de.itvsh.kop.common.test.TestUtils; import de.itvsh.kop.eingangsadapter.common.formdata.FormSolutionsTestFactory; import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile; -import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileTestFactory; import lombok.SneakyThrows; class FormSolutionsRepresentationsMapperTest { @@ -160,44 +156,6 @@ class FormSolutionsRepresentationsMapperTest { } } - @DisplayName("Get Size") - @Nested - class TestGetSize { - - @Mock - private InputStream stream; - @Mock - private Path path; - - @BeforeEach - void mock() { - doReturn(path).when(mapper).writeFile(any()); - doReturn(IncomingFileTestFactory.SIZE).when(mapper).getFileSize(any()); - doNothing().when(mapper).deleteTmpFile(any()); - } - - @Test - void shouldWriteFile() { - mapper.getSize(stream); - - verify(mapper).writeFile(stream); - } - - @Test - void shouldGetFileSize() { - mapper.getSize(stream); - - verify(mapper).getFileSize(path); - } - - @Test - void shouldDeleteTmpFile() { - mapper.getSize(stream); - - verify(mapper).deleteTmpFile(path); - } - } - @Nested class TestWriteFile {