Pull request #510: RED-5248: Fix handling of temp files
Merge in RED/redaction-service from RED-5248 to master * commit 'b839c4e3aea67c94fa29d476f63673fc232dcdab': RED-5248: Fix handling of temp files
This commit is contained in:
commit
c16b6d41d5
@ -4,18 +4,12 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.attribute.FileAttribute;
|
|
||||||
import java.nio.file.attribute.PosixFilePermission;
|
|
||||||
import java.nio.file.attribute.PosixFilePermissions;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.SystemUtils;
|
|
||||||
import org.apache.pdfbox.io.MemoryUsageSetting;
|
import org.apache.pdfbox.io.MemoryUsageSetting;
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
import org.apache.pdfbox.pdmodel.PDPage;
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
@ -36,6 +30,7 @@ import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractT
|
|||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.model.CleanRulings;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.model.CleanRulings;
|
||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.service.RulingCleaningService;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.service.RulingCleaningService;
|
||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.service.TableExtractionService;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.service.TableExtractionService;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.tableextraction.utils.FileUtils;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -60,17 +55,7 @@ public class PdfSegmentationService {
|
|||||||
PDDocument pdDocument = null;
|
PDDocument pdDocument = null;
|
||||||
try {
|
try {
|
||||||
//create tempFile
|
//create tempFile
|
||||||
File tempFile;
|
File tempFile = FileUtils.createTempFile("document", ".pdf");
|
||||||
|
|
||||||
if (SystemUtils.IS_OS_UNIX) {
|
|
||||||
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"));
|
|
||||||
tempFile = Files.createTempFile("document", ".pdf", attr).toFile();
|
|
||||||
} else {
|
|
||||||
tempFile = Files.createTempFile("document", ".pdf").toFile();
|
|
||||||
tempFile.setReadable(true, true);
|
|
||||||
tempFile.setWritable(true, true);
|
|
||||||
tempFile.setExecutable(true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<Integer, List<PdfTableCell>> pdfTableCells = new HashMap<>();
|
Map<Integer, List<PdfTableCell>> pdfTableCells = new HashMap<>();
|
||||||
if (redactionServiceSettings.isCvTableParsingEnabled()) {
|
if (redactionServiceSettings.isCvTableParsingEnabled()) {
|
||||||
|
|||||||
@ -0,0 +1,43 @@
|
|||||||
|
package com.iqser.red.service.redaction.v1.server.tableextraction.utils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@UtilityClass
|
||||||
|
public class FileUtils {
|
||||||
|
|
||||||
|
public File createTempFile(String filenamePrefix, String filenameSuffix) throws IOException {
|
||||||
|
|
||||||
|
System.out.println(filenamePrefix + " " + filenameSuffix);
|
||||||
|
File tempFile = Files.createTempFile(filenamePrefix, filenameSuffix).toFile();
|
||||||
|
setRWPermissionsOnlyForOwner(tempFile);
|
||||||
|
|
||||||
|
return tempFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// We don't need to check the results of the permission setters below,
|
||||||
|
// since we're manipulating a file we created ourselves.
|
||||||
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||||
|
private void setRWPermissionsOnlyForOwner(File tempFile) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// deny for all
|
||||||
|
tempFile.setReadable(false);
|
||||||
|
tempFile.setWritable(false);
|
||||||
|
tempFile.setExecutable(false);
|
||||||
|
// allow for owner
|
||||||
|
tempFile.setReadable(true, true);
|
||||||
|
tempFile.setWritable(true, true);
|
||||||
|
} catch (SecurityException ex) {
|
||||||
|
// This should never happen since we're creating a temp file ourselves.
|
||||||
|
log.warn("Caught an exception during temp file creation. This should not happend. Check the code.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -15,6 +15,7 @@ import org.springframework.core.io.InputStreamResource;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.iqser.red.commons.jackson.ObjectMapperFactory;
|
import com.iqser.red.commons.jackson.ObjectMapperFactory;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.tableextraction.utils.FileUtils;
|
||||||
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.iqser.red.storage.commons.service.StorageService;
|
||||||
|
|
||||||
@ -67,7 +68,7 @@ public class FileSystemBackedStorageService implements StorageService {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public <T> void storeJSONObject(String objectId, T any) {
|
public <T> void storeJSONObject(String objectId, T any) {
|
||||||
|
|
||||||
File tempFile = File.createTempFile("test", ".tmp");
|
File tempFile = FileUtils.createTempFile("test", ".tmp");
|
||||||
getMapper().writeValue(new FileOutputStream(tempFile), any);
|
getMapper().writeValue(new FileOutputStream(tempFile), any);
|
||||||
dataMap.put(objectId, tempFile);
|
dataMap.put(objectId, tempFile);
|
||||||
}
|
}
|
||||||
@ -106,7 +107,7 @@ public class FileSystemBackedStorageService implements StorageService {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void storeObject(String objectId, InputStream stream) {
|
public void storeObject(String objectId, InputStream stream) {
|
||||||
|
|
||||||
File tempFile = File.createTempFile("test", ".tmp");
|
File tempFile = FileUtils.createTempFile("test", ".tmp");
|
||||||
|
|
||||||
try (var fileOutputStream = new FileOutputStream(tempFile)) {
|
try (var fileOutputStream = new FileOutputStream(tempFile)) {
|
||||||
IOUtils.copy(stream, fileOutputStream);
|
IOUtils.copy(stream, fileOutputStream);
|
||||||
|
|||||||
@ -1,5 +1,13 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.realdata;
|
package com.iqser.red.service.redaction.v1.server.realdata;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||||
@ -10,14 +18,6 @@ import com.iqser.red.service.redaction.v1.server.annotate.AnnotationService;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.core.io.ClassPathResource;
|
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class AnalyseFileRealDataIntegrationTest extends LiveDataIntegrationTest {
|
public class AnalyseFileRealDataIntegrationTest extends LiveDataIntegrationTest {
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ public class AnalyseFileRealDataIntegrationTest extends LiveDataIntegrationTest
|
|||||||
// var annotated = annotationService.annotate(AnnotateRequest.builder().fileId("fileId").dossierId("dossierId").build());
|
// var annotated = annotationService.annotate(AnnotateRequest.builder().fileId("fileId").dossierId("dossierId").build());
|
||||||
// annotated.getDocument();
|
// annotated.getDocument();
|
||||||
//
|
//
|
||||||
// File tempFile = File.createTempFile("annotated",".pdf");
|
// File tempFile = FileUtils.createTempFile("annotated",".pdf");
|
||||||
// IOUtils.write(annotated.getDocument(), new FileOutputStream(tempFile));
|
// IOUtils.write(annotated.getDocument(), new FileOutputStream(tempFile));
|
||||||
// log.warn("File saved to: {}",tempFile.getAbsolutePath());
|
// log.warn("File saved to: {}",tempFile.getAbsolutePath());
|
||||||
// Runtime.getRuntime().exec("open "+tempFile.getAbsolutePath());
|
// Runtime.getRuntime().exec("open "+tempFile.getAbsolutePath());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user