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 2014/01/09 14:04:06 UTC

[20/50] [abbrv] git commit: WICKET-4762 IResourceVersion should be based on final result

WICKET-4762 IResourceVersion should be based on final result

(cherry picked from commit d6135b5d03a3de3007721703780aa93910615914)


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

Branch: refs/heads/sandbox/WICKET-4686
Commit: 29b26ffffdd619f4e2fe86aa2d2b02ff3e1d6017
Parents: fabec75
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Dec 18 12:39:57 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Dec 18 12:41:00 2013 +0200

----------------------------------------------------------------------
 .../request/resource/PackageResource.java       |  47 ++++++--
 .../resource/JavaScriptPackageResourceTest.java |  41 +++++++
 .../util/resource/ResourceStreamWrapper.java    | 109 +++++++++++++++++++
 3 files changed, 189 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/29b26fff/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 ed75647..ad03e22 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
@@ -16,7 +16,9 @@
  */
 package org.apache.wicket.request.resource;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.Serializable;
 import java.util.Locale;
 
@@ -28,6 +30,7 @@ import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.markup.html.IPackageResourceGuard;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.Classes;
@@ -35,6 +38,7 @@ import org.apache.wicket.util.lang.Packages;
 import org.apache.wicket.util.resource.IFixedLocationResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.apache.wicket.util.resource.ResourceStreamWrapper;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;
@@ -295,14 +299,10 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 			try
 			{
 				// read resource data
-				final byte[] bytes;
-
-				bytes = IOUtils.toByteArray(resourceStream.getInputStream());
-
-				final byte[] processed = processResponse(attributes, bytes);
+				final byte[] bytes = IOUtils.toByteArray(resourceStream.getInputStream());
 
 				// send Content-Length header
-				resourceResponse.setContentLength(processed.length);
+				resourceResponse.setContentLength(bytes.length);
 
 				// send response body with resource data
 				resourceResponse.setWriteCallback(new WriteCallback()
@@ -310,7 +310,7 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 					@Override
 					public void writeData(Attributes attributes)
 					{
-						attributes.getResponse().write(processed);
+						attributes.getResponse().write(bytes);
 					}
 				});
 			}
@@ -461,7 +461,38 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 						". See IPackageResourceGuard");
 		}
 
-		return resourceStream;
+		return new ProcessingResourceStream(resourceStream);
+	}
+
+	/**
+	 * An IResourceStream that processes the input stream of the original
+	 * IResourceStream
+	 */
+	private class ProcessingResourceStream extends ResourceStreamWrapper
+	{
+		private ProcessingResourceStream(IResourceStream delegate)
+		{
+			super(delegate);
+		}
+
+		@Override
+		public InputStream getInputStream() throws ResourceStreamNotFoundException
+		{
+			byte[] bytes;
+			InputStream inputStream = super.getInputStream();
+			try
+			{
+				bytes = IOUtils.toByteArray(inputStream);
+			} catch (IOException iox)
+			{
+				throw new WicketRuntimeException(iox);
+			}
+
+			RequestCycle cycle = RequestCycle.get();
+			Attributes attributes = new Attributes(cycle.getRequest(), cycle.getResponse());
+			byte[] processedBytes = processResponse(attributes, bytes);
+			return new ByteArrayInputStream(processedBytes);
+		}
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/29b26fff/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
index 396bde9..39fd9c6 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
@@ -16,11 +16,16 @@
  */
 package org.apache.wicket.request.resource;
 
+import java.io.IOException;
+import java.io.InputStream;
+
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.javascript.IJavaScriptCompressor;
 import org.apache.wicket.markup.html.PackageResourceTest;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.io.IOUtils;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.junit.Test;
 
 /**
@@ -86,6 +91,42 @@ public class JavaScriptPackageResourceTest extends WicketTestCase
 	}
 
 	/**
+	 * https://issues.apache.org/jira/browse/WICKET-4762
+	 *
+	 * Asserts that the input stream used to calculate the IResourceVersion is the
+	 * same as the one used for the actual response
+	 */
+	@Test
+	public void cacheableStreamIsCompressed() throws ResourceStreamNotFoundException, IOException
+	{
+		JavaScriptPackageResource resource = new JavaScriptPackageResource(
+				PackageResourceTest.class, "packaged1.txt", null, null, null)
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected IJavaScriptCompressor getCompressor()
+			{
+				return new IJavaScriptCompressor()
+				{
+
+					@Override
+					public String compress(String original)
+					{
+						return RESOURCE_COMPRESSED;
+					}
+				};
+			}
+		};
+
+		tester.startResource(resource);
+		assertEquals(RESOURCE_COMPRESSED, tester.getLastResponseAsString());
+		InputStream cacheableStream = resource.getCacheableResourceStream().getInputStream();
+		InputStream stream = resource.getResourceStream().getInputStream();
+		assertEquals(IOUtils.toString(cacheableStream), IOUtils.toString(stream));
+	}
+
+	/**
 	 * Tests that a {@link JavaScriptPackageResource} can use the application level
 	 * {@link IJavaScriptCompressor} when there is no custom
 	 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/29b26fff/wicket-util/src/main/java/org/apache/wicket/util/resource/ResourceStreamWrapper.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/resource/ResourceStreamWrapper.java b/wicket-util/src/main/java/org/apache/wicket/util/resource/ResourceStreamWrapper.java
new file mode 100644
index 0000000..8b78be3
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/resource/ResourceStreamWrapper.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.util.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Locale;
+
+import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.time.Time;
+
+/**
+ * A IResourceStream that wraps another resource stream
+ */
+public class ResourceStreamWrapper implements IResourceStream
+{
+	private final IResourceStream delegate;
+
+	public ResourceStreamWrapper(IResourceStream delegate)
+	{
+		this.delegate = Args.notNull(delegate, "delegate");
+	}
+
+	protected IResourceStream getDelegate()
+	{
+		return delegate;
+	}
+
+	@Override
+	public String getContentType()
+	{
+		return delegate.getContentType();
+	}
+
+	@Override
+	public Bytes length()
+	{
+		return delegate.length();
+	}
+
+	@Override
+	public InputStream getInputStream() throws ResourceStreamNotFoundException
+	{
+		return delegate.getInputStream();
+	}
+
+	@Override
+	public void close() throws IOException
+	{
+		delegate.close();
+	}
+
+	@Override
+	public Locale getLocale()
+	{
+		return delegate.getLocale();
+	}
+
+	@Override
+	public void setLocale(Locale locale)
+	{
+		delegate.setLocale(locale);
+	}
+
+	@Override
+	public String getStyle()
+	{
+		return delegate.getStyle();
+	}
+
+	@Override
+	public void setStyle(String style)
+	{
+		delegate.setStyle(style);
+	}
+
+	@Override
+	public String getVariation()
+	{
+		return delegate.getVariation();
+	}
+
+	@Override
+	public void setVariation(String variation)
+	{
+		delegate.setVariation(variation);
+	}
+
+	@Override
+	public Time lastModifiedTime()
+	{
+		return delegate.lastModifiedTime();
+	}
+}