Pull request #574: RED-5479

Merge in RED/persistence-service from RED-5479 to master

* commit '3a5de265268ef9b04af5b633bc5939acbbf117f6':
  RED-5479: Updated dependency version to release
  RED-5479: Updated dependency version to release
  RED-5479: Added preview-color field to download.
  RED-5479: Deleted mocking of endpoints that are no longer available
  RED-5479: Use preview color from dossier-template.
This commit is contained in:
Viktor Seifert 2022-12-06 10:32:38 +01:00
commit c03bba4eaa
10 changed files with 80 additions and 50 deletions

View File

@ -1,13 +1,18 @@
package com.iqser.red.service.persistence.service.v1.api.model.download;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import lombok.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@ -26,4 +31,6 @@ public class DownloadWithOptionRequest {
@Builder.Default
private Set<DownloadFileType> downloadFileTypes = new HashSet<>();
private String redactionPreviewColor;
}

View File

@ -17,12 +17,12 @@ import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue;
@ -77,4 +77,6 @@ public class DownloadStatusEntity {
@Fetch(FetchMode.SUBSELECT)
List<ReportTemplateEntity> reports = new ArrayList<>();
String redactionPreviewColor;
}

View File

@ -9,7 +9,6 @@ import java.util.Set;
import javax.transaction.Transactional;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
@ -17,6 +16,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.download
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadStatusRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue;
@ -38,7 +38,8 @@ public class DownloadStatusPersistenceService {
String mimeType,
List<String> fileIds,
Set<DownloadFileType> downloadFileTypes,
List<String> reportTemplateIds) {
List<String> reportTemplateIds,
String redactionPreviewColor) {
DownloadStatusEntity downloadStatus = new DownloadStatusEntity();
downloadStatus.setUserId(userId);
@ -50,6 +51,7 @@ public class DownloadStatusPersistenceService {
downloadStatus.setFiles(fileIds != null ? fileRepository.findAllById(fileIds) : new ArrayList<>());
downloadStatus.setDownloadFileTypes(downloadFileTypes != null ? new HashSet<>(downloadFileTypes) : new HashSet<>());
downloadStatus.setReports(reportTemplateIds != null ? reportTemplateRepository.findAllById(reportTemplateIds) : new ArrayList<>());
downloadStatus.setRedactionPreviewColor(redactionPreviewColor);
downloadStatusRepository.save(downloadStatus);
}
@ -58,7 +60,7 @@ public class DownloadStatusPersistenceService {
// use this to create a status for export dossier template.
public void createStatus(String userId, String storageId, String filename, String mimeType) {
this.createStatus(userId, storageId, null, filename, mimeType, null, null, null);
this.createStatus(userId, storageId, null, filename, mimeType, null, null, null, null);
}

View File

@ -6,10 +6,6 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadWithOptionRequest;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -20,16 +16,20 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration;
import com.iqser.red.service.peristence.v1.server.model.DownloadJob;
import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
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.BadRequestException;
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.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatus;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadWithOptionRequest;
import com.iqser.red.service.persistence.service.v1.api.resources.DownloadResource;
import lombok.RequiredArgsConstructor;
@ -69,7 +69,9 @@ public class DownloadController implements DownloadResource {
return this.startPrepareDownload(requestWithOptions, dossier, existingFileStatuses);
}
public JSONPrimitive<String> prepareDownload(@RequestBody DownloadWithOptionRequest request) {
var existingFileStatuses = fileStatusPersistenceService.getStatusesForDossier(request.getDossierId());
var dossier = dossierPersistenceService.getActiveOrArchivedDossier(request.getDossierId());
// check reports list and download types so both can be valid
@ -85,19 +87,29 @@ public class DownloadController implements DownloadResource {
return this.startPrepareDownload(request, dossier, existingFileStatuses);
}
private JSONPrimitive<String> startPrepareDownload(DownloadWithOptionRequest request, DossierEntity dossier, List<FileEntity> existingFileStatuses) {
var mimeType = "application/zip";
var downloadArchiveMimeType = "application/zip";
String downloadFilename = buildName(request.getDossierId(), request.getFileIds(), request.getUserId(), mimeType, existingFileStatuses);
String downloadFilename = buildName(request.getDossierId(), request.getFileIds(), request.getUserId(), downloadArchiveMimeType, existingFileStatuses);
String storageId = StorageIdUtils.getStorageId(request.getUserId(), request.getDossierId(), downloadFilename);
downloadStatusPersistenceService.createStatus(request.getUserId(), storageId, dossier, downloadFilename, mimeType, request.getFileIds(), request.getDownloadFileTypes(), request.getReportTemplateIds());
downloadStatusPersistenceService.createStatus(request.getUserId(),
storageId,
dossier,
downloadFilename,
downloadArchiveMimeType,
request.getFileIds(),
request.getDownloadFileTypes(),
request.getReportTemplateIds(),
request.getRedactionPreviewColor());
addToDownloadQueue(DownloadJob.builder().storageId(storageId).userId(request.getUserId()).build(), 1);
return new JSONPrimitive<>(storageId);
}
public List<DownloadStatus> getDownloadStatus(@PathVariable(USER_ID) String userId) {
return convert(downloadStatusPersistenceService.getStatusesByUser(userId), DownloadStatus.class);

View File

@ -28,6 +28,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
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.service.ColorsService;
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;
@ -61,8 +62,8 @@ public class DownloadPreparationService {
RabbitTemplate rabbitTemplate;
ObjectMapper objectMapper;
StorageService storageService;
DownloadReportCleanupService downloadReportCleanupService;
ColorsService colorsService;
FileManagementServiceSettings settings;
@ -73,6 +74,16 @@ public class DownloadPreparationService {
DossierEntity dossier = downloadStatus.getDossier();
String storedPreviewColor = downloadStatus.getRedactionPreviewColor();
final String previewColor;
if (storedPreviewColor == null || storedPreviewColor.isBlank()) {
var colors = colorsService.getColors(dossier.getDossierTemplateId());
previewColor = colors.getPreviewColor();
} else {
previewColor = storedPreviewColor;
}
RedactionMessage message = RedactionMessage.builder()
.dossierId(dossier.getId())
.downloadId(reportResultMessage.getDownloadId())
@ -83,6 +94,7 @@ public class DownloadPreparationService {
.filter(f -> !WorkflowStatus.APPROVED.equals(f.getWorkflowStatus()))
.map(FileEntity::getId)
.collect(Collectors.toSet()))
.redactionPreviewColor(previewColor)
.build();
log.info("Sending redaction request for downloadId:{} to pdftron-redaction-queue", message.getDownloadId());

View File

@ -107,3 +107,5 @@ databaseChangeLog:
file: db/changelog/tenant/sql/42-add-encoding-column-file-attribute-config.sql
- include:
file: db/changelog/tenant/43-add-reports-information-column.changelog.yaml
- include:
file: db/changelog/tenant/44-add-redaction-preview-color-column.changelog.yaml

View File

@ -0,0 +1,13 @@
databaseChangeLog:
- changeSet:
id: add-redaction-preview-color-column
author: viktorseifert
changes:
- addColumn:
columns:
- column:
name: redaction_preview_color
type: CHAR(7)
constraints:
nullable: true
tableName: download_status

View File

@ -19,10 +19,11 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.peristence.v1.server.service.download.DownloadReportMessageReceiver;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadWithOptionRequest;
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.storage.commons.service.StorageService;
@ -94,25 +95,34 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes
.watermarkId(dossier.getWatermarkId())
.dueDate(dossier.getDueDate())
.dossierTemplateId(dossier.getDossierTemplateId())
.reportTemplateIds(availableTemplates.stream().map(a -> a.getTemplateId()).collect(Collectors.toList()))
.reportTemplateIds(availableTemplates.stream().map(ReportTemplate::getTemplateId).collect(Collectors.toList()))
.build(), dossier.getId());
var updatedDossier = dossierClient.getDossierById(dossier.getId(), false, false);
assertThat(updatedDossier.getReportTemplateIds()).isNotEmpty();
downloadClient.prepareDownload(DownloadRequest.builder().userId("1").dossierId(dossier.getId()).fileIds(Collections.singletonList(file.getId())).build());
downloadClient.prepareDownload(DownloadWithOptionRequest.builder()
.userId("1")
.dossierId(dossier.getId())
.fileIds(Collections.singletonList(file.getId()))
.redactionPreviewColor("#aaaaaa")
.build());
var statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.iterator().next().getLastDownload()).isNull();
ArrayList<StoredFileInformation> sivList = new ArrayList<>();
// FIXME Check if this is still needed.
// This variable seems to do nothing, if it is not needed it can be removed.
var sivList = new ArrayList<StoredFileInformation>();
var siv = new StoredFileInformation();
siv.setFileId(file.getId());
siv.setStorageId("XYZ");
siv.setTemplateId(availableTemplates.iterator().next().getTemplateId());
sivList.add(siv);
// FIXME Check if this is still needed.
storageService.storeObject("XYZ", new ByteArrayInputStream(new byte[]{1, 2, 3, 4}));
ReportResultMessage reportResultMessage = new ReportResultMessage();

View File

@ -35,10 +35,7 @@ import org.springframework.jdbc.core.StatementCallback;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.testcontainers.shaded.org.apache.commons.io.IOUtils;
import com.iqser.red.service.pdftron.redaction.v1.api.model.ByteContentDocument;
import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest;
import com.iqser.red.service.peristence.v1.server.Application;
import com.iqser.red.service.peristence.v1.server.client.RedactionClient;
import com.iqser.red.service.peristence.v1.server.client.SearchClient;
@ -46,7 +43,6 @@ import com.iqser.red.service.peristence.v1.server.integration.client.Application
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
import com.iqser.red.service.peristence.v1.server.integration.client.TenantsClient;
import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService;
import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils;
import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository;
@ -82,7 +78,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.ApplicationConfig;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.multitenancy.TenantRequest;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionResult;
@ -211,31 +206,6 @@ public abstract class AbstractPersistenceServerServiceTest {
when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null);
when(pdfTronRedactionClient.redact(Mockito.any())).thenAnswer((answer) -> {
Object[] args = answer.getArguments();
DocumentRequest d = (DocumentRequest) args[0];
var untouchedObjectId = StorageIdUtils.getStorageId(d.getDossierId(), d.getFileId(), FileType.ORIGIN);
return new ByteContentDocument(IOUtils.toByteArray(storageService.getObject(untouchedObjectId)
.getInputStream()), null);
});
when(pdfTronRedactionClient.redactionPreview(Mockito.any())).thenAnswer((answer) -> {
Object[] args = answer.getArguments();
DocumentRequest d = (DocumentRequest) args[0];
var untouchedObjectId = StorageIdUtils.getStorageId(d.getDossierId(), d.getFileId(), FileType.ORIGIN);
return new ByteContentDocument(IOUtils.toByteArray(storageService.getObject(untouchedObjectId)
.getInputStream()), null);
});
when(pdfTronRedactionClient.redactionPreviewDiff(Mockito.any())).thenAnswer((answer) -> {
Object[] args = answer.getArguments();
DocumentRequest d = (DocumentRequest) args[0];
var untouchedObjectId = StorageIdUtils.getStorageId(d.getDossierId(), d.getFileId(), FileType.ORIGIN);
return new ByteContentDocument(IOUtils.toByteArray(storageService.getObject(untouchedObjectId)
.getInputStream()), null);
});
when(redactionClient.sections(Mockito.any())).thenReturn(new RedactionResult());
when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
}

View File

@ -27,7 +27,7 @@
<properties>
<redaction-service.version>3.206.0</redaction-service.version>
<search-service.version>2.39.0</search-service.version>
<pdftron-redaction-service.version>3.143.0</pdftron-redaction-service.version>
<pdftron-redaction-service.version>3.150.0</pdftron-redaction-service.version>
<redaction-report-service.version>3.63.0</redaction-report-service.version>
</properties>