/*
 * $Id$ $Revision:
 * 1.5 $ $Date$
 * 
 * ==============================================================================
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package wicket.markup.html.form.upload;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;

import wicket.util.file.Files;
import wicket.util.upload.FileItem;

/**
 * Model for file uploads.
 * 
 * @author Jonathan Locke
 */
public class FileUpload implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	final FileItem item;

	/**
	 * Constructor
	 * 
	 * @param item
	 *            The uploaded file item
	 */
	FileUpload(final FileItem item)
	{
		this.item = item;
	}

	/**
	 * Deletes temp file from disk
	 */
	public void delete()
	{
		item.delete();
	}
	
	/**
	 * @return Uploaded file as an array of bytes
	 */
	public byte[] getBytes()
	{
		return item.get();
	}

	/**
	 * @return Content type for upload
	 */
	public String getContentType()
	{
		return item.getContentType();
	}
	
	/**
	 * @return File object for client-side file that was uploaded.
	 */
	public File getFile()
	{
		return new File(item.getName());
	}

	/**
	 * @return Input stream with file contents.
	 * @throws IOException
	 */
	public InputStream getInputStream() throws IOException
	{
		return item.getInputStream();
	}

	/**
	 * @return The upload's size
	 */
	public long getSize()
	{
		return item.getSize();
	}

	/**
	 * Saves this file upload to a given file on the server side.
	 * 
	 * @param file
	 *            The file
	 * @throws IOException
	 */
	public void writeTo(final File file) throws IOException
	{
		InputStream is = getInputStream();
		try
		{
			Files.writeTo(file, is);
		}
		finally
		{
			is.close();
		}
	}
}

@@ -17,18 +17,12 @@
 sion
-:
+$
 %0A *
- 1.5 $
  $Da
@@ -815,16 +815,95 @@
 izable;%0A
+import java.nio.channels.FileLockInterruptionException;%0A%0Aimport wicket.Session;
 %0Aimport 
@@ -1128,17 +1128,16 @@
 D = 1L;%0A
-%09
 %0A%09final 
@@ -1376,33 +1376,32 @@
 em.delete();%0A%09%7D%0A
-%09
 %0A%09/**%0A%09 * @retur
@@ -1612,17 +1612,16 @@
 e();%0A%09%7D%0A
-%09
 %0A%09/**%0A%09 
@@ -2337,11 +2337,541 @@
 ;%0A%09%09%7D%0A%09%7D
+%0A%0A%09/**%0A%09 * Convinience method that copies the input stream returned by%0A%09 * %7B@link #getInputStream()%7D into a temporary file.%0A%09 * %3Cp%3E%0A%09 * Only use this if you actually need a %7B@link File%7D to work with, in all%0A%09 * other cases use %7B@link #getInputStream()%7D%0A%09 * %0A%09 * @return temporary file containing the contents of this file upload%0A%09 * @throws IOException%0A%09 */%0A%09public final File writeToTempFile() throws IOException%0A%09%7B%0A%09%09File temp = File.createTempFile(Session.get().getId(), item.getFieldName());%0A%09%09writeTo(temp);%0A%09%09return temp;%0A%09%7D
 %0A%7D%0A

fix [ 1372481 ] FileUpload getFile() return not existent files