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/23 15:54:24 UTC
wicket git commit: WICKET-5819 - Improvement not to read the whole
media file
Repository: wicket
Updated Branches:
refs/heads/WICKET-5819_Improvements [created] b3c9843f8
WICKET-5819 - Improvement not to read the whole media file
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b3c9843f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b3c9843f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b3c9843f
Branch: refs/heads/WICKET-5819_Improvements
Commit: b3c9843f805560f6685106b97cd2f9ddab8c28a9
Parents: 91f2f8a
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Sat May 23 15:51:55 2015 +0200
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Sat May 23 15:51:55 2015 +0200
----------------------------------------------------------------------
.../request/resource/PackageResource.java | 97 ++++++++++++++------
.../resource/PackageResourceReference.java | 21 ++++-
.../org/apache/wicket/examples/media/Home.java | 2 +-
3 files changed, 86 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/b3c9843f/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 ee8bfec..8de030b 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
@@ -79,7 +79,9 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
/**
* Exception thrown when the creation of a package resource is not allowed.
*/
- public static final class PackageResourceBlockedException extends WicketRuntimeException implements IWicketInternalException
+ public static final class PackageResourceBlockedException extends WicketRuntimeException
+ implements
+ IWicketInternalException
{
private static final long serialVersionUID = 1L;
@@ -126,9 +128,9 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
private final String variation;
/**
- * A flag indicating whether {@code ITextResourceCompressor} can be used to compress this resource.
- * Default is {@code false} because this resource may be used for binary data (e.g. an image).
- * Specializations of this class should change this flag appropriately.
+ * A flag indicating whether {@code ITextResourceCompressor} can be used to compress this
+ * resource. Default is {@code false} because this resource may be used for binary data (e.g. an
+ * image). Specializations of this class should change this flag appropriately.
*/
private boolean compress = false;
@@ -143,6 +145,8 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
*/
private String textEncoding = null;
+ private boolean readPartially = false;
+
/**
* Hidden constructor.
*
@@ -286,7 +290,7 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
if (resourceStream == null)
{
return sendResourceError(resourceResponse, HttpServletResponse.SC_NOT_FOUND,
- "Unable to find resource");
+ "Unable to find resource");
}
// add Last-Modified header (to support HEAD requests and If-Modified-Since)
@@ -316,19 +320,27 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
{
// read resource data to get the content length
InputStream inputStream = resourceStream.getInputStream();
- byte[] bytes = IOUtils.toByteArray(inputStream);
- long contentLength = bytes.length;
+ byte[] bytes = null;
// send Content-Length header
- resourceResponse.setContentLength(contentLength);
+ if (readPartially)
+ {
+ resourceResponse.setContentLength(resourceStream.length().bytes());
+ }
+ else
+ {
+ bytes = IOUtils.toByteArray(inputStream);
+ resourceResponse.setContentLength(new Long(bytes.length));
+ }
// get content range information
Long startbyte = RequestCycle.get().getMetaData(CONTENT_RANGE_STARTBYTE);
Long endbyte = RequestCycle.get().getMetaData(CONTENT_RANGE_ENDBYTE);
// send response body with resource data
- resourceResponse.setWriteCallback(new PartWriterCallback(
- new ByteArrayInputStream(bytes), contentLength, startbyte, endbyte));
+ resourceResponse.setWriteCallback(new PartWriterCallback(bytes != null
+ ? new ByteArrayInputStream(bytes) : inputStream,
+ resourceResponse.getContentLength(), startbyte, endbyte));
}
catch (IOException e)
{
@@ -421,8 +433,8 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
}
/**
- * @return whether {@link org.apache.wicket.resource.ITextResourceCompressor} can be used to compress the
- * resource.
+ * @return whether {@link org.apache.wicket.resource.ITextResourceCompressor} can be used to
+ * compress the resource.
*/
public boolean getCompress()
{
@@ -441,9 +453,10 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
private IResourceStream internalGetResourceStream(final String style, final Locale locale)
{
IResourceStreamLocator resourceStreamLocator = Application.get()
- .getResourceSettings()
- .getResourceStreamLocator();
- IResourceStream resourceStream = resourceStreamLocator.locate(getScope(), absolutePath, style, variation, locale, null, false);
+ .getResourceSettings()
+ .getResourceStreamLocator();
+ IResourceStream resourceStream = resourceStreamLocator.locate(getScope(), absolutePath,
+ style, variation, locale, null, false);
String realPath = absolutePath;
if (resourceStream instanceof IFixedLocationResourceStream)
@@ -467,8 +480,8 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
if (accept(realPath) == false)
{
throw new PackageResourceBlockedException(
- "Access denied to (static) package resource " + absolutePath +
- ". See IPackageResourceGuard");
+ "Access denied to (static) package resource " + absolutePath +
+ ". See IPackageResourceGuard");
}
if (resourceStream != null)
@@ -493,19 +506,23 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
@Override
public InputStream getInputStream() throws ResourceStreamNotFoundException
{
- byte[] bytes;
+ byte[] bytes = null;
InputStream inputStream = super.getInputStream();
- try
- {
- bytes = IOUtils.toByteArray(inputStream);
- }
- catch (IOException iox)
- {
- throw new WicketRuntimeException(iox);
- }
- finally
+
+ if (!readPartially)
{
- IOUtils.closeQuietly(this);
+ try
+ {
+ bytes = IOUtils.toByteArray(inputStream);
+ }
+ catch (IOException iox)
+ {
+ throw new WicketRuntimeException(iox);
+ }
+ finally
+ {
+ IOUtils.closeQuietly(this);
+ }
}
RequestCycle cycle = RequestCycle.get();
@@ -519,8 +536,15 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
// use empty request and response in case of non-http thread. WICKET-5532
attributes = new Attributes(new MockWebRequest(Url.parse("")), new StringResponse());
}
- byte[] processedBytes = processResponse(attributes, bytes);
- return new ByteArrayInputStream(processedBytes);
+ if (bytes != null)
+ {
+ byte[] processedBytes = processResponse(attributes, bytes);
+ return new ByteArrayInputStream(processedBytes);
+ }
+ else
+ {
+ return inputStream;
+ }
}
}
@@ -710,4 +734,17 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
return sb.toString();
}
}
+
+ /**
+ * If the packaage resource should be read partially
+ *
+ * @param readPartially
+ * if the package resource should be read partially
+ * @return the current package resource
+ */
+ public PackageResource readPartially(boolean readPartially)
+ {
+ this.readPartially = readPartially;
+ return this;
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/b3c9843f/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
index 749769e..c3d3353 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
@@ -43,6 +43,8 @@ public class PackageResourceReference extends ResourceReference
private static final String JAVASCRIPT_EXTENSION = "js";
private transient ConcurrentMap<UrlAttributes, UrlAttributes> urlAttributesCacheMap;
+
+ private boolean readPartially = false;
/**
* Cache for existence of minified version of the resource to avoid repetitive calls
@@ -117,17 +119,17 @@ public class PackageResourceReference extends ResourceReference
if (CSS_EXTENSION.equals(extension))
{
resource = new CssPackageResource(getScope(), getName(), getLocale(), getStyle(),
- getVariation());
+ getVariation()).readPartially(readPartially);
}
else if (JAVASCRIPT_EXTENSION.equals(extension))
{
resource = new JavaScriptPackageResource(getScope(), getName(), getLocale(), getStyle(),
- getVariation());
+ getVariation()).readPartially(readPartially);
}
else
{
resource = new PackageResource(getScope(), getName(), getLocale(), getStyle(),
- getVariation());
+ getVariation()).readPartially(readPartially);
}
removeCompressFlagIfUnnecessary(resource);
@@ -273,4 +275,17 @@ public class PackageResourceReference extends ResourceReference
return value;
}
+
+ /**
+ * If the packaage resource should be read partially
+ *
+ * @param readPartially
+ * if the package resource should be read partially
+ * @return the current package resource
+ */
+ public PackageResourceReference readPartially(boolean readPartially)
+ {
+ this.readPartially = readPartially;
+ return this;
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/b3c9843f/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.java b/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.java
index 9055ff1..9089e76 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/media/Home.java
@@ -50,7 +50,7 @@ public final class Home extends WicketExamplePage
// Internal video with several options
Video video1 = new Video("video1", new PackageResourceReference(Home.class,
- "video.mp4"));
+ "video.mp4").readPartially(true));
video1.setAutoplay(false);
video1.setControls(true);
video1.setLooping(false);