diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java new file mode 100644 index 0000000..7958a35 --- /dev/null +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.redaction.report.v1.server.client; + + +import com.iqser.red.service.file.management.v1.api.resources.DossierAttributesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DossierAttributesResource", url = "${file-management-service.url}") +public interface DossierAttributesClient extends DossierAttributesResource { +} diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java new file mode 100644 index 0000000..16ae302 --- /dev/null +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.redaction.report.v1.server.client; + +import com.iqser.red.service.configuration.v1.api.resource.DossierAttributesResource; +import org.springframework.cloud.openfeign.FeignClient; + + +@FeignClient(name = "DossierAttributesConfigResource", url = "${configuration-service.url}") +public interface DossierAttributesConfigClient extends DossierAttributesResource { +} \ No newline at end of file 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 c7791d7..fd3fbfb 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 @@ -1,10 +1,12 @@ package com.iqser.red.service.redaction.report.v1.server.service; +import com.iqser.red.service.configuration.v1.api.model.DossierAttributeConfig; +import com.iqser.red.service.configuration.v1.api.model.DossierAttributesConfig; import com.iqser.red.service.configuration.v1.api.model.FileAttributesConfig; -import com.iqser.red.service.file.management.v1.api.model.FileStatus; -import com.iqser.red.service.file.management.v1.api.model.Dossier; -import com.iqser.red.service.file.management.v1.api.model.ReportTemplate; +import com.iqser.red.service.file.management.v1.api.model.*; 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; import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient; import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry; @@ -32,6 +34,8 @@ public class WordReportGenerationService { private final FileAttributesClient fileAttributesClient; private final ReportTemplateClient reportTemplateClient; private final ReportStorageService reportStorageService; + private final DossierAttributesClient dossierAttributesClient; + private final DossierAttributesConfigClient dossierAttributesConfigClient; public static final String FILE_NAME_PLACEHOLDER = "{{file.name}}"; public static final String PAGE_PLACEHOLDER = "{{redaction.page}}"; @@ -59,10 +63,26 @@ public class WordReportGenerationService { } - public byte[] generateReport(ReportType reportType, List reportEntries, String dossierTemplateId, String templateId, FileStatus fileStatus, Dossier project) { + public byte[] generateReport(ReportType reportType, List reportEntries, String dossierTemplateId, String templateId, FileStatus fileStatus, Dossier dossier) { List placeholders = getDefaultPlaceholders(); + + DossierAttributes dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getDossierId()); + DossierAttributesConfig dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId); + + Map dossierAttributesPlaceholder = new HashMap<>(); //KEY:placeholder, VALUE:value + + for(DossierAttribute dossierAttribute: dossierAttributes.getDossierAttributeList()) { + for(DossierAttributeConfig attribute: dossierAttributesConfig.getDossierAttributeConfigs()) { + if(dossierAttribute.getDossierAttributeId().equals(attribute.getId())) { + dossierAttributesPlaceholder.put(attribute.getPlaceholder(), dossierAttribute.getValue()); + } + + } + } + Map fileAttributePlaceholders = getFileAttributePlaceholders(dossierTemplateId); placeholders.addAll(fileAttributePlaceholders.keySet()); + placeholders.addAll(dossierAttributesPlaceholder.keySet()); byte[] template; @@ -80,7 +100,7 @@ public class WordReportGenerationService { XWPFDocument doc = new XWPFDocument(is); addTableRows(doc, reportEntries, fileStatus.getFilename()); for (String placeholder : placeholders) { - String placeholderValue = getPlaceholderValue(placeholder, project, fileStatus, fileAttributePlaceholders); + String placeholderValue = getPlaceholderValue(placeholder, dossier, fileStatus, fileAttributePlaceholders, dossierAttributesPlaceholder); if(placeholderValue != null) { replaceTextPlaceholders(doc, placeholder, placeholderValue); } @@ -109,7 +129,7 @@ public class WordReportGenerationService { return fileAttributePlaceholders; } - private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus, Map fileAttributePlaceholders) { + private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus, Map fileAttributePlaceholders, Map dossierAttributesPlaceholders) { if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) { return OffsetDateTime.now().format(FORMAT_DATE_ISO); } @@ -136,6 +156,9 @@ public class WordReportGenerationService { return null; } } + if(dossierAttributesPlaceholders.containsKey(placeholder)) { + return dossierAttributesPlaceholders.get(placeholder); + } throw new RuntimeException("unknown placeholder"); } 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 0077a13..6a460c6 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 @@ -3,14 +3,11 @@ package com.iqser.red.service.redaction.report.v1.server; import com.amazonaws.services.s3.AmazonS3; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.iqser.red.service.configuration.v1.api.model.FileAttributeConfig; -import com.iqser.red.service.configuration.v1.api.model.FileAttributesConfig; -import com.iqser.red.service.configuration.v1.api.model.LegalBasisMapping; -import com.iqser.red.service.file.management.v1.api.model.Dossier; -import com.iqser.red.service.file.management.v1.api.model.FileAttributes; -import com.iqser.red.service.file.management.v1.api.model.FileStatus; -import com.iqser.red.service.file.management.v1.api.model.ReportTemplate; +import com.iqser.red.service.configuration.v1.api.model.*; +import com.iqser.red.service.file.management.v1.api.model.*; 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; import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient; import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; @@ -32,10 +29,7 @@ import org.springframework.test.context.junit4.SpringRunner; import java.io.FileOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static org.mockito.Mockito.when; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @@ -74,6 +68,13 @@ public class RedactionReportIntegrationTest { @Autowired private RedactionLogConverterService redactionLogConverterService; + @MockBean + private DossierAttributesConfigClient dossierAttributesConfigClient; + + @MockBean + private DossierAttributesClient dossierAttributesClient; + + @Test public void testWordReportGeneration() throws IOException { @@ -92,11 +93,18 @@ public class RedactionReportIntegrationTest { List reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping); + DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"))); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig); + + DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"))); + when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes); + List fileAttributeConfigs = new ArrayList<>(); fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}")); FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs); when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig); + Map attributeIdToValue = new HashMap(); attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test"); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TEST_TEMPLATE.docx b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TEST_TEMPLATE.docx index b6e997f..5092582 100644 Binary files a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TEST_TEMPLATE.docx and b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TEST_TEMPLATE.docx differ