You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2009/11/12 05:35:56 UTC

svn commit: r835232 - in /wicket/trunk/wicket/src: main/java/org/apache/wicket/ng/request/handler/resource/ main/java/org/apache/wicket/ng/request/mapper/ main/java/org/apache/wicket/ng/resource/ test/java/org/apache/wicket/ng/request/mapper/

Author: ivaynberg
Date: Thu Nov 12 04:35:56 2009
New Revision: 835232

URL: http://svn.apache.org/viewvc?rev=835232&view=rev
Log:
WICKET-2571 forward port variation into ng resource refs

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceRequestHandler.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceMapper.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/ResourceReferenceMapper.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/Resource.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReference.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReferenceRegistry.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/ResourceReferenceEncoderTest.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceRequestHandler.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceRequestHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceRequestHandler.java Thu Nov 12 04:35:56 2009
@@ -34,6 +34,7 @@
 	private final Resource resource;
 	private final Locale locale;
 	private final String style;
+	private final String variation;
 	private final PageParameters pageParameters;
 
 	/**
@@ -42,9 +43,10 @@
 	 * @param resource
 	 * @param locale
 	 * @param style
+	 * @param variation
 	 * @param pageParameters
 	 */
-	public ResourceRequestHandler(Resource resource, Locale locale, String style,
+	public ResourceRequestHandler(Resource resource, Locale locale, String style, String variation,
 		PageParameters pageParameters)
 	{
 		Checks.argumentNotNull(resource, "resource");
@@ -52,6 +54,7 @@
 		this.resource = resource;
 		this.locale = locale;
 		this.style = style;
+		this.variation = variation;
 		this.pageParameters = pageParameters != null ? pageParameters : new PageParameters();
 	}
 
@@ -72,6 +75,14 @@
 	}
 	
 	/**
+	 * @return variation
+	 */
+	public String getVariation()
+	{
+		return variation;
+	}
+
+	/**
 	 * @return page parameters
 	 */
 	public PageParameters getPageParameters()
@@ -90,7 +101,7 @@
 	public void respond(RequestCycle requestCycle)
 	{
 		Resource.Attributes a = new Resource.Attributes(requestCycle.getRequest(),
-			requestCycle.getResponse(), locale, style, pageParameters);
+			requestCycle.getResponse(), locale, style, variation, pageParameters);
 		resource.respond(a);
 	}
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceMapper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceMapper.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceMapper.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceMapper.java Thu Nov 12 04:35:56 2009
@@ -35,11 +35,13 @@
 	{
 		protected Locale locale;
 		protected String style;
+		protected String variation;
 	};
 	
 	protected static String encodeResourceReferenceAttributes(ResourceReferenceAttributes attributes)
 	{
-		if (attributes == null || (attributes.locale == null && attributes.style == null))
+		if (attributes == null ||
+			(attributes.locale == null && attributes.style == null && attributes.variation == null))
 		{
 			return null;
 		}
@@ -55,6 +57,11 @@
 				res.append("-");
 				res.append(attributes.style);
 			}
+			if (!Strings.isEmpty(attributes.variation))
+			{
+				res.append("-");
+				res.append(attributes.variation);
+			}
 			return res.toString();
 		}
 	};
@@ -64,12 +71,17 @@
 		ResourceReferenceAttributes res = new ResourceReferenceAttributes();		
 		if (!Strings.isEmpty(attributes))
 		{
-			String split[] = attributes.split("-", 2);
+			String split[] = attributes.split("-", 3);
 			res.locale = parseLocale(split[0]);
 			if (split.length == 2)
 			{
 				res.style = split[1];
 			}			
+			else if (split.length == 3)
+			{
+				res.style = split[1];
+				res.variation = split[2];
+		}
 		}
 		return res;
 	}
@@ -107,6 +119,7 @@
 		ResourceReferenceAttributes attributes = new ResourceReferenceAttributes();
 		attributes.locale = reference.getLocale();
 		attributes.style = reference.getStyle();
