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));
 	}
 }