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();
+ }
+}