RED-1098: Implemented writing the requests to the pdftron-service to the respective queue instead of sending them via http

This commit is contained in:
Viktor Seifert 2022-06-27 18:11:03 +02:00
parent 6a5da764b5
commit b8bf13d693

View File

@ -1,7 +1,20 @@
package com.iqser.red.service.peristence.v1.server.service.download;
import java.util.Map;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionMessage;
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionRequest;
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType;
import com.iqser.red.service.peristence.v1.server.client.RedactionClient;
import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration;
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
import com.iqser.red.service.peristence.v1.server.service.RedactionLogService;
import com.iqser.red.service.peristence.v1.server.utils.FileSystemBackedArchiver;
@ -11,7 +24,11 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
@ -19,35 +36,74 @@ import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadS
import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class DownloadPreparationService {
private final DownloadStatusPersistenceService downloadStatusPersistenceService;
private final FileStatusPersistenceService fileStatusPersistenceService;
private final FileManagementStorageService fileManagementStorageService;
private final RedactionClient redactionClient;
private final PDFTronRedactionClient pdfTronRedactionClient;
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
private final RedactionLogService redactionLogService;
private final NotificationPersistenceService notificationPersistenceService;
private final DossierPersistenceService dossierPersistenceService;
DownloadStatusPersistenceService downloadStatusPersistenceService;
FileStatusPersistenceService fileStatusPersistenceService;
FileManagementStorageService fileManagementStorageService;
RedactionClient redactionClient;
PDFTronRedactionClient pdfTronRedactionClient;
ReportTemplatePersistenceService reportTemplatePersistenceService;
RedactionLogService redactionLogService;
NotificationPersistenceService notificationPersistenceService;
DossierPersistenceService dossierPersistenceService;
RabbitTemplate rabbitTemplate;
ObjectMapper objectMapper;
@Transactional
public void createDownload(ReportResultMessage reportResultMessage) {
public void createDownload(ReportResultMessage reportResultMessage) throws JsonProcessingException {
DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
DossierEntity dossier = downloadStatus.getDossier();
RedactionMessage message = RedactionMessage.builder().build();
for (String fileId : downloadStatus.getFiles().stream().map(FileEntity::getId).collect(Collectors.toUnmodifiableList())) {
for (DownloadFileType downloadFileType : downloadStatus.getDownloadFileTypes()) {
RedactionType redactionType = toRedactionType(downloadFileType);
if (redactionType == null) {
continue;
}
message.getRedactionTypes().add(redactionType);
message.getFileIds().add(fileId);
message.getDossierIds().add(dossier.getId());
}
}
rabbitTemplate.convertAndSend(MessagingConfiguration.PDFTRON_QUEUE, objectMapper.writeValueAsString(message));
}
private RedactionType toRedactionType(DownloadFileType downloadFileType) {
switch (downloadFileType) {
case REDACTED:
return RedactionType.REDACTED;
case PREVIEW:
return RedactionType.PREVIEW;
case DELTA_PREVIEW:
return RedactionType.DELTA;
case ORIGINAL:
default:
return null;
}
}
private void createDownloadArchive(ReportResultMessage reportResultMessage, DownloadStatusEntity downloadStatus, DossierEntity dossier) {
try (FileSystemBackedArchiver fileSystemBackedArchiver = new FileSystemBackedArchiver()) {
generateAndAddFiles(downloadStatus, fileSystemBackedArchiver);
@ -87,20 +143,16 @@ public class DownloadPreparationService {
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", fileStatus.getFilename(), original));
}
if (downloadFileType.name().equals(DownloadFileType.PREVIEW.name())) {
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(fileStatus.getFilename(), "highlighted"),
getPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId())));
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(fileStatus.getFilename(), "highlighted"), getPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId())));
}
if (downloadFileType.name().equals(DownloadFileType.DELTA_PREVIEW.name())) {
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Delta Preview", addSuffix(fileStatus.getFilename(), "delta_highlighted"),
getDeltaPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId())));
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Delta Preview", addSuffix(fileStatus.getFilename(), "delta_highlighted"), getDeltaPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId())));
}
if (downloadFileType.name().equals(DownloadFileType.REDACTED.name())) {
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(fileStatus.getFilename(), "redacted"),
getRedacted(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getWatermarkId())));
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(fileStatus.getFilename(), "redacted"), getRedacted(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getWatermarkId())));
}
}
log.info("Successfully added file {}/{} for downloadId {}, took {}", i, fileIds
.size(), downloadStatus.getStorageId(), System.currentTimeMillis() - start);
log.info("Successfully added file {}/{} for downloadId {}, took {}", i, fileIds.size(), downloadStatus.getStorageId(), System.currentTimeMillis() - start);
i++;
}
log.info("Successfully added {} files for downloadId {}, took {}", fileIds, downloadStatus.getStorageId(), System.currentTimeMillis() - fileGenerationStart);
@ -113,7 +165,6 @@ public class DownloadPreparationService {
for (StoredFileInformation storedFileInformation : reportResultMessage.getStoredFileInformation()) {
FileEntity fileStatus = null;
if (storedFileInformation.getFileId() != null) {
@ -122,14 +173,14 @@ public class DownloadPreparationService {
ReportTemplateEntity reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId());
byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId());
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""),
addSuffix(createFileName(fileStatus, reportTemplate), "justification"), report));
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), addSuffix(createFileName(fileStatus, reportTemplate), "justification"), report));
}
log.info("Successfully added {} reports for downloadId {}, took {}", reportResultMessage.getStoredFileInformation()
.size(), reportResultMessage.getDownloadId(), System.currentTimeMillis() - addReportsStart);
}
private String createFileName(FileEntity fileStatus, ReportTemplateEntity reportTemplate) {
if (fileStatus != null) {
@ -139,7 +190,9 @@ public class DownloadPreparationService {
}
}
private String getExtension(String fileName) {
var index = fileName.lastIndexOf(".");
if (index > 0) {
return fileName.substring(index);
@ -148,7 +201,9 @@ public class DownloadPreparationService {
}
}
private String removeExtension(String fileName) {
var index = fileName.lastIndexOf(".");
if (index > 0) {
return fileName.substring(0, index);
@ -159,6 +214,7 @@ public class DownloadPreparationService {
private String addSuffix(String filename, String suffix) {
var oldExtension = getExtension(filename);
return removeExtension(filename) + "_" + suffix + oldExtension;
@ -172,8 +228,8 @@ public class DownloadPreparationService {
log.info("Successfully stored zip for downloadId {}, took {}", downloadStatus.getStorageId(), System.currentTimeMillis() - start);
}
private byte[] getRedacted(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId,
Long watermarkId) {
private byte[] getRedacted(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, Long watermarkId) {
return pdfTronRedactionClient.redact(RedactionRequest.builder()
.dossierId(dossierId)