Merge branch 'RED-7784' into 'master'
RED-7784 - Include unprocessed option for report generation Closes RED-7784 See merge request redactmanager/redaction-report-service!26
This commit is contained in:
commit
ffbe388278
@ -24,6 +24,8 @@ public class ReportRequestMessage {
|
||||
|
||||
private String dossierTemplateId;
|
||||
|
||||
private boolean includeUnprocessed;
|
||||
|
||||
@Builder.Default
|
||||
private List<String> fileIds = new ArrayList<>();
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
package com.iqser.red.service.redaction.report.v1.server.client;
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.internal.resources.EntityLogResource;
|
||||
|
||||
@FeignClient(name = "EntityLogResource", url = "${persistence-service.url}")
|
||||
public interface EntityLogClient extends EntityLogResource {
|
||||
|
||||
}
|
||||
@ -25,6 +25,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.DictionaryClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.DossierClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.EntityLogClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
|
||||
import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService;
|
||||
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
||||
@ -42,9 +43,11 @@ public class EntityLogConverterService {
|
||||
|
||||
private final ReportStorageService reportStorageService;
|
||||
|
||||
private final EntityLogClient entityLogClient;
|
||||
|
||||
|
||||
@Timed("redactmanager_getReportEntries")
|
||||
public List<ReportRedactionEntry> getReportEntries(String dossierId, String fileId, boolean isExcluded) {
|
||||
public List<ReportRedactionEntry> getReportEntries(String dossierId, String fileId, boolean isExcluded, boolean includeUnprocessed) {
|
||||
|
||||
if (isExcluded) {
|
||||
return new ArrayList<>();
|
||||
@ -53,7 +56,11 @@ public class EntityLogConverterService {
|
||||
EntityLog entityLog;
|
||||
Map<String, String> mapOfEntityDisplayName;
|
||||
try {
|
||||
entityLog = reportStorageService.getEntityLog(dossierId, fileId, new ArrayList<>());
|
||||
if (includeUnprocessed) {
|
||||
entityLog = entityLogClient.getEntityLog(dossierId, fileId, null, includeUnprocessed);
|
||||
} else {
|
||||
entityLog = reportStorageService.getEntityLog(dossierId, fileId, new ArrayList<>());
|
||||
}
|
||||
mapOfEntityDisplayName = fillMapOfTypeAndEntityDisplayName(dossierId);
|
||||
} catch (StorageObjectDoesNotExist e) {
|
||||
return new ArrayList<>();
|
||||
|
||||
@ -78,7 +78,7 @@ public class ReportGenerationService {
|
||||
var fileStatus = fileStatusClient.getFileStatus(dossierId, fileId);
|
||||
generatePlaceholderService.resolveFileAttributeValues(fileStatus, placeholderModel);
|
||||
|
||||
List<ReportRedactionEntry> reportEntries = entityLogConverterService.getReportEntries(dossierId, fileId, fileStatus.isExcluded());
|
||||
List<ReportRedactionEntry> reportEntries = entityLogConverterService.getReportEntries(dossierId, fileId, fileStatus.isExcluded(), reportMessage.isIncludeUnprocessed());
|
||||
|
||||
generateMultiFileExcelReports(reportTemplates.multiFileWorkbookReportTemplates, placeholderModel, fileStatus, isLastFile, dossierName, reportEntries);
|
||||
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
package com.iqser.red.service.redaction.report.v1.server;
|
||||
|
||||
import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyList;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -16,6 +21,7 @@ import java.util.stream.IntStream;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
@ -36,6 +42,10 @@ import com.amazonaws.services.s3.AmazonS3;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplate;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
|
||||
@ -51,6 +61,7 @@ import com.iqser.red.service.redaction.report.v1.server.client.DictionaryClient;
|
||||
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.DossierClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.EntityLogClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient;
|
||||
@ -106,6 +117,9 @@ public class RedactionReportV2IntegrationTest {
|
||||
@MockBean
|
||||
private DossierClient dossierClient;
|
||||
|
||||
@MockBean
|
||||
private EntityLogClient entityLogClient;
|
||||
|
||||
@MockBean
|
||||
private FileStatusClient fileStatusClient;
|
||||
|
||||
@ -233,6 +247,7 @@ public class RedactionReportV2IntegrationTest {
|
||||
public void testBasicExcelReportFlow() {
|
||||
|
||||
var reportRequestMessage = prepareFlow(2, "templates/Excel QC (incl. Skipped Redactions).xlsx");
|
||||
reportRequestMessage.setIncludeUnprocessed(false);
|
||||
processRequest(reportRequestMessage, ".xlsx");
|
||||
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateReports", 1, null);
|
||||
@ -247,6 +262,7 @@ public class RedactionReportV2IntegrationTest {
|
||||
public void testMultifileWordReportFlow() {
|
||||
|
||||
var reportRequestMessage = prepareFlow(2, "templates/Justification Appendix A1.docx");
|
||||
reportRequestMessage.setIncludeUnprocessed(false);
|
||||
processRequest(reportRequestMessage, ".docx");
|
||||
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateReports", 1, null);
|
||||
@ -263,6 +279,7 @@ public class RedactionReportV2IntegrationTest {
|
||||
public void test2FilesConcurrently() {
|
||||
|
||||
var reportRequestMessage = prepareFlow(1, "templates/report.xlsx", "templates/report-advanced.xlsx");
|
||||
reportRequestMessage.setIncludeUnprocessed(false);
|
||||
processRequest(reportRequestMessage, ".xlsx");
|
||||
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateReports", 1, null);
|
||||
@ -271,6 +288,34 @@ public class RedactionReportV2IntegrationTest {
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getReportEntries", 1, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
public void testIncludeUnprocessed() {
|
||||
|
||||
var reportRequestMessage = prepareFlow(2, "templates/Excel QC (incl. Skipped Redactions).xlsx");
|
||||
reportRequestMessage.setIncludeUnprocessed(true);
|
||||
when(entityLogClient.getEntityLog(anyString(), anyString(), any(), eq(true))).thenReturn(new EntityLog(
|
||||
1, 1, List.of(EntityLogEntry.builder()
|
||||
.state(EntryState.APPLIED)
|
||||
.positions(List.of(new Position(1, 1, 1, 1, 1)))
|
||||
.id("123")
|
||||
.value("Value")
|
||||
.entryType(EntryType.ENTITY)
|
||||
.type("manual")
|
||||
.startOffset(1)
|
||||
.endOffset(10)
|
||||
.color(new float[]{0, 0, 0})
|
||||
.section("section")
|
||||
.build()), Collections.emptyList(), 1, 1, 1, 1)
|
||||
);
|
||||
processRequest(reportRequestMessage, ".xlsx");
|
||||
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateReports", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateExcelReport", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_calculateExcelModel", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getReportEntries", 2, null);
|
||||
}
|
||||
|
||||
|
||||
private List<FileModel> createFileModels(int numOfFileModelsToCreate) {
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user