+		attributes.variation = reference.getVariation();
 		String encoded = encodeResourceReferenceAttributes(attributes);
 		if (!Strings.isEmpty(encoded))
 		{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/ResourceReferenceMapper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/ResourceReferenceMapper.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/ResourceReferenceMapper.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/ResourceReferenceMapper.java Thu Nov 12 04:35:56 2009
@@ -68,8 +68,8 @@
 	public RequestHandler mapRequest(Request request)
 	{
 		Url url = request.getUrl();
-		if (url.getSegments().size() >= 4
-				&& urlStartsWith(url, getContext().getNamespace(), getContext().getResourceIdentifier()))
+		if (url.getSegments().size() >= 4 &&
+			urlStartsWith(url, getContext().getNamespace(), getContext().getResourceIdentifier()))
 		{
 			String className = url.getSegments().get(2);
 			StringBuilder name = new StringBuilder();
@@ -85,21 +85,23 @@
 			ResourceReferenceAttributes attributes = getResourceReferenceAttributes(url);
 
 			// extract the PageParameters from URL if there are any
-			PageParameters pageParameters = extractPageParameters(request, url.getSegments().size(),
-					pageParametersEncoder);
+			PageParameters pageParameters = extractPageParameters(request,
+				url.getSegments().size(), pageParametersEncoder);
 
 			Class<?> scope = resolveClass(className);
 			if (scope != null)
 			{
-				ResourceReference res = getContext().getResourceReferenceRegistry().getResourceReference(scope,
-						name.toString(), attributes.locale, attributes.style, false);
+				ResourceReference res = getContext().getResourceReferenceRegistry()
+					.getResourceReference(scope, name.toString(), attributes.locale,
+						attributes.style, attributes.variation, false);
 				if (res != null)
 				{
 					Resource resource = res.getResource();
 					if (resource != null)
 					{
-						ResourceRequestHandler handler = new ResourceRequestHandler(resource, attributes.locale,
-								attributes.style, pageParameters);
+						ResourceRequestHandler handler = new ResourceRequestHandler(resource,
+							attributes.locale, attributes.style, attributes.variation,
+							pageParameters);
 						return handler;
 					}
 				}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/Resource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/Resource.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/Resource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/Resource.java Thu Nov 12 04:35:56 2009
@@ -44,6 +44,7 @@
 		private final Response response;
 		private final Locale locale;
 		private final String style;
+		private final String variation;
 		private final PageParameters parameters;
 
 		/**
@@ -54,10 +55,11 @@
 		 * @param response
 		 * @param locale
 		 * @param style
+		 * @param variation
 		 * @param parameters
 		 */
 		public Attributes(Request request, Response response, Locale locale, String style,
-			PageParameters parameters)
+			String variation, PageParameters parameters)
 		{
 			Checks.argumentNotNull(request, "request");
 			Checks.argumentNotNull(response, "response");
@@ -67,6 +69,7 @@
 			this.response = response;
 			this.locale = locale;
 			this.style = style;
+			this.variation = variation;
 			this.parameters = parameters;
 		}
 
@@ -111,6 +114,16 @@
 		}
 
 		/**
+		 * If specified returns requested variation. The variation is optional.
+		 * 
+		 * @return variation or <code>null</code>
+		 */
+		public String getVariant()
+		{
+			return variation;
+		}
+
+		/**
 		 * Returns additional parameters extracted from the request. If resource is created mounted
 		 * {@link ResourceReference}, this method returns all (indexed and query) parameters after
 		 * the mount path. For non mounted {@link ResourceReference}s this method will only return

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReference.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReference.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReference.java Thu Nov 12 04:35:56 2009
@@ -36,6 +36,7 @@
 	private final String name;
 	private final Locale locale;
 	private final String style;
+	private final String variation;
 
 	/**
 	 * Creates new {@link ResourceReference} instance.
@@ -46,8 +47,10 @@
 	 *            mandatory parameter
 	 * @param locale
 	 * @param style
+	 * @param variation
 	 */
-	public ResourceReference(Class<?> scope, String name, Locale locale, String style)
+	public ResourceReference(Class<?> scope, String name, Locale locale, String style,
+		String variation)
 	{
 		Checks.argumentNotNull(scope, "scope");
 		Checks.argumentNotNull(name, "name");
@@ -56,6 +59,7 @@
 		this.name = name;
 		this.locale = locale;
 		this.style = style;
+		this.variation = variation;
 	}
 
 	/**
@@ -90,6 +94,14 @@
 		return style;
 	}
 
+	/**
+	 * @return variation
+	 */
+	public String getVariation()
+	{
+		return variation;
+	}
+
 	@Override
 	public boolean equals(Object obj)
 	{
@@ -105,13 +117,14 @@
 		return Objects.equal(scope, that.scope) && //
 			Objects.equal(name, that.name) && //
 			Objects.equal(locale, that.locale) && //
-			Objects.equal(style, that.style);
+			Objects.equal(style, that.style) && //
+			Objects.equal(variation, that.variation);
 	}
 
 	@Override
 	public int hashCode()
 	{
-		return Objects.hashCode(scope, name, locale, style);
+		return Objects.hashCode(scope, name, locale, style, variation);
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReferenceRegistry.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReferenceRegistry.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReferenceRegistry.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/ResourceReferenceRegistry.java Thu Nov 12 04:35:56 2009
@@ -36,8 +36,9 @@
 		private final String name;
 		private final Locale locale;
 		private final String style;
+		private final String variation;
 
-		public Key(String scope, String name, Locale locale, String style)
+		public Key(String scope, String name, Locale locale, String style, String variation)
 		{
 			Checks.argumentNotNull(scope, "scope");
 			Checks.argumentNotNull(name, "name");
@@ -46,6 +47,7 @@
 			this.name = name;
 			this.locale = locale;
 			this.style = style;
+			this.variation = variation;
 		}
 
 		@Override
@@ -63,17 +65,18 @@
 			return Objects.equal(scope, that.scope) && //
 				Objects.equal(name, that.name) && //
 				Objects.equal(locale, that.locale) && //
-				Objects.equal(style, that.style);
+				Objects.equal(style, that.style) && //
+				Objects.equal(variation, that.variation);
 		}
 
 		@Override
 		public int hashCode()
 		{
-			return Objects.hashCode(scope, name, locale, style);
+			return Objects.hashCode(scope, name, locale, style, variation);
 		}
 	};
 
-	private Map<Key, ResourceReference> map = new ConcurrentHashMap<Key, ResourceReference>();
+	private final Map<Key, ResourceReference> map = new ConcurrentHashMap<Key, ResourceReference>();
 
 	/**
 	 * Registers the given {@link ResourceReference}.
@@ -85,7 +88,7 @@
 		Checks.argumentNotNull(reference, "reference");
 
 		Key key = new Key(reference.getScope().getName(), reference.getName(),
-			reference.getLocale(), reference.getStyle());
+			reference.getLocale(), reference.getStyle(), reference.getVariation());
 		map.put(key, reference);
 	}
 
@@ -99,14 +102,14 @@
 		Checks.argumentNotNull(reference, "reference");
 
 		Key key = new Key(reference.getScope().getName(), reference.getName(),
-			reference.getLocale(), reference.getStyle());
+			reference.getLocale(), reference.getStyle(), reference.getVariation());
 		map.remove(key);
 	}
 
 	protected ResourceReference getResourceReference(Class<?> scope, String name, Locale locale,
-			String style, boolean strict, boolean createIfNotFound)
+		String style, String variation, boolean strict, boolean createIfNotFound)
 		{
-			Key key = new Key(scope.getName(), name, locale, style);
+		Key key = new Key(scope.getName(), name, locale, style, variation);
 			ResourceReference res = map.get(key);
 			if (strict || res != null)
 			{
@@ -114,14 +117,34 @@
 			}
 			else
 			{
-				res = getResourceReference(scope, name, locale, null, true, false);
+			res = getResourceReference(scope, name, locale, style, null, true, false);
 				if (res == null)
 				{
-					res = getResourceReference(scope, name, null, null, true, false);
+				res = getResourceReference(scope, name, locale, null, variation, true, false);
 				}
+			if (res == null)
+			{
+				res = getResourceReference(scope, name, locale, null, null, true, false);
+			}
+			if (res == null)
+			{
+				res = getResourceReference(scope, name, null, style, variation, true, false);
+			}
+			if (res == null)
+			{
+				res = getResourceReference(scope, name, null, style, null, true, false);
+			}
+			if (res == null)
+			{
+				res = getResourceReference(scope, name, null, null, variation, true, false);
+			}
+			if (res == null)
+			{
+				res = getResourceReference(scope, name, null, null, null, true, false);
+			}
 				if (res == null && createIfNotFound)
 				{
-					res = createDefaultResourceReference(scope, name, locale, style);
+				res = createDefaultResourceReference(scope, name, locale, style, variation);
 				}
 				return res;
 			}
@@ -138,28 +161,30 @@
 	 *            mandatory parameter
 	 * @param locale
 	 * @param style
+	 * @param variation
 	 * @param strict
-	 *            if <code>strict</code> is <code>true</code> only resources that match exactly
-	 *            are returned. Otherwise if there is no resource registered that is an exact
-	 *            match, also resources with <code>null</code> style and locale are tried. If
-	 *            still no resource is found, result of
+	 *            if <code>strict</code> is <code>true</code> only resources that match exactly are
+	 *            returned. Otherwise if there is no resource registered that is an exact match,
+	 *            also resources with <code>null</code> style and locale are tried. If still no
+	 *            resource is found, result of
 	 *            {@link #createDefaultResourceReference(Class, String, Locale, String)} is
 	 *            returned.
 	 * @return {@link ResourceReference} or <code>null</code>
 	 */
 	public ResourceReference getResourceReference(Class<?> scope, String name, Locale locale,
-		String style, boolean strict)
+		String style, String variation, boolean strict)
 	{
-		ResourceReference reference = getResourceReference(scope, name, locale, style, strict, false);
+		ResourceReference reference = getResourceReference(scope, name, locale, style, variation,
+			strict, false);
 		if (reference == null)
 		{
 			// TODO: Check the class static member for ResourceReferences and register those 
 		}
-		return getResourceReference(scope, name, locale, style, strict, true);
+		return reference;
 	}
 
 	protected ResourceReference createDefaultResourceReference(Class<?> scope, String name,
-		Locale locale, String style)
+		Locale locale, String style, String variation)
 	{
 		// override in superclass to e.g. return PackageResourceReference if there is one
 		return null;

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java Thu Nov 12 04:35:56 2009
@@ -70,13 +70,32 @@
 		}
 	};
 	
