You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ts...@apache.org on 2015/05/26 18:42:14 UTC

wicket git commit: WICKET-5819 Close InputStream via PartWriterCallback if not readBuffered

Repository: wicket
Updated Branches:
  refs/heads/WICKET-5819_Improvements fd25dcc96 -> 0df9ae2fc


WICKET-5819 Close InputStream via PartWriterCallback if not readBuffered

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0df9ae2f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0df9ae2f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0df9ae2f

Branch: refs/heads/WICKET-5819_Improvements
Commit: 0df9ae2fc97c8e143a5a58330a65b140f85714e3
Parents: fd25dcc
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Tue May 26 18:40:23 2015 +0200
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Tue May 26 18:40:23 2015 +0200

----------------------------------------------------------------------
 .../request/resource/PackageResource.java       | 12 +++--
 .../request/resource/PartWriterCallback.java    | 48 +++++++++++++++++---
 .../org/apache/wicket/examples/media/Home.html  |  2 +-
 3 files changed, 51 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0df9ae2f/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
index bd5662c..2253446 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
@@ -353,9 +353,13 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 				Long endbyte = RequestCycle.get().getMetaData(CONTENT_RANGE_ENDBYTE);
 
 				// send response body with resource data
-				resourceResponse.setWriteCallback(new PartWriterCallback(bytes != null
+				PartWriterCallback partWriterCallback = new PartWriterCallback(bytes != null
 					? new ByteArrayInputStream(bytes) : inputStream,
-					resourceResponse.getContentLength(), startbyte, endbyte));
+					resourceResponse.getContentLength(), startbyte, endbyte);
+
+				// If read buffered is set to false ensure the part writer callback is going to
+				// close the input stream
+				resourceResponse.setWriteCallback(partWriterCallback.setClose(!readBuffered));
 			}
 			catch (IOException e)
 			{
@@ -757,8 +761,8 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 	/**
 	 * If the package resource should be read buffered.<br>
 	 * <br>
-	 * WARNING - if the stream is not read buffered compressors will not work, because they require the
-	 * whole content to be read into memory.<br>
+	 * WARNING - if the stream is not read buffered compressors will not work, because they require
+	 * the whole content to be read into memory.<br>
 	 * ({@link org.apache.wicket.javascript.IJavaScriptCompressor}, <br>
 	 * {@link org.apache.wicket.css.ICssCompressor}, <br>
 	 * {@link org.apache.wicket.resource.IScopeAwareTextResourceProcessor})

http://git-wip-us.apache.org/repos/asf/wicket/blob/0df9ae2f/wicket-core/src/main/java/org/apache/wicket/request/resource/PartWriterCallback.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PartWriterCallback.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PartWriterCallback.java
index 59b617f..f3fcb6e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PartWriterCallback.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PartWriterCallback.java
@@ -30,7 +30,8 @@ import org.apache.wicket.util.lang.Args;
 
 /**
  * Used to read a part of an input stream and writes it to the output stream of the response taken
- * from attributes in {@link #writeData(org.apache.wicket.request.resource.IResource.Attributes)}  method.
+ * from attributes in {@link #writeData(org.apache.wicket.request.resource.IResource.Attributes)}
+ * method.
  *
  * @author Tobias Soloschenko
  * @since 7.0.0
@@ -48,14 +49,14 @@ public class PartWriterCallback extends WriteCallback
 	private final Long contentLength;
 
 	/**
-	 * The byte to start reading from. If omitted then the input stream will be read
-	 * from its beginning
+	 * The byte to start reading from. If omitted then the input stream will be read from its
+	 * beginning
 	 */
 	private Long startbyte;
 
 	/**
-	 * The end byte to read from the {@link #inputStream}.
-	 * If omitted then the input stream will be read till its end
+	 * The end byte to read from the {@link #inputStream}. If omitted then the input stream will be
+	 * read till its end
 	 */
 	private Long endbyte;
 
@@ -64,6 +65,11 @@ public class PartWriterCallback extends WriteCallback
 	 */
 	private int bufferSize;
 
+	/**
+	 * If the given input stream is going to be closed
+	 */
+	private boolean close = false;
+
 
 	/**
 	 * Creates a part writer callback.<br>
@@ -169,6 +175,10 @@ public class PartWriterCallback extends WriteCallback
 			// org.apache.catalina.connector.ClientAbortException)
 			// we ignore this case
 		}
+		if (close)
+		{
+			IOUtils.close(inputStream);
+		}
 	}
 
 	/**
@@ -186,10 +196,36 @@ public class PartWriterCallback extends WriteCallback
 	 *
 	 * @param bufferSize
 	 *            the buffer size used to send the data to the client
+	 * @return the part writer callback
 	 */
-	public void setBufferSize(int bufferSize)
+	public PartWriterCallback setBufferSize(int bufferSize)
 	{
 		this.bufferSize = bufferSize;
+		return this;
+	}
+
+	/**
+	 * If the given input stream is going to be closed
+	 * 
+	 * @return if the given input stream is going to be closed
+	 */
+	public boolean isClose()
+	{
+		return close;
+	}
+
+	/**
+	 * If set true the given input stream is going to be closed
+	 * 
+	 * @param close
+	 *            if the given input stream is going to be closed
+	 * @return the part writer callback
+	 */
+	public PartWriterCallback setClose(boolean close)
+	{
+		this.close = close;
+		return this;
+
 	}
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0df9ae2f/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.html b/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.html
index 98395e0..4a1725d 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.html
@@ -10,7 +10,7 @@
 	<div>
 		<!-- Video 1 -->
 		<video wicket:id="video1" ></video>
-		<div class="videoDescription"><b>Video1</b><br/>Demonstrate the basic set of methods to configure a video (setAutoplay(false); setControls(true); setLooping(false); setWidth(320); setHeight(240);) The width and height are null by default which means that the video is going to be rendered in size of the media file. The PackageResourceReference is marked to be read partially so that the media file is not stored in memory</div>
+		<div class="videoDescription"><b>Video1</b><br/>Demonstrate the basic set of methods to configure a video (setAutoplay(false); setControls(true); setLooping(false); setWidth(320); setHeight(240);) The width and height are null by default which means that the video is going to be rendered in size of the media file. The PackageResourceReference is set to readBuffered(false) which means that the media file is not stored in memory.</div>
 		<div class="clearer"></div>
 
 		<!-- Video 2 -->