CAMEL-6452: Added shutdown method to FileUtil to allow cleaning up temp dir and 
shutdown hook. Thanks to Sanjay Deshmukh for the patch

Conflicts:
        camel-core/src/main/java/org/apache/camel/util/FileUtil.java


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e9f2a1f8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e9f2a1f8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e9f2a1f8

Branch: refs/heads/camel-2.10.x
Commit: e9f2a1f86518d319c904283c04e90d57f243b823
Parents: 7c6b566
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Jul 17 12:11:12 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Jul 17 13:39:04 2013 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/util/FileUtil.java    | 22 +++++++++++++++++---
 .../org/apache/camel/util/FileUtilTest.java     |  9 ++++++++
 2 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e9f2a1f8/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/FileUtil.java 
b/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
index 7b9e5e0..001fa1b 100644
--- a/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
+++ b/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
@@ -30,7 +30,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * File utilities
+ * File utilities.
  */
 public final class FileUtil {
     
@@ -39,8 +39,10 @@ public final class FileUtil {
     private static final transient Logger LOG = 
LoggerFactory.getLogger(FileUtil.class);
     private static final int RETRY_SLEEP_MILLIS = 10;
     private static File defaultTempDir;
+    private static Thread shutdownHook;
 
     private FileUtil() {
+        // Utils method
     }
 
     /**
@@ -296,17 +298,31 @@ public final class FileUtil {
         defaultTempDir = f;
 
         // create shutdown hook to remove the temp dir
-        Thread hook = new Thread() {
+        shutdownHook = new Thread() {
             @Override
             public void run() {
                 removeDir(defaultTempDir);
             }
         };
-        Runtime.getRuntime().addShutdownHook(hook);
+        Runtime.getRuntime().addShutdownHook(shutdownHook);
 
         return defaultTempDir;
     }
 
+    /**
+     * Shutdown and cleanup the temporary directory and removes any shutdown 
hooks in use.
+     */
+    public static synchronized void shutdown() {
+        if (defaultTempDir != null && defaultTempDir.exists()) {
+            removeDir(defaultTempDir);
+        }
+
+        if (shutdownHook != null) {
+            Runtime.getRuntime().removeShutdownHook(shutdownHook);
+            shutdownHook = null;
+        }
+    }
+
     private static void removeDir(File d) {
         String[] list = d.list();
         if (list == null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/e9f2a1f8/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java 
b/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
index 46adfdf..e9a6431 100644
--- a/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
@@ -204,4 +204,13 @@ public class FileUtilTest extends TestCase {
         assertTrue("A new file should be created " + file, 
FileUtil.createNewFile(file));
     }
 
+    public void testShutdown() throws Exception {
+        File tmpFile = FileUtil.createTempFile(null, null);
+        File tmpDir = tmpFile.getParentFile();
+        assertTrue(tmpDir.exists());
+
+        FileUtil.shutdown();
+        assertFalse(tmpDir.exists());
+    }
+
 }

Reply via email to