Merge branch 'RED-9409' into 'master'

RED-9409 - Excel QC includes hints and big merged empty space

Closes RED-9409

See merge request redactmanager/redaction-report-service!75
This commit is contained in:
Corina Olariu 2024-06-24 12:38:46 +02:00
commit 679ae58ba0
5 changed files with 15895 additions and 15 deletions

View File

@ -99,6 +99,10 @@ public class EntityLogConverterService {
return;
}
if (entry.getEntryType() == EntryType.HINT) {
return;
}
if (entry.isExcluded()) {
return;
}
@ -111,6 +115,14 @@ public class EntityLogConverterService {
return;
}
if (entry.getEntryType() == EntryType.IMAGE_HINT && entry.getState().equals(EntryState.SKIPPED)) {
return;
}
if (entry.getEntryType() == EntryType.AREA && (entry.getState().equals(EntryState.SKIPPED) || entry.getState().equals(EntryState.IGNORED))) {
return;
}
if (settings.getMaxRedactionEntryValueLength() > 0 && entry.getValue() != null && entry.getValue().length() > settings.getMaxRedactionEntryValueLength()) {
entry.setValue(entry.getValue().substring(0, settings.getMaxRedactionEntryValueLength()) + "...");
log.info("Truncated value in dossier {}, file {} on pages {} to {} chars",

View File

@ -24,6 +24,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
@ -142,7 +143,7 @@ public class RedactionReportIntegrationTest {
private Dossier prepareDossier() {
var testDossier = new Dossier();
testDossier.setDossierName("Test Dossier");
testDossier.setName("Test Dossier");
testDossier.setDossierTemplateId("dossierTemplateId");
testDossier.setId("dossierId");
@ -390,7 +391,7 @@ public class RedactionReportIntegrationTest {
public void testExcelTemplateReportGenerationSingleFile() {
Dossier dossier = prepareDossier();
FileModel fileModel = FileModel.builder().filename("filename").dossierId(dossier.getDossierId()).fileAttributes(Map.of("TestAttribute", "Lorem Ipsum")).build();
FileModel fileModel = FileModel.builder().filename("filename").dossierId(dossier.getId()).fileAttributes(Map.of("TestAttribute", "Lorem Ipsum")).build();
EntityLog entityLog = objectMapper.readValue(new ClassPathResource("files/entityLogWithParagraphIdx.json").getInputStream(), EntityLog.class);
List<EntityLogLegalBasis> legalBasisMapping = objectMapper.readValue(new ClassPathResource("files/legalBasisMapping.json").getInputStream(), new TypeReference<>() {
@ -406,7 +407,7 @@ public class RedactionReportIntegrationTest {
var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0), dossier.getDossierTemplateId());
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
writeWorkbook.createSheet("Sheet1");
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, dossier.getDossierName(), fileModel, excelModel, true);
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, dossier.getName(), fileModel, excelModel, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Excel Report_justification.xlsx")) {
@ -440,16 +441,16 @@ public class RedactionReportIntegrationTest {
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, "dossierName", fileModel, excelModel, false);
EntityLog entityLogSecondFile = objectMapper.readValue(new ClassPathResource("files/entityLog.json").getInputStream(), EntityLog.class);
List<ReportRedactionEntry> reportEntriesSecondFile = entityLogConverterService.convertAndSort(DOSSIER_ID, FILE_ID,entityLogSecondFile, legalBasisMapping, mapOfEntityDisplayName);
List<ReportRedactionEntry> reportEntriesSecondFile = entityLogConverterService.convertAndSort(DOSSIER_ID, FILE_ID, entityLogSecondFile, legalBasisMapping, mapOfEntityDisplayName);
FileModel fileModelSecondFile = FileModel.builder().filename("secondFile").build();
excelTemplateReportGenerationService.generateExcelReport(reportEntriesSecondFile,
placeholders,
"test",
writeWorkbook,
"dossierName",
fileModelSecondFile,
excelModel,
true);
placeholders,
"test",
writeWorkbook,
"dossierName",
fileModelSecondFile,
excelModel,
true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Excel Report_multifile.xlsx")) {
@ -458,6 +459,41 @@ public class RedactionReportIntegrationTest {
}
@Test
@SneakyThrows
void testExcelTemplateQCReportGenerationSingleFile() {
Dossier dossier = prepareDossier();
FileModel fileModel = FileModel.builder().filename("filename").dossierId(dossier.getId()).fileAttributes(Map.of("TestAttribute", "Lorem Ipsum")).build();
EntityLog entityLog = objectMapper.readValue(new ClassPathResource("files/entityLogWithImageHints.json").getInputStream(), EntityLog.class);
List<EntityLogLegalBasis> legalBasisMapping = objectMapper.readValue(new ClassPathResource("files/legalBasisMapping.json").getInputStream(), new TypeReference<>() {
});
Map<String, String> mapOfEntityDisplayName = createEntityDisplayNames(entityLog);
List<ReportRedactionEntry> reportEntries = entityLogConverterService.convertAndSort(DOSSIER_ID, FILE_ID, entityLog, legalBasisMapping, mapOfEntityDisplayName);
List<ReportRedactionEntry> reportEntriesOnPage16 = reportEntries.stream()
.filter(entry -> entry.getPage() == 16)
.collect(Collectors.toList());
assertThat(reportEntriesOnPage16).hasSize(3);
ClassPathResource templateResource = new ClassPathResource("templates/Excel QC (incl. Skipped Redactions).xlsx");
var placeholders = buildPlaceHolderModel(new HashMap<>(), new HashMap<>(), List.of());
XSSFWorkbook readWorkbook = new XSSFWorkbook(templateResource.getInputStream());
var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0), dossier.getDossierTemplateId());
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
writeWorkbook.createSheet("Sheet1");
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, dossier.getName(), fileModel, excelModel, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Excel Report QC.xlsx")) {
fileOutputStream.write(excelTemplateReport3);
}
System.out.println(getTemporaryDirectory() + "/Excel Report QC.xlsx");
}
@Test
@SneakyThrows
public void testExcelPlaceholders() {
@ -498,7 +534,7 @@ public class RedactionReportIntegrationTest {
Dossier dossier = prepareDossier();
FileModel fileModel = FileModel.builder()
.filename("filename")
.dossierId(dossier.getDossierId())
.dossierId(dossier.getId())
.dossierTemplateId(dossier.getDossierTemplateId())
.fileAttributes(Map.of("TestAttribute", "Lorem Ipsum", "1b5ebe26-34f2-4c3b-983d-c0f0a010302c", "402"))
.build();
@ -512,7 +548,7 @@ public class RedactionReportIntegrationTest {
Map<String, String> mapOfEntityDisplayName = createEntityDisplayNames(entityLog);
List<ReportRedactionEntry> reportEntries = entityLogConverterService.convertAndSort(DOSSIER_ID, FILE_ID, entityLog, legalBasisMapping, mapOfEntityDisplayName);
when(componentClient.getComponentLog(dossier.getDossierId(), fileModel.getId(), true)).thenReturn(componentLog);
when(componentClient.getComponentLog(dossier.getId(), fileModel.getId(), true)).thenReturn(componentLog);
when(fileAttributesConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId())).thenReturn(fileAttributeConfigs);
ClassPathResource templateResource = new ClassPathResource("templates/scm_report.xlsx");
@ -523,7 +559,7 @@ public class RedactionReportIntegrationTest {
var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0), dossier.getDossierTemplateId());
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
writeWorkbook.createSheet("Sheet1");
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, dossier.getDossierName(), fileModel, excelModel, true);
excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, dossier.getName(), fileModel, excelModel, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/scm_report.xlsx")) {

View File

@ -78,7 +78,7 @@ public class EntityLogConverterServiceTest {
assertNotNull(reportEntries);
assertFalse(reportEntries.isEmpty());
assertEquals(reportEntries.size(), 77);
assertEquals(62, reportEntries.size());
assertEquals(reportEntries.get(0).getPage(), 1);
assertEquals(reportEntries.get(0).getSection(), "[1]: Section: Rule 1/2: Redact CBI");
assertEquals(reportEntries.get(0).getJustification(), "Article 39(e)(3) of Regulation (EC) No 178/2002 ");