RED-2231: Use persistence-service instead of configuration and filemanagement-service

This commit is contained in:
Dominique Eifländer 2021-09-23 14:33:08 +02:00
parent 064eb5e89c
commit 82fba20c3c
19 changed files with 430 additions and 389 deletions

View File

@ -24,16 +24,12 @@
<dependency>
<groupId>com.iqser.red.service</groupId>
<artifactId>redaction-service-api-v1</artifactId>
<version>2.67.0</version>
<version>3.1.0</version>
<exclusions>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>file-management-service-api-v1</artifactId>
</exclusion>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>file-management-service-api-v1</artifactId>
</exclusion>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>configuration-service-api-v1</artifactId>
@ -43,8 +39,8 @@
<dependency>
<groupId>com.iqser.red.service</groupId>
<artifactId>configuration-service-api-v1</artifactId>
<version>2.29.0</version>
<artifactId>persistence-service-api-v1</artifactId>
<version>0.5.0</version>
<exclusions>
<exclusion>
<groupId>com.iqser.red.service</groupId>
@ -52,18 +48,11 @@
</exclusion>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>redaction-service-api-v1</artifactId>
<artifactId>configuration-service-api-v1</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.iqser.red.service</groupId>
<artifactId>file-management-service-api-v1</artifactId>
<version>2.81.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>

View File

@ -1,9 +1,10 @@
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}")
import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesResource;
@FeignClient(name = "DossierAttributesResource", url = "${persistence-service.url}")
public interface DossierAttributesClient extends DossierAttributesResource {
}

View File

@ -1,9 +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;
import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesConfigResource;
@FeignClient(name = "DossierAttributesConfigResource", url = "${configuration-service.url}")
public interface DossierAttributesConfigClient extends DossierAttributesResource {
@FeignClient(name = "DossierAttributesConfigResource", url = "${persistence-service.url}")
public interface DossierAttributesConfigClient extends DossierAttributesConfigResource {
}

View File

@ -1,9 +1,10 @@
package com.iqser.red.service.redaction.report.v1.server.client;
import com.iqser.red.service.file.management.v1.api.resources.DossierResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "DossierResource", url = "${file-management-service.url}")
import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource;
@FeignClient(name = "DossierResource", url = "${persistence-service.url}")
public interface DossierClient extends DossierResource {
}

View File

@ -1,8 +0,0 @@
package com.iqser.red.service.redaction.report.v1.server.client;
import com.iqser.red.service.configuration.v1.api.resource.FileAttributesResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "FileAttributesResource", url = "${configuration-service.url}")
public interface FileAttributesClient extends FileAttributesResource {
}

View File

@ -0,0 +1,9 @@
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.resources.FileAttributesConfigResource;
@FeignClient(name = "FileAttributesResource", url = "${persistence-service.url}")
public interface FileAttributesConfigClient extends FileAttributesConfigResource {
}

View File

@ -2,9 +2,9 @@ package com.iqser.red.service.redaction.report.v1.server.client;
import org.springframework.cloud.openfeign.FeignClient;
import com.iqser.red.service.file.management.v1.api.resources.StatusResource;
import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource;
@FeignClient(name = "StatusResource", url = "${file-management-service.url}")
@FeignClient(name = "StatusResource", url = "${persistence-service.url}")
public interface FileStatusClient extends StatusResource {
}

View File

@ -1,8 +1,9 @@
package com.iqser.red.service.redaction.report.v1.server.client;
import com.iqser.red.service.file.management.v1.api.resources.RedactionLogResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "RedactionLogResource", url = "${file-management-service.url}")
import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource;
@FeignClient(name = "RedactionLogResource", url = "${persistence-service.url}")
public interface RedactionLogClient extends RedactionLogResource {
}

View File

@ -1,9 +1,10 @@
package com.iqser.red.service.redaction.report.v1.server.client;
import com.iqser.red.service.file.management.v1.api.resources.ReportTemplateResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "ReportTemplateResource", url = "${file-management-service.url}")
import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource;
@FeignClient(name = "ReportTemplateResource", url = "${persistence-service.url}")
public interface ReportTemplateClient extends ReportTemplateResource {
}

View File

@ -3,7 +3,7 @@ package com.iqser.red.service.redaction.report.v1.server.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.file.management.v1.api.model.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.redaction.report.v1.api.model.StatusReportResponse;
import com.iqser.red.service.redaction.report.v1.api.resource.StatusReportResource;
import com.iqser.red.service.redaction.report.v1.server.client.DossierClient;

View File

