Skip to content

Commit

Permalink
JAMES-3860 Rely on Files.createTempFile
Browse files Browse the repository at this point in the history
  • Loading branch information
chibenwa committed Nov 21, 2022
1 parent 30c8aef commit 5806c08
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Date;
import java.util.EnumSet;
Expand Down Expand Up @@ -351,7 +352,7 @@ public AppendResult appendMessage(InputStream msgIn, Date internalDate, final Ma
// Create a temporary file and copy the message to it. We will work
// with the file as
// source for the InputStream
file = File.createTempFile("imap", ".msg");
file = Files.createTempFile("imap", ".msg").toFile();
try (FileOutputStream out = new FileOutputStream(file);
BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
BufferedInputStream tmpMsgIn = new BufferedInputStream(new TeeInputStream(msgIn, bufferedOut));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -463,7 +464,7 @@ private File outputFile(Part part, Optional<String> fileName) throws MessagingEx

private File createTempFile(String originalFileName) throws IOException {
OutputFileName outputFileName = OutputFileName.from(originalFileName);
return File.createTempFile(outputFileName.getPrefix(), outputFileName.getSuffix(), new File(directoryName));
return Files.createTempFile(new File(directoryName).toPath(), outputFileName.getPrefix(), outputFileName.getSuffix()).toFile();
}

@VisibleForTesting static class OutputFileName {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
Expand Down Expand Up @@ -79,11 +80,6 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
*/
private final String suffix;

/**
* The directory to use for temporary files.
*/
private final File directory;


/**
* True when close() has been called successfully.
Expand All @@ -98,7 +94,7 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
* @param outputFile The file to which data is saved beyond the threshold.
*/
public BufferedDeferredFileOutputStream(final int threshold, final File outputFile) {
this(threshold, outputFile, null, null, null);
this(threshold, outputFile, null, null);
}


Expand All @@ -109,10 +105,9 @@ public BufferedDeferredFileOutputStream(final int threshold, final File outputFi
* @param threshold The number of bytes at which to trigger an event.
* @param prefix Prefix to use for the temporary file.
* @param suffix Suffix to use for the temporary file.
* @param directory Temporary file directory.
*/
public BufferedDeferredFileOutputStream(final int threshold, final String prefix, final String suffix, final File directory) {
this(threshold, null, prefix, suffix, directory);
public BufferedDeferredFileOutputStream(final int threshold, final String prefix, final String suffix) {
this(threshold, null, prefix, suffix);
if (prefix == null) {
throw new IllegalArgumentException("Temporary file prefix is missing");
}
Expand All @@ -129,15 +124,14 @@ public BufferedDeferredFileOutputStream(final int threshold, final String prefix
* @param directory Temporary file directory.
*/
private BufferedDeferredFileOutputStream(final int threshold, final File outputFile, final String prefix,
final String suffix, final File directory) {
final String suffix) {
super(threshold);
this.outputFile = outputFile;

memoryOutputStream = new ByteArrayOutputStream();
currentOutputStream = memoryOutputStream;
this.prefix = prefix;
this.suffix = suffix;
this.directory = directory;
}

/**
Expand All @@ -164,7 +158,7 @@ protected OutputStream getStream() throws IOException {
@Override
protected void thresholdReached() throws IOException {
if (prefix != null) {
outputFile = File.createTempFile(prefix, suffix, directory);
outputFile = Files.createTempFile(prefix, suffix).toFile();
}
final FileOutputStream fos = new FileOutputStream(outputFile);
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,6 @@ private static int threshold() {
*/
private final String sourceId;

/**
* Temporary directory to use
*/
private static final File TMPDIR = new File(System.getProperty("java.io.tmpdir"));

static class Resource extends LeakAware.Resource {
private final BufferedDeferredFileOutputStream out;
private final Set<InputStream> streams;
Expand Down Expand Up @@ -111,15 +106,15 @@ public BufferedDeferredFileOutputStream getOut() {

public static MimeMessageInputStreamSource create(String key, InputStream in) throws MessagingException {
Disposable.LeakAware.track();
BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64", TMPDIR);
BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64");
Resource resource = new Resource(out, new HashSet<>());

return new MimeMessageInputStreamSource(resource, key, in);
}

public static MimeMessageInputStreamSource create(String key) {
Disposable.LeakAware.track();
BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64", TMPDIR);
BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64");
Resource resource = new Resource(out, new HashSet<>());

return new MimeMessageInputStreamSource(resource, key);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,8 @@ public void testTempFileBelowThreshold() {

final String prefix = "commons-io-test";
final String suffix = ".out";
final File tempDir = new File(".");
final BufferedDeferredFileOutputStream dfos =
new BufferedDeferredFileOutputStream(testBytes.length + 42, prefix, suffix, tempDir);
new BufferedDeferredFileOutputStream(testBytes.length + 42, prefix, suffix);
assertNull("Check file is null-A", dfos.getFile());
try
{
Expand All @@ -269,9 +268,8 @@ public void testTempFileAboveThreshold() {

final String prefix = "commons-io-test";
final String suffix = ".out";
final File tempDir = new File(".");
final BufferedDeferredFileOutputStream dfos =
new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir);
new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix);
assertNull("Check file is null-A", dfos.getFile());
try
{
Expand All @@ -287,7 +285,6 @@ public void testTempFileAboveThreshold() {
assertTrue("Check file exists", dfos.getFile().exists());
assertTrue("Check prefix", dfos.getFile().getName().startsWith(prefix));
assertTrue("Check suffix", dfos.getFile().getName().endsWith(suffix));
assertEquals("Check dir", tempDir.getPath(), dfos.getFile().getParent());

verifyResultFile(dfos.getFile());

Expand All @@ -303,9 +300,8 @@ public void testTempFileAboveThresholdPrefixOnly() {

final String prefix = "commons-io-test";
final String suffix = null;
final File tempDir = null;
final BufferedDeferredFileOutputStream dfos =
new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir);
new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix);
assertNull("Check file is null-A", dfos.getFile());
try
{
Expand Down Expand Up @@ -337,10 +333,9 @@ public void testTempFileError() throws Exception {

final String prefix = null;
final String suffix = ".out";
final File tempDir = new File(".");
try
{
(new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir)).close();
(new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix)).close();
fail("Expected IllegalArgumentException ");
}
catch (final IllegalArgumentException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.file.Files;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
Expand Down Expand Up @@ -102,7 +103,7 @@ protected static void toFile(File file, String content) throws StorageException
File tmpFile = null;

try {
tmpFile = File.createTempFile(file.getName(), ".tmp", file.getParentFile());
tmpFile = Files.createTempFile(file.getParentFile().toPath(), "", ".tmp").toFile();
try (Writer out = new OutputStreamWriter(new BufferedOutputStream(
new FileOutputStream(tmpFile), bufferSize), UTF_8)) {
out.write(content);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.util.Deque;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -203,7 +204,7 @@ private void uploadToAFile(ChannelHandlerContext ctx, ByteBuf in, Map<String, Ob
if (attachment.containsKey(STORED_DATA)) {
sink = (Sinks.Many<byte[]>) attachment.get(SINK);
} else {
f = File.createTempFile("imap-literal", ".tmp");
f = Files.createTempFile("imap-literal", ".tmp").toFile();
attachment.put(STORED_DATA, f);
final AtomicInteger written = new AtomicInteger(0);
attachment.put(WRITTEN_DATA, written);
Expand Down

0 comments on commit 5806c08

Please sign in to comment.