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:
parent
6a5da764b5
commit
b8bf13d693
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user