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 2015/02/05 23:21:41 UTC

[01/13] wicket git commit: Compression - Allow multiple ICssCompressors and IJavaScriptCompressors - CssUrlReplacer

Repository: wicket
Updated Branches:
  refs/heads/pr-87-css_js_compression [created] 08f8a5567


Compression
- Allow multiple ICssCompressors and IJavaScriptCompressors
- CssUrlReplacer

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

Branch: refs/heads/pr-87-css_js_compression
Commit: 9752eac7fb63e83ffceb9969a1b4f6aa9305b5e7
Parents: f0340a3
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 13:15:11 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 13:15:11 2015 +0100

----------------------------------------------------------------------
 .../wicket/resource/CompositeCssCompressor.java |  82 +++++++++++
 .../resource/CompositeJavaScriptCompressor.java |  79 +++++++++++
 .../resource/CssUrlReplacementCompressor.java   | 140 +++++++++++++++++++
 3 files changed, 301 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9752eac7/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
new file mode 100644
index 0000000..7b3c6e8
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
@@ -0,0 +1,82 @@
+/*
+ * 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.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.css.ICssCompressor;
+
+/**
+ * Used to apply several {@link ICssCompressor} to the css compression.<br>
+ * <br>
+ * Usage:
+ * 
+ * <pre>
+ * CompositeCssCompressor compositeCssCompressor = new CompositeCssCompressor();
+ * 
+ * compositeCssCompressor.getCompressors().add(new MyCssCompressor());
+ * compositeCssCompressor.getCompressors().add(new AnotherCssCompressor());
+ * 
+ * this.getResourceSettings().setCssCompressor(compositeCssCompressor);
+ * </pre>
+ * @since 6.20.0
+ * @author Tobias Soloschenko
+ * 
+ */
+public class CompositeCssCompressor implements ICssCompressor
+{
+
+	/* Compressors to compress the CSS content */
+	private List<ICssCompressor> compressors;
+
+	/**
+	 * Compresses the given original content in the order of compressors.
+	 */
+	@Override
+	public String compress(String original)
+	{
+		if (compressors != null)
+		{
+			String compressed = original;
+			for (ICssCompressor compressor : compressors)
+			{
+				compressed = compressor.compress(compressed);
+			}
+			return compressed;
+		}
+		else
+		{
+			return original;
+		}
+	}
+
+	/**
+	 * Gets a list of {@link ICssCompressor} to be used for CSS compression. They are applied in the
+	 * order of the List.
+	 * 
+	 * @return A list of {@link ICssCompressor} to be used for CSS compression.
+	 */
+	public List<ICssCompressor> getCompressors()
+	{
+		if (compressors == null)
+		{
+			compressors = new ArrayList<>();
+		}
+		return compressors;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/9752eac7/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
new file mode 100644
index 0000000..13d5efc
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
@@ -0,0 +1,79 @@
+/*
+ * 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.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.javascript.IJavaScriptCompressor;
+
+/**
+ * Used to apply several {@link IJavaScriptCompressor} to the javascript compression.<br>
+ * <br>
+ * Usage:
+ * 
+ * <pre>
+ * CompositeJavaScriptCompressor compositeJavaScriptCompressor = new CompositeJavaScriptCompressor();
+ * 
+ * compositeJavaScriptCompressor.getCompressors().add(new MyJavaScriptCompressor());
+ * compositeJavaScriptCompressor.getCompressors().add(new AnotherJavaScriptCompressor());
+ * 
+ * this.getResourceSettings().setJavaScriptCompressor(compositeJavaScriptCompressor);
+ * </pre>
+ * @since 6.20.0
+ * @author Tobias Soloschenko
+ *
+ */
+public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
+{
+
+	/* Compressors to compress javascript content */
+	private List<IJavaScriptCompressor> compressors;
+
+	@Override
+	public String compress(String original)
+	{
+		if (compressors != null)
+		{
+			String compressed = original;
+			for (IJavaScriptCompressor compressor : compressors)
+			{
+				compressed = compressor.compress(compressed);
+			}
+			return compressed;
+		}
+		else
+		{
+			return original;
+		}
+	}
+
+	/**
+	 * Gets a list of {@link IJavaScriptCompressor} to be used for javascript compression. They are applied in the
+	 * order of the List.
+	 * 
+	 * @return A list of {@link IJavaScriptCompressor} to be used for javascript compression.
+	 */
+	public List<IJavaScriptCompressor> getCompressors()
+	{
+		if (compressors == null)
+		{
+			compressors = new ArrayList<>();
+		}
+		return compressors;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/9752eac7/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
new file mode 100644
index 0000000..eac8d23
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
@@ -0,0 +1,140 @@
+/*
+ * 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.resource;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.application.IComponentInitializationListener;
+import org.apache.wicket.css.ICssCompressor;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.resource.PackageResourceReference;
+
+/**
+ * This compressor is used to replace url within css files with resources that belongs to their
+ * corresponding page classes. The compress method is not compressing any content, but replacing the URLs
+ * with Wicket representatives.<br>
+ * <br>
+ * Usage:
+ * 
+ * <pre>
+ * this.getResourceSettings().setCssCompressor(new CssUrlReplacementCompressor(this));
+ * </pre>
+ * 
+ * @since 6.20.0
+ * @author Tobias Soloschenko
+ * 
+ */
+public class CssUrlReplacementCompressor implements ICssCompressor
+{
+
+	// Holds the names of pages
+	private List<String> pageNames = new ArrayList<String>();
+
+	// The pattern to find URLs in CSS resources
+	private Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
+
+	public CssUrlReplacementCompressor(Application application)
+	{
+
+		// Create an instantiation listener which filters only pages.
+		application.getComponentInitializationListeners().add(
+			new IComponentInitializationListener()
+			{
+
+				@Override
+				public void onInitialize(Component component)
+				{
+					if (Page.class.isAssignableFrom(component.getClass()))
+					{
+						CssUrlReplacementCompressor.this.pageNames.add(component.getClass().getName());
+					}
+				}
+			});
+	}
+
+	/**
+	 * Replaces the URLs of CSS resources with Wicket representatives.
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public String compress(String original)
+	{
+		Matcher matcher = this.urlPattern.matcher(original);
+		// Search for urls
+		while (matcher.find())
+		{
+			for (String pageName : this.pageNames)
+			{
+				try
+				{
+					Class<Page> pageClass = (Class<Page>)Class.forName(pageName);
+					String url = matcher.group(1);
+					if (!url.contains("/"))
+					{
+						URL urlResource = pageClass.getResource(url);
+						// If the resource is not found for a page skip it
+						if (urlResource != null)
+						{
+							PackageResourceReference packageResourceReference = new PackageResourceReference(
+								pageClass, url);
+							String replacedUrl = RequestCycle.get()
+								.urlFor(packageResourceReference, null)
+								.toString();
+							StringBuilder urlBuilder = new StringBuilder();
+							urlBuilder.append("url('");
+							urlBuilder.append(replacedUrl);
+							urlBuilder.append("')");
+							original = matcher.replaceFirst(urlBuilder.toString());
+						}
+					}
+				}
+				catch (Exception e)
+				{
+					StringWriter stringWriter = this.printStack(e);
+					throw new WicketRuntimeException(stringWriter.toString());
+				}
+			}
+
+		}
+		return original;
+	}
+
+	/**
+	 * Prints the stack trace to a print writer
+	 * 
+	 * @param exception
+	 *            the exception
+	 * @return the string writer containing the stack trace
+	 */
+	private StringWriter printStack(Exception exception)
+	{
+		StringWriter stringWriter = new StringWriter();
+		PrintWriter printWriter = new PrintWriter(stringWriter);
+		exception.printStackTrace(printWriter);
+		return stringWriter;
+	}
+}


[13/13] wicket git commit: WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Posted by mg...@apache.org.
WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Re-implement CssUrlReplacer


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

Branch: refs/heads/pr-87-css_js_compression
Commit: 08f8a556722b8b803430194ab8e80d00199a5401
Parents: b87b459
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Feb 6 00:20:57 2015 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Feb 6 00:20:57 2015 +0200

----------------------------------------------------------------------
 .../request/resource/CssPackageResource.java    | 17 +++-
 .../wicket/resource/CompositeCssCompressor.java | 22 ++++-
 .../apache/wicket/resource/CssUrlReplacer.java  | 94 +++++---------------
 .../IScopeAwareTextResourceProcessor.java       | 17 ++++
 .../wicket/resource/CssUrlReplacerTest.java     | 75 ++++++++++++++++
 5 files changed, 148 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/08f8a556/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
index f6cf010..72e2dc1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
@@ -20,6 +20,7 @@ import java.util.Locale;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.css.ICssCompressor;
+import org.apache.wicket.resource.IScopeAwareTextResourceProcessor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,6 +33,8 @@ public class CssPackageResource extends PackageResource
 
 	private static final Logger log = LoggerFactory.getLogger(CssPackageResource.class);
 
+	private final String name;
+
 	/**
 	 * Construct.
 	 * 
@@ -46,6 +49,8 @@ public class CssPackageResource extends PackageResource
 	{
 		super(scope, name, locale, style, variation);
 
+		this.name = name;
+
 		// CSS resources can be compressed if there is configured ICssCompressor
 		setCompress(true);
 	}
@@ -62,7 +67,17 @@ public class CssPackageResource extends PackageResource
 			try
 			{
 				String nonCompressed = new String(processedResponse, "UTF-8");
-				return compressor.compress(nonCompressed).getBytes();
+				String output;
+				if (compressor instanceof IScopeAwareTextResourceProcessor)
+				{
+					IScopeAwareTextResourceProcessor scopeAwareProcessor = (IScopeAwareTextResourceProcessor) compressor;
+					output = scopeAwareProcessor.process(nonCompressed, getScope(), name);
+				}
+				else
+				{
+					output = compressor.compress(nonCompressed);
+				}
+				return output.getBytes();
 			}
 			catch (Exception e)
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/08f8a556/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
index 6756491..f23c937 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
@@ -41,7 +41,7 @@ import org.apache.wicket.css.ICssCompressor;
  * @author Tobias Soloschenko
  * 
  */
-public class CompositeCssCompressor implements ICssCompressor
+public class CompositeCssCompressor implements IScopeAwareTextResourceProcessor
 {
 	/* Compressors to compress the CSS content */
 	private final List<ICssCompressor> compressors = new ArrayList<>();
@@ -62,16 +62,30 @@ public class CompositeCssCompressor implements ICssCompressor
 	 * given the original content is going to be returned.
 	 */
 	@Override
-	public String compress(String original)
+	public String process(String input, Class<?> scope, String name)
 	{
-		String compressed = original;
+		String compressed = input;
 		for (ICssCompressor compressor : compressors)
 		{
-			compressed = compressor.compress(compressed);
+			if (compressor instanceof IScopeAwareTextResourceProcessor)
+			{
+				IScopeAwareTextResourceProcessor processor = (IScopeAwareTextResourceProcessor) compressor;
+				processor.process(compressed, scope, name);
+			}
+			else
+			{
+				compressed = compressor.compress(compressed);
+			}
 		}
 		return compressed;
 	}
 
+	@Override
+	public String compress(String original)
+	{
+		throw new UnsupportedOperationException(CompositeCssCompressor.class.getSimpleName() + ".process() should be used instead!");
+	}
+
 	/**
 	 * Adds a ICssCompressor to the list of delegates.
 	 *

http://git-wip-us.apache.org/repos/asf/wicket/blob/08f8a556/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index 7c7864e..985c275 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -16,20 +16,10 @@
  */
 package org.apache.wicket.resource;
 
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.wicket.Application;
-import org.apache.wicket.Component;
-import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.application.IComponentInitializationListener;
-import org.apache.wicket.core.util.lang.WicketObjects;
-import org.apache.wicket.css.ICssCompressor;
+import org.apache.wicket.request.Url;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.PackageResourceReference;
 
@@ -46,78 +36,38 @@ import org.apache.wicket.request.resource.PackageResourceReference;
  * 
  * @since 6.20.0
  * @author Tobias Soloschenko
- * 
  */
-public class CssUrlReplacer implements ICssCompressor
+public class CssUrlReplacer implements IScopeAwareTextResourceProcessor
 {
-
-	// Holds the names of components
-	private final Map<String, String> componentNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
-
 	// The pattern to find URLs in CSS resources
-	private static final Pattern urlPattern = Pattern.compile("url\\(['|\"]*(.*)['|\"]*\\)");
-
-	public CssUrlReplacer(Application application)
-	{
-
-		// Create an instantiation listener to detect components
-		application.getComponentInitializationListeners().add(
-			new IComponentInitializationListener()
-			{
-
-				@Override
-				public void onInitialize(Component component)
-				{
-					CssUrlReplacer.this.componentNames.put(component.getClass().getName(),
-						component.getClass().getSimpleName());
-				}
-			});
-	}
+	private static final Pattern URL_PATTERN = Pattern.compile("url\\(['|\"]*(.*?)['|\"]*\\)");
 
 	/**
 	 * Replaces the URLs of CSS resources with Wicket representatives.
 	 */
 	@Override
-	public String compress(String original)
+	public String process(String input, Class<?> scope, String name)
 	{
-		Matcher matcher = CssUrlReplacer.urlPattern.matcher(original);
-		// Search for urls
+		PackageResourceReference cssReference = new PackageResourceReference(scope, name);
+		CharSequence urlToCss = RequestCycle.get().urlFor(cssReference, null);
+		Url cssUrl = Url.parse(urlToCss);
+		Matcher matcher = URL_PATTERN.matcher(input);
+		StringBuffer output = new StringBuffer();
+
 		while (matcher.find())
 		{
-			Collection<String> componentNames = this.componentNames.keySet();
-			for (String componentName : componentNames)
-			{
-				try
-				{
-					Class<?> componentClass = WicketObjects.resolveClass(componentName);
-					String url = matcher.group(1);
-					if (!url.contains("/"))
-					{
-						URL urlResource = componentClass.getResource(url);
-						// If the resource is not found skip it
-						if (urlResource != null)
-						{
-							PackageResourceReference packageResourceReference = new PackageResourceReference(
-								componentClass, url);
-							String replacedUrl = RequestCycle.get()
-								.urlFor(packageResourceReference, null)
-								.toString();
-							StringBuilder urlBuilder = new StringBuilder();
-							urlBuilder.append("url('");
-							urlBuilder.append(replacedUrl);
-							urlBuilder.append("')");
-							original = matcher.replaceFirst(urlBuilder.toString());
-						}
-					}
-				}
-				catch (Exception e)
-				{
-					throw new WicketRuntimeException(
-						"A problem occurred during CSS url replacement.", e);
-				}
-			}
-
+			Url imageRelativeUrl = Url.parse(matcher.group(1));
+			Url cssUrlCopy = new Url(cssUrl);
+			cssUrlCopy.resolveRelative(imageRelativeUrl);
+			matcher.appendReplacement(output, "url('" + cssUrlCopy.toString() + "')");
 		}
-		return original;
+		matcher.appendTail(output);
+		return output.toString();
+	}
+
+	@Override
+	public String compress(String original)
+	{
+		throw new UnsupportedOperationException(CssUrlReplacer.class.getSimpleName() + ".process() should be used instead!");
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/08f8a556/wicket-core/src/main/java/org/apache/wicket/resource/IScopeAwareTextResourceProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/IScopeAwareTextResourceProcessor.java b/wicket-core/src/main/java/org/apache/wicket/resource/IScopeAwareTextResourceProcessor.java
new file mode 100644
index 0000000..2b37c27
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/IScopeAwareTextResourceProcessor.java
@@ -0,0 +1,17 @@
+package org.apache.wicket.resource;
+
+/**
+ *
+ */
+public interface IScopeAwareTextResourceProcessor extends ITextResourceCompressor
+{
+	/**
+	 * Processes/manipulates a text resource.
+	 *
+	 *
+	 * @param input
+	 * @param scope
+	 * @return The processed input
+	 */
+	public String process(String input, Class<?> scope, String name);
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/08f8a556/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java b/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
new file mode 100644
index 0000000..157bd60
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
@@ -0,0 +1,75 @@
+package org.apache.wicket.resource;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+
+import org.apache.wicket.WicketTestCase;
+import org.junit.Test;
+
+public class CssUrlReplacerTest extends WicketTestCase
+{
+	@Test
+	public void sameFolderSingleQuotes()
+	{
+		String input = ".class {background-image: url('some.img');}";
+		Class<?> scope = CssUrlReplacerTest.class;
+		String cssRelativePath = "res/css/some.css";
+		CssUrlReplacer replacer = new CssUrlReplacer();
+
+		String processed = replacer.process(input, scope, cssRelativePath);
+		assertThat(processed, is(".class {background-image: url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img');}"));
+	}
+
+	@Test
+	public void sameFolderDoubleQuotes()
+	{
+		String input = ".class {background-image: url(\"some.img\");}";
+		Class<?> scope = CssUrlReplacerTest.class;
+		String cssRelativePath = "res/css/some.css";
+		CssUrlReplacer replacer = new CssUrlReplacer();
+
+		String processed = replacer.process(input, scope, cssRelativePath);
+		assertThat(processed, is(".class {background-image: url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img');}"));
+	}
+
+	@Test
+	public void parentFolderAppendFolder()
+	{
+		String input = ".class {background-image: url('../images/some.img');}";
+		Class<?> scope = CssUrlReplacerTest.class;
+		String cssRelativePath = "res/css/some.css";
+		CssUrlReplacer replacer = new CssUrlReplacer();
+
+		String processed = replacer.process(input, scope, cssRelativePath);
+		assertThat(processed, is(".class {background-image: url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/images/some.img');}"));
+	}
+
+	@Test
+	public void sameFolderAppendFolder()
+	{
+		String input = ".class {background-image: url('./images/some.img');}";
+		Class<?> scope = CssUrlReplacerTest.class;
+		String cssRelativePath = "res/css/some.css";
+		CssUrlReplacer replacer = new CssUrlReplacer();
+
+		String processed = replacer.process(input, scope, cssRelativePath);
+		assertThat(processed, is(".class {background-image: url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/images/some.img');}"));
+	}
+
+	@Test
+	public void severalUrls()
+	{
+		String input =
+				".class {\n" +
+					"a: url('../images/a.img');\n" +
+					"b: url('./b.img');\n" +
+				"}";
+		Class<?> scope = CssUrlReplacerTest.class;
+		String cssRelativePath = "res/css/some.css";
+		CssUrlReplacer replacer = new CssUrlReplacer();
+
+		String processed = replacer.process(input, scope, cssRelativePath);
+		assertThat(processed, containsString("CssUrlReplacerTest/res/images/a.img');"));
+		assertThat(processed, containsString("CssUrlReplacerTest/res/css/b.img');"));
+	}
+}


[03/13] wicket git commit: CssUrlReplacementCompressor keys instead values

Posted by mg...@apache.org.
CssUrlReplacementCompressor keys instead values

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

Branch: refs/heads/pr-87-css_js_compression
Commit: d0864f1d85ceb65532f4a1f53cd09e6cf8d3c8ad
Parents: b863504
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 15:43:41 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 15:43:41 2015 +0100

----------------------------------------------------------------------
 .../org/apache/wicket/resource/CssUrlReplacementCompressor.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/d0864f1d/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
index 44d67e5..ce89f53 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
@@ -90,7 +90,7 @@ public class CssUrlReplacementCompressor implements ICssCompressor
 		// Search for urls
 		while (matcher.find())
 		{
-			Collection<String> pageNames = this.pageNames.values();
+			Collection<String> pageNames = this.pageNames.keySet();
 			for (String pageName : pageNames)
 			{
 				try


[06/13] wicket git commit: static / static final fields

Posted by mg...@apache.org.
static / static final fields

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

Branch: refs/heads/pr-87-css_js_compression
Commit: eca07da8b82ac2abe735939f34ba9f49efff346c
Parents: 2ac0c64
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 17:42:59 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 17:42:59 2015 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/resource/CssUrlReplacer.java   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/eca07da8/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index c39dcea..01b92fa 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -52,10 +52,10 @@ public class CssUrlReplacer implements ICssCompressor
 {
 
 	// Holds the names of pages
-	private Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
+	private final Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
 
 	// The pattern to find URLs in CSS resources
-	private Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
+	private static final Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
 
 	public CssUrlReplacer(Application application)
 	{
@@ -84,7 +84,7 @@ public class CssUrlReplacer implements ICssCompressor
 	@Override
 	public String compress(String original)
 	{
-		Matcher matcher = this.urlPattern.matcher(original);
+		Matcher matcher = CssUrlReplacer.urlPattern.matcher(original);
 		// Search for urls
 		while (matcher.find())
 		{


[12/13] wicket git commit: WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Posted by mg...@apache.org.
WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Simplify the API of CompositeJavaScriptCompressor/CompositeCssCompressor. No need to expose the list.


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

Branch: refs/heads/pr-87-css_js_compression
Commit: b87b4591bf83940f7de75d98278cb6030f6d4e56
Parents: aba8360
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Feb 5 23:33:07 2015 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Feb 5 23:33:07 2015 +0200

----------------------------------------------------------------------
 .../wicket/resource/CompositeCssCompressor.java | 21 ++++++++++----------
 .../resource/CompositeJavaScriptCompressor.java | 19 +++++++++---------
 2 files changed, 19 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b87b4591/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
index a288596..6756491 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
@@ -30,8 +30,8 @@ import org.apache.wicket.css.ICssCompressor;
  * <pre>
  * CompositeCssCompressor compositeCssCompressor = new CompositeCssCompressor();
  * 
- * compositeCssCompressor.getCompressors().add(new MyCssCompressor());
- * compositeCssCompressor.getCompressors().add(new AnotherCssCompressor());
+ * compositeCssCompressor.add(new MyCssCompressor());
+ * compositeCssCompressor.add(new AnotherCssCompressor());
  * 
  * this.getResourceSettings().setCssCompressor(compositeCssCompressor);
  * </pre>
@@ -43,15 +43,14 @@ import org.apache.wicket.css.ICssCompressor;
  */
 public class CompositeCssCompressor implements ICssCompressor
 {
-
 	/* Compressors to compress the CSS content */
 	private final List<ICssCompressor> compressors = new ArrayList<>();
 
 	/**
-	 * Initializes the composite CSS compressor with the given {@link ICssCompressor}
+	 * Initializes the composite CSS compressor with the given {@link ICssCompressor}(s)
 	 * 
 	 * @param compressors
-	 *            several {@link ICssCompressor} the composite CSS compressor is initialized with
+	 *            The {@link ICssCompressor}(s) this composite CSS compressor is initialized with
 	 */
 	public CompositeCssCompressor(ICssCompressor... compressors)
 	{
@@ -74,13 +73,13 @@ public class CompositeCssCompressor implements ICssCompressor
 	}
 
 	/**
-	 * Gets a list of {@link ICssCompressor} to be used for CSS compression. They are applied in the
-	 * order of the List.
-	 * 
-	 * @return A list of {@link ICssCompressor} to be used for CSS compression.
+	 * Adds a ICssCompressor to the list of delegates.
+	 *
+	 * @return {@code this} instance, for chaining
 	 */
-	public List<ICssCompressor> getCompressors()
+	public CompositeCssCompressor add(ICssCompressor compressor)
 	{
-		return compressors;
+		compressors.add(compressor);
+		return this;
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b87b4591/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
index c1888e2..d0f2ffb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
@@ -30,8 +30,8 @@ import org.apache.wicket.javascript.IJavaScriptCompressor;
  * <pre>
  * CompositeJavaScriptCompressor compositeJavaScriptCompressor = new CompositeJavaScriptCompressor();
  * 
- * compositeJavaScriptCompressor.getCompressors().add(new MyJavaScriptCompressor());
- * compositeJavaScriptCompressor.getCompressors().add(new AnotherJavaScriptCompressor());
+ * compositeJavaScriptCompressor.add(new MyJavaScriptCompressor());
+ * compositeJavaScriptCompressor.add(new AnotherJavaScriptCompressor());
  * 
  * this.getResourceSettings().setJavaScriptCompressor(compositeJavaScriptCompressor);
  * </pre>
@@ -43,15 +43,14 @@ import org.apache.wicket.javascript.IJavaScriptCompressor;
  */
 public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
 {
-
 	/* Compressors to compress javascript content */
 	private final List<IJavaScriptCompressor> compressors = new ArrayList<>();
 
 	/**
-	 * Initializes the composite javascript compressor with the given {@link IJavaScriptCompressor}
+	 * Initializes the composite javascript compressor with the given {@link IJavaScriptCompressor}(s)
 	 * 
 	 * @param compressors
-	 *            several {@link IJavaScriptCompressor} the composite javascript compressor is
+	 *            The {@link IJavaScriptCompressor}(s) this composite javascript compressor is
 	 *            initialized with
 	 */
 	public CompositeJavaScriptCompressor(IJavaScriptCompressor... compressors)
@@ -75,13 +74,13 @@ public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
 	}
 
 	/**
-	 * Gets a list of {@link IJavaScriptCompressor} to be used for javascript compression. They are
-	 * applied in the order of the List.
+	 * Adds a IJavaScriptCompressor to the list of delegates.
 	 * 
-	 * @return A list of {@link IJavaScriptCompressor} to be used for javascript compression.
+	 * @return {@code this} instance, for chaining
 	 */
-	public List<IJavaScriptCompressor> getCompressors()
+	public CompositeJavaScriptCompressor add(IJavaScriptCompressor compressor)
 	{
-		return compressors;
+		compressors.add(compressor);
+		return this;
 	}
 }


[10/13] wicket git commit: Typo in CssUrlReplacer

Posted by mg...@apache.org.
Typo in CssUrlReplacer

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

Branch: refs/heads/pr-87-css_js_compression
Commit: 8b146b2fc4db42b7eb665d2afffd4083b99488e4
Parents: f2decb8
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 19:06:01 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 19:06:01 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/resource/CssUrlReplacer.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8b146b2f/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index 1945641..7c7864e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -41,7 +41,7 @@ import org.apache.wicket.request.resource.PackageResourceReference;
  * Usage:
  * 
  * <pre>
- * this.getResourceSettings().setCssCompressor(new CssUrlReplacementCompressor(this));
+ * this.getResourceSettings().setCssCompressor(new CssUrlReplacer(this));
  * </pre>
  * 
  * @since 6.20.0


[09/13] wicket git commit: Optional comments

Posted by mg...@apache.org.
Optional comments

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

Branch: refs/heads/pr-87-css_js_compression
Commit: f2decb88d8384b0f8edffb7a1f33103fd851ead9
Parents: b96c404
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 19:04:19 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 19:04:19 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/resource/CssUrlReplacer.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/f2decb88/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index b9b8468..1945641 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -55,7 +55,7 @@ public class CssUrlReplacer implements ICssCompressor
 	private final Map<String, String> componentNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
 
 	// The pattern to find URLs in CSS resources
-	private static final Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
+	private static final Pattern urlPattern = Pattern.compile("url\\(['|\"]*(.*)['|\"]*\\)");
 
 	public CssUrlReplacer(Application application)
 	{


[11/13] wicket git commit: Merge branch 'css_js_compression' of https://github.com/klopfdreh/wicket into pr-87-css_js_compression

Posted by mg...@apache.org.
Merge branch 'css_js_compression' of https://github.com/klopfdreh/wicket into pr-87-css_js_compression


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

Branch: refs/heads/pr-87-css_js_compression
Commit: aba8360adb27c946cf6e1be63c2690789fc96e78
Parents: d230ff4 8b146b2
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Feb 5 23:27:08 2015 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Feb 5 23:27:08 2015 +0200

----------------------------------------------------------------------
 .../wicket/resource/CompositeCssCompressor.java |  86 +++++++++++++
 .../resource/CompositeJavaScriptCompressor.java |  87 +++++++++++++
 .../apache/wicket/resource/CssUrlReplacer.java  | 123 +++++++++++++++++++
 3 files changed, 296 insertions(+)
----------------------------------------------------------------------



[02/13] wicket git commit: Updated CssUrlReplacementCompressor - ComponentInitializationListener has to be ThreadSafe - Fixed redundancy

Posted by mg...@apache.org.
Updated CssUrlReplacementCompressor
- ComponentInitializationListener has to be ThreadSafe
- Fixed redundancy

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

Branch: refs/heads/pr-87-css_js_compression
Commit: b8635045b1b3cca9799dccae37ece6c8926db65b
Parents: 9752eac
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 15:17:23 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 15:17:23 2015 +0100

----------------------------------------------------------------------
 .../resource/CssUrlReplacementCompressor.java     | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b8635045/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
index eac8d23..44d67e5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
@@ -19,8 +19,10 @@ package org.apache.wicket.resource;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -35,8 +37,8 @@ import org.apache.wicket.request.resource.PackageResourceReference;
 
 /**
  * This compressor is used to replace url within css files with resources that belongs to their
- * corresponding page classes. The compress method is not compressing any content, but replacing the URLs
- * with Wicket representatives.<br>
+ * corresponding page classes. The compress method is not compressing any content, but replacing the
+ * URLs with Wicket representatives.<br>
  * <br>
  * Usage:
  * 
@@ -52,7 +54,7 @@ public class CssUrlReplacementCompressor implements ICssCompressor
 {
 
 	// Holds the names of pages
-	private List<String> pageNames = new ArrayList<String>();
+	private Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
 
 	// The pattern to find URLs in CSS resources
 	private Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
@@ -70,7 +72,8 @@ public class CssUrlReplacementCompressor implements ICssCompressor
 				{
 					if (Page.class.isAssignableFrom(component.getClass()))
 					{
-						CssUrlReplacementCompressor.this.pageNames.add(component.getClass().getName());
+						CssUrlReplacementCompressor.this.pageNames.put(component.getClass()
+							.getName(), component.getClass().getSimpleName());
 					}
 				}
 			});
@@ -87,7 +90,8 @@ public class CssUrlReplacementCompressor implements ICssCompressor
 		// Search for urls
 		while (matcher.find())
 		{
-			for (String pageName : this.pageNames)
+			Collection<String> pageNames = this.pageNames.values();
+			for (String pageName : pageNames)
 			{
 				try
 				{


[05/13] wicket git commit: Several fixes

Posted by mg...@apache.org.
Several fixes

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

Branch: refs/heads/pr-87-css_js_compression
Commit: 2ac0c6401a0e9abd9232342e790d15aac8091501
Parents: deeb453
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 17:34:03 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 17:34:03 2015 +0100

----------------------------------------------------------------------
 ...rg.eclipse.wst.common.project.facet.core.xml |   2 +-
 .../wicket/resource/CompositeCssCompressor.java |  11 +-
 .../resource/CompositeJavaScriptCompressor.java |  11 +-
 .../resource/CssUrlReplacementCompressor.java   | 144 -------------------
 .../apache/wicket/resource/CssUrlReplacer.java  | 127 ++++++++++++++++
 5 files changed, 132 insertions(+), 163 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac0c640/wicket-core/.settings/org.eclipse.wst.common.project.facet.core.xml
----------------------------------------------------------------------
diff --git a/wicket-core/.settings/org.eclipse.wst.common.project.facet.core.xml b/wicket-core/.settings/org.eclipse.wst.common.project.facet.core.xml
index c78d932..4f92af5 100644
--- a/wicket-core/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ b/wicket-core/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <faceted-project>
-  <installed facet="java" version="1.6"/>
   <installed facet="jst.utility" version="1.0"/>
+  <installed facet="java" version="1.7"/>
 </faceted-project>

http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac0c640/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
index bb61687..a288596 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
@@ -45,14 +45,7 @@ public class CompositeCssCompressor implements ICssCompressor
 {
 
 	/* Compressors to compress the CSS content */
-	private List<ICssCompressor> compressors = new ArrayList<>();
-
-	/**
-	 * Initializes an empty composite CSS compressor
-	 */
-	public CompositeCssCompressor()
-	{
-	}
+	private final List<ICssCompressor> compressors = new ArrayList<>();
 
 	/**
 	 * Initializes the composite CSS compressor with the given {@link ICssCompressor}
@@ -62,7 +55,7 @@ public class CompositeCssCompressor implements ICssCompressor
 	 */
 	public CompositeCssCompressor(ICssCompressor... compressors)
 	{
-		this.compressors = Arrays.asList(compressors);
+		this.compressors.addAll(Arrays.asList(compressors));
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac0c640/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
index cb1d101..c1888e2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
@@ -45,14 +45,7 @@ public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
 {
 
 	/* Compressors to compress javascript content */
-	private List<IJavaScriptCompressor> compressors = new ArrayList<>();
-
-	/**
-	 * Initializes an empty composite javascript compressor
-	 */
-	public CompositeJavaScriptCompressor()
-	{
-	}
+	private final List<IJavaScriptCompressor> compressors = new ArrayList<>();
 
 	/**
 	 * Initializes the composite javascript compressor with the given {@link IJavaScriptCompressor}
@@ -63,7 +56,7 @@ public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
 	 */
 	public CompositeJavaScriptCompressor(IJavaScriptCompressor... compressors)
 	{
-		this.compressors = Arrays.asList(compressors);
+		this.compressors.addAll(Arrays.asList(compressors));
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac0c640/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
deleted file mode 100644
index ce89f53..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacementCompressor.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * 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.resource;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.application.IComponentInitializationListener;
-import org.apache.wicket.css.ICssCompressor;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.resource.PackageResourceReference;
-
-/**
- * This compressor is used to replace url within css files with resources that belongs to their
- * corresponding page classes. The compress method is not compressing any content, but replacing the
- * URLs with Wicket representatives.<br>
- * <br>
- * Usage:
- * 
- * <pre>
- * this.getResourceSettings().setCssCompressor(new CssUrlReplacementCompressor(this));
- * </pre>
- * 
- * @since 6.20.0
- * @author Tobias Soloschenko
- * 
- */
-public class CssUrlReplacementCompressor implements ICssCompressor
-{
-
-	// Holds the names of pages
-	private Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
-
-	// The pattern to find URLs in CSS resources
-	private Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
-
-	public CssUrlReplacementCompressor(Application application)
-	{
-
-		// Create an instantiation listener which filters only pages.
-		application.getComponentInitializationListeners().add(
-			new IComponentInitializationListener()
-			{
-
-				@Override
-				public void onInitialize(Component component)
-				{
-					if (Page.class.isAssignableFrom(component.getClass()))
-					{
-						CssUrlReplacementCompressor.this.pageNames.put(component.getClass()
-							.getName(), component.getClass().getSimpleName());
-					}
-				}
-			});
-	}
-
-	/**
-	 * Replaces the URLs of CSS resources with Wicket representatives.
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public String compress(String original)
-	{
-		Matcher matcher = this.urlPattern.matcher(original);
-		// Search for urls
-		while (matcher.find())
-		{
-			Collection<String> pageNames = this.pageNames.keySet();
-			for (String pageName : pageNames)
-			{
-				try
-				{
-					Class<Page> pageClass = (Class<Page>)Class.forName(pageName);
-					String url = matcher.group(1);
-					if (!url.contains("/"))
-					{
-						URL urlResource = pageClass.getResource(url);
-						// If the resource is not found for a page skip it
-						if (urlResource != null)
-						{
-							PackageResourceReference packageResourceReference = new PackageResourceReference(
-								pageClass, url);
-							String replacedUrl = RequestCycle.get()
-								.urlFor(packageResourceReference, null)
-								.toString();
-							StringBuilder urlBuilder = new StringBuilder();
-							urlBuilder.append("url('");
-							urlBuilder.append(replacedUrl);
-							urlBuilder.append("')");
-							original = matcher.replaceFirst(urlBuilder.toString());
-						}
-					}
-				}
-				catch (Exception e)
-				{
-					StringWriter stringWriter = this.printStack(e);
-					throw new WicketRuntimeException(stringWriter.toString());
-				}
-			}
-
-		}
-		return original;
-	}
-
-	/**
-	 * Prints the stack trace to a print writer
-	 * 
-	 * @param exception
-	 *            the exception
-	 * @return the string writer containing the stack trace
-	 */
-	private StringWriter printStack(Exception exception)
-	{
-		StringWriter stringWriter = new StringWriter();
-		PrintWriter printWriter = new PrintWriter(stringWriter);
-		exception.printStackTrace(printWriter);
-		return stringWriter;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac0c640/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
new file mode 100644
index 0000000..c39dcea
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -0,0 +1,127 @@
+/*
+ * 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.resource;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.application.IComponentInitializationListener;
+import org.apache.wicket.css.ICssCompressor;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.resource.PackageResourceReference;
+
+/**
+ * This compressor is used to replace url within css files with resources that belongs to their
+ * corresponding page classes. The compress method is not compressing any content, but replacing the
+ * URLs with Wicket representatives.<br>
+ * <br>
+ * Usage:
+ * 
+ * <pre>
+ * this.getResourceSettings().setCssCompressor(new CssUrlReplacementCompressor(this));
+ * </pre>
+ * 
+ * @since 6.20.0
+ * @author Tobias Soloschenko
+ * 
+ */
+public class CssUrlReplacer implements ICssCompressor
+{
+
+	// Holds the names of pages
+	private Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
+
+	// The pattern to find URLs in CSS resources
+	private Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
+
+	public CssUrlReplacer(Application application)
+	{
+
+		// Create an instantiation listener which filters only pages.
+		application.getComponentInitializationListeners().add(
+			new IComponentInitializationListener()
+			{
+
+				@Override
+				public void onInitialize(Component component)
+				{
+					if (Page.class.isAssignableFrom(component.getClass()))
+					{
+						CssUrlReplacer.this.pageNames.put(component.getClass().getName(),
+							component.getClass().getSimpleName());
+					}
+				}
+			});
+	}
+
+	/**
+	 * Replaces the URLs of CSS resources with Wicket representatives.
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public String compress(String original)
+	{
+		Matcher matcher = this.urlPattern.matcher(original);
+		// Search for urls
+		while (matcher.find())
+		{
+			Collection<String> pageNames = this.pageNames.keySet();
+			for (String pageName : pageNames)
+			{
+				try
+				{
+					Class<Page> pageClass = (Class<Page>)Class.forName(pageName);
+					String url = matcher.group(1);
+					if (!url.contains("/"))
+					{
+						URL urlResource = pageClass.getResource(url);
+						// If the resource is not found for a page skip it
+						if (urlResource != null)
+						{
+							PackageResourceReference packageResourceReference = new PackageResourceReference(
+								pageClass, url);
+							String replacedUrl = RequestCycle.get()
+								.urlFor(packageResourceReference, null)
+								.toString();
+							StringBuilder urlBuilder = new StringBuilder();
+							urlBuilder.append("url('");
+							urlBuilder.append(replacedUrl);
+							urlBuilder.append("')");
+							original = matcher.replaceFirst(urlBuilder.toString());
+						}
+					}
+				}
+				catch (Exception e)
+				{
+					throw new WicketRuntimeException(
+						"A problem occurred during CSS url replacement.", e);
+				}
+			}
+
+		}
+		return original;
+	}
+}


[08/13] wicket git commit: Not limit it on pages

Posted by mg...@apache.org.
Not limit it on pages

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

Branch: refs/heads/pr-87-css_js_compression
Commit: b96c404fb2760b4dd600d33c1f89972a06edc0be
Parents: 71648ab
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 19:01:46 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 19:01:46 2015 +0100

----------------------------------------------------------------------
 .../apache/wicket/resource/CssUrlReplacer.java  | 28 +++++++++-----------
 1 file changed, 12 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b96c404f/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index c0f1444..b9b8468 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -26,7 +26,6 @@ import java.util.regex.Pattern;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
-import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.application.IComponentInitializationListener;
 import org.apache.wicket.core.util.lang.WicketObjects;
@@ -36,7 +35,7 @@ import org.apache.wicket.request.resource.PackageResourceReference;
 
 /**
  * This compressor is used to replace url within css files with resources that belongs to their
- * corresponding page classes. The compress method is not compressing any content, but replacing the
+ * corresponding component classes. The compress method is not compressing any content, but replacing the
  * URLs with Wicket representatives.<br>
  * <br>
  * Usage:
@@ -52,8 +51,8 @@ import org.apache.wicket.request.resource.PackageResourceReference;
 public class CssUrlReplacer implements ICssCompressor
 {
 
-	// Holds the names of pages
-	private final Map<String, String> pageNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
+	// Holds the names of components
+	private final Map<String, String> componentNames = Collections.synchronizedMap(new LinkedHashMap<String, String>());
 
 	// The pattern to find URLs in CSS resources
 	private static final Pattern urlPattern = Pattern.compile("url\\(['|\"](.*)['|\"]\\)");
@@ -61,7 +60,7 @@ public class CssUrlReplacer implements ICssCompressor
 	public CssUrlReplacer(Application application)
 	{
 
-		// Create an instantiation listener which filters only pages.
+		// Create an instantiation listener to detect components
 		application.getComponentInitializationListeners().add(
 			new IComponentInitializationListener()
 			{
@@ -69,11 +68,8 @@ public class CssUrlReplacer implements ICssCompressor
 				@Override
 				public void onInitialize(Component component)
 				{
-					if (Page.class.isAssignableFrom(component.getClass()))
-					{
-						CssUrlReplacer.this.pageNames.put(component.getClass().getName(),
-							component.getClass().getSimpleName());
-					}
+					CssUrlReplacer.this.componentNames.put(component.getClass().getName(),
+						component.getClass().getSimpleName());
 				}
 			});
 	}
@@ -88,21 +84,21 @@ public class CssUrlReplacer implements ICssCompressor
 		// Search for urls
 		while (matcher.find())
 		{
-			Collection<String> pageNames = this.pageNames.keySet();
-			for (String pageName : pageNames)
+			Collection<String> componentNames = this.componentNames.keySet();
+			for (String componentName : componentNames)
 			{
 				try
 				{
-					Class<Page> pageClass = WicketObjects.resolveClass(pageName);
+					Class<?> componentClass = WicketObjects.resolveClass(componentName);
 					String url = matcher.group(1);
 					if (!url.contains("/"))
 					{
-						URL urlResource = pageClass.getResource(url);
-						// If the resource is not found for a page skip it
+						URL urlResource = componentClass.getResource(url);
+						// If the resource is not found skip it
 						if (urlResource != null)
 						{
 							PackageResourceReference packageResourceReference = new PackageResourceReference(
-								pageClass, url);
+								componentClass, url);
 							String replacedUrl = RequestCycle.get()
 								.urlFor(packageResourceReference, null)
 								.toString();


[07/13] wicket git commit: WicketObjects to resolve classes

Posted by mg...@apache.org.
WicketObjects to resolve classes

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

Branch: refs/heads/pr-87-css_js_compression
Commit: 71648abe386a3a8b578c58abf9faf9e136f347dc
Parents: eca07da
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 17:47:08 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 17:47:08 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/resource/CssUrlReplacer.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/71648abe/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index 01b92fa..c0f1444 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -29,6 +29,7 @@ import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.application.IComponentInitializationListener;
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.css.ICssCompressor;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.PackageResourceReference;
@@ -80,7 +81,6 @@ public class CssUrlReplacer implements ICssCompressor
 	/**
 	 * Replaces the URLs of CSS resources with Wicket representatives.
 	 */
-	@SuppressWarnings("unchecked")
 	@Override
 	public String compress(String original)
 	{
@@ -93,7 +93,7 @@ public class CssUrlReplacer implements ICssCompressor
 			{
 				try
 				{
-					Class<Page> pageClass = (Class<Page>)Class.forName(pageName);
+					Class<Page> pageClass = WicketObjects.resolveClass(pageName);
 					String url = matcher.group(1);
 					if (!url.contains("/"))
 					{


[04/13] wicket git commit: Inline initialization / constructor

Posted by mg...@apache.org.
Inline initialization / constructor

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

Branch: refs/heads/pr-87-css_js_compression
Commit: deeb45355c8bad0e2b56a063e2275c87522d8709
Parents: d0864f1
Author: klopfdreh <kl...@tobiass-mbp>
Authored: Wed Feb 4 16:55:04 2015 +0100
Committer: klopfdreh <kl...@tobiass-mbp>
Committed: Wed Feb 4 16:55:04 2015 +0100

----------------------------------------------------------------------
 .../wicket/resource/CompositeCssCompressor.java | 47 +++++++++++-------
 .../resource/CompositeJavaScriptCompressor.java | 51 +++++++++++++-------
 2 files changed, 62 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/deeb4535/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
index 7b3c6e8..bb61687 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeCssCompressor.java
@@ -17,12 +17,13 @@
 package org.apache.wicket.resource;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.wicket.css.ICssCompressor;
 
 /**
- * Used to apply several {@link ICssCompressor} to the css compression.<br>
+ * Used to apply several {@link ICssCompressor} to the CSS compression.<br>
  * <br>
  * Usage:
  * 
@@ -34,6 +35,8 @@ import org.apache.wicket.css.ICssCompressor;
  * 
  * this.getResourceSettings().setCssCompressor(compositeCssCompressor);
  * </pre>
+ * The compressors can also be given as constructor arguments.
+ * 
  * @since 6.20.0
  * @author Tobias Soloschenko
  * 
@@ -42,27 +45,39 @@ public class CompositeCssCompressor implements ICssCompressor
 {
 
 	/* Compressors to compress the CSS content */
-	private List<ICssCompressor> compressors;
+	private List<ICssCompressor> compressors = new ArrayList<>();
+
+	/**
+	 * Initializes an empty composite CSS compressor
+	 */
+	public CompositeCssCompressor()
+	{
+	}
+
+	/**
+	 * Initializes the composite CSS compressor with the given {@link ICssCompressor}
+	 * 
+	 * @param compressors
+	 *            several {@link ICssCompressor} the composite CSS compressor is initialized with
+	 */
+	public CompositeCssCompressor(ICssCompressor... compressors)
+	{
+		this.compressors = Arrays.asList(compressors);
+	}
 
 	/**
-	 * Compresses the given original content in the order of compressors.
+	 * Compresses the given original content in the order of compressors. If no compressor has been
+	 * given the original content is going to be returned.
 	 */
 	@Override
 	public String compress(String original)
 	{
-		if (compressors != null)
+		String compressed = original;
+		for (ICssCompressor compressor : compressors)
 		{
-			String compressed = original;
-			for (ICssCompressor compressor : compressors)
-			{
-				compressed = compressor.compress(compressed);
-			}
-			return compressed;
-		}
-		else
-		{
-			return original;
+			compressed = compressor.compress(compressed);
 		}
+		return compressed;
 	}
 
 	/**
@@ -73,10 +88,6 @@ public class CompositeCssCompressor implements ICssCompressor
 	 */
 	public List<ICssCompressor> getCompressors()
 	{
-		if (compressors == null)
-		{
-			compressors = new ArrayList<>();
-		}
 		return compressors;
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/deeb4535/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
index 13d5efc..cb1d101 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CompositeJavaScriptCompressor.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.resource;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.wicket.javascript.IJavaScriptCompressor;
@@ -34,6 +35,8 @@ import org.apache.wicket.javascript.IJavaScriptCompressor;
  * 
  * this.getResourceSettings().setJavaScriptCompressor(compositeJavaScriptCompressor);
  * </pre>
+ * The compressors can also be given as constructor arguments.
+ * 
  * @since 6.20.0
  * @author Tobias Soloschenko
  *
@@ -42,38 +45,50 @@ public class CompositeJavaScriptCompressor implements IJavaScriptCompressor
 {
 
 	/* Compressors to compress javascript content */
-	private List<IJavaScriptCompressor> compressors;
+	private List<IJavaScriptCompressor> compressors = new ArrayList<>();
+
+	/**
+	 * Initializes an empty composite javascript compressor
+	 */
+	public CompositeJavaScriptCompressor()
+	{
+	}
+
+	/**
+	 * Initializes the composite javascript compressor with the given {@link IJavaScriptCompressor}
+	 * 
+	 * @param compressors
+	 *            several {@link IJavaScriptCompressor} the composite javascript compressor is
+	 *            initialized with
+	 */
+	public CompositeJavaScriptCompressor(IJavaScriptCompressor... compressors)
+	{
+		this.compressors = Arrays.asList(compressors);
+	}
 
+	/**
+	 * Compresses the given original content in the order of compressors. If no compressor has been
+	 * given the original content is going to be returned.
+	 */
 	@Override
 	public String compress(String original)
 	{
-		if (compressors != null)
+		String compressed = original;
+		for (IJavaScriptCompressor compressor : compressors)
 		{
-			String compressed = original;
-			for (IJavaScriptCompressor compressor : compressors)
-			{
-				compressed = compressor.compress(compressed);
-			}
-			return compressed;
-		}
-		else
-		{
-			return original;
+			compressed = compressor.compress(compressed);
 		}
+		return compressed;
 	}
 
 	/**
-	 * Gets a list of {@link IJavaScriptCompressor} to be used for javascript compression. They are applied in the
-	 * order of the List.
+	 * Gets a list of {@link IJavaScriptCompressor} to be used for javascript compression. They are
+	 * applied in the order of the List.
 	 * 
 	 * @return A list of {@link IJavaScriptCompressor} to be used for javascript compression.
 	 */
 	public List<IJavaScriptCompressor> getCompressors()
 	{
-		if (compressors == null)
-		{
-			compressors = new ArrayList<>();
-		}
 		return compressors;
 	}
 }