You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2010/11/06 15:07:18 UTC

svn commit: r1032060 - /wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java

Author: pete
Date: Sat Nov  6 14:07:17 2010
New Revision: 1032060

URL: http://svn.apache.org/viewvc?rev=1032060&view=rev
Log:
make digest functionality in FileUpload more versatile

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java?rev=1032060&r1=1032059&r2=1032060&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java Sat Nov  6 14:07:17 2010
@@ -22,13 +22,14 @@ import java.io.InputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.wicket.IClusterable;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.util.file.Files;
+import org.apache.wicket.util.io.IOUtils;
+import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.upload.FileItem;
 
 
@@ -69,18 +70,9 @@ public class FileUpload implements IClus
 	{
 		if (inputStreamsToClose != null)
 		{
-			for (Iterator<InputStream> inputStreamsIterator = inputStreamsToClose.iterator(); inputStreamsIterator.hasNext();)
+			for (InputStream inputStream : inputStreamsToClose)
 			{
-				InputStream inputStream = inputStreamsIterator.next();
-
-				try
-				{
-					inputStream.close();
-				}
-				catch (IOException e)
-				{
-					// We don't care aobut the exceptions thrown here.
-				}
+				IOUtils.closeQuietly(inputStream);
 			}
 
 			// Reset the list
@@ -107,58 +99,62 @@ public class FileUpload implements IClus
 	/**
 	 * Get the MD5 checksum.
 	 * 
-	 * @return The MD5 checksum of the file
+	 * @param algorithm the digest algorithm, e.g. MD5, SHA-1, SHA-256, SHA-512
+	 *
+	 * @return The cryptographic digest of the file
 	 */
-	public byte[] getMD5()
+	public byte[] getDigest(String algorithm)
 	{
-		MessageDigest digest;
 		try
 		{
-			digest = java.security.MessageDigest.getInstance("MD5");
-		}
-		catch (NoSuchAlgorithmException ex)
-		{
-			throw new WicketRuntimeException(
-				"Your java runtime does not support MD5 digests. Please see java.security.MessageDigest.getInstance(\"MD5\"",
-				ex);
-		}
+			Args.notEmpty(algorithm, "algorithm");
+			MessageDigest digest = java.security.MessageDigest.getInstance(algorithm);
 
-		if (item.isInMemory())
-		{
-			digest.update(getBytes());
-			return digest.digest();
-		}
-
-		InputStream in = null;
-		try
-		{
-			in = item.getInputStream();
-			byte[] buf = new byte[Math.min((int)item.getSize(), 4096 * 10)];
-			int len;
-			while (-1 != (len = in.read(buf)))
+			if (item.isInMemory())
 			{
-				digest.update(buf, 0, len);
+				digest.update(getBytes());
+				return digest.digest();
 			}
-			return digest.digest();
-		}
-		catch (IOException ex)
-		{
-			throw new WicketRuntimeException("Error while reading input data for MD5 checksum", ex);
-		}
-		finally
-		{
-			if (in != null)
+
+			InputStream in = null;
+
+			try
 			{
-				try
+				in = item.getInputStream();
+				byte[] buf = new byte[Math.min((int) item.getSize(), 4096 * 10)];
+				int len;
+				while (-1 != (len = in.read(buf)))
 				{
-					in.close();
-				}
-				catch (IOException ex)
-				{
-					// ignore
+					digest.update(buf, 0, len);
 				}
+				return digest.digest();
+			}
+			catch (IOException ex)
+			{
+				throw new WicketRuntimeException("Error while reading input data for " + algorithm + " checksum", ex);
+			}
+			finally
+			{
+				IOUtils.closeQuietly(in);
 			}
 		}
+		catch (NoSuchAlgorithmException ex)
+		{
+			String error = String.format("Your java runtime does not support digest algorithm [%s]. " +
+					"Please see java.security.MessageDigest.getInstance(\"%s\")", algorithm, algorithm);
+
+			throw new WicketRuntimeException(error, ex);
+		}
+	}
+
+	/**
+	 * Get the MD5 checksum.
+	 *
+	 * @return The MD5 checksum of the file
+	 */
+	public byte[] getMD5()
+	{
+		return getDigest("MD5");
 	}
 
 	/**
@@ -260,8 +256,7 @@ public class FileUpload implements IClus
 	 */
 	public final File writeToTempFile() throws IOException
 	{
-		File temp = File.createTempFile(Session.get().getId(),
-			Files.cleanupFilename(item.getFieldName()));
+		File temp = File.createTempFile(Session.get().getId(), Files.cleanupFilename(item.getFieldName()));
 		writeTo(temp);
 		return temp;
 	}