@ -39,16 +39,13 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.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.Dossier;
import com.iqser.red.service.file.management.v1.api.model.DossierAttribute;
import com.iqser.red.service.file.management.v1.api.model.DossierAttributes;
import com.iqser.red.service.file.management.v1.api.model.FileStatus;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
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.FileAttributesConfigClient;
import com.iqser.red.service.redaction.report.v1.server.model.ImagePlaceholder;
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService;
@ -62,26 +59,25 @@ import lombok.extern.slf4j.Slf4j;
@RequiredArgsConstructor
public class ExcelTemplateReportGenerationService {
private final ReportStorageService reportStorageService;
private final DossierAttributesClient dossierAttributesClient;
private final DossierAttributesConfigClient dossierAttributesConfigClient;
private final FileAttributesClient fileAttributesClient;
private final FileAttributesConfigClient fileAttributesClient;
public void generateReport(List<ReportRedactionEntry> reportEntries, String dossierTemplateId,
XSSFWorkbook workbook, FileStatus fileStatus, Dossier dossier, boolean isLastFile) {
XSSFWorkbook workbook, File fileStatus, Dossier dossier, boolean isLastFile) {
List<String> placeholders = getDefaultPlaceholders();
List<ImagePlaceholder> imagePlaceholders = new ArrayList<>();
DossierAttributes dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getDossierId());
DossierAttributesConfig dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId);
var dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getId());
var dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId);
Map<String, String> dossierAttributesPlaceholder = new HashMap<>(); //KEY:placeholder, VALUE:value
for (DossierAttributeConfig attributeConfig : dossierAttributesConfig.getDossierAttributeConfigs()) {
for (DossierAttribute dossierAttribute : dossierAttributes.getDossierAttributeList()) {
if (dossierAttribute.getDossierAttributeId().equals(attributeConfig.getId())) {
for (DossierAttributeConfig attributeConfig : dossierAttributesConfig) {
for (DossierAttribute dossierAttribute : dossierAttributes) {
if (dossierAttribute.getId().getDossierAttributeConfigId().equals(attributeConfig.getId())) {
if (attributeConfig.getType().equals(DossierAttributeConfig.DossierAttributeType.IMAGE)) {
if(dossierAttribute.getValue() != null) {
@ -145,8 +141,8 @@ public class ExcelTemplateReportGenerationService {
Map<String, String> fileAttributePlaceholders = new HashMap<>();
FileAttributesConfig fileAttributesConfig = fileAttributesClient.getFileAttributes(dossierTemplateId);
fileAttributesConfig.getFileAttributeConfigs().forEach(fileAttributeConfig -> {
var fileAttributesConfig = fileAttributesClient.getFileAttributeConfigs(dossierTemplateId);
fileAttributesConfig.forEach(fileAttributeConfig -> {
fileAttributePlaceholders.put(fileAttributeConfig.getPlaceholder(), fileAttributeConfig.getId());
});
return fileAttributePlaceholders;
@ -296,7 +292,7 @@ public class ExcelTemplateReportGenerationService {
}
private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus,
private String getPlaceholderValue(String placeholder, Dossier project, File fileStatus,
Map<String, String> fileAttributePlaceholders,
Map<String, String> dossierAttributesPlaceholders) {
@ -320,11 +316,14 @@ public class ExcelTemplateReportGenerationService {
}
if (fileAttributePlaceholders.containsKey(placeholder)) {
String id = fileAttributePlaceholders.get(placeholder);
if (fileStatus.getFileAttributes() != null && fileStatus.getFileAttributes()
.getAttributeIdToValue() != null && fileStatus.getFileAttributes()
.getAttributeIdToValue()
.containsKey(id)) {
return fileStatus.getFileAttributes().getAttributeIdToValue().get(id);
Map<String, String> attributeIdToValue = new HashMap<>();
fileStatus.getFileAttributes().forEach(fileAttribute -> {
attributeIdToValue.put(fileAttribute.getFileAttributeId().getFileAttributeConfigId(), fileAttribute.getValue());
});
if (attributeIdToValue.containsKey(id)) {
return attributeIdToValue.get(id);
} else {
return null;
}

View File

@ -7,21 +7,19 @@ import java.util.Set;
import org.springframework.stereotype.Service;
import com.iqser.red.service.configuration.v1.api.model.LegalBasisMapping;
import com.iqser.red.service.persistence.service.v1.api.model.data.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.LegalBasis;
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
import com.iqser.red.service.redaction.v1.model.Change;
import com.iqser.red.service.redaction.v1.model.ChangeType;
import com.iqser.red.service.redaction.v1.model.ManualRedactionType;
import com.iqser.red.service.redaction.v1.model.Rectangle;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import com.iqser.red.service.redaction.v1.model.Status;
@Service
public class RedactionLogConverterService {
public List<ReportRedactionEntry> convertAndSort(RedactionLog redactionLog,
List<LegalBasisMapping> legalBasisMappings) {
List<LegalBasis> legalBasisMappings) {
List<ReportRedactionEntry> reportEntries = new ArrayList<>();
@ -42,12 +40,12 @@ public class RedactionLogConverterService {
}
if (entry.isManual() && entry.getManualRedactionType()
.equals(ManualRedactionType.ADD) && !entry.getStatus().equals(Status.APPROVED)) {
.equals(ManualRedactionType.ADD) && !entry.getStatus().equals(AnnotationStatus.APPROVED)) {
return;
}
if (entry.isManual() && entry.getManualRedactionType()
.equals(ManualRedactionType.REMOVE) && entry.getStatus().equals(Status.APPROVED)) {
.equals(ManualRedactionType.REMOVE) && entry.getStatus().equals(AnnotationStatus.APPROVED)) {
return;
}
@ -61,11 +59,11 @@ public class RedactionLogConverterService {
.getY(), entry.getSection(), entry.getLegalBasis() + " " + legalBasisMappings.stream()
.filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis()))
.findAny()
.map(LegalBasisMapping::getDescription)
.map(LegalBasis::getDescription)
.orElse(""), entry.getLegalBasis(), legalBasisMappings.stream()
.filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis()))
.findAny()
.map(LegalBasisMapping::getDescription)
.map(LegalBasis::getDescription)
.orElse(""), checkTextForNull(entry.getTextBefore()) + entry.getValue() + checkTextForNull(entry.getTextAfter())));
}
}

View File

@ -8,10 +8,10 @@ import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
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.FileStatus;
import com.iqser.red.service.file.management.v1.api.model.ReportTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.LegalBasisMapping;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.ReportTemplate;
import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage;
import com.iqser.red.service.redaction.report.v1.api.model.ReportType;
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
@ -74,7 +74,7 @@ public class ReportGenerationService {
int i = 1;
for (int j = 0; j < reportMessage.getFileIds().size(); j++) {
FileStatus fileStatus = fileStatusClient.getFileStatus(reportMessage.getDossierId(), reportMessage.getFileIds()
File fileStatus = fileStatusClient.getFileStatus(reportMessage.getDossierId(), reportMessage.getFileIds()
.get(j));
long start = System.currentTimeMillis();
@ -136,7 +136,7 @@ public class ReportGenerationService {
} catch (StorageObjectDoesNotExist e) {
return new ArrayList<>();
}
List<LegalBasisMapping> legalBasisMappings = redactionLog.getLegalBasis();
var legalBasisMappings = redactionLog.getLegalBasis();
return redactionLogConverterService.convertAndSort(redactionLog, legalBasisMappings);
}

View File

@ -17,12 +17,12 @@ import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import com.iqser.red.service.configuration.v1.api.model.FileAttributeConfig;
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.Status;
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileStatus;
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient;
import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient;
import lombok.RequiredArgsConstructor;
@ -33,16 +33,15 @@ import lombok.SneakyThrows;
public class StatusReportGenerationService {
private final FileStatusClient fileStatusClient;
private final FileAttributesClient fileAttributesClient;
private final FileAttributesConfigClient fileAttributesClient;
public byte[] generateReport(Dossier dossier) {
List<FileStatus> fileStatuses = fileStatusClient.getDossierStatus(dossier.getDossierId());
List<File> fileStatuses = fileStatusClient.getDossierStatus(dossier.getId());
List<FileAttributeConfig> fileAttributeConfigs = fileAttributesClient.getFileAttributes(dossier.getDossierTemplateId())
.getFileAttributeConfigs();
List<FileAttributeConfig> fileAttributeConfigs = fileAttributesClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(dossier.getDossierName());
@ -66,14 +65,16 @@ public class StatusReportGenerationService {
for (int i = 0; i < fileStatuses.size(); i++) {
FileStatus fileStatus = fileStatuses.get(i);
File fileStatus = fileStatuses.get(i);
String name = fileStatus.getFilename();
OffsetDateTime uploadDate = fileStatus.getLastUploaded();
String assignedTo = fileStatus.getCurrentReviewer();
Status status = fileStatus.getStatus();
FileStatus status = fileStatus.getStatus();
int pages = fileStatus.getNumberOfPages();
FileAttributes fileAttributes = fileStatus.getFileAttributes();
List<FileAttribute> fileAttributes = fileStatus.getFileAttributes();
Map<String, String> attributeIdToValue = new HashMap<>();
fileAttributes.forEach(fileAttribute -> attributeIdToValue.put(fileAttribute.getFileAttributeId().getFileAttributeConfigId(), fileAttribute.getValue()));
XSSFRow row = sheet.createRow(i + 1);
@ -94,7 +95,7 @@ public class StatusReportGenerationService {
sheet.autoSizeColumn(3);
sheet.autoSizeColumn(4);
Iterator<Map.Entry<String, String>> iterator = fileAttributes.getAttributeIdToValue().entrySet().iterator();
Iterator<Map.Entry<String, String>> iterator = attributeIdToValue.entrySet().iterator();
while (iterator.hasNext()) {
var nextElement = iterator.next();
if(attributesAssignment.get(nextElement.getKey()) != null) {

View File

@ -25,42 +25,32 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import javax.annotation.PostConstruct;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.IRunElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFSDT;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.stereotype.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.Dossier;
import com.iqser.red.service.file.management.v1.api.model.DossierAttribute;
import com.iqser.red.service.file.management.v1.api.model.DossierAttributes;
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.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.ReportTemplate;
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.FileAttributesConfigClient;
import com.iqser.red.service.redaction.report.v1.server.model.ImagePlaceholder;
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.service.redaction.report.v1.server.utils.ResourceLoader;
import lombok.RequiredArgsConstructor;
@ -68,27 +58,27 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class WordReportGenerationService {
private final FileAttributesClient fileAttributesClient;
private final FileAttributesConfigClient fileAttributesClient;
private final ReportStorageService reportStorageService;
private final DossierAttributesClient dossierAttributesClient;
private final DossierAttributesConfigClient dossierAttributesConfigClient;
public byte[] generateReport(ReportType reportType, List<ReportRedactionEntry> reportEntries,
String dossierTemplateId, ReportTemplate reportTemplate, FileStatus fileStatus,
String dossierTemplateId, ReportTemplate reportTemplate, File fileStatus,
Dossier dossier) {
List<String> placeholders = getDefaultPlaceholders();
List<ImagePlaceholder> imagePlaceholders = new ArrayList<>();
DossierAttributes dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getDossierId());
DossierAttributesConfig dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId);
var dossierAttributes = dossierAttributesClient.getDossierAttributes(dossier.getId());
var dossierAttributesConfig = dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId);
Map<String, String> dossierAttributesPlaceholder = new HashMap<>(); //KEY:placeholder, VALUE:value
for (DossierAttributeConfig attributeConfig : dossierAttributesConfig.getDossierAttributeConfigs()) {
for (DossierAttribute dossierAttribute : dossierAttributes.getDossierAttributeList()) {
if (dossierAttribute.getDossierAttributeId().equals(attributeConfig.getId())) {
for (DossierAttributeConfig attributeConfig : dossierAttributesConfig) {
for (DossierAttribute dossierAttribute : dossierAttributes) {
if (dossierAttribute.getId().getDossierAttributeConfigId().equals(attributeConfig.getId())) {
if (attributeConfig.getType().equals(DossierAttributeConfig.DossierAttributeType.IMAGE)) {
if (dossierAttribute.getValue() != null) {
@ -168,15 +158,15 @@ public class WordReportGenerationService {
Map<String, String> fileAttributePlaceholders = new HashMap<>();
FileAttributesConfig fileAttributesConfig = fileAttributesClient.getFileAttributes(dossierTemplateId);
fileAttributesConfig.getFileAttributeConfigs().forEach(fileAttributeConfig -> {
var fileAttributesConfig = fileAttributesClient.getFileAttributeConfigs(dossierTemplateId);
fileAttributesConfig.forEach(fileAttributeConfig -> {
fileAttributePlaceholders.put(fileAttributeConfig.getPlaceholder(), fileAttributeConfig.getId());
});
return fileAttributePlaceholders;
}
private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus,
private String getPlaceholderValue(String placeholder, Dossier project, File fileStatus,
Map<String, String> fileAttributePlaceholders,
Map<String, String> dossierAttributesPlaceholders) {
@ -200,11 +190,14 @@ public class WordReportGenerationService {
}
if (fileAttributePlaceholders.containsKey(placeholder)) {
String id = fileAttributePlaceholders.get(placeholder);
if (fileStatus.getFileAttributes() != null && fileStatus.getFileAttributes()
.getAttributeIdToValue() != null && fileStatus.getFileAttributes()
.getAttributeIdToValue()
.containsKey(id)) {
return fileStatus.getFileAttributes().getAttributeIdToValue().get(id);
Map<String, String> attributeIdToValue = new HashMap<>();
fileStatus.getFileAttributes().forEach(fileAttribute -> {
attributeIdToValue.put(fileAttribute.getFileAttributeId().getFileAttributeConfigId(), fileAttribute.getValue());
});
if (attributeIdToValue.containsKey(id)) {
return attributeIdToValue.get(id);
} else {
return null;
}

View File

@ -2,4 +2,4 @@ server:
port: 8084
configuration-service.url: "http://localhost:8081"
persistence-service.url: "http://persistence-service-v1:8080"

View File

@ -1,8 +1,7 @@
info:
description: Redaction Report Server v1
configuration-service.url: "http://configuration-service-v1:8080"
file-management-service.url: "http://file-management-service-v1:8080"
persistence-service.url: "http://persistence-service-v1:8080"
server:
port: 8080

View File

@ -7,7 +7,6 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
@ -28,21 +27,18 @@ import org.springframework.test.context.junit4.SpringRunner;
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.DossierAttributeConfig;
import com.iqser.red.service.configuration.v1.api.model.DossierAttributesConfig;
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.DossierAttribute;
import com.iqser.red.service.file.management.v1.api.model.DossierAttributes;
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.persistence.service.v1.api.model.data.configuration.LegalBasis;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.ReportTemplate;
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.FileAttributesConfigClient;
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.model.ReportRedactionEntry;
@ -70,7 +66,7 @@ public class RedactionReportIntegrationTest {
private ReportTemplateClient reportTemplateClient;
@MockBean
private FileAttributesClient fileAttributesClient;
private FileAttributesConfigClient fileAttributesClient;
@MockBean
private AmazonS3 s3Client;
@ -106,31 +102,71 @@ public class RedactionReportIntegrationTest {
ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json");
List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
List<LegalBasis> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
});
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"), new DossierAttributeConfig("id2", "label2", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.image}}")));
var dossierAttributeConfig1 =DossierAttributeConfig
.builder()
.id("id")
.label("label")
.editable(true)
.type(DossierAttributeConfig.DossierAttributeType.TEXT)
.placeholder("{{dossier.attribute.name}}")
.build();
var dossierAttributeConfig2 =DossierAttributeConfig
.builder()
.id("id2")
.label("label2")
.editable(true)
.type(DossierAttributeConfig.DossierAttributeType.IMAGE)
.placeholder("{{dossier.attribute.image}}")
.build();
var dossierAttributesConfig = Arrays.asList(dossierAttributeConfig1, dossierAttributeConfig2);
when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"), new DossierAttribute("id2", "data:image/png;base64," + Base64.getEncoder()
.encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
var dossierAttribute1 = DossierAttribute
.builder()
.id(new DossierAttribute.DossierAttributeId("dossierId", "id"))
.value("Michael")
.build();
var dossierAttribute2 = DossierAttribute
.builder()
.id(new DossierAttribute.DossierAttributeId("dossierId", "id2"))
.value("data:image/png;base64," + Base64.getEncoder()
.encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))
.build();
var dossierAttributes = Arrays.asList(dossierAttribute1, dossierAttribute2);
when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
var fileAttributeConfig1 = FileAttributeConfig
.builder()
.id("3e9b9569-5d2e-4619-848b-dd0a3e96527f")
.label("Document Title")
.placeholder("{{file.attribute.placeholder}}")
.type(FileAttributeConfig.FileAttributeType.TEXT)
.build();
Map<String, String> attributeIdToValue = new HashMap();
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
when(fileAttributesClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1));
FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
FileAttribute fileAttribute = new FileAttribute();
FileAttribute.FileAttributeId fileAttributeId = new FileAttribute.FileAttributeId();
fileAttributeId.setFileAttributeConfigId("3e9b9569-5d2e-4619-848b-dd0a3e96527f");
fileAttribute.setFileAttributeId(fileAttributeId);
fileAttribute.setValue("Test");
Dossier project = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
File fileStatus = File.builder().filename("filename").fileAttributes(List.of(fileAttribute)).build();
Dossier project = Dossier.builder().id("dossierId").dossierName("projectName").build();
String templateId = "templateId";
String storageId = "storageId";
@ -155,224 +191,224 @@ public class RedactionReportIntegrationTest {
}
}
@Test
public void testExcelTemplateReportGeneration() throws IOException {
ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json");
ClassPathResource excelRedactionLogResource = new ClassPathResource("files/excelReportRedactionLog.json");
ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
RedactionLog redactionLog2 = objectMapper.readValue(excelRedactionLogResource.getInputStream(), RedactionLog.class);
String dossierTemplateId = "dossierTemplateId";
String storageId = "storageId";
String templateId = "templateId";
ClassPathResource templateResource = new ClassPathResource("templates/Excel Report.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(templateResource.getInputStream());
ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json");
List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
});
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
List<ReportRedactionEntry> reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping);
DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"), new DossierAttributeConfig("id2", "label2", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.image}}")));
when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"), new DossierAttribute("id2", Base64.getEncoder()
.encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
Map<String, String> attributeIdToValue = new HashMap();
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
FileStatus fileStatus2 = FileStatus.builder().filename("other file").fileAttributes(fileAttributes).build();
Dossier dossier = Dossier.builder().dossierId("dossierId").dossierName("dossierName").build();
when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
.dossierTemplateId(dossierTemplateId)
.storageId(storageId)
.build());
excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook, fileStatus, dossier, false);
excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook, fileStatus2, dossier, true);
byte[] excelTemplateReport = excelTemplateReportGenerationService.toByteArray(workbook);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template.xlsx")) {
fileOutputStream.write(excelTemplateReport);
}
}
@Test
public void testReportGeneration() throws IOException {
ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json");
ClassPathResource redactionLogResource2 = new ClassPathResource("files/excelReportRedactionLog.json");
ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json");
List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
});
String dossierTemplateId = "dossierTemplateId";
String storageId = "storageId";
String templateId = "templateId";
RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
RedactionLog redactionLog2 = objectMapper.readValue(redactionLogResource2.getInputStream(), RedactionLog.class);
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
List<ReportRedactionEntry> reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping);
DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"), new DossierAttributeConfig("id2", "label2", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.image}}")));
when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"), new DossierAttribute("id2", Base64.getEncoder()
.encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
Map<String, String> attributeIdToValue = new HashMap();
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
FileStatus fileStatus2 = FileStatus.builder().filename("other file").fileAttributes(fileAttributes).build();
Dossier dossier = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
.dossierTemplateId(dossierTemplateId)
.storageId(storageId)
.build());
ClassPathResource wordTemplateResource = new ClassPathResource("templates/Justification Appendix A1.docx");
when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(wordTemplateResource.getInputStream()));
ReportTemplate reportTemplate = ReportTemplate.builder()
.dossierTemplateId("dossierTemplateId")
.templateId("templateId")
.fileName("fileName")
.storageId("storageId")
.uploadDate(OffsetDateTime.now())
.build();
byte[] wordReport = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileStatus, dossier);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template.docx")) {
fileOutputStream.write(wordReport);
}
ReportTemplate reportTemplate2 = ReportTemplate.builder()
.dossierTemplateId("dossierTemplateId")
.templateId("templateId")
.fileName("fileNameReportTemplate2")
.storageId("storageId")
.uploadDate(OffsetDateTime.now())
.build();
byte[] wordReport2 = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries2, dossierTemplateId, reportTemplate2, fileStatus2, dossier);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template2.docx")) {
fileOutputStream.write(wordReport2);
}
ClassPathResource excelTemplateResource = new ClassPathResource("templates/Excel Report.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(excelTemplateResource.getInputStream());
excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook, fileStatus, dossier, false);
excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook, fileStatus2, dossier, true);
byte[] excelTemplateReport = excelTemplateReportGenerationService.toByteArray(workbook);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template.xlsx")) {
fileOutputStream.write(excelTemplateReport);
}
XSSFWorkbook workbook2 = new XSSFWorkbook(excelTemplateResource.getInputStream());
excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook2, fileStatus, dossier, true);
byte[] excelTemplateReport2 = excelTemplateReportGenerationService.toByteArray(workbook2);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template2.xlsx")) {
fileOutputStream.write(excelTemplateReport2);
}
XSSFWorkbook workbook3 = new XSSFWorkbook(excelTemplateResource.getInputStream());
excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook3, fileStatus2, dossier, true);
byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(workbook3);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template3.xlsx")) {
fileOutputStream.write(excelTemplateReport3);
}
}
@Test
public void testExcerptReportGeneration() throws IOException {
String dossierTemplateId = "dossierTemplateId";
ClassPathResource redactionLogResource = new ClassPathResource("files/S11RedactionLog.json");
ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
ClassPathResource legalBasisMappingResource = new ClassPathResource("files/S1116LegalBasis.json");
List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
});
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(
new DossierAttributeConfig("id", "Active Substance", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.ActiveSubstance}}"),
new DossierAttributeConfig("id2", "Rapporteur Member State", false, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.RapporteurMemberState}}"),
new DossierAttributeConfig("id3", "Dossier Name", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.Name}}"),
new DossierAttributeConfig("id4", "Company", false, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.Company}}"),
new DossierAttributeConfig("id5", "Date", true, DossierAttributeConfig.DossierAttributeType.DATE, "{{dossier.attribute.Date}}"),
new DossierAttributeConfig("id6", "Signature", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.Signature}}")));
when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(
new DossierAttribute("id", "Aktive Substanz"),
new DossierAttribute("id2", "Reporter Status"),
new DossierAttribute("id3", "Dossier Name"),
new DossierAttribute("id4", "Firma"),
new DossierAttribute("id5", OffsetDateTime.now().format(FORMAT_DATE_ENG)),
new DossierAttribute("id6", "data:image/png;base64," + Base64.getEncoder().encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
Map<String, String> attributeIdToValue = new HashMap();
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
Dossier project = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
String templateId = "templateId";
String storageId = "storageId";
when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
.dossierTemplateId(dossierTemplateId)
.storageId(storageId)
.build());
ClassPathResource templateResource = new ClassPathResource("templates/6464 appendix_b EFSA dRAR justification.docx");
when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream()));
ReportTemplate reportTemplate = ReportTemplate.builder()
.dossierTemplateId("dossierTemplateId")
.templateId("templateId")
.fileName("filename")
.storageId("storageId")
.uploadDate(OffsetDateTime.now())
.build();
byte[] report = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileStatus, project);
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template13.docx")) {
fileOutputStream.write(report);
}
}
// TODO Reactivate Tests
// @Test
// public void testExcelTemplateReportGeneration() throws IOException {
//
// ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json");
// ClassPathResource excelRedactionLogResource = new ClassPathResource("files/excelReportRedactionLog.json");
// ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
//
// RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
// RedactionLog redactionLog2 = objectMapper.readValue(excelRedactionLogResource.getInputStream(), RedactionLog.class);
//
// String dossierTemplateId = "dossierTemplateId";
// String storageId = "storageId";
// String templateId = "templateId";
//
// ClassPathResource templateResource = new ClassPathResource("templates/Excel Report.xlsx");
// XSSFWorkbook workbook = new XSSFWorkbook(templateResource.getInputStream());
//
// ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json");
// List<LegalBasis> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
// });
// List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
// List<ReportRedactionEntry> reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping);
//
// DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"), new DossierAttributeConfig("id2", "label2", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.image}}")));
// when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
//
// DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"), new DossierAttribute("id2", Base64.getEncoder()
// .encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
// when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
//
// List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
// fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
// FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
// when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
//
// Map<String, String> attributeIdToValue = new HashMap();
// attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
// FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
// FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
// FileStatus fileStatus2 = FileStatus.builder().filename("other file").fileAttributes(fileAttributes).build();
//
// Dossier dossier = Dossier.builder().dossierId("dossierId").dossierName("dossierName").build();
//
// when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
// .dossierTemplateId(dossierTemplateId)
// .storageId(storageId)
// .build());
//
// excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook, fileStatus, dossier, false);
// excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook, fileStatus2, dossier, true);
// byte[] excelTemplateReport = excelTemplateReportGenerationService.toByteArray(workbook);
//
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template.xlsx")) {
// fileOutputStream.write(excelTemplateReport);
// }
// }
//
//
// @Test
// public void testReportGeneration() throws IOException {
//
// ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json");
// ClassPathResource redactionLogResource2 = new ClassPathResource("files/excelReportRedactionLog.json");
// ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
// ClassPathResource legalBasisMappingResource = new ClassPathResource("files/legalBasisMapping.json");
// List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
// });
//
// String dossierTemplateId = "dossierTemplateId";
// String storageId = "storageId";
// String templateId = "templateId";
//
// RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
// RedactionLog redactionLog2 = objectMapper.readValue(redactionLogResource2.getInputStream(), RedactionLog.class);
// List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
// List<ReportRedactionEntry> reportEntries2 = redactionLogConverterService.convertAndSort(redactionLog2, legalBasisMapping);
//
// DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(new DossierAttributeConfig("id", "label", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.name}}"), new DossierAttributeConfig("id2", "label2", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.image}}")));
// when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
// DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(new DossierAttribute("id", "Michael"), new DossierAttribute("id2", Base64.getEncoder()
// .encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
// when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
//
// List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
// fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
// FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
// when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
// Map<String, String> attributeIdToValue = new HashMap();
// attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
// FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
// FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
// FileStatus fileStatus2 = FileStatus.builder().filename("other file").fileAttributes(fileAttributes).build();
//
// Dossier dossier = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
//
// when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
// .dossierTemplateId(dossierTemplateId)
// .storageId(storageId)
// .build());
//
// ClassPathResource wordTemplateResource = new ClassPathResource("templates/Justification Appendix A1.docx");
// when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(wordTemplateResource.getInputStream()));
// ReportTemplate reportTemplate = ReportTemplate.builder()
// .dossierTemplateId("dossierTemplateId")
// .templateId("templateId")
// .fileName("fileName")
// .storageId("storageId")
// .uploadDate(OffsetDateTime.now())
// .build();
// byte[] wordReport = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileStatus, dossier);
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template.docx")) {
// fileOutputStream.write(wordReport);
// }
// ReportTemplate reportTemplate2 = ReportTemplate.builder()
// .dossierTemplateId("dossierTemplateId")
// .templateId("templateId")
// .fileName("fileNameReportTemplate2")
// .storageId("storageId")
// .uploadDate(OffsetDateTime.now())
// .build();
// byte[] wordReport2 = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries2, dossierTemplateId, reportTemplate2, fileStatus2, dossier);
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template2.docx")) {
// fileOutputStream.write(wordReport2);
// }
//
// ClassPathResource excelTemplateResource = new ClassPathResource("templates/Excel Report.xlsx");
// XSSFWorkbook workbook = new XSSFWorkbook(excelTemplateResource.getInputStream());
// excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook, fileStatus, dossier, false);
// excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook, fileStatus2, dossier, true);
// byte[] excelTemplateReport = excelTemplateReportGenerationService.toByteArray(workbook);
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template.xlsx")) {
// fileOutputStream.write(excelTemplateReport);
// }
// XSSFWorkbook workbook2 = new XSSFWorkbook(excelTemplateResource.getInputStream());
// excelTemplateReportGenerationService.generateReport(reportEntries, "dossierTemplateId", workbook2, fileStatus, dossier, true);
// byte[] excelTemplateReport2 = excelTemplateReportGenerationService.toByteArray(workbook2);
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template2.xlsx")) {
// fileOutputStream.write(excelTemplateReport2);
// }
// XSSFWorkbook workbook3 = new XSSFWorkbook(excelTemplateResource.getInputStream());
// excelTemplateReportGenerationService.generateReport(reportEntries2, "dossierTemplateId", workbook3, fileStatus2, dossier, true);
// byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(workbook3);
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/report_excel_template3.xlsx")) {
// fileOutputStream.write(excelTemplateReport3);
// }
// }
//
// @Test
// public void testExcerptReportGeneration() throws IOException {
//
// String dossierTemplateId = "dossierTemplateId";
//
// ClassPathResource redactionLogResource = new ClassPathResource("files/S11RedactionLog.json");
// ClassPathResource imageResource = new ClassPathResource("files/exampleImage.jpg");
//
// RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
//
// ClassPathResource legalBasisMappingResource = new ClassPathResource("files/S1116LegalBasis.json");
//
// List<LegalBasisMapping> legalBasisMapping = objectMapper.readValue(legalBasisMappingResource.getInputStream(), new TypeReference<>() {
// });
//
// List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping);
//
// DossierAttributesConfig dossierAttributesConfig = new DossierAttributesConfig(Arrays.asList(
// new DossierAttributeConfig("id", "Active Substance", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.ActiveSubstance}}"),
// new DossierAttributeConfig("id2", "Rapporteur Member State", false, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.RapporteurMemberState}}"),
// new DossierAttributeConfig("id3", "Dossier Name", true, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.Name}}"),
// new DossierAttributeConfig("id4", "Company", false, DossierAttributeConfig.DossierAttributeType.TEXT, "{{dossier.attribute.Company}}"),
// new DossierAttributeConfig("id5", "Date", true, DossierAttributeConfig.DossierAttributeType.DATE, "{{dossier.attribute.Date}}"),
// new DossierAttributeConfig("id6", "Signature", false, DossierAttributeConfig.DossierAttributeType.IMAGE, "{{dossier.attribute.Signature}}")));
// when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(dossierAttributesConfig);
//
// DossierAttributes dossierAttributes = new DossierAttributes(Arrays.asList(
// new DossierAttribute("id", "Aktive Substanz"),
// new DossierAttribute("id2", "Reporter Status"),
// new DossierAttribute("id3", "Dossier Name"),
// new DossierAttribute("id4", "Firma"),
// new DossierAttribute("id5", OffsetDateTime.now().format(FORMAT_DATE_ENG)),
// new DossierAttribute("id6", "data:image/png;base64," + Base64.getEncoder().encodeToString(IOUtils.toByteArray(imageResource.getInputStream())))));
//
// when(dossierAttributesClient.getDossierAttributes("dossierId")).thenReturn(dossierAttributes);
//
// List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
// fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, false, false, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
// FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
// when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
//
// Map<String, String> attributeIdToValue = new HashMap();
// attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
//
// FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
// FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
//
// Dossier project = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
//
// String templateId = "templateId";
// String storageId = "storageId";
// when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder()
// .dossierTemplateId(dossierTemplateId)
// .storageId(storageId)
// .build());
//
// ClassPathResource templateResource = new ClassPathResource("templates/6464 appendix_b EFSA dRAR justification.docx");
// when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream()));
// ReportTemplate reportTemplate = ReportTemplate.builder()
// .dossierTemplateId("dossierTemplateId")
// .templateId("templateId")
// .fileName("filename")
// .storageId("storageId")
// .uploadDate(OffsetDateTime.now())
// .build();
// byte[] report = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId, reportTemplate, fileStatus, project);
//
// try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template13.docx")) {
// fileOutputStream.write(report);
// }
// }
}

