You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/07/07 16:33:48 UTC
svn commit: r1143845 - in /wicket/trunk/wicket-util/src:
main/java/org/apache/wicket/util/file/Files.java
test/java/org/apache/wicket/util/file/FilesTest.java
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));
}
}