diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml b/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml
index 3363feb..7d2a881 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml
@@ -54,11 +54,6 @@
5.0.0
-
- org.springframework.boot
- spring-boot-starter-aop
-
-
org.springframework.boot
spring-boot-starter-amqp
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java
new file mode 100644
index 0000000..9e9027f
--- /dev/null
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java
@@ -0,0 +1,13 @@
+package com.iqser.red.service.redaction.report.v1.server.model;
+
+import org.apache.poi.ss.usermodel.Cell;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public class ExcelCell {
+
+ private Cell cell;
+ private int columnWidth;
+ private int rowHeights;
+}
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java
index cef2952..274c746 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java
@@ -1,6 +1,8 @@
package com.iqser.red.service.redaction.report.v1.server.model;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -16,9 +18,12 @@ import lombok.NoArgsConstructor;
public class ExcelModel {
private Map> placeholderCellPos;
- private int placeholderRow;
+ private int redactionPlaceholderRow;
private Map cellWidths = new HashMap<>();
- private Map cellsToCopy = new HashMap<>();
- private boolean copyDone;
+ private Map cellsToCopyBeforeRedactionPlaceholderRow = new HashMap<>();
+ private Map cellsToCopyAfterRedactionPlaceholderRow = new HashMap<>();
+
+ private List writtenRows = new ArrayList<>();
+ private boolean rowsBeforeRedactionEntryRowsAdded;
}
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelTemplateReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java
similarity index 58%
rename from redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelTemplateReportGenerationService.java
rename to redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java
index 7b694de..89297e3 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelTemplateReportGenerationService.java
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java
@@ -25,6 +25,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.time.OffsetDateTime;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -37,11 +38,6 @@ import java.util.regex.Pattern;
import javax.imageio.ImageIO;
-import com.iqser.red.service.redaction.report.v1.server.model.CellIdentifier;
-import com.iqser.red.service.redaction.report.v1.server.model.ExcelModel;
-import com.iqser.red.service.redaction.report.v1.server.model.ImagePlaceholder;
-import com.iqser.red.service.redaction.report.v1.server.model.PlaceholderModel;
-
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.ClientAnchor;
@@ -51,14 +47,17 @@ import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
-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.file.FileModel;
-import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
+import com.iqser.red.service.redaction.report.v1.server.model.CellIdentifier;
+import com.iqser.red.service.redaction.report.v1.server.model.ExcelModel;
+import com.iqser.red.service.redaction.report.v1.server.model.ImagePlaceholder;
import com.iqser.red.service.redaction.report.v1.server.model.PlaceholderInput;
+import com.iqser.red.service.redaction.report.v1.server.model.PlaceholderModel;
+import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
+import io.micrometer.core.annotation.Timed;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -66,71 +65,94 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
-@SuppressWarnings("PMD")
-public class ExcelTemplateReportGenerationService {
+public class ExcelReportGenerationService {
- @SuppressWarnings("checkstyle:ParameterAssignment")
- public ExcelModel generateReport(List reportEntries, PlaceholderModel placeholderModel,
- String reportTemplateName, SXSSFWorkbook workbook, FileModel fileStatus,
- ExcelModel excelModel) {
+ @Timed("generateExcelReport")
+ public void generateExcelReport(List reportEntries, PlaceholderModel placeholderModel,
+ String reportTemplateName, SXSSFWorkbook workbook, String dossierName,
+ FileModel fileModel, ExcelModel excelModel, boolean isLastFile) {
long start = System.currentTimeMillis();
try {
+
for (Sheet sheet : workbook) {
- if(!excelModel.isCopyDone()) {
+
+ if (!excelModel.isRowsBeforeRedactionEntryRowsAdded()) {
+
for (Map.Entry colummWidthEntry : excelModel.getCellWidths().entrySet()) {
sheet.setColumnWidth(colummWidthEntry.getKey(), colummWidthEntry.getValue());
}
- Set createdRows = new HashSet<>();
- for (Map.Entry cellsToCopyEntry : excelModel.getCellsToCopy().entrySet()) {
- if (!createdRows.contains(cellsToCopyEntry.getKey().getRowIndex())) {
- sheet.createRow(cellsToCopyEntry.getKey().getRowIndex());
- createdRows.add(cellsToCopyEntry.getKey().getRowIndex());
- }
-
- var createdCell = sheet.getRow(cellsToCopyEntry.getKey().getRowIndex())
- .createCell(cellsToCopyEntry.getKey().getColumnIndex());
- createdCell.setCellValue(cellsToCopyEntry.getValue().getStringCellValue());
- CellStyle newCellStyle = workbook.createCellStyle();
- newCellStyle.cloneStyleFrom(cellsToCopyEntry.getValue().getCellStyle());
- createdCell.setCellStyle(newCellStyle);
- }
- excelModel.setCopyDone(true);
+ addRows(workbook, sheet, excelModel.getCellsToCopyBeforeRedactionPlaceholderRow(), 0, placeholderModel, dossierName, fileModel.getFilename());
+ excelModel.setRowsBeforeRedactionEntryRowsAdded(true);
}
- excelModel = addEntryRows(sheet, reportEntries, fileStatus.getFilename(), excelModel, placeholderModel);
+ addRedactionEntryRows(sheet, reportEntries, fileModel.getFilename(), excelModel, placeholderModel);
-// for (ImagePlaceholder imagePlaceholder : placeholderModel.getImagePlaceholders()){
-// replacePlaceholdersForImagePlaceholder(workbook, sheet, imagePlaceholder);
-// }
-// for (String placeholder : placeholderModel.getPlaceholders()) {
-// String placeholderValue = getPlaceholderValue(placeholder, dossier, fileStatus, placeholderModel.getFileAttributePlaceHolders(), placeholderModel.getDossierAttributesPlaceholder());
-// if (placeholderValue != null) {
-// replacePlaceholdersForTextPlaceholder(sheet, placeholder, placeholderValue);
-// }
-// }
+ if (isLastFile) {
+ addRows(workbook, sheet, excelModel.getCellsToCopyAfterRedactionPlaceholderRow(), excelModel.getWrittenRows()
+ .size(), placeholderModel, dossierName, fileModel.getFilename());
+ }
}
- long end = System.currentTimeMillis();
-
- log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", end - start, fileStatus.getId(), fileStatus.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName());
+ log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", System.currentTimeMillis() - start, fileModel.getId(), fileModel.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName());
} catch (Exception e) {
throw new RuntimeException(e);
}
-
- return excelModel;
}
- public ExcelModel caculateExcelModel(Sheet sheet) {
+ @SneakyThrows
+ @Timed("excel-addRows")
+ private void addRows(SXSSFWorkbook workbook, Sheet sheet, Map copiedCells,
+ int numberOfRowsToShift, PlaceholderModel placeholderModel, String dossierName,
+ String filename) {
+
+ Set createdCopyRows = new HashSet<>();
+ for (Map.Entry cellsToCopyEntry : copiedCells.entrySet()) {
+
+ int indexToAddRow = cellsToCopyEntry.getKey().getRowIndex() + numberOfRowsToShift;
+
+ if (!createdCopyRows.contains(indexToAddRow)) {
+ sheet.createRow(indexToAddRow);
+ createdCopyRows.add(indexToAddRow);
+ }
+
+ var createdCell = sheet.getRow(indexToAddRow).createCell(cellsToCopyEntry.getKey().getColumnIndex());
+ createdCell.setCellValue(cellsToCopyEntry.getValue().getStringCellValue());
+ CellStyle newCellStyle = workbook.createCellStyle();
+ newCellStyle.cloneStyleFrom(cellsToCopyEntry.getValue().getCellStyle());
+ createdCell.setCellStyle(newCellStyle);
+ createdCell.getRow().setHeight(cellsToCopyEntry.getValue().getRow().getHeight());
+
+ replacePlaceholders(createdCell, placeholderModel, dossierName, filename);
+ replacePlaceholdersForImagePlaceholder(workbook, sheet, createdCell, placeholderModel);
+ }
+ }
+
+
+ private void replacePlaceholders(Cell cell, PlaceholderModel placeholderModel, String dossierName,
+ String filename) {
+
+ for (String placeholder : placeholderModel.getPlaceholders()) {
+ String placeholderValue = getPlaceholderValue(placeholder, dossierName, filename, placeholderModel);
+ if (placeholderValue != null) {
+ replacePlaceholdersForCell(cell, placeholder, placeholderValue);
+ }
+ }
+ }
+
+
+ @Timed("calculateExcelModel")
+ public ExcelModel calculateExcelModel(Sheet sheet) {
long start = System.currentTimeMillis();
Map> placeholderCellPos = new HashMap<>();
Map columnWidths = new HashMap<>();
- Map cellsToCopy = new HashMap<>();
+ Map cellsToCopyBeforePlaceholderRow = new HashMap<>();
+ Map cellsToCopyAfterPlaceholderRow = new HashMap<>();
int placeholderRow = -1;
for (int j = 0; j < sheet.getLastRowNum() + 1; j++) {
Row actualRow = sheet.getRow(j);
@@ -138,42 +160,51 @@ public class ExcelTemplateReportGenerationService {
for (int i = 0; i < actualRow.getLastCellNum(); i++) {
Cell cell = sheet.getRow(j).getCell(i);
if (cell != null) {
+ int columnWidth = sheet.getColumnWidth(i);
+ columnWidths.put(i, columnWidth);
if (containsRedactionPlaceholder(cell.getStringCellValue())) {
- int columnWidth = sheet.getColumnWidth(i);
- columnWidths.put(i, columnWidth);
+
placeholderCellPos.put(i, getFunctionForPlaceHolder(cell.getStringCellValue()));
placeholderRow = j;
} else {
- cellsToCopy.put(new CellIdentifier(j, i), cell);
+ if (placeholderRow == -1) {
+ cellsToCopyBeforePlaceholderRow.put(new CellIdentifier(j, i), cell);
+ } else {
+ cellsToCopyAfterPlaceholderRow.put(new CellIdentifier(j, i), cell);
+ }
}
}
}
}
}
log.debug("Calculate Placeholder Cells took: {}", System.currentTimeMillis() - start);
- return new ExcelModel(placeholderCellPos, placeholderRow, columnWidths, cellsToCopy, false);
+ return new ExcelModel(placeholderCellPos, placeholderRow, columnWidths, cellsToCopyBeforePlaceholderRow, cellsToCopyAfterPlaceholderRow, new ArrayList<>(), false);
}
- @SuppressWarnings("checkstyle:ParameterAssignment")
- private ExcelModel addEntryRows(Sheet sheet, List reportEntries, String filename, ExcelModel excelModel, PlaceholderModel placeholderModel) {
+ @Timed("excel-addRedactionEntryRows")
+ private void addRedactionEntryRows(Sheet sheet, List reportEntries, String filename,
+ ExcelModel excelModel, PlaceholderModel placeholderModel) {
long start = System.currentTimeMillis();
- AtomicInteger rowIndex = new AtomicInteger(excelModel.getPlaceholderRow());
+ AtomicInteger rowIndex = new AtomicInteger(excelModel.getRedactionPlaceholderRow());
Map> placeholderCellPos = excelModel.getPlaceholderCellPos();
reportEntries.forEach(entry -> {
+
sheet.createRow(rowIndex.get());
+ excelModel.getWrittenRows().add(rowIndex.get());
for (Map.Entry> entry1 : placeholderCellPos.entrySet()) {
Cell cell = sheet.getRow(rowIndex.get()).createCell(entry1.getKey());
- cell.setCellValue(entry1.getValue().apply(new PlaceholderInput(filename, entry, placeholderModel, null)));
+ cell.setCellValue(entry1.getValue()
+ .apply(new PlaceholderInput(filename, entry, placeholderModel, null)));
}
rowIndex.getAndIncrement();
});
- log.debug("Adding rows took: {}", System.currentTimeMillis() - start);
- excelModel.setPlaceholderRow(rowIndex.getAndIncrement());
- return excelModel;
+ excelModel.setRedactionPlaceholderRow(rowIndex.getAndIncrement());
+
+ log.debug("Adding rows took: {}", System.currentTimeMillis() - start);
}
@@ -218,61 +249,53 @@ public class ExcelTemplateReportGenerationService {
.replaceAll("\n", " ")
.replaceAll(" ", " ") : "";
}
- // TODO in case placeholder is invalid -> do not replace with empty string but throw previus exception
return (input) -> "";
}
- private void replacePlaceholdersForTextPlaceholder(Sheet sheet, String search, String replace) {
+ private void replacePlaceholdersForCell(Cell cell, String search, String replace) {
- for (Row row : sheet) {
- for (Cell cell : row) {
- if (cell.getStringCellValue().contains(search)) {
- String safeToUseInReplaceAllString = Pattern.quote(search);
- String escapedReplace = Matcher.quoteReplacement(replace);
- String str = cell.getStringCellValue().replaceAll(safeToUseInReplaceAllString, escapedReplace);
- cell.setCellValue(str);
- }
- }
+ if (cell.getStringCellValue().contains(search)) {
+ String safeToUseInReplaceAllString = Pattern.quote(search);
+ String escapedReplace = Matcher.quoteReplacement(replace);
+ String str = cell.getStringCellValue().replaceAll(safeToUseInReplaceAllString, escapedReplace);
+ cell.setCellValue(str);
}
}
- private void replacePlaceholdersForImagePlaceholder(XSSFWorkbook workbook, Sheet sheet,
- ImagePlaceholder imagePlaceholder) throws IOException {
+ private void replacePlaceholdersForImagePlaceholder(SXSSFWorkbook workbook, Sheet sheet, Cell cell,
+ PlaceholderModel placeholderModel) throws IOException {
- for (Row row : sheet) {
- for (Cell cell : row) {
- if (cell.getStringCellValue().contains(imagePlaceholder.getPlaceholder())) {
- try (ByteArrayInputStream is = new ByteArrayInputStream(imagePlaceholder.getImage())) {
+ for (ImagePlaceholder imagePlaceholder : placeholderModel.getImagePlaceholders()) {
-// ByteArrayInputStream scaledImage = getScaledImage(is, PixelUtil.widthUnits2Pixel((short) sheet.getColumnWidth(cell.getColumnIndex())), PixelUtil.heightUnits2Pixel(cell.getRow().getHeight()));
-// is.reset();
+ if (cell.getStringCellValue().contains(imagePlaceholder.getPlaceholder())) {
+ try (ByteArrayInputStream is = new ByteArrayInputStream(imagePlaceholder.getImage())) {
- double factor = calculateScale(is, PixelUtil.widthUnits2Pixel((short) sheet.getColumnWidth(cell.getColumnIndex())), PixelUtil.heightUnits2Pixel(cell.getRow()
- .getHeight()));
- is.reset();
+ double factor = calculateScale(is, PixelUtil.widthUnits2Pixel((short) sheet.getColumnWidth(cell.getColumnIndex())), PixelUtil.heightUnits2Pixel(cell.getRow()
+ .getHeight()));
+ is.reset();
- int pictureIdx = workbook.addPicture(is, XSSFWorkbook.PICTURE_TYPE_JPEG);
- is.reset();
+ int pictureIdx = workbook.addPicture(is.readAllBytes(), SXSSFWorkbook.PICTURE_TYPE_JPEG);
+ is.reset();
- //Returns an object that handles instantiating concrete classes
- CreationHelper helper = workbook.getCreationHelper();
- //Create an anchor that is attached to the worksheet
- ClientAnchor anchor = helper.createClientAnchor();
- anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
+ //Returns an object that handles instantiating concrete classes
+ CreationHelper helper = workbook.getCreationHelper();
+ //Create an anchor that is attached to the worksheet
+ ClientAnchor anchor = helper.createClientAnchor();
+ anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
- anchor.setCol1(cell.getColumnIndex());
- anchor.setRow1(cell.getRowIndex());
+ anchor.setCol1(cell.getColumnIndex());
+ anchor.setRow1(cell.getRowIndex());
- //Creates the top-level drawing patriarch.
- Drawing drawing = sheet.createDrawingPatriarch();
+ //Creates the top-level drawing patriarch.
+ Drawing drawing = sheet.createDrawingPatriarch();
- Picture picture = drawing.createPicture(anchor, pictureIdx);
- picture.resize(factor);
+ Picture picture = drawing.createPicture(anchor, pictureIdx);
+ picture.resize(factor);
+
+ cell.setCellValue("");
- cell.setCellValue("");
- }
}
}
}
@@ -301,9 +324,8 @@ public class ExcelTemplateReportGenerationService {
}
- private String getPlaceholderValue(String placeholder, Dossier project, FileModel fileStatus,
- Map fileAttributePlaceholders,
- Map dossierAttributesPlaceholders) {
+ private String getPlaceholderValue(String placeholder, String dossierName, String filename,
+ PlaceholderModel placeholderModel) {
if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) {
return OffsetDateTime.now().format(FORMAT_DATE_ISO);
@@ -318,23 +340,19 @@ public class ExcelTemplateReportGenerationService {
return OffsetDateTime.now().format(FORMAT_TIME_ISO);
}
if (placeholder.equals(DOSSIER_NAME_PLACEHOLDER)) {
- return project.getDossierName();
+ return dossierName;
}
if (placeholder.equals(FILE_NAME_PLACEHOLDER)) {
- return null;
+ return filename;
+ }
+ if (placeholderModel.getFileAttributeValueByPlaceholder().containsKey(placeholder)) {
+ return placeholderModel.getFileAttributeValueByPlaceholder().get(placeholder);
}
- if (fileAttributePlaceholders.containsKey(placeholder)) {
- String id = fileAttributePlaceholders.get(placeholder);
- if (fileStatus.getFileAttributes().containsKey(id)) {
- return fileStatus.getFileAttributes().get(id);
- } else {
- return null;
- }
- }
- if (dossierAttributesPlaceholders.containsKey(placeholder)) {
- return dossierAttributesPlaceholders.get(placeholder);
+ if (placeholderModel.getDossierAttributesValueByPlaceholder().containsKey(placeholder)) {
+ return placeholderModel.getDossierAttributesValueByPlaceholder().get(placeholder);
}
+
return null;
}
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/IuclidFunctionService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/IuclidFunctionService.java
index 12b8c38..c757ea0 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/IuclidFunctionService.java
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/IuclidFunctionService.java
@@ -11,9 +11,12 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
+import io.micrometer.core.annotation.Timed;
+
@Service
public class IuclidFunctionService {
+ @Timed("computeIuclidFunction")
public String computeIuclidFunction(List reportRedactionEntries, String filename) {
Map> entriesPerJustification = new HashMap<>();
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java
index 992426e..ecd9aeb 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java
@@ -1,5 +1,18 @@
package com.iqser.red.service.redaction.report.v1.server.service;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.springframework.stereotype.Service;
+
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
@@ -22,30 +35,14 @@ import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
+import io.micrometer.core.annotation.Timed;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
@Slf4j
@Service
@RequiredArgsConstructor
-@SuppressWarnings("PMD")
public class ReportGenerationService {
private final ReportStorageService reportStorageService;
@@ -55,12 +52,13 @@ public class ReportGenerationService {
private final DossierClient dossierClient;
private final ReportTemplateClient reportTemplateClient;
private final RedactionLogClient redactionLogClient;
- private final ExcelTemplateReportGenerationService excelTemplateReportGenerationService;
+ private final ExcelReportGenerationService excelTemplateReportGenerationService;
private final GeneratePlaceholderService generatePlaceholderService;
@SneakyThrows
- public List generateReport(ReportRequestMessage reportMessage) {
+ @Timed("generateReports")
+ public List generateReports(ReportRequestMessage reportMessage) {
List storedFileInformation = Collections.synchronizedList(new ArrayList<>());
@@ -78,7 +76,7 @@ public class ReportGenerationService {
try (ByteArrayInputStream is = new ByteArrayInputStream(excelTemplate)) {
XSSFWorkbook readWorkbook = new XSSFWorkbook(is);
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
- for(Sheet sheet: readWorkbook){
+ for (Sheet sheet : readWorkbook) {
writeWorkbook.createSheet(sheet.getSheetName());
}
MultiFileWorkbook multiFileWorkbook = new MultiFileWorkbook(readWorkbook, writeWorkbook, templateId, reportTemplate.getFileName());
@@ -117,29 +115,27 @@ public class ReportGenerationService {
generatePlaceholderService.resolveFileAttributeValues(fileStatus, placeholderModel);
-
List reportEntries = getReportEntries(reportMessage.getDossierId(), reportMessage.getFileIds()
.get(j), fileStatus.isExcluded());
var isLastFile = j == reportMessage.getFileIds().size() - 1;
for (MultiFileWorkbook multiFileWorkbook : multiFileWorkbooks) {
- if(excelModel == null){
- excelModel = excelTemplateReportGenerationService.caculateExcelModel(multiFileWorkbook.getReadWorkBook().getSheetAt(0));
+ if (excelModel == null) {
+ excelModel = excelTemplateReportGenerationService.calculateExcelModel(multiFileWorkbook.getReadWorkBook()
+ .getSheetAt(0));
}
- excelModel = excelTemplateReportGenerationService.generateReport(reportEntries, placeholderModel, multiFileWorkbook.getTemplateName(), multiFileWorkbook.getWriteWorkbook(), fileStatus, excelModel);
+ excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholderModel, multiFileWorkbook.getTemplateName(), multiFileWorkbook.getWriteWorkbook(), dossier.getDossierName(), fileStatus, excelModel, isLastFile);
}
for (MultiFileDocument multiFileDocument : multiFileDocuments) {
- wordReportGenerationService.generateReport(reportEntries, placeholderModel, multiFileDocument.getTemplateName(), multiFileDocument.getDocument(), fileStatus, dossier, isLastFile);
-
+ wordReportGenerationService.generateWordReport(reportEntries, placeholderModel, multiFileDocument.getTemplateName(), multiFileDocument.getDocument(), fileStatus, dossier, isLastFile);
}
for (ReportTemplate reportTemplate : singleFilesTemplates) {
storedFileInformation.add(createReportFromTemplate(dossier, fileStatus, placeholderModel, reportTemplate.getFileName(), reportMessage.getDownloadId(), reportEntries, reportTemplate));
-
}
long end = System.currentTimeMillis();
@@ -174,11 +170,11 @@ public class ReportGenerationService {
try (ByteArrayInputStream is = new ByteArrayInputStream(excelTemplate)) {
XSSFWorkbook readWorkbook = new XSSFWorkbook(is);
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
- for(Sheet sheet: readWorkbook){
+ for (Sheet sheet : readWorkbook) {
writeWorkbook.createSheet(sheet.getSheetName());
}
- var excelModel = excelTemplateReportGenerationService.caculateExcelModel(readWorkbook.getSheetAt(0));
- excelTemplateReportGenerationService.generateReport(reportEntries, placeholderModel, templateName, writeWorkbook, fileStatus, excelModel);
+ var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0));
+ excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholderModel, templateName, writeWorkbook, dossier.getDossierName(), fileStatus, excelModel, true);
byte[] template = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
String storageId = reportStorageService.storeObject(downloadId, template);
return new StoredFileInformation(fileStatus.getId(), storageId, ReportType.EXCEL_TEMPLATE_SINGLE_FILE, reportTemplate.getTemplateId());
@@ -189,7 +185,7 @@ public class ReportGenerationService {
byte[] wordTemplate = reportStorageService.getReportTemplate(reportTemplate.getStorageId());
try (ByteArrayInputStream is = new ByteArrayInputStream(wordTemplate)) {
XWPFDocument doc = new XWPFDocument(is);
- wordReportGenerationService.generateReport(reportEntries, placeholderModel, templateName, doc, fileStatus, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholderModel, templateName, doc, fileStatus, dossier, true);
byte[] template = wordReportGenerationService.toByteArray(doc);
String storageId = reportStorageService.storeObject(downloadId, template);
return new StoredFileInformation(fileStatus.getId(), storageId, ReportType.WORD_SINGLE_FILE, reportTemplate.getTemplateId());
@@ -200,6 +196,7 @@ public class ReportGenerationService {
}
+ @Timed("getReportEntries")
private List getReportEntries(String dossierId, String fileId, boolean isExcluded) {
if (isExcluded) {
@@ -228,7 +225,4 @@ public class ReportGenerationService {
return redactionLogConverterService.convertAndSort(redactionLog, legalBasisMappings);
}
-
-
-
}
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java
index 7fc04d0..fbfaf0d 100644
--- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java
+++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java
@@ -36,7 +36,7 @@ public class ReportMessageReceiver {
long start = System.currentTimeMillis();
log.info("Start generating reports for downloadId {}", reportMessage.getDownloadId());
- List storedFileInformation = reportGenerationService.generateReport(reportMessage);
+ List storedFileInformation = reportGenerationService.generateReports(reportMessage);
addToReportResultQueue(reportMessage.getUserId(), reportMessage.getDownloadId(), storedFileInformation, 1);
long end = System.currentTimeMillis();
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 7b962f0..cd439e9 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
@@ -34,16 +34,15 @@ import static com.iqser.red.service.redaction.report.v1.server.service.Placehold
@Slf4j
@Service
@RequiredArgsConstructor
-@SuppressWarnings("PMD")
public class WordReportGenerationService {
private final IuclidFunctionService iuclidFunctionService;
@Timed("generateWordReport")
- public XWPFDocument generateReport(List reportEntries, PlaceholderModel placeholderModel,
- String reportTemplateName, XWPFDocument doc, FileModel fileModel,
- Dossier dossier, boolean isLastFile) {
+ public XWPFDocument generateWordReport(List reportEntries, PlaceholderModel placeholderModel,
+ String reportTemplateName, XWPFDocument doc, FileModel fileModel,
+ Dossier dossier, boolean isLastFile) {
long start = System.currentTimeMillis();
@@ -53,26 +52,19 @@ public class WordReportGenerationService {
replaceImagePlaceholders(doc, imagePlaceholder);
}
- long t1 = System.currentTimeMillis();
XWPFTable table = getRedactionTable(doc);
- var placeholderFunctions = computePlaceholderPos(table, placeholderModel);
- addTableRows(table, reportEntries, fileModel.getFilename(), placeholderModel, placeholderFunctions);
- long t2 = System.currentTimeMillis();
- log.debug("Table time: {}", (t2 - t1));
- t1 = System.currentTimeMillis();
+ var placeholderFunctions = computePlaceholderPos(table, placeholderModel);
+
+ addRedactionEntryRows(table, reportEntries, fileModel.getFilename(), placeholderModel, placeholderFunctions);
+
replaceTextPlaceholders(doc, placeholderModel, dossier.getDossierName(), fileModel.getFilename(), table, reportEntries);
if (isLastFile) {
removePlaceholdersRow(table);
}
- t2 = System.currentTimeMillis();
- log.debug("Text time: {}", (t2 - t1));
-
- long end = System.currentTimeMillis();
-
- log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", end - start, fileModel.getId(), fileModel.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName());
+ log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", System.currentTimeMillis() - start, fileModel.getId(), fileModel.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName());
return doc;
} catch (Exception e) {
@@ -175,6 +167,7 @@ public class WordReportGenerationService {
}
+ @Timed("word-replaceTextPlaceholders")
public void replaceTextPlaceholders(XWPFDocument doc, PlaceholderModel placeholderModel, String dossierName,
String fileName, XWPFTable tableToSkip,
List reportRedactionEntries) {
@@ -267,6 +260,7 @@ public class WordReportGenerationService {
}
+ @Timed("word-computePlaceholderPos")
private PlaceHolderFunctions computePlaceholderPos(XWPFTable table, PlaceholderModel placeholderModel) {
Set foundPlaceHolder = new HashSet<>();
@@ -288,23 +282,25 @@ public class WordReportGenerationService {
}
- private void addTableRows(XWPFTable table, List reportEntries, String filename,
- PlaceholderModel placeholderModel, PlaceHolderFunctions placeHolderFunctions) {
+ @Timed("word-addRedactionEntryRows")
+ private void addRedactionEntryRows(XWPFTable table, List reportEntries, String filename,
+ PlaceholderModel placeholderModel, PlaceHolderFunctions placeHolderFunctions) {
if (table == null) {
return;
}
- if (placeHolderFunctions.getFoundPlaceHolder().contains(SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER)) {
+ if (placeHolderFunctions.getFoundPlaceHolder()
+ .contains(SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER)) {
var redactionsPerJustification = getRedactionsPerJustification(reportEntries);
-
for (Map.Entry> entry : redactionsPerJustification.entrySet()) {
XWPFTableRow row = table.createRow();
for (Map.Entry> entry1 : placeHolderFunctions.getFunctionPerPlaceHolder()
.entrySet()) {
- setText(row.getCell(entry1.getKey()), entry1.getValue().apply(new PlaceholderInput(filename, null, placeholderModel, entry)));
+ setText(row.getCell(entry1.getKey()), entry1.getValue()
+ .apply(new PlaceholderInput(filename, null, placeholderModel, entry)));
}
}
} else {
@@ -312,7 +308,8 @@ public class WordReportGenerationService {
XWPFTableRow row = table.createRow();
for (Map.Entry> entry1 : placeHolderFunctions.getFunctionPerPlaceHolder()
.entrySet()) {
- setText(row.getCell(entry1.getKey()), entry1.getValue().apply(new PlaceholderInput(filename, entry, placeholderModel, null)));
+ setText(row.getCell(entry1.getKey()), entry1.getValue()
+ .apply(new PlaceholderInput(filename, entry, placeholderModel, null)));
}
});
}
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 8002e82..37cb5ba 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,13 +3,7 @@ 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.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.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.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.redaction.report.v1.server.client.DossierAttributesClient;
@@ -20,7 +14,7 @@ import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingC
import com.iqser.red.service.redaction.report.v1.server.model.ImagePlaceholder;
import com.iqser.red.service.redaction.report.v1.server.model.PlaceholderModel;
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
-import com.iqser.red.service.redaction.report.v1.server.service.ExcelTemplateReportGenerationService;
+import com.iqser.red.service.redaction.report.v1.server.service.ExcelReportGenerationService;
import com.iqser.red.service.redaction.report.v1.server.service.GeneratePlaceholderService;
import com.iqser.red.service.redaction.report.v1.server.service.RedactionLogConverterService;
import com.iqser.red.service.redaction.report.v1.server.service.WordReportGenerationService;
@@ -32,7 +26,6 @@ import org.apache.commons.io.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,8 +35,6 @@ 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.service.PlaceholderService.DOSSIER_NAME_PLACEHOLDER;
@@ -56,7 +47,6 @@ import static com.iqser.red.service.redaction.report.v1.server.service.Placehold
import static com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService.SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER;
import static com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService.SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER;
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)
@@ -97,7 +87,7 @@ public class RedactionReportIntegrationTest {
private DossierAttributesClient dossierAttributesClient;
@Autowired
- private ExcelTemplateReportGenerationService excelTemplateReportGenerationService;
+ private ExcelReportGenerationService excelTemplateReportGenerationService;
@Autowired
private GeneratePlaceholderService generatePlaceholderService;
@@ -127,7 +117,7 @@ public class RedactionReportIntegrationTest {
List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}",IOUtils.toByteArray(imageResource.getInputStream()))));
XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
byte[] wordReport = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Justification Appendix A1_justification.docx")) {
fileOutputStream.write(wordReport);
@@ -159,7 +149,7 @@ public class RedactionReportIntegrationTest {
List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}",IOUtils.toByteArray(imageResource.getInputStream()))));
XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
byte[] wordReport = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Justification Appendix A2_justification.docx")) {
fileOutputStream.write(wordReport);
@@ -183,7 +173,7 @@ public class RedactionReportIntegrationTest {
var placeholders = buildPlaceHolderModel(new HashMap<>(), Map.of("{{file.attribute.Path}}", "Path"), List.of());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, true);
byte[] report = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/IUCLID_Template_justification.docx")) {
@@ -208,7 +198,7 @@ public class RedactionReportIntegrationTest {
var placeholders = buildPlaceHolderModel(new HashMap<>(), Map.of("{{file.attribute.Path}}", "Path"), List.of());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, true);
byte[] report = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/seeds-report.docx")) {
@@ -238,8 +228,8 @@ public class RedactionReportIntegrationTest {
var placeholders = buildPlaceHolderModel(new HashMap<>(), Map.of("{{file.attribute.Path}}", "Path"), List.of());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, false);
- wordReportGenerationService.generateReport(reportEntriesSecondFile, placeholders, "test", doc, fileModelSecondFile, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileStatus, dossier, false);
+ wordReportGenerationService.generateWordReport(reportEntriesSecondFile, placeholders, "test", doc, fileModelSecondFile, dossier, true);
byte[] report = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/seeds-report-multifile.docx")) {
@@ -274,7 +264,7 @@ public class RedactionReportIntegrationTest {
List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}",IOUtils.toByteArray(imageResource.getInputStream()))));
XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream());
- wordReportGenerationService.generateReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
+ wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true);
byte[] wordReport = wordReportGenerationService.toByteArray(doc);
try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/6464 appendix_b EFSA dRAR_justification.docx")) {
fileOutputStream.write(wordReport);
@@ -297,10 +287,10 @@ public class RedactionReportIntegrationTest {
var placeholders = buildPlaceHolderModel(new HashMap<>(), new HashMap<>(), List.of());
XSSFWorkbook readWorkbook = new XSSFWorkbook(templateResource.getInputStream());
- var excelModel = excelTemplateReportGenerationService.caculateExcelModel(readWorkbook.getSheetAt(0));
+ var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0));
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
writeWorkbook.createSheet("Sheet1");
- excelTemplateReportGenerationService.generateReport(reportEntries, placeholders, "test", writeWorkbook, fileModel, excelModel);
+ excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, "dossierName" ,fileModel, excelModel, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
@@ -326,15 +316,15 @@ public class RedactionReportIntegrationTest {
var placeholders = buildPlaceHolderModel(new HashMap<>(), new HashMap<>(), List.of());
XSSFWorkbook readWorkbook = new XSSFWorkbook(templateResource.getInputStream());
- var excelModel = excelTemplateReportGenerationService.caculateExcelModel(readWorkbook.getSheetAt(0));
+ var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0));
SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
writeWorkbook.createSheet("Sheet1");
- excelModel = excelTemplateReportGenerationService.generateReport(reportEntries, placeholders, "test", writeWorkbook, fileModel, excelModel);
+ excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook, "dossierName" ,fileModel, excelModel, false);
RedactionLog redactionLogSecondFile = objectMapper.readValue(new ClassPathResource("files/excelReportRedactionLog.json").getInputStream(), RedactionLog.class);
List reportEntriesSecondFile = redactionLogConverterService.convertAndSort(redactionLogSecondFile, legalBasisMapping);
FileModel fileModelSecondFile = FileModel.builder().filename("secondFile").build();
- excelTemplateReportGenerationService.generateReport(reportEntriesSecondFile, placeholders, "test", writeWorkbook, fileModelSecondFile, excelModel);
+ excelTemplateReportGenerationService.generateExcelReport(reportEntriesSecondFile, placeholders, "test", writeWorkbook,"dossierName" , fileModelSecondFile, excelModel, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
@@ -344,6 +334,37 @@ public class RedactionReportIntegrationTest {
}
+ @Test
+ @SneakyThrows
+ public void testExcelPlaceholders() {
+
+ RedactionLog redactionLog = objectMapper.readValue(new ClassPathResource("files/redactionLog.json").getInputStream(), RedactionLog.class);
+ List legalBasisMapping = objectMapper.readValue(new ClassPathResource("files/legalBasisMapping.json").getInputStream(), new TypeReference<>() {});
+ List reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
+ var imageResource = new ClassPathResource("files/exampleImage.jpg");
+
+ FileModel fileModel = FileModel.builder().filename("filename").build();
+
+ ClassPathResource templateResource = new ClassPathResource("templates/Excel Report_PlaceholderTest.xlsx");
+
+ var placeholders = buildPlaceHolderModel(Map.of("{{dossier_attribute.test1}}", "replaced_dossier_test1"), Map.of("{{file_attribute.test1}}", "replaced_file_test1", "{{file_attribute.test2}}", "replaced_file_test2"), List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}",IOUtils.toByteArray(imageResource.getInputStream()))));
+
+ XSSFWorkbook readWorkbook = new XSSFWorkbook(templateResource.getInputStream());
+ var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0));
+ SXSSFWorkbook writeWorkbook = new SXSSFWorkbook();
+ writeWorkbook.createSheet("Sheet1");
+ excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholders, "test", writeWorkbook,"dossierName" , fileModel, excelModel, true);
+
+
+ byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook);
+ try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/PlaceholderTest_justification.xlsx")) {
+ fileOutputStream.write(excelTemplateReport3);
+ }
+ }
+
+
+
+
private PlaceholderModel buildPlaceHolderModel(Map dossierAttributes, Map fileAttributes, List imagePlaceholders){
var defaultPlaceHolder = new HashSet(Set.of(FILE_NAME_PLACEHOLDER, FORMAT_DATE_ISO_PLACEHOLDER, FORMAT_DATE_GER_PLACEHOLDER, FORMAT_DATE_ENG_PLACEHOLDER, FORMAT_TIME_ISO_PLACEHOLDER, DOSSIER_NAME_PLACEHOLDER, IUCLID_FUNCTION_PLACEHOLDER, SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER));
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/Excel Report_PlaceholderTest.xlsx b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/Excel Report_PlaceholderTest.xlsx
new file mode 100644
index 0000000..dc965aa
Binary files /dev/null and b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/Excel Report_PlaceholderTest.xlsx differ
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport.xlsx b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport.xlsx
deleted file mode 100644
index 09e80a4..0000000
Binary files a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport.xlsx and /dev/null differ
diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport2.xlsx b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport2.xlsx
deleted file mode 100644
index 88dfc40..0000000
Binary files a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/resources/templates/TestReport2.xlsx and /dev/null differ