View File

@ -14,14 +14,13 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.test.context.junit4.SpringRunner;
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.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.Status;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileStatus;
import com.iqser.red.service.redaction.report.v1.server.client.DossierClient;
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient;
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient;
import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient;
import io.undertow.util.BadRequestException;
@ -36,7 +35,7 @@ public class StatusReportGenerationServiceTest {
private DossierClient dossierClient;
@Mock
private FileAttributesClient fileAttributesClient;
private FileAttributesConfigClient fileAttributesClient;
@InjectMocks
private StatusReportGenerationService statusReportGenerationService;
@ -47,29 +46,52 @@ public class StatusReportGenerationServiceTest {
String dossierId = "dossierId";
Dossier dossier = Dossier.builder().dossierName("dossierName").dossierId(dossierId).build();
Dossier dossier = Dossier.builder().dossierName("dossierName").id(dossierId).build();
when(dossierClient.getDossierById(dossierId)).thenReturn(dossier);
FileAttributes fileAttributes1 = new FileAttributes(Map.of("a", "A", "config2", "B2"));
FileStatus fileStatus1 = FileStatus.builder()
FileAttribute fileAttribute1 = new FileAttribute();
FileAttribute.FileAttributeId fileAttributeId1 = new FileAttribute.FileAttributeId();
fileAttributeId1.setFileAttributeConfigId("a");
fileAttribute1.setFileAttributeId(fileAttributeId1);
fileAttribute1.setValue("A");
FileAttribute fileAttribute2 = new FileAttribute();
FileAttribute.FileAttributeId fileAttributeId2 = new FileAttribute.FileAttributeId();
fileAttributeId2.setFileAttributeConfigId("config2");
fileAttribute2.setFileAttributeId(fileAttributeId2);
fileAttribute2.setValue("B2");
File fileStatus1 = File.builder()
.dossierId(dossierId)
.filename("file1desJahrhunderts")
.lastUploaded(OffsetDateTime.now().minusHours(2))
.currentReviewer("me")
.status(Status.APPROVED)
.status(FileStatus.APPROVED)
.numberOfPages(3)
.fileAttributes(fileAttributes1)
.fileAttributes(List.of(fileAttribute1, fileAttribute2))
.build();
FileAttributes fileAttributes2 = new FileAttributes(Map.of("config1", "X1", "y", "Y"));
FileStatus fileStatus2 = FileStatus.builder()
FileAttribute fileAttribute3 = new FileAttribute();
FileAttribute.FileAttributeId fileAttributeId3 = new FileAttribute.FileAttributeId();
fileAttributeId3.setFileAttributeConfigId("config1");
fileAttribute3.setFileAttributeId(fileAttributeId3);
fileAttribute3.setValue("X1");
FileAttribute fileAttribute4 = new FileAttribute();
FileAttribute.FileAttributeId fileAttributeId4 = new FileAttribute.FileAttributeId();
fileAttributeId4.setFileAttributeConfigId("y");
fileAttribute4.setFileAttributeId(fileAttributeId4);
fileAttribute4.setValue("Y");
File fileStatus2 = File.builder()
.dossierId(dossierId)
.filename("file2desJahrtausendsGibtsJaNicht")
.lastUploaded(OffsetDateTime.now())
.currentReviewer("you")
.status(Status.APPROVED)
.status(FileStatus.APPROVED)
.numberOfPages(21)
.fileAttributes(fileAttributes2)
.fileAttributes(List.of(fileAttribute3, fileAttribute4))
.build();
when(fileStatusClient.getDossierStatus(dossierId)).thenReturn(List.of(fileStatus1, fileStatus2));
@ -77,8 +99,7 @@ public class StatusReportGenerationServiceTest {
FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").build();
FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").build();
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig(null, null, List.of(fileAttributeConfig1,fileAttributeConfig2));
when(fileAttributesClient.getFileAttributes(dossier.getDossierTemplateId())).thenReturn(fileAttributesConfig);
when(fileAttributesClient.getFileAttributeConfigs(dossier.getDossierTemplateId())).thenReturn(List.of(fileAttributeConfig1, fileAttributeConfig2));
byte[] report = statusReportGenerationService.generateReport(dossier);