+	protected final Resource resource5 = new Resource()
+	{
+		private static final long serialVersionUID = 1L;
+
+		public void respond(Attributes attributes)
+		{
+		}
+	};
+
+	protected final Resource resource6 = new Resource()
+	{
+		private static final long serialVersionUID = 1L;
+
+		public void respond(Attributes attributes)
+		{
+		}
+	};
+
 	protected String CLASS_NAME = AbstractResourceReferenceEncoderTest.class.getName();
 
 	protected ResourceReference reference1 = new ResourceReference(
-		AbstractResourceReferenceEncoderTest.class, "reference1", null, null)
+		AbstractResourceReferenceEncoderTest.class, "reference1", null, null, null)
 	{
 		private static final long serialVersionUID = 1L;
 
+		@Override
 		public Resource getResource()
 		{
 			return resource1;
@@ -84,10 +103,12 @@
 	};
 	
 	protected ResourceReference reference2 = new ResourceReference(
-		AbstractResourceReferenceEncoderTest.class, "reference2/name2", new Locale("en", "en"), null)
+		AbstractResourceReferenceEncoderTest.class, "reference2/name2", new Locale("en", "en"),
+		null, null)
 	{
 		private static final long serialVersionUID = 1L;
 
+		@Override
 		public Resource getResource()
 		{
 			return resource2;
@@ -95,10 +116,11 @@
 	};
 	
 	protected ResourceReference reference3 = new ResourceReference(
-		AbstractResourceReferenceEncoderTest.class, "reference3", null, "style")
+		AbstractResourceReferenceEncoderTest.class, "reference3", null, "style", null)
 	{
 		private static final long serialVersionUID = 1L;
 
+		@Override
 		public Resource getResource()
 		{
 			return resource3;
@@ -106,16 +128,42 @@
 	};
 	
 	protected ResourceReference reference4 = new ResourceReference(
-		AbstractResourceReferenceEncoderTest.class, "reference4", Locale.ENGLISH, "style")
+		AbstractResourceReferenceEncoderTest.class, "reference4", Locale.ENGLISH, "style", null)
 	{
 		private static final long serialVersionUID = 1L;
 
+		@Override
 		public Resource getResource()
 		{
 			return resource4;
 		};
 	};
 
