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


Reply via email to