From 4d9a80beeac2d376d8ff1f58bd66bf2fff6415c6 Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Mon, 15 Nov 2021 12:30:37 +0100 Subject: [PATCH] RED-2747 Report does not show attribute values --- .../service/WordReportGenerationService.java | 8 +++-- .../RedactionReportIntegrationTest.java | 34 +++++++++++++------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java index 1bac16b..64f13ea 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java @@ -268,15 +268,19 @@ public class WordReportGenerationService { String escapedReplace = Matcher.quoteReplacement(replace); try { paragraphText = paragraphText.replaceAll(escapedSearch, escapedReplace); + XWPFRun run = p.getRuns().get(0); + run.setText(paragraphText, 0); } catch (Exception e) { log.error("Could not replace {} with {}", escapedSearch, escapedReplace); throw new RuntimeException(String.format("Could not replace %s with %s", escapedSearch, escapedReplace), e); } int size = p.getRuns().size(); - for (int i = 0; i <= size; i++) { - p.removeRun(0); + for (int i = 1; i <= size; i++) { + // 0th run has to stay for placeholders without "\n", because it contains the value of the placeholder + p.removeRun(1); } if (paragraphText.contains("\n")) { + p.removeRun(0); String[] stringsOnNewLines = paragraphText.split("\n"); for (int i = 0; i < stringsOnNewLines.length; i++) { p.insertNewRun(i); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java index 82f3a00..7f1dd43 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Base64; import java.util.HashMap; import java.util.List; +import java.util.ListIterator; import java.util.Map; import org.apache.commons.io.IOUtils; @@ -33,10 +34,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Re import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttribute; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasisMapping; import com.iqser.red.service.redaction.report.v1.api.model.ReportType; import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesClient; import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesConfigClient; @@ -186,7 +189,7 @@ public class RedactionReportIntegrationTest { .build(); byte[] report = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileStatus, project); - try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/efsa_template.docx")) { + try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/efsa_template_wrg.docx")) { fileOutputStream.write(report); } } @@ -251,10 +254,10 @@ public class RedactionReportIntegrationTest { @Test public void testReportGeneration() throws IOException { - ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLogSingleStudyOral.json"); + ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json"); ClassPathResource redactionLogResource2 = new ClassPathResource("files/excelReportRedactionLog.json"); ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg"); - ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisSingleStudyOral.json"); + ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json"); List legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() { }); @@ -268,12 +271,22 @@ public class RedactionReportIntegrationTest { List reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping); List reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping); - DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", "label", true, "{{dossier.attribute.name}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", "label2", false, "{{dossier.attribute.Signature}}", DossierAttributeType.IMAGE, dossierTemplateId); - when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2)); - DossierAttribute dossierAttribute = new DossierAttribute(dossierId, "id", "Michael"); - DossierAttribute dossierAttribute2 = new DossierAttribute(dossierId, "id2", Base64.getEncoder().encodeToString(IOUtils.toByteArray(imageResource.getInputStream()))); - when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(List.of(dossierAttribute, dossierAttribute2)); + DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", "Active Substance", true, "{{dossier.attribute.ActiveSubstance}}", DossierAttributeType.TEXT, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", "Rapporteur Member State", false,"{{dossier.attribute.RapporteurMemberState}}", DossierAttributeType.TEXT, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", "Dossier Name", true, "{{dossier.attribute.Name}}", DossierAttributeType.TEXT, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", "Company", false, "{{dossier.attribute.Company}}", DossierAttributeType.TEXT, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", "Date", true, "{{dossier.attribute.Date}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", "Signature", false, "{{dossier.attribute.Signature}}", DossierAttributeType.IMAGE, dossierTemplateId); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6)); + + DossierAttribute dossierAttribute = new DossierAttribute(dossierId, "id", "Aktive Substanz \n Test Return"); + DossierAttribute dossierAttribute2 = new DossierAttribute(dossierId, "id2", "Reporter Status"); + DossierAttribute dossierAttribute3 = new DossierAttribute(dossierId, "id3", "Dossier Name"); + DossierAttribute dossierAttribute4 = new DossierAttribute(dossierId, "id4", "Firma"); + DossierAttribute dossierAttribute5 = new DossierAttribute(dossierId, "id5", OffsetDateTime.now().format(FORMAT_DATE_ENG)); + DossierAttribute dossierAttribute6 = new DossierAttribute(dossierId, "id6", "data:image/png;base64," + Base64.getEncoder().encodeToString(IOUtils.toByteArray(imageResource.getInputStream()))); + + when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(List.of(dossierAttribute, dossierAttribute2, dossierAttribute3, dossierAttribute4, dossierAttribute5, dossierAttribute6)); FileAttributeConfig fileAttributeConfig = new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, "{{file.attribute.placeholder}}", FileAttributeType.TEXT, dossierTemplateId); when(fileAttributesConfigClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig)); @@ -300,9 +313,10 @@ public class RedactionReportIntegrationTest { .uploadDate(OffsetDateTime.now()) .build(); byte[] wordReport = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileModel, dossier); - try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/efsa_template.docx")) { + try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/efsa_template1.docx")) { fileOutputStream.write(wordReport); } + ReportTemplate reportTemplate2 = ReportTemplate.builder() .dossierTemplateId("dossierTemplateId") .templateId("templateId")