Author: mgrigorov
Date: Thu Jul  7 14:33:47 2011
New Revision: 1143845

URL: http://svn.apache.org/viewvc?rev=1143845&view=rev
Log:
WICKET-3875 Clear Files.remove() behavior

Add separate method for removing folders.
Move mkdirs() from DiskDataStore to Files.


Modified:
    
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
    
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java

Modified: 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java?rev=1143845&r1=1143844&r2=1143845&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
(original)
+++ 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
Thu Jul  7 14:33:47 2011
@@ -116,7 +116,7 @@ public class Files
         */
        public static boolean remove(final java.io.File file)
        {
-               if (file.exists() == false)
+               if (file == null || file.exists() == false || 
file.isDirectory())
                {
                        return false;
                }
@@ -149,6 +149,44 @@ public class Files
        }
 
        /**
+        * Deletes a folder by recursively removing the files and folders 
inside it. Delegates the work
+        * to {@link #remove(File)} for plain files.
+        * 
+        * @param folder
+        *            the folder to delete
+        * @return {@code true} if the folder is deleted successfully.
+        */
+       public static final boolean removeFolder(final File folder)
+       {
+               if (folder == null)
+               {
+                       return false;
+               }
+
+               if (folder.isDirectory())
+               {
+                       File[] files = folder.listFiles();
+                       if (files != null)
+                       {
+                               for (File file : files)
+                               {
+                                       if (file.isDirectory())
+                                       {
+                                               removeFolder(file);
+                                       }
+                                       else
+                                       {
+                                               remove(file);
+                                       }
+                               }
+                       }
+               }
+
+               // delete the empty folder
+               return folder.delete();
+       }
+
+       /**
         * Writes the given input stream to the given file
         * 
         * @param file
@@ -346,4 +384,32 @@ public class Files
                // last file modification timestamp
                return Time.millis(millis);
        }
+
+       /**
+        * Utility method for creating a directory
+        * 
+        * @param file
+        */
+       public static void mkdirs(File file)
+       {
+               // for some reason, simple file.mkdirs sometimes fails under 
heavy load
+               for (int j = 0; j < 5; ++j)
+               {
+                       for (int i = 0; i < 10; ++i)
+                       {
+                               if (file.mkdirs())
+                               {
+                                       return;
+                               }
+                       }
+                       try
+                       {
+                               Thread.sleep(100);
+                       }
+                       catch (InterruptedException ignore)
+                       {
+                       }
+               }
+               logger.error("Failed to make directory " + file);
+       }
 }

Modified: 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java?rev=1143845&r1=1143844&r2=1143845&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
 (original)
+++ 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
 Thu Jul  7 14:33:47 2011
@@ -28,11 +28,18 @@ public class FilesTest extends Assert
 {
 
        /**
+        * Tests for {@link Files#remove(java.io.File)}
+        * 
         * @throws IOException
         */
        @Test
        public void remove() throws IOException
        {
+               assertFalse("'null' files are not deleted.", 
Files.remove(null));
+
+               assertFalse("Non existing files are not deleted.", 
Files.remove(new File(
+                       
"/somethingThatDoesntExistsOnMostMachines-111111111111111111111111111111")));
+
                java.io.File file = 
java.io.File.createTempFile("wicket-test--", ".tmp");
                assertTrue("The just created file should exist!", 
file.exists());
 
@@ -44,5 +51,35 @@ public class FilesTest extends Assert
                removed = Files.remove(file);
                assertFalse("The just removed file should not exist!", 
file.exists());
                assertFalse("Files.remove(file) should not remove the file", 
removed);
+
+               // try to remove a folder
+               java.io.File folder = new 
File(System.getProperty("java.io.tmpdir"), "wicket-test-folder");
+               Files.mkdirs(folder);
+               assertTrue(folder.isDirectory());
+               assertFalse("Should not be able to delete a folder, even empty 
one.", Files.remove(folder));
+               assertTrue("Should not be able to delete a folder.", 
Files.removeFolder(folder));
+       }
+
+       /**
+        * Tests for {@link Files#removeFolder(java.io.File)}
+        * 
+        * @throws Exception
+        */
+       @Test
+       public void removeFolder() throws Exception
+       {
+               assertFalse("'null' folders are not deleted.", 
Files.remove(null));
+
+               assertFalse("Non existing files are not deleted.", 
Files.removeFolder(new File(
+                       
"/somethingThatDoesntExistsOnMostMachines-111111111111111111111111111111")));
+
+               java.io.File folder = new 
File(System.getProperty("java.io.tmpdir"), "wicket-test-folder");
+               Files.mkdirs(folder);
+               assertTrue(folder.isDirectory());
+               File file = new File(folder, "child");
+               file.createNewFile();
+               assertTrue(file.exists());
+
+               assertTrue("Should be able to delete a folder.", 
Files.removeFolder(folder));
        }
 }


Reply via email to