Pull request #34: RED-455: replace dossier attributes in report

Merge in RED/redaction-report-service from RED-455-16a to master

* commit '5be0827d3ab38f5e0465524da5a9d2f5a9e626f1':
  RED-455: replace dossier attributes in report
This commit is contained in:
Dominique Eiflaender 2021-06-09 10:08:23 +02:00
commit a958ac175a
5 changed files with 66 additions and 17 deletions

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -1,10 +1,12 @@
package com.iqser.red.service.redaction.report.v1.server.service; 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.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.*;
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.redaction.report.v1.api.model.ReportType; 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.FileAttributesClient;
import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient;
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry; import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
@ -32,6 +34,8 @@ public class WordReportGenerationService {
private final FileAttributesClient fileAttributesClient; private final FileAttributesClient fileAttributesClient;
private final ReportTemplateClient reportTemplateClient; private final ReportTemplateClient reportTemplateClient;
private final ReportStorageService reportStorageService; 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 FILE_NAME_PLACEHOLDER = "{{file.name}}";
public static final String PAGE_PLACEHOLDER = "{{redaction.page}}"; public static final String PAGE_PLACEHOLDER = "{{redaction.page}}";
@ -59,10 +63,26 @@ public class WordReportGenerationService {
} }
public byte[] generateReport(ReportType reportType, List<ReportRedactionEntry> reportEntries, String dossierTemplateId, String templateId, FileStatus fileStatus, Dossier project) { public byte[] generateReport(ReportType reportType, List<ReportRedactionEntry> reportEntries, String dossierTemplateId, String templateId, FileStatus fileStatus, Dossier dossier) {
List<String> placeholders = getDefaultPlaceholders(); List<String> placeholders = getDefaultPlaceholders();
DossierAttributes dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getDossierId());
DossierAttributesConfig dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId);
Map<String,String> 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<String, String> fileAttributePlaceholders = getFileAttributePlaceholders(dossierTemplateId); Map<String, String> fileAttributePlaceholders = getFileAttributePlaceholders(dossierTemplateId);
placeholders.addAll(fileAttributePlaceholders.keySet()); placeholders.addAll(fileAttributePlaceholders.keySet());
placeholders.addAll(dossierAttributesPlaceholder.keySet());
byte[] template; byte[] template;
@ -80,7 +100,7 @@ public class WordReportGenerationService {
XWPFDocument doc = new XWPFDocument(is); XWPFDocument doc = new XWPFDocument(is);
addTableRows(doc, reportEntries, fileStatus.getFilename()); addTableRows(doc, reportEntries, fileStatus.getFilename());
for (String placeholder : placeholders) { for (String placeholder : placeholders) {
String placeholderValue = getPlaceholderValue(placeholder, project, fileStatus, fileAttributePlaceholders); String placeholderValue = getPlaceholderValue(placeholder, dossier, fileStatus, fileAttributePlaceholders, dossierAttributesPlaceholder);
if(placeholderValue != null) { if(placeholderValue != null) {
replaceTextPlaceholders(doc, placeholder, placeholderValue); replaceTextPlaceholders(doc, placeholder, placeholderValue);
} }
@ -109,7 +129,7 @@ public class WordReportGenerationService {
return fileAttributePlaceholders; return fileAttributePlaceholders;
} }
private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus, Map<String, String> fileAttributePlaceholders) { private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus, Map<String, String> fileAttributePlaceholders, Map<String, String> dossierAttributesPlaceholders) {
if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) { if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) {
return OffsetDateTime.now().format(FORMAT_DATE_ISO); return OffsetDateTime.now().format(FORMAT_DATE_ISO);
} }
@ -136,6 +156,9 @@ public class WordReportGenerationService {
return null; return null;
} }
} }
if(dossierAttributesPlaceholders.containsKey(placeholder)) {
return dossierAttributesPlaceholders.get(placeholder);
}
throw new RuntimeException("unknown placeholder"); throw new RuntimeException("unknown placeholder");
} }

View File

@ -3,14 +3,11 @@ package com.iqser.red.service.redaction.report.v1.server;
import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; 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.*;
import com.iqser.red.service.configuration.v1.api.model.FileAttributesConfig; import com.iqser.red.service.file.management.v1.api.model.*;
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.redaction.report.v1.api.model.ReportType; 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.FileAttributesClient;
import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient;
import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; 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.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
@ -74,6 +68,13 @@ public class RedactionReportIntegrationTest {
@Autowired @Autowired
private RedactionLogConverterService redactionLogConverterService; private RedactionLogConverterService redactionLogConverterService;
@MockBean
private DossierAttributesConfigClient dossierAttributesConfigClient;
@MockBean
private DossierAttributesClient dossierAttributesClient;
@Test @Test
public void testWordReportGeneration() throws IOException { public void testWordReportGeneration() throws IOException {
@ -92,11 +93,18 @@ public class RedactionReportIntegrationTest {
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping); List<ReportRedactionEntry> 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<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>(); List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}")); fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs); FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig); when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
Map<String, String> attributeIdToValue = new HashMap(); Map<String, String> attributeIdToValue = new HashMap();
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test"); attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");