+	protected ResourceReference reference5 = new ResourceReference(
+		AbstractResourceReferenceEncoderTest.class, "reference5", Locale.ENGLISH, null, "variation")
+	{
+		private static final long serialVersionUID = 1L;
+
+	@Override
+		public Resource getResource()
+		{
+			return resource5;
+		};
+	};
+
+	protected ResourceReference reference6 = new ResourceReference(
+		AbstractResourceReferenceEncoderTest.class, "reference6", Locale.ENGLISH, "style",
+		"variation")
+	{
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public Resource getResource()
+		{
+			return resource6;
+		};
+	};
+
 	@Override
 	protected void setUp() throws Exception
 	{
@@ -125,5 +173,7 @@
 		context.getResourceReferenceRegistry().registerResourceReference(reference2);
 		context.getResourceReferenceRegistry().registerResourceReference(reference3);
 		context.getResourceReferenceRegistry().registerResourceReference(reference4);
+		context.getResourceReferenceRegistry().registerResourceReference(reference5);
+		context.getResourceReferenceRegistry().registerResourceReference(reference6);
 	}
 }

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/ResourceReferenceEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/ResourceReferenceEncoderTest.java?rev=835232&r1=835231&r2=835232&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/ResourceReferenceEncoderTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/ResourceReferenceEncoderTest.java Thu Nov 12 04:35:56 2009
@@ -57,6 +57,7 @@
         assertEquals(resource1, h.getResource());
         assertEquals(null, h.getLocale());
         assertEquals(null, h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -73,6 +74,7 @@
         assertEquals(resource1, h.getResource());
         assertEquals(Locale.ENGLISH, h.getLocale());
         assertEquals(null, h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -89,6 +91,7 @@
         assertEquals(resource1, h.getResource());
         assertEquals(null, h.getLocale());
         assertEquals(null, h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
         assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
@@ -106,6 +109,7 @@
         assertEquals(resource1, h.getResource());
         assertEquals(null, h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
         assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
@@ -123,6 +127,7 @@
         assertEquals(resource2, h.getResource());
         assertEquals(new Locale("en", "en"), h.getLocale());
         assertEquals(null, h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -139,6 +144,7 @@
         assertEquals(resource2, h.getResource());
         assertEquals(new Locale("en", "en"), h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -158,14 +164,14 @@
 	 */
     public void testDecode4()
     {
-        Url url = Url
-                .parse("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2");
+		Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2");
         RequestHandler handler = encoder.mapRequest(getRequest(url));
         assertTrue(handler instanceof ResourceRequestHandler);
         ResourceRequestHandler h = (ResourceRequestHandler)handler;
         assertEquals(resource2, h.getResource());
         assertEquals(new Locale("en", "en"), h.getLocale());
         assertEquals(null, h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
         assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
     }
@@ -182,6 +188,7 @@
         assertEquals(resource3, h.getResource());
         assertEquals(null, h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -198,6 +205,7 @@
         assertEquals(resource3, h.getResource());
         assertEquals(null, h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
         assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
@@ -216,6 +224,7 @@
         assertEquals(resource4, h.getResource());
         assertEquals(Locale.ENGLISH, h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
     }
@@ -242,6 +251,7 @@
         assertEquals(resource4, h.getResource());
         assertEquals(Locale.ENGLISH, h.getLocale());
         assertEquals("style", h.getStyle());
+		assertEquals(null, h.getVariation());
         assertEquals(0, h.getPageParameters().getIndexedParamsCount());
         assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
         assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
@@ -250,6 +260,44 @@
     /**
 	 * 
 	 */
+	public void testDecode9()
+	{
+		Url url = Url.parse("wicket/resource/" + CLASS_NAME +
+			"/reference5?en--variation&p1=v1&p2=v2");
+		RequestHandler handler = encoder.mapRequest(getRequest(url));
+		assertTrue(handler instanceof ResourceRequestHandler);
+		ResourceRequestHandler h = (ResourceRequestHandler)handler;
+		assertEquals(resource5, h.getResource());
+		assertEquals(Locale.ENGLISH, h.getLocale());
+		assertEquals("", h.getStyle());
+		assertEquals("variation", h.getVariation());
+		assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+		assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+		assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+	}
+
+	/**
+	 * 
+	 */
+	public void testDecode10()
+	{
+		Url url = Url.parse("wicket/resource/" + CLASS_NAME +
+			"/reference6?en-style-variation&p1=v1&p2=v2");
+		RequestHandler handler = encoder.mapRequest(getRequest(url));
+		assertTrue(handler instanceof ResourceRequestHandler);
+		ResourceRequestHandler h = (ResourceRequestHandler)handler;
+		assertEquals(resource6, h.getResource());
+		assertEquals(Locale.ENGLISH, h.getLocale());
+		assertEquals("style", h.getStyle());
+		assertEquals("variation", h.getVariation());
+		assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+		assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+		assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+	}
+
+	/**
+	 * 
+	 */
     public void testEncode1()
     {
         ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference1,
@@ -298,8 +346,8 @@
                 parameters);
 
         Url url = encoder.mapHandler(handler);
-        assertEquals("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2", url
-                .toString());
+		assertEquals("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2",
+			url.toString());
     }
 
     /**
@@ -326,8 +374,8 @@
                 parameters);
 
         Url url = encoder.mapHandler(handler);
-        assertEquals("wicket/resource/" + CLASS_NAME + "/reference3?-style&p1=v1&p2=v2", url
-                .toString());
+		assertEquals("wicket/resource/" + CLASS_NAME + "/reference3?-style&p1=v1&p2=v2",
+			url.toString());
     }
 
     /**
@@ -354,7 +402,7 @@
                 parameters);
 
         Url url = encoder.mapHandler(handler);
-        assertEquals("wicket/resource/" + CLASS_NAME + "/reference4?en-style&p1=v1&p2=v2", url
-                .toString());
+		assertEquals("wicket/resource/" + CLASS_NAME + "/reference4?en-style&p1=v1&p2=v2",
+			url.toString());
     }
 }