Author: mgrigorov
Date: Tue May 10 11:49:37 2011
New Revision: 1101417
URL: http://svn.apache.org/viewvc?rev=1101417&view=rev
Log:
WICKET-3674 Provide an interface to allow css resources to be compressed like
javascript resources
WICKET-3675 Usage of JavaScriptCompressor by resources other than
PackageTextTemplates is lost!
Check for existing Application in the thread before trying to use it.
Add unit tests for JavaScript and Css compressing.
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/CssTemplate.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/JavaScriptTemplate.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java?rev=1101417&r1=1101416&r2=1101417&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
Tue May 10 11:49:37 2011
@@ -52,7 +52,7 @@ public class CssPackageResource extends
{
final byte[] processedResponse =
super.processResponse(attributes, bytes);
- ICssCompressor compressor =
Application.get().getResourceSettings().getCssCompressor();
+ ICssCompressor compressor = getCompressor();
if (compressor != null)
{
@@ -74,4 +74,20 @@ public class CssPackageResource extends
}
}
+ /**
+ * Gets the {@link ICssCompressor} to be used. By default returns the
configured compressor on
+ * application level, but can be overriden by the user application to
provide compressor
+ * specific to the resource.
+ *
+ * @return the configured application level Css compressor. May be
{@code null}.
+ */
+ protected ICssCompressor getCompressor()
+ {
+ ICssCompressor compressor = null;
+ if (Application.exists())
+ {
+ compressor =
Application.get().getResourceSettings().getCssCompressor();
+ }
+ return compressor;
+ }
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java?rev=1101417&r1=1101416&r2=1101417&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
Tue May 10 11:49:37 2011
@@ -19,7 +19,7 @@ package org.apache.wicket.request.resour
import java.util.Locale;
import org.apache.wicket.Application;
-import org.apache.wicket.resource.ITextResourceCompressor;
+import org.apache.wicket.javascript.IJavaScriptCompressor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,9 +52,7 @@ public class JavaScriptPackageResource e
{
final byte[] processedResponse =
super.processResponse(attributes, bytes);
- ITextResourceCompressor compressor = Application.get()
- .getResourceSettings()
- .getJavaScriptCompressor();
+ IJavaScriptCompressor compressor = getCompressor();
if (compressor != null)
{
@@ -76,5 +74,21 @@ public class JavaScriptPackageResource e
}
}
+ /**
+ * Gets the {@link IJavaScriptCompressor} to be used. By default
returns the configured
+ * compressor on application level, but can be overriden by the user
application to provide
+ * compressor specific to the resource.
+ *
+ * @return the configured application level JavaScript compressor. May
be {@code null}.
+ */
+ protected IJavaScriptCompressor getCompressor()
+ {
+ IJavaScriptCompressor compressor = null;
+ if (Application.exists())
+ {
+ compressor =
Application.get().getResourceSettings().getJavaScriptCompressor();
+ }
+ return compressor;
+ }
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/CssTemplate.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/CssTemplate.java?rev=1101417&r1=1101416&r2=1101417&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/CssTemplate.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/CssTemplate.java
Tue May 10 11:49:37 2011
@@ -19,7 +19,7 @@ package org.apache.wicket.util.template;
import java.util.Map;
import org.apache.wicket.Application;
-import org.apache.wicket.resource.ITextResourceCompressor;
+import org.apache.wicket.css.ICssCompressor;
import org.apache.wicket.util.string.CssUtils;
@@ -81,9 +81,11 @@ public final class CssTemplate extends T
{
String nonCompressed = super.getString();
- ITextResourceCompressor compressor = Application.get()
- .getResourceSettings()
- .getCssCompressor();
+ ICssCompressor compressor = null;
+ if (Application.exists())
+ {
+ compressor =
Application.get().getResourceSettings().getCssCompressor();
+ }
if (compressor != null)
{
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/JavaScriptTemplate.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/JavaScriptTemplate.java?rev=1101417&r1=1101416&r2=1101417&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/JavaScriptTemplate.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/template/JavaScriptTemplate.java
Tue May 10 11:49:37 2011
@@ -81,9 +81,11 @@ public final class JavaScriptTemplate ex
{
String nonCompressed = super.getString();
- ITextResourceCompressor compressor = Application.get()
- .getResourceSettings()
- .getJavaScriptCompressor();
+ ITextResourceCompressor compressor = null;
+ if (Application.exists())
+ {
+ compressor =
Application.get().getResourceSettings().getJavaScriptCompressor();
+ }
if (compressor != null)
{
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java?rev=1101417&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
Tue May 10 11:49:37 2011
@@ -0,0 +1,119 @@
+/*
+ * 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.request.resource;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.wicket.css.ICssCompressor;
+import org.apache.wicket.markup.html.PackageResourceTest;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class CssPackageResourceTest
+{
+ private static final String APP_COMPRESSED = "APP_COMPRESSED";
+
+ private static final String RESOURCE_COMPRESSED = "RESOURCE_COMPRESSED";
+
+ private WicketTester tester;
+
+ @Before
+ public void before()
+ {
+ MockApplication application = new MockApplication()
+ {
+
+ @Override
+ protected void init()
+ {
+ super.init();
+
+ getResourceSettings().setCssCompressor(new
ICssCompressor()
+ {
+ public String compress(String original)
+ {
+ return APP_COMPRESSED;
+ }
+ });
+ }
+ };
+ tester = new WicketTester(application);
+ }
+
+ /**
+ * Tests that a {@link CssPackageResource} can have its custom {@link
ICssCompressor}
+ */
+ @Test
+ public void customResourceCompressor()
+ {
+ CssPackageResource resource = new
CssPackageResource(PackageResourceTest.class,
+ "packaged1.txt", null, null, null)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected ICssCompressor getCompressor()
+ {
+ return new ICssCompressor()
+ {
+
+ public String compress(String original)
+ {
+ return RESOURCE_COMPRESSED;
+ }
+ };
+ }
+ };
+
+ tester.startResource(resource);
+ assertEquals(RESOURCE_COMPRESSED,
tester.getLastResponseAsString());
+ }
+
+ /**
+ * Tests that a {@link CssPackageResource} can use the application
level {@link ICssCompressor}
+ * when there is no custom
+ */
+ @Test
+ public void appLevelCompressor()
+ {
+ CssPackageResource resource = new
CssPackageResource(PackageResourceTest.class,
+ "packaged1.txt", null, null, null);
+
+ tester.startResource(resource);
+ assertEquals(APP_COMPRESSED, tester.getLastResponseAsString());
+ }
+
+ /**
+ * Tests that a {@link CssPackageResource} wont be compressed when
there is no configured
+ * {@link ICssCompressor}
+ */
+ @Test
+ public void noCompressor()
+ {
+ CssPackageResource resource = new
CssPackageResource(PackageResourceTest.class,
+ "packaged1.txt", null, null, null);
+
+
tester.getApplication().getResourceSettings().setCssCompressor(null);
+ tester.startResource(resource);
+ assertEquals("TEST", tester.getLastResponseAsString());
+ }
+}
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java?rev=1101417&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
Tue May 10 11:49:37 2011
@@ -0,0 +1,120 @@
+/*
+ * 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.request.resource;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.wicket.javascript.IJavaScriptCompressor;
+import org.apache.wicket.markup.html.PackageResourceTest;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class JavaScriptPackageResourceTest
+{
+ private static final String APP_COMPRESSED = "APP_COMPRESSED";
+
+ private static final String RESOURCE_COMPRESSED = "RESOURCE_COMPRESSED";
+
+ private WicketTester tester;
+
+ @Before
+ public void before()
+ {
+ MockApplication application = new MockApplication()
+ {
+
+ @Override
+ protected void init()
+ {
+ super.init();
+
+
getResourceSettings().setJavaScriptCompressor(new IJavaScriptCompressor()
+ {
+ public String compress(String original)
+ {
+ return APP_COMPRESSED;
+ }
+ });
+ }
+ };
+ tester = new WicketTester(application);
+ }
+
+ /**
+ * Tests that a {@link JavaScriptPackageResource} can have its custom
+ * {@link IJavaScriptCompressor}
+ */
+ @Test
+ public void customResourceCompressor()
+ {
+ JavaScriptPackageResource resource = new
JavaScriptPackageResource(
+ PackageResourceTest.class, "packaged1.txt", null, null,
null)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected IJavaScriptCompressor getCompressor()
+ {
+ return new IJavaScriptCompressor()
+ {
+
+ public String compress(String original)
+ {
+ return RESOURCE_COMPRESSED;
+ }
+ };
+ }
+ };
+
+ tester.startResource(resource);
+ assertEquals(RESOURCE_COMPRESSED,
tester.getLastResponseAsString());
+ }
+
+ /**
+ * Tests that a {@link JavaScriptPackageResource} can use the
application level
+ * {@link IJavaScriptCompressor} when there is no custom
+ */
+ @Test
+ public void appLevelCompressor()
+ {
+ JavaScriptPackageResource resource = new
JavaScriptPackageResource(
+ PackageResourceTest.class, "packaged1.txt", null, null,
null);
+
+ tester.startResource(resource);
+ assertEquals(APP_COMPRESSED, tester.getLastResponseAsString());
+ }
+
+ /**
+ * Tests that a {@link JavaScriptPackageResource} wont be compressed
when there is no configured
+ * {@link IJavaScriptCompressor}
+ */
+ @Test
+ public void noCompressor()
+ {
+ JavaScriptPackageResource resource = new
JavaScriptPackageResource(
+ PackageResourceTest.class, "packaged1.txt", null, null,
null);
+
+
tester.getApplication().getResourceSettings().setJavaScriptCompressor(null);
+ tester.startResource(resource);
+ assertEquals("TEST", tester.getLastResponseAsString());
+ }
+}