MNT-24883 base engine changes to maintain source file name

This commit is contained in:
bsayan2 2025-05-23 18:33:38 +05:30
parent e7ed64d055
commit 4088f51b67
3 changed files with 69 additions and 82 deletions

View File

@ -120,7 +120,6 @@ public class FileManager
{
throw new TransformException(INSUFFICIENT_STORAGE, "Failed to store the source file", e);
}
}
public static File createTargetFile(HttpServletRequest request, String sourceMimetype, String targetMimetype)
@ -263,21 +262,12 @@ public class FileManager
public static File createTempDirForDocFile(String sourceFileName)
{
final File alfrescoTempDirectory = getTempDir();
try
File tempDir = new File(getTempDir(), UUID.randomUUID().toString());
if (!tempDir.mkdirs() && !tempDir.exists())
{
UUID uuid = UUID.randomUUID();
final File tempDir = new File(alfrescoTempDirectory, uuid.toString());
if (!tempDir.exists() && !tempDir.mkdirs() && !tempDir.exists())
{
throw new RuntimeException("Failed to create temp directory: " + tempDir);
}
return new File(tempDir, sourceFileName);
}
catch (Exception e)
{
throw new RuntimeException("Failed to created temp file: \n file: " + sourceFileName + "\n", e);
throw new TransformException(INSUFFICIENT_STORAGE, "Failed to create temp directory: " + tempDir);
}
return new File(tempDir, sourceFileName);
}
private static File getTempDir()

View File

@ -30,6 +30,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
@ -236,12 +237,14 @@ public class TransformManagerImpl implements TransformManager
public void deleteDocUUIDFolder()
{
if (sourceFile == null)
{
return;
}
if (Util.isDocFile(sourceFile.getPath()))
{
File parentDir = sourceFile.getParentFile();
if (parentDir != null
&& !StringUtils.equalsAny(parentDir.getName().toLowerCase(), "alfresco", "temp", "tmp")
&& !StringUtils.equalsAny(parentDir.getName().toLowerCase(Locale.ROOT), "alfresco", "temp", "tmp")
&& !parentDir.delete())
{
logger.error("Failed to delete parent directory {}", parentDir.getPath());

View File

@ -81,12 +81,6 @@ public class StreamHandlerTest
return new BufferedInputStream(new FileInputStream(sourceFile));
}
private File tempDocFile() throws IOException
{
return File.createTempFile("temp_", ".docx", tempDir);
}
private File tempFile() throws IOException
{
return File.createTempFile("temp_", null, tempDir);
@ -188,67 +182,6 @@ public class StreamHandlerTest
}
}
@Test
public void testStartWithInputStreamAndCallCreateSourceFileForDocxFiles() throws Exception
{
try (InputStream inputStream = getSourceInputStreamFromBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream())
{
transformManager.setSourceFileName("test.docx");
transformManager.setInputStream(inputStream);
OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream);
File sourceFileCreatedByTransform = transformManager.createSourceFile();
assertTrue(sourceFileCreatedByTransform.exists());
write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE);
transformManager.copyTargetFileToOutputStream();
transformManager.getOutputStream().close();
closeInputStreamWithoutException(inputStream);
Long outputLength = transformManager.getOutputLength();
transformManager.deleteSourceFile();
transformManager.deleteTargetFile();
assertEquals(EXPECTED, read(outputStream));
assertEquals(EXPECTED.length(), outputLength);
assertFalse(sourceFileCreatedByTransform.exists());
}
}
@Test
public void testStartWithInputStreamAndCallCreateSourceFileForDocxFilesWithHttpRequest() throws Exception
{
try (InputStream inputStream = getSourceInputStreamFromBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream())
{
HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class);
Part mockPart = Mockito.mock(Part.class);
Mockito.when(mockPart.getSubmittedFileName()).thenReturn("dummy.docx");
Collection<Part> parts = Arrays.asList(mockPart);
Mockito.when(mockRequest.getParts()).thenReturn(parts);
transformManager.setSourceMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
transformManager.setInputStream(inputStream);
transformManager.setRequest(mockRequest);
OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream);
File sourceFileCreatedByTransform = transformManager.createSourceFile();
assertTrue(sourceFileCreatedByTransform.exists());
write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE);
transformManager.copyTargetFileToOutputStream();
transformManager.getOutputStream().close();
closeInputStreamWithoutException(inputStream);
Long outputLength = transformManager.getOutputLength();
transformManager.deleteSourceFile();
transformManager.deleteTargetFile();
assertEquals(EXPECTED, read(outputStream));
assertEquals(EXPECTED.length(), outputLength);
assertFalse(sourceFileCreatedByTransform.exists());
}
}
@Test
public void testStartWithSourceFile() throws Exception
{
@ -643,4 +576,65 @@ public class StreamHandlerTest
}.handleTransformRequest();
}
}
@Test
public void testStartWithInputStreamAndCallCreateSourceFileForDocxFiles() throws Exception
{
try (InputStream inputStream = getSourceInputStreamFromBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream())
{
transformManager.setSourceFileName("test.docx");
transformManager.setInputStream(inputStream);
OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream);
File sourceFileCreatedByTransform = transformManager.createSourceFile();
assertTrue(sourceFileCreatedByTransform.exists());
write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE);
transformManager.copyTargetFileToOutputStream();
transformManager.getOutputStream().close();
closeInputStreamWithoutException(inputStream);
Long outputLength = transformManager.getOutputLength();
transformManager.deleteSourceFile();
transformManager.deleteTargetFile();
assertEquals(EXPECTED, read(outputStream));
assertEquals(EXPECTED.length(), outputLength);
assertFalse(sourceFileCreatedByTransform.exists());
}
}
@Test
public void testStartWithInputStreamAndCallCreateSourceFileForDocxFilesWithHttpRequest() throws Exception
{
try (InputStream inputStream = getSourceInputStreamFromBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream())
{
HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class);
Part mockPart = Mockito.mock(Part.class);
Mockito.when(mockPart.getSubmittedFileName()).thenReturn("dummy.docx");
Collection<Part> parts = Arrays.asList(mockPart);
Mockito.when(mockRequest.getParts()).thenReturn(parts);
transformManager.setSourceMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
transformManager.setInputStream(inputStream);
transformManager.setRequest(mockRequest);
OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream);
File sourceFileCreatedByTransform = transformManager.createSourceFile();
assertTrue(sourceFileCreatedByTransform.exists());
write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE);
transformManager.copyTargetFileToOutputStream();
transformManager.getOutputStream().close();
closeInputStreamWithoutException(inputStream);
Long outputLength = transformManager.getOutputLength();
transformManager.deleteSourceFile();
transformManager.deleteTargetFile();
assertEquals(EXPECTED, read(outputStream));
assertEquals(EXPECTED.length(), outputLength);
assertFalse(sourceFileCreatedByTransform.exists());
}
}
}