From cc367f1d936bb2e4cd60b9031f5fbea082f105b7 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Tue, 11 Jan 2022 10:27:28 +0100 Subject: [PATCH] RED-2531 Added endpoint and implementation for finding templates by placeholder --- .../redaction-report-service-api-v1/pom.xml | 6 + .../v1/api/resource/PlaceholderResource.java | 11 + .../api/resource/ReportTemplateResource.java | 24 ++ .../controller/PlaceholderController.java | 12 +- .../controller/ReportTemplateController.java | 28 +++ .../v1/server/service/PlaceholderService.java | 167 +++++++++++++- .../report/v1/server/PlaceholderTest.java | 205 ++++++++++++++++++ .../RedactionReportIntegrationTest.java | 58 ++--- .../resources/templates/PlaceholderTest.docx | Bin 0 -> 90660 bytes .../resources/templates/PlaceholderTest.xlsx | Bin 0 -> 10642 bytes 10 files changed, 471 insertions(+), 40 deletions(-) create mode 100644 redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java create mode 100644 redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java create mode 100644 redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java create mode 100644 redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/PlaceholderTest.docx create mode 100644 redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/PlaceholderTest.xlsx diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml b/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml index 6add97d..0759411 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml +++ b/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml @@ -26,5 +26,11 @@ org.springframework spring-web + + com.iqser.red.service + persistence-service-api-v1 + 0.151.0 + compile + diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java index 0186c4a..2f712ed 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java @@ -2,15 +2,26 @@ package com.iqser.red.service.redaction.report.v1.api.resource; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; public interface PlaceholderResource { String PLACEHOLDERS_PATH = "/placeholders"; + String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; + String REPORT_TEMPLATE_ID = "reportTemplateId"; + String PLACEHOLDER = "placeholder"; + + String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/dossier-template-id/{" + DOSSIER_TEMPLATE_ID + "}"; + String REPORT_TEMPLATE_ID_PATH_VARIABLE = "/report-template-id/{" + REPORT_TEMPLATE_ID + "}"; + String PLACEHOLDER_PATH_VARIABLE = "/placeholder/{" + PLACEHOLDER + "}"; @GetMapping(value = PLACEHOLDERS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) List getPlaceholders(); + @GetMapping(value = PLACEHOLDERS_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + REPORT_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId); } diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java new file mode 100644 index 0000000..28b6d1f --- /dev/null +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.redaction.report.v1.api.resource; + +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +public interface ReportTemplateResource { + + String REPORT_TEMPLATE_PATH = "/report-templates"; + + String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; + + String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/dossier-template-id/{" + DOSSIER_TEMPLATE_ID + "}"; + + @PostMapping(value = REPORT_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @RequestBody JSONPrimitive placeholder); + +} diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java index c59d328..74322ae 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java @@ -4,8 +4,10 @@ import com.iqser.red.service.redaction.report.v1.api.resource.PlaceholderResourc import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; @Slf4j @@ -15,9 +17,17 @@ public class PlaceholderController implements PlaceholderResource { private final PlaceholderService placeholderService; - @Override public List getPlaceholders() { + return placeholderService.getGeneralPlaceholders(); } + + @Override + public List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId) { + + return new ArrayList<>(placeholderService.getPlaceholdersOfTemplate(dossierTemplateId, reportTemplateId)); + } + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java new file mode 100644 index 0000000..31026cc --- /dev/null +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java @@ -0,0 +1,28 @@ +package com.iqser.red.service.redaction.report.v1.server.controller; + +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import com.iqser.red.service.redaction.report.v1.api.resource.ReportTemplateResource; +import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@RestController +@RequiredArgsConstructor +public class ReportTemplateController implements ReportTemplateResource { + + private final PlaceholderService placeholderService; + + @Override + public List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @RequestBody JSONPrimitive placeholder) { + + return placeholderService.getReportTemplatesByPlaceholder(dossierTemplateId, placeholder.getValue()); + } +} diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java index 94dd45c..bd0be22 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java @@ -1,12 +1,26 @@ package com.iqser.red.service.redaction.report.v1.server.service; -import java.time.format.DateTimeFormatter; -import java.util.List; - -import org.springframework.stereotype.Service; - +import com.amazonaws.services.kms.model.NotFoundException; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; +import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; +import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.*; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.time.format.DateTimeFormatter; +import java.util.*; @Slf4j @Service @@ -39,9 +53,152 @@ public class PlaceholderService { public static final String IUCLID_FUNCTION_PLACEHOLDER = "{{function.iuclidreport}}"; + private final ReportTemplateClient reportTemplateClient; + private final ReportStorageService reportStorageService; + private final DossierAttributesConfigClient dossierAttributesConfigClient; + private final FileAttributesConfigClient fileAttributesClient; + public List getGeneralPlaceholders() { return List.of(FILE_NAME_PLACEHOLDER, PAGE_PLACEHOLDER, PARAGRAPH_PLACEHOLDER, JUSTIFICATION_PLACEHOLDER, EXCERPT_PLACEHOLDER, FORMAT_DATE_ISO_PLACEHOLDER, FORMAT_DATE_GER_PLACEHOLDER, FORMAT_DATE_ENG_PLACEHOLDER, FORMAT_TIME_ISO_PLACEHOLDER, DOSSIER_NAME_PLACEHOLDER, IUCLID_FUNCTION_PLACEHOLDER, REDACTION_VALUE_PLACEHOLDER, JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER, JUSTIFICATION_TEXT_PLACEHOLDER); } + public Set getPlaceholdersOfTemplate(String dossierTemplateId, String reportTemplateId) { + + ReportTemplate reportTemplate = reportTemplateClient.getReportTemplate(dossierTemplateId, reportTemplateId); + Set allPlaceholders = getAllPlaceholders(dossierTemplateId); + return findGivenPlaceholdersOfTemplate(reportTemplate, allPlaceholders); + } + + public List getReportTemplatesByPlaceholder(String dossierTemplateId, String placeholder) { + + List reportTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplateId); + if (reportTemplates == null || reportTemplates.isEmpty()) { + throw new NotFoundException("For dossierTemplateId '" + dossierTemplateId + "' no report templates exist."); + } + List result = new ArrayList<>(); + + for (ReportTemplate reportTemplate : reportTemplates) { + Set placeholders = findGivenPlaceholdersOfTemplate(reportTemplate, new HashSet<>(Collections.singleton(placeholder))); + if (!placeholders.isEmpty()) { + result.add(reportTemplate); + } + } + + return result; + } + + private Set findGivenPlaceholdersOfTemplate(ReportTemplate reportTemplate, Set placeholders) { + + try { + byte[] file = reportStorageService.getReportTemplate(reportTemplate.getStorageId()); + + if (StringUtils.containsIgnoreCase(reportTemplate.getStorageId(), ".xlsx")) { + return findExcelPlaceholders(file, placeholders); + + } else if (StringUtils.containsIgnoreCase(reportTemplate.getStorageId(), ".docx")) { + return findWordPlaceholders(file, placeholders); + + } else { + throw new IllegalArgumentException("The filetype is not supported for this file '" + reportTemplate.getFileName() + "'."); + } + + } catch (StorageObjectDoesNotExist e) { + throw new NotFoundException("The template '" + reportTemplate.getFileName() + "' does not exist."); + } + } + + private Set findExcelPlaceholders(byte[] template, Set allPlaceholders) { + + try (ByteArrayInputStream is = new ByteArrayInputStream(template)) { + Set resultPlaceholders = new HashSet<>(); + XSSFWorkbook workbook = new XSSFWorkbook(is); + + loop: + for (Sheet sheet : workbook) { + for (int j = 0; j < sheet.getLastRowNum() + 1; j++) { + Row actualRow = sheet.getRow(j); + if (actualRow != null) { + for (int i = 0; i < actualRow.getLastCellNum(); i++) { + Cell cell = sheet.getRow(j).getCell(i); + if (cell != null) { + contains(allPlaceholders, resultPlaceholders, cell.getStringCellValue()); + if (allPlaceholders.isEmpty()) { + break loop; + } + } + } + } + } + } + + return resultPlaceholders; + + } catch (IOException e) { + throw new RuntimeException("An error occurred while parsing excel sheet", e); + } + + } + + private Set findWordPlaceholders(byte[] template, Set allPlaceholders) { + + Set resultPlaceholders = new HashSet<>(); + + try (ByteArrayInputStream is = new ByteArrayInputStream(template)) { + XWPFDocument doc = new XWPFDocument(is); + + for (XWPFParagraph p : doc.getParagraphs()) { + contains(allPlaceholders, resultPlaceholders, p.getText()); + if (allPlaceholders.isEmpty()) { + break; + } + } + + if (!allPlaceholders.isEmpty()) { + loop: + for (XWPFTable tbl : doc.getTables()) { + for (XWPFTableRow row : tbl.getRows()) { + for (XWPFTableCell cell : row.getTableCells()) { + for (XWPFParagraph p : cell.getParagraphs()) { + contains(allPlaceholders, resultPlaceholders, p.getText()); + if (allPlaceholders.isEmpty()) { + break loop; + } + } + } + } + } + } + + return resultPlaceholders; + + } catch (IOException e) { + throw new RuntimeException("An error occurred while parsing word file", e); + } + } + + private Set getAllPlaceholders(String dossierTemplateId) { + + Set allPlaceholders = new HashSet<>(getGeneralPlaceholders()); + + dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId).forEach(dossierAttributeConfig -> { + allPlaceholders.add(dossierAttributeConfig.getPlaceholder()); + }); + + fileAttributesClient.getFileAttributeConfigs(dossierTemplateId).forEach(fileAttributeConfig -> { + allPlaceholders.add(fileAttributeConfig.getPlaceholder()); + }); + + return allPlaceholders; + } + + private void contains(Set allPlaceholders, Set resultPlaceholders, String placeholder) { + for (String searchPlaceholder : allPlaceholders) { + if (StringUtils.contains(placeholder, searchPlaceholder)) { + resultPlaceholders.add(searchPlaceholder); + } + } + allPlaceholders.removeAll(resultPlaceholders); + } + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java new file mode 100644 index 0000000..8fccb49 --- /dev/null +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java @@ -0,0 +1,205 @@ +package com.iqser.red.service.redaction.report.v1.server; + +import com.amazonaws.services.s3.AmazonS3; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +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.FileAttributeConfig; +import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; +import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; +import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; +import com.iqser.red.storage.commons.service.StorageService; +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.List; +import java.util.Set; + +import static org.mockito.Mockito.when; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = RANDOM_PORT) +public class PlaceholderTest { + + @Autowired + private PlaceholderService placeholderService; + + @MockBean + private StorageService storageService; + + @MockBean + private AmazonS3 s3Client; + + @MockBean + private ReportTemplateClient reportTemplateClient; + + @MockBean + private ReportStorageService reportStorageService; + + @MockBean + private DossierAttributesConfigClient dossierAttributesConfigClient; + + @MockBean + private FileAttributesConfigClient fileAttributesClient; + + @Test + public void testGeneralPlaceholders() { + + // Act + List placeholders = placeholderService.getGeneralPlaceholders(); + + // Assert + Assert.assertNotNull(placeholders); + Assert.assertEquals(placeholders.size(), 14); + } + + @Test + public void testGetReportTemplates() throws IOException { + + // Arrange + String dossierTemplateId = "123"; + String storageId = "PlaceholderTest.docx"; + String storageId2 = "IUCLID_Template.docx"; + + ClassPathResource templateResource = new ClassPathResource("templates/" + storageId); + when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream())); + + ClassPathResource templateResource2 = new ClassPathResource("templates/" + storageId2); + when(reportStorageService.getReportTemplate(storageId2)).thenReturn(IOUtils.toByteArray(templateResource2.getInputStream())); + + when(reportTemplateClient.getAvailableReportTemplates(dossierTemplateId)).thenReturn(List.of( + ReportTemplate.builder().storageId(storageId).build(), + ReportTemplate.builder().storageId(storageId2).build())); + + 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); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + + FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); + FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); + + when(fileAttributesClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1, fileAttributeConfig2)); + + // Act + List reportTemplates = placeholderService.getReportTemplatesByPlaceholder(dossierTemplateId, "{{dossier.attribute.ActiveSubstance}}"); + + // Assert + Assert.assertNotNull(reportTemplates); + System.out.println(reportTemplates.size() + " reportTemplates: " + reportTemplates); + Assert.assertFalse(reportTemplates.isEmpty()); + Assert.assertEquals(1, reportTemplates.size()); + Assert.assertEquals(storageId, reportTemplates.get(0).getStorageId()); + } + + @Test + public void testWord() throws IOException { + + // Arrange + String dossierTemplateId = "123"; + String reportTemplateId = "456"; + String storageId = "PlaceholderTest.docx"; + + ClassPathResource templateResource = new ClassPathResource("templates/" + storageId); + when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream())); + + when(reportTemplateClient.getReportTemplate(dossierTemplateId, reportTemplateId)).thenReturn(ReportTemplate.builder().storageId(storageId).build()); + + 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); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + + FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); + FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); + + when(fileAttributesClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1, fileAttributeConfig2)); + + + // Act + Set placeholders = placeholderService.getPlaceholdersOfTemplate(dossierTemplateId, reportTemplateId); + + // Assert + Assert.assertNotNull(placeholders); + System.out.println(placeholders.size() + " placeholders: " + placeholders); + Assert.assertFalse(placeholders.isEmpty()); + Assert.assertEquals(12, placeholders.size()); + Assert.assertTrue(placeholders.contains("{{test1}}")); + Assert.assertTrue(placeholders.contains("{{file.test.1}}")); + Assert.assertFalse(placeholders.contains("{{test2}}")); + Assert.assertFalse(placeholders.contains("{{TEST1}}")); + Assert.assertFalse(placeholders.contains("{{does.not.exist}}")); + Assert.assertFalse(placeholders.contains("{{file.test.not.exist}}")); + } + + @Test + public void testExcel() throws IOException { + + // Arrange + String dossierTemplateId = "123"; + String reportTemplateId = "456"; + String storageId = "PlaceholderTest.xlsx"; + + ClassPathResource templateResource = new ClassPathResource("templates/" + storageId); + when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream())); + + when(reportTemplateClient.getReportTemplate(dossierTemplateId, reportTemplateId)).thenReturn(ReportTemplate.builder().storageId(storageId).build()); + + 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); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + + FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); + FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); + + when(fileAttributesClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1, fileAttributeConfig2)); + + // Act + Set placeholders = placeholderService.getPlaceholdersOfTemplate(dossierTemplateId, reportTemplateId); + + // Assert + Assert.assertNotNull(placeholders); + System.out.println(placeholders.size() + " placeholders: " + placeholders); + Assert.assertFalse(placeholders.isEmpty()); + Assert.assertEquals(6, placeholders.size()); + Assert.assertTrue(placeholders.contains("{{test1}}")); + Assert.assertTrue(placeholders.contains("{{file.test.1}}")); + Assert.assertTrue(placeholders.contains("{{file.name}}")); + Assert.assertTrue(placeholders.contains("{{redaction.paragraph}}")); + Assert.assertFalse(placeholders.contains("{{test2}}")); + Assert.assertFalse(placeholders.contains("{{TEST1}}")); + Assert.assertFalse(placeholders.contains("{{does.not.exist}}")); + Assert.assertFalse(placeholders.contains("{{file.test.not.exist}}")); + } + +} 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 b4c5d97..e23dcd4 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 @@ -1,30 +1,5 @@ package com.iqser.red.service.redaction.report.v1.server; -import static com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService.FORMAT_DATE_ENG; -import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; -import static org.mockito.Mockito.when; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Base64; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.core.io.ClassPathResource; -import org.springframework.test.context.junit4.SpringRunner; - import com.amazonaws.services.s3.AmazonS3; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -33,12 +8,10 @@ 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; @@ -52,8 +25,25 @@ import com.iqser.red.service.redaction.report.v1.server.service.WordReportGenera import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.storage.commons.service.StorageService; - import lombok.SneakyThrows; +import org.apache.commons.io.IOUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.time.OffsetDateTime; +import java.util.*; + +import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; +import static org.mockito.Mockito.when; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @@ -122,7 +112,7 @@ public class RedactionReportIntegrationTest { .placeholder("{{dossier.attribute.name}}") .build(); - var dossierAttributeConfig2 =DossierAttributeConfig + var dossierAttributeConfig2 = DossierAttributeConfig .builder() .id("id2") .label("label2") @@ -166,7 +156,7 @@ public class RedactionReportIntegrationTest { when(fileAttributesConfigClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1)); - FileModel fileStatus = FileModel.builder().filename("filename").fileAttributes(Map.of("3e9b9569-5d2e-4619-848b-dd0a3e96527f","Test" )).build(); + FileModel fileStatus = FileModel.builder().filename("filename").fileAttributes(Map.of("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test")).build(); Dossier project = Dossier.builder().id("dossierId").dossierName("projectName").build(); @@ -271,7 +261,7 @@ public class RedactionReportIntegrationTest { List reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping); 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 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); @@ -287,7 +277,7 @@ public class RedactionReportIntegrationTest { 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); + 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)); Map attributeIdToValue = new HashMap(); @@ -369,7 +359,7 @@ public class RedactionReportIntegrationTest { List reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping); 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 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); @@ -385,7 +375,7 @@ public class RedactionReportIntegrationTest { 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); + 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)); Map attributeIdToValue = new HashMap(); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/PlaceholderTest.docx b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/PlaceholderTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..a41f327fcee91aab3c1f9fa3f66ed79cc1214502 GIT binary patch literal 90660 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%0AH7kI9 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%0D0Y(s!WjAk~BMxlVLawxvU|EKy~9n*zPod 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�d1tiDEfSdtRRRExv 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