RED-6864 - Close streams when done in order to delete temp files
This commit is contained in:
parent
cd49c4aabb
commit
5e53580c00
@ -4,6 +4,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
|
|||||||
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOWNLOAD_STATUS;
|
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOWNLOAD_STATUS;
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
|
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -209,8 +210,9 @@ public class DownloadController implements DownloadResource {
|
|||||||
TenantContext.setTenantId(tenantId);
|
TenantContext.setTenantId(tenantId);
|
||||||
var downloadStatus = getDownloadStatus(storageId, userId);
|
var downloadStatus = getDownloadStatus(storageId, userId);
|
||||||
var fileDownloadStream = getFileForDownload(storageId, userId);
|
var fileDownloadStream = getFileForDownload(storageId, userId);
|
||||||
|
fileProxyStreamForDownload(fileDownloadStream);
|
||||||
|
|
||||||
return getResponseEntity(inline, fileDownloadStream, downloadStatus.getFilename(), MediaType.parseMediaType("application/zip"), downloadStatus.getFileSize());
|
return getResponseEntity(inline, new InputStreamResource(fileDownloadStream), downloadStatus.getFilename(), MediaType.parseMediaType("application/zip"), downloadStatus.getFileSize());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +226,7 @@ public class DownloadController implements DownloadResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private InputStreamResource getFileForDownload(String storageId, String userId) {
|
private InputStream getFileForDownload(String storageId, String userId) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var response = fileManagementStorageService.getObject(TenantContext.getTenantId(), storageId);
|
var response = fileManagementStorageService.getObject(TenantContext.getTenantId(), storageId);
|
||||||
@ -237,7 +239,7 @@ public class DownloadController implements DownloadResource {
|
|||||||
.build());
|
.build());
|
||||||
downloadService.setDownloaded(JSONPrimitive.of(storageId));
|
downloadService.setDownloaded(JSONPrimitive.of(storageId));
|
||||||
|
|
||||||
return new InputStreamResource(response);
|
return response;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new NotFoundException(e.getMessage(), e);
|
throw new NotFoundException(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
@ -279,10 +281,11 @@ public class DownloadController implements DownloadResource {
|
|||||||
var token = oneTimeTokenDownloadService.getToken(oneTimeToken);
|
var token = oneTimeTokenDownloadService.getToken(oneTimeToken);
|
||||||
var downloadStatus = getDownloadStatus(token.getStorageId(), token.getUserId());
|
var downloadStatus = getDownloadStatus(token.getStorageId(), token.getUserId());
|
||||||
var fileDownloadStream = getFileForDownload(token.getStorageId(), token.getUserId());
|
var fileDownloadStream = getFileForDownload(token.getStorageId(), token.getUserId());
|
||||||
|
fileProxyStreamForDownload(fileDownloadStream);
|
||||||
|
|
||||||
TenantContext.clear();
|
TenantContext.clear();
|
||||||
|
|
||||||
return getResponseEntity(inline, fileDownloadStream, downloadStatus.getFilename(), MediaType.parseMediaType("application/zip"), downloadStatus.getFileSize());
|
return getResponseEntity(inline, new InputStreamResource((fileDownloadStream)), downloadStatus.getFilename(), MediaType.parseMediaType("application/zip"), downloadStatus.getFileSize());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,13 +6,12 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
|
|||||||
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
|
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
|
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.springframework.core.io.InputStreamResource;
|
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
@ -123,7 +122,7 @@ public class FileManagementController implements FileManagementResource {
|
|||||||
|
|
||||||
var file = fileStatusManagementService.getFileStatus(fileId);
|
var file = fileStatusManagementService.getFileStatus(fileId);
|
||||||
var untouchedFileStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.ORIGIN));
|
var untouchedFileStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.ORIGIN));
|
||||||
return getResponseEntity(inline, untouchedFileStream, file.getFilename(), MediaType.APPLICATION_PDF);
|
return getResponseEntity(inline, untouchedFileStream, file.getFilename());
|
||||||
} catch (FeignException e) {
|
} catch (FeignException e) {
|
||||||
if (e.status() == HttpStatus.NOT_FOUND.value()) {
|
if (e.status() == HttpStatus.NOT_FOUND.value()) {
|
||||||
return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND);
|
return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND);
|
||||||
@ -135,10 +134,10 @@ public class FileManagementController implements FileManagementResource {
|
|||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private ResponseEntity<?> getResponseEntity(boolean inline, FileInputStream resource, String filename, MediaType mediaType) {
|
private ResponseEntity<?> getResponseEntity(boolean inline, InputStream resource, String filename) {
|
||||||
|
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
httpHeaders.setContentType(mediaType);
|
httpHeaders.setContentType(MediaType.APPLICATION_PDF);
|
||||||
|
|
||||||
if (filename != null) {
|
if (filename != null) {
|
||||||
httpHeaders.add(DOWNLOAD_HEADER_NAME, inline ? "inline" : "attachment" + "; filename*=utf-8''" + StringEncodingUtils.urlEncode(filename));
|
httpHeaders.add(DOWNLOAD_HEADER_NAME, inline ? "inline" : "attachment" + "; filename*=utf-8''" + StringEncodingUtils.urlEncode(filename));
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
|
|||||||
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
|
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils.getStorageId;
|
import static com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils.getStorageId;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
@ -50,8 +52,10 @@ public class HighlightsController implements HighlightsResource {
|
|||||||
fileStatusService.getStatus(fileId);
|
fileStatusService.getStatus(fileId);
|
||||||
|
|
||||||
if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) {
|
if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) {
|
||||||
return objectMapper.readValue(fileManagementStorageService.getObject(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS)),
|
InputStream stream = fileManagementStorageService.getObject(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS));
|
||||||
Highlights.class);
|
Highlights highlights = objectMapper.readValue(stream, Highlights.class);
|
||||||
|
stream.close();
|
||||||
|
return highlights;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Highlights();
|
return new Highlights();
|
||||||
|
|||||||
@ -29,7 +29,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid;
|
||||||
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
||||||
import com.iqser.red.storage.commons.service.StorageService;
|
|
||||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|
||||||
import feign.FeignException;
|
import feign.FeignException;
|
||||||
@ -202,7 +201,9 @@ public class RedactionLogController implements RedactionLogResource {
|
|||||||
String objectId = dossierId + "/" + fileId + "." + fileType.name() + fileType.getExtension();
|
String objectId = dossierId + "/" + fileId + "." + fileType.name() + fileType.getExtension();
|
||||||
|
|
||||||
try (var inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), objectId)) {
|
try (var inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), objectId)) {
|
||||||
return zipBytes(filename, inputStream.readAllBytes());
|
byte[] input = inputStream.readAllBytes();
|
||||||
|
inputStream.close();
|
||||||
|
return zipBytes(filename, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (StorageObjectDoesNotExist e) {
|
} catch (StorageObjectDoesNotExist e) {
|
||||||
|
|||||||
@ -135,18 +135,20 @@ public class ReportTemplateController implements ReportTemplateResource {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
var reportTemplate = reportTemplatePersistenceService.find(templateId);
|
var reportTemplate = reportTemplatePersistenceService.find(templateId);
|
||||||
byte[] file = IOUtils.toByteArray(fileManagementStorageService.getObject(TenantContext.getTenantId(), reportTemplate.getStorageId()));
|
InputStream inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), reportTemplate.getStorageId());
|
||||||
return getResponseEntity(file, reportTemplate.getFileName(), MediaType.APPLICATION_OCTET_STREAM);
|
byte[] file = IOUtils.toByteArray(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
return getResponseEntity(file, reportTemplate.getFileName());
|
||||||
} catch (StorageObjectDoesNotExist | IOException e) {
|
} catch (StorageObjectDoesNotExist | IOException e) {
|
||||||
throw new NotFoundException("Template does not exist");
|
throw new NotFoundException("Template does not exist");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private ResponseEntity<?> getResponseEntity(byte[] file, String filename, MediaType mediaType) {
|
private ResponseEntity<?> getResponseEntity(byte[] file, String filename) {
|
||||||
|
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
httpHeaders.setContentType(mediaType);
|
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
|
||||||
|
|
||||||
if (filename != null) {
|
if (filename != null) {
|
||||||
httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + StringEncodingUtils.urlEncode(filename));
|
httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + StringEncodingUtils.urlEncode(filename));
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations;
|
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.io.InputStreamResource;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
|
import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
|
||||||
@ -95,10 +94,11 @@ public class ReduceTextFileSizeMigration10 extends Migration {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
if (!storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak")) {
|
if (!storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak")) {
|
||||||
FileInputStream textInputStreamResource = fileManagementStorageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT));
|
InputStream textInputStreamResource = fileManagementStorageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT));
|
||||||
storageService.storeObject(TenantContext.getTenantId(),
|
storageService.storeObject(TenantContext.getTenantId(),
|
||||||
StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak",
|
StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak",
|
||||||
textInputStreamResource);
|
textInputStreamResource);
|
||||||
|
textInputStreamResource.close();
|
||||||
var text = storageService.readJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class);
|
var text = storageService.readJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class);
|
||||||
storageService.storeJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), text);
|
storageService.storeJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), text);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,7 @@ import com.iqser.red.storage.commons.service.StorageService;
|
|||||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -217,7 +218,7 @@ public class DossierTemplateCloneService {
|
|||||||
fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplateId, facList);
|
fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplateId, facList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
private void cloneReportTemplates(DossierTemplateEntity dossierTemplate, String clonedDossierTemplateId) {
|
private void cloneReportTemplates(DossierTemplateEntity dossierTemplate, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
var reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplate.getId());
|
var reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplate.getId());
|
||||||
@ -227,6 +228,7 @@ public class DossierTemplateCloneService {
|
|||||||
String storageId = clonedDossierTemplateId + "/" + rte.getFileName();
|
String storageId = clonedDossierTemplateId + "/" + rte.getFileName();
|
||||||
String templateId = UUID.randomUUID().toString();
|
String templateId = UUID.randomUUID().toString();
|
||||||
storageService.storeObject(TenantContext.getTenantId(), storageId, storedReportTemplate);
|
storageService.storeObject(TenantContext.getTenantId(), storageId, storedReportTemplate);
|
||||||
|
storedReportTemplate.close();
|
||||||
reportTemplatePersistenceService.insert(clonedDossierTemplateId, templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport());
|
reportTemplatePersistenceService.insert(clonedDossierTemplateId, templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport());
|
||||||
} else {
|
} else {
|
||||||
log.debug("Deleted Report-template {} will not be cloned", rte.getTemplateId());
|
log.debug("Deleted Report-template {} will not be cloned", rte.getTemplateId());
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
package com.iqser.red.service.persistence.management.v1.processor.service;
|
package com.iqser.red.service.persistence.management.v1.processor.service;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardOpenOption;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -32,22 +34,28 @@ public class FileManagementStorageService {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public byte[] getStoredObjectBytes(String dossierId, String fileId, FileType fileType) {
|
public byte[] getStoredObjectBytes(String dossierId, String fileId, FileType fileType) {
|
||||||
|
|
||||||
return IOUtils.toByteArray(getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, fileType)));
|
InputStream inputStream = getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, fileType));
|
||||||
|
byte[] storedObjectBytes = IOUtils.toByteArray(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
return storedObjectBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public byte[] getStoredObjectBytes(String storageId) {
|
public byte[] getStoredObjectBytes(String storageId) {
|
||||||
|
|
||||||
return IOUtils.toByteArray(getObject(TenantContext.getTenantId(), storageId));
|
InputStream inputStream = getObject(TenantContext.getTenantId(), storageId);
|
||||||
|
byte[] storedObjectBytes = IOUtils.toByteArray(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
return storedObjectBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public FileInputStream getObject(String tenantId, String storageId) {
|
public InputStream getObject(String tenantId, String storageId) {
|
||||||
File destFile = File.createTempFile("destFile", ".data");
|
|
||||||
destFile.deleteOnExit();
|
File tempFile = File.createTempFile("temp", ".data");
|
||||||
storageService.downloadTo(tenantId, storageId, destFile);
|
storageService.downloadTo(tenantId, storageId, tempFile);
|
||||||
return new FileInputStream(destFile);
|
return Files.newInputStream(Paths.get(tempFile.getPath()), StandardOpenOption.DELETE_ON_CLOSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,12 +8,9 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import jakarta.transaction.Transactional;
|
|
||||||
|
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.RedactionMessage;
|
||||||
@ -28,7 +25,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.ColorsS
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
|
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.NotificationPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
|
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
|
||||||
@ -40,9 +36,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatusValue;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatusValue;
|
||||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
|
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.report.v1.api.model.StoredFileInformation;
|
||||||
import com.iqser.red.storage.commons.service.StorageService;
|
|
||||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|
||||||
|
import jakarta.transaction.Transactional;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
@ -56,13 +52,11 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
public class DownloadPreparationService {
|
public class DownloadPreparationService {
|
||||||
|
|
||||||
DownloadStatusPersistenceService downloadStatusPersistenceService;
|
DownloadStatusPersistenceService downloadStatusPersistenceService;
|
||||||
FileStatusPersistenceService fileStatusPersistenceService;
|
|
||||||
FileManagementStorageService fileManagementStorageService;
|
FileManagementStorageService fileManagementStorageService;
|
||||||
ReportTemplatePersistenceService reportTemplatePersistenceService;
|
ReportTemplatePersistenceService reportTemplatePersistenceService;
|
||||||
NotificationPersistenceService notificationPersistenceService;
|
NotificationPersistenceService notificationPersistenceService;
|
||||||
RabbitTemplate rabbitTemplate;
|
RabbitTemplate rabbitTemplate;
|
||||||
ObjectMapper objectMapper;
|
ObjectMapper objectMapper;
|
||||||
StorageService storageService;
|
|
||||||
DownloadReportCleanupService downloadReportCleanupService;
|
DownloadReportCleanupService downloadReportCleanupService;
|
||||||
ColorsService colorsService;
|
ColorsService colorsService;
|
||||||
FileManagementServiceSettings settings;
|
FileManagementServiceSettings settings;
|
||||||
@ -70,7 +64,7 @@ public class DownloadPreparationService {
|
|||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void createDownload(ReportResultMessage reportResultMessage) throws JsonProcessingException {
|
public void createDownload(ReportResultMessage reportResultMessage) {
|
||||||
|
|
||||||
var downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
var downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
||||||
var dossier = downloadStatus.getDossier();
|
var dossier = downloadStatus.getDossier();
|
||||||
@ -113,18 +107,12 @@ public class DownloadPreparationService {
|
|||||||
var result = new LinkedList<RedactionType>();
|
var result = new LinkedList<RedactionType>();
|
||||||
for (var downloadFileType : downloadFileTypes) {
|
for (var downloadFileType : downloadFileTypes) {
|
||||||
switch (downloadFileType) {
|
switch (downloadFileType) {
|
||||||
case REDACTED:
|
case REDACTED -> result.add(RedactionType.REDACTED);
|
||||||
result.add(RedactionType.REDACTED);
|
case PREVIEW -> result.add(RedactionType.PREVIEW);
|
||||||
break;
|
case DELTA_PREVIEW -> result.add(RedactionType.DELTA);
|
||||||
case PREVIEW:
|
default -> {
|
||||||
result.add(RedactionType.PREVIEW);
|
}
|
||||||
break;
|
|
||||||
case DELTA_PREVIEW:
|
|
||||||
result.add(RedactionType.DELTA);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Other types don't need to be passed to pdf-tron
|
// Other types don't need to be passed to pdf-tron
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +205,9 @@ public class DownloadPreparationService {
|
|||||||
var redactionResultDetail = redactionResultDetails.stream().filter(rrd -> Objects.equals(fileId, rrd.getFileId()) && rrd.getRedactionType() == redactionType).findFirst();
|
var redactionResultDetail = redactionResultDetails.stream().filter(rrd -> Objects.equals(fileId, rrd.getFileId()) && rrd.getRedactionType() == redactionType).findFirst();
|
||||||
if (redactionResultDetail.isPresent()) {
|
if (redactionResultDetail.isPresent()) {
|
||||||
try (var inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), redactionResultDetail.get().getStorageId())) {
|
try (var inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), redactionResultDetail.get().getStorageId())) {
|
||||||
return inputStream.readAllBytes();
|
byte[] storedFileBytes = inputStream.readAllBytes();
|
||||||
|
inputStream.close();
|
||||||
|
return storedFileBytes;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ public final class DownloadBufferUtils {
|
|||||||
|
|
||||||
var tempFile = FileUtils.createTempFile("download", "pdf");
|
var tempFile = FileUtils.createTempFile("download", "pdf");
|
||||||
org.apache.commons.io.FileUtils.copyInputStreamToFile(inputStream, tempFile);
|
org.apache.commons.io.FileUtils.copyInputStreamToFile(inputStream, tempFile);
|
||||||
|
inputStream.close();
|
||||||
|
|
||||||
if (RequestContextHolder.getRequestAttributes() != null) {
|
if (RequestContextHolder.getRequestAttributes() != null) {
|
||||||
RequestContextHolder.getRequestAttributes().setAttribute(DOWNLOAD_TEMP_FILE_BUFFER_LOCATION, tempFile.getAbsolutePath(), 0);
|
RequestContextHolder.getRequestAttributes().setAttribute(DOWNLOAD_TEMP_FILE_BUFFER_LOCATION, tempFile.getAbsolutePath(), 0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user