You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2010/01/20 01:48:18 UTC

svn commit: r901016 - in /wicket/trunk: wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ wicket-examples/src/main/java/org/apache/wicket/examples/hangman/ wicket-examples/src/main/java/org/apache/wicket/examples/images/ wicket-exa...

Author: knopp
Date: Wed Jan 20 00:48:15 2010
New Revision: 901016

URL: http://svn.apache.org/viewvc?rev=901016&view=rev
Log:
Pub and hangman working

Added:
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Beer_de_DE.gif
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java   (with props)
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java   (with props)
Modified:
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Home.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Letter.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/images/Home.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Home.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/image/resource/ThumbnailImageResource.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/DefaultAbstractTree.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/Image.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/LabelIconPanel.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceReferenceRequestHandler.java
    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/CompressedResourceReference.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/JavascriptResourceReference.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/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/session/HttpSessionStore.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/IResourceStreamLocator.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java Wed Jan 20 00:48:15 2010
@@ -25,6 +25,7 @@
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 
 
@@ -38,14 +39,14 @@
 	/**
 	 * Star image for no selected star
 	 */
-	public static final ResourceReference WICKETSTAR0 = new ResourceReference(RatingsPage.class,
-		"WicketStar0.png");
+	public static final ResourceReference WICKETSTAR0 = new PackageResourceReference(
+		RatingsPage.class, "WicketStar0.png");
 
 	/**
 	 * Star image for selected star
 	 */
-	public static final ResourceReference WICKETSTAR1 = new ResourceReference(RatingsPage.class,
-		"WicketStar1.png");
+	public static final ResourceReference WICKETSTAR1 = new PackageResourceReference(
+		RatingsPage.class, "WicketStar1.png");
 
 	/** For serialization. */
 	private static final long serialVersionUID = 1L;

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Home.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Home.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Home.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Home.java Wed Jan 20 00:48:15 2010
@@ -36,6 +36,7 @@
 	 */
 	public Home(final PageParameters parameters)
 	{
+		getSession().bind();
 		final String word = parameters.getNamedParameter("word").toOptionalString();
 		if (word == null)
 		{

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Letter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Letter.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Letter.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/hangman/Letter.java Wed Jan 20 00:48:15 2010
@@ -19,8 +19,8 @@
 import java.awt.Color;
 
 import org.apache.wicket.IClusterable;
-import org.apache.wicket.Resource;
 import org.apache.wicket.markup.html.image.resource.DefaultButtonImageResource;
+import org.apache.wicket.ng.resource.IResource;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.util.lang.Primitives;
 
@@ -79,7 +79,8 @@
 		return new ResourceReference(Letter.class, asString() +
 			(isGuessed() ? "_enabled" : "_disabled"))
 		{
-			protected Resource newResource()
+			@Override
+			public IResource getResource()
 			{
 				// Lazy loading of shared resource
 				final DefaultButtonImageResource buttonResource = new DefaultButtonImageResource(

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/images/Home.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/images/Home.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/images/Home.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/images/Home.java Wed Jan 20 00:48:15 2010
@@ -28,7 +28,9 @@
 import org.apache.wicket.markup.html.image.resource.RenderedDynamicImageResource;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.ng.resource.IResource;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
+import org.apache.wicket.ng.resource.SharedResourceReference;
 
 
 /**
@@ -58,7 +60,7 @@
 		}
 	}
 
-	private static final ResourceReference RESOURCE_REF = new ResourceReference(Home.class,
+	private static final ResourceReference RESOURCE_REF = new PackageResourceReference(Home.class,
 		"Image2.gif");
 
 	/**
@@ -67,7 +69,7 @@
 	public Home()
 	{
 		// Image as package resource
-		add(new Image("image2"));
+		add(new Image("image2", new PackageResourceReference(Home.class, "image2.gif")));
 
 		// Dynamically created image. Will re-render whenever resource is asked
 		// for.
@@ -83,7 +85,7 @@
 		add(new Image("okButton", getOkButtonImage()));
 
 		// Add cancel button image
-		add(new Image("cancelButton", new ResourceReference("cancelButton")));
+		add(new Image("cancelButton", new SharedResourceReference("cancelButton")));
 
 		// image loaded as resource ref via model.
 		add(new Image("imageModelResourceReference", new Model<ResourceReference>(RESOURCE_REF)));

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java Wed Jan 20 00:48:15 2010
@@ -32,7 +32,7 @@
 import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.ng.resource.ResourceReference;
+import org.apache.wicket.ng.resource.SharedResourceReference;
 
 
 /**
@@ -134,7 +134,7 @@
 			"Click this link to go to Google in a popup").setPopupSettings(googlePopupSettings));
 
 		// Shared resource link
-		add(new ResourceLink("cancelButtonLink", new ResourceReference("cancelButton")));
+		add(new ResourceLink("cancelButtonLink", new SharedResourceReference("cancelButton")));
 
 		// redirect to external url form
 		FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");

Added: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Beer_de_DE.gif
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Beer_de_DE.gif?rev=901016&view=auto
==============================================================================
Files wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Beer_de_DE.gif (added) and wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Beer_de_DE.gif Wed Jan 20 00:48:15 2010 differ

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Home.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Home.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Home.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/pub/Home.java Wed Jan 20 00:48:15 2010
@@ -25,6 +25,7 @@
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.StringResourceModel;
 import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.util.value.ValueMap;
 
 
@@ -44,7 +45,7 @@
 	 */
 	public Home(final PageParameters parameters)
 	{
-		add(new Image("beer"));
+		add(new Image("beer", new PackageResourceReference(Home.class, "Beer.gif")));
 
 		// create a dummy object to serve as our substitution model
 		ValueMap map = new ValueMap();

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java Wed Jan 20 00:48:15 2010
@@ -37,6 +37,9 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.ng.resource.CompressedResourceReference;
+import org.apache.wicket.ng.resource.JavascriptResourceReference;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 
 
@@ -112,26 +115,28 @@
 	private Component selectionComponent;
 
 	/** reference to the palette's javascript resource */
-	private static final ResourceReference JAVASCRIPT = new ResourceReference(Palette.class,
-		"palette.js");
+	private static final ResourceReference JAVASCRIPT = new JavascriptResourceReference(
+		Palette.class, "palette.js");
 
 	/** reference to the palette's css resource */
-	private static final ResourceReference CSS = new ResourceReference(Palette.class, "palette.css");
+	private static final ResourceReference CSS = new CompressedResourceReference(Palette.class,
+		"palette.css");
 
 
 	/** reference to default up button image */
-	private static final ResourceReference UP_IMAGE = new ResourceReference(Palette.class, "up.gif");
+	private static final ResourceReference UP_IMAGE = new PackageResourceReference(Palette.class,
+		"up.gif");
 
 	/** reference to default down button image */
-	private static final ResourceReference DOWN_IMAGE = new ResourceReference(Palette.class,
+	private static final ResourceReference DOWN_IMAGE = new PackageResourceReference(Palette.class,
 		"down.gif");
 
 	/** reference to default remove button image */
-	private static final ResourceReference REMOVE_IMAGE = new ResourceReference(Palette.class,
-		"remove.gif");
+	private static final ResourceReference REMOVE_IMAGE = new PackageResourceReference(
+		Palette.class, "remove.gif");
 
 	/** reference to default add button image */
-	private static final ResourceReference ADD_IMAGE = new ResourceReference(Palette.class,
+	private static final ResourceReference ADD_IMAGE = new PackageResourceReference(Palette.class,
 		"add.gif");
 
 	/**

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/image/resource/ThumbnailImageResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/image/resource/ThumbnailImageResource.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/image/resource/ThumbnailImageResource.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/image/resource/ThumbnailImageResource.java Wed Jan 20 00:48:15 2010
@@ -25,8 +25,7 @@
 import javax.imageio.ImageIO;
 
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.markup.html.WebResource;
-import org.apache.wicket.markup.html.image.resource.DynamicImageResource;
+import org.apache.wicket.ng.resource.DynamicImageResource;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/DefaultAbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/DefaultAbstractTree.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/DefaultAbstractTree.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/DefaultAbstractTree.java Wed Jan 20 00:48:15 2010
@@ -37,6 +37,8 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.ng.resource.CompressedResourceReference;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.util.lang.EnumeratedType;
 
@@ -119,20 +121,20 @@
 	/**
 	 * Reference to the css file.
 	 */
-	private static final ResourceReference CSS = new ResourceReference(DefaultAbstractTree.class,
-		"res/tree.css");
+	private static final ResourceReference CSS = new CompressedResourceReference(
+		DefaultAbstractTree.class, "res/tree.css");
 
 	/** Reference to the icon of closed tree folder */
-	private static final ResourceReference FOLDER_CLOSED = new ResourceReference(
+	private static final ResourceReference FOLDER_CLOSED = new PackageResourceReference(
 		DefaultAbstractTree.class, "res/folder-closed.gif");
 
 	/** Reference to the icon of open tree folder */
-	private static final ResourceReference FOLDER_OPEN = new ResourceReference(
+	private static final ResourceReference FOLDER_OPEN = new PackageResourceReference(
 		DefaultAbstractTree.class, "res/folder-open.gif");
 
 	/** Reference to the icon of tree item (not a folder) */
-	private static final ResourceReference ITEM = new ResourceReference(DefaultAbstractTree.class,
-		"res/item.gif");
+	private static final ResourceReference ITEM = new PackageResourceReference(
+		DefaultAbstractTree.class, "res/item.gif");
 
 	/** The link type, default is {@link LinkType#AJAX ajax}. */
 	private LinkType linkType = LinkType.AJAX;

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java Wed Jan 20 00:48:15 2010
@@ -33,6 +33,7 @@
 import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.ng.resource.CompressedResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 
 
@@ -109,8 +110,8 @@
 	}
 
 	/** Reference to the css file. */
-	private static final ResourceReference CSS = new ResourceReference(DefaultAbstractTree.class,
-		"res/tree-table.css");
+	private static final ResourceReference CSS = new CompressedResourceReference(
+		DefaultAbstractTree.class, "res/tree-table.css");
 
 	private static final long serialVersionUID = 1L;
 

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java Wed Jan 20 00:48:15 2010
@@ -31,6 +31,7 @@
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.StringResourceModel;
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 
 /**
@@ -157,13 +158,13 @@
 	/**
 	 * Star image for no selected star
 	 */
-	public static final ResourceReference STAR0 = new ResourceReference(RatingPanel.class,
+	public static final ResourceReference STAR0 = new PackageResourceReference(RatingPanel.class,
 		"star0.gif");
 
 	/**
 	 * Star image for selected star
 	 */
-	public static final ResourceReference STAR1 = new ResourceReference(RatingPanel.class,
+	public static final ResourceReference STAR1 = new PackageResourceReference(RatingPanel.class,
 		"star1.gif");
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java Wed Jan 20 00:48:15 2010
@@ -1387,7 +1387,7 @@
 		Session session = getSessionStore().lookup(requestCycle.getRequest());
 		if (session == null)
 		{
-			session = newSession(requestCycle);
+			session = newSession(requestCycle.getRequest(), requestCycle.getResponse());
 			ThreadContext.setSession(session);
 			getPageManager().newSessionCreated();
 		}
@@ -1398,11 +1398,6 @@
 		return session;
 	}
 
-	protected Session newSession(RequestCycle requestCycle)
-	{
-		return new WebSession(requestCycle.getRequest());
-	}
-
 	/**
 	 * Override this method to create custom Request Cycle instance.
 	 * 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java Wed Jan 20 00:48:15 2010
@@ -26,6 +26,7 @@
 import org.apache.wicket.ng.request.Url;
 import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.ng.resource.JavascriptResourceReference;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WebRequest;
@@ -47,7 +48,7 @@
 	private static final long serialVersionUID = 1L;
 
 	/** reference to the default indicator gif file. */
-	public static final ResourceReference INDICATOR = new ResourceReference(
+	public static final ResourceReference INDICATOR = new PackageResourceReference(
 		AbstractDefaultAjaxBehavior.class, "indicator.gif");
 
 	/** reference to the default ajax debug support javascript file. */

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java Wed Jan 20 00:48:15 2010
@@ -29,6 +29,7 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.ng.request.component.PageParameters;
 import org.apache.wicket.ng.request.handler.IPageRequestHandler;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.protocol.http.WebResponse;
 import org.apache.wicket.response.StringResponse;
@@ -97,7 +98,7 @@
 	}
 
 	/** The resource references used for new window/tab support */
-	private static ResourceReference cookiesResource = new ResourceReference(WebPage.class,
+	private static ResourceReference cookiesResource = new PackageResourceReference(WebPage.class,
 		"cookies.js");
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/Image.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/Image.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/Image.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/Image.java Wed Jan 20 00:48:15 2010
@@ -46,13 +46,12 @@
 	private final LocalizedImageResource localizedImageResource = new LocalizedImageResource(this);
 
 	/**
-	 * This constructor can be used if you have a img tag that has a src that points to a
-	 * PackageResource (which will be created and bind to the shared resources) Or if you have a
-	 * value attribute in your tag for which the image factory can make an image.
+	 * This constructor can be used if you override {@link #getImageResourceReference()} or
+	 * {@link #getImageResource()}
 	 * 
-	 * @see org.apache.wicket.Component#Component(String)
+	 * @param id
 	 */
-	public Image(final String id)
+	protected Image(final String id)
 	{
 		super(id);
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java Wed Jan 20 00:48:15 2010
@@ -31,6 +31,7 @@
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.ng.resource.IResource;
 import org.apache.wicket.ng.resource.PackageResource;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.ng.resource.IResource.Attributes;
 import org.apache.wicket.util.lang.Objects;
@@ -421,7 +422,7 @@
 			{
 				// Is resource already available via the application?
 				if (application.getResourceReferenceRegistry().getResourceReference(
-					Application.class, imageReferenceName, locale, style, variation, false) == null)
+					Application.class, imageReferenceName, locale, style, variation, true) == null)
 				{
 					// Resource not available yet, so create it with factory and
 					// share via Application
@@ -435,8 +436,8 @@
 				}
 
 				// Create resource reference
-				resourceReference = new ResourceReference(Application.class, imageReferenceName,
-					locale, style, variation);
+				resourceReference = new PackageResourceReference(Application.class,
+					imageReferenceName, locale, style, variation);
 			}
 			else
 			{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/LabelIconPanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/LabelIconPanel.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/LabelIconPanel.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/LabelIconPanel.java Wed Jan 20 00:48:15 2010
@@ -23,6 +23,7 @@
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 
 /**
@@ -172,10 +173,10 @@
 		return RESOURCE_ITEM;
 	}
 
-	private static final ResourceReference RESOURCE_FOLDER_OPEN = new ResourceReference(
+	private static final ResourceReference RESOURCE_FOLDER_OPEN = new PackageResourceReference(
 		LabelIconPanel.class, "res/folder-open.gif");
-	private static final ResourceReference RESOURCE_FOLDER_CLOSED = new ResourceReference(
+	private static final ResourceReference RESOURCE_FOLDER_CLOSED = new PackageResourceReference(
 		LabelIconPanel.class, "res/folder-closed.gif");
-	private static final ResourceReference RESOURCE_ITEM = new ResourceReference(
+	private static final ResourceReference RESOURCE_ITEM = new PackageResourceReference(
 		LabelIconPanel.class, "res/item.gif");
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java Wed Jan 20 00:48:15 2010
@@ -34,6 +34,7 @@
 import org.apache.wicket.ng.request.component.PageParameters;
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.ng.resource.PackageResource;
+import org.apache.wicket.ng.resource.PackageResourceReference;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.protocol.http.RequestUtils;
 import org.apache.wicket.util.lang.Packages;
@@ -567,8 +568,8 @@
 			if (PackageResource.exists(clazz, href, getLocale(), getStyle(), getVariation()))
 			{
 				// Create the component implementing the link
-				resourceReference = new ResourceReference(clazz, href, getLocale(), getStyle(),
-					getVariation());
+				resourceReference = new PackageResourceReference(clazz, href, getLocale(),
+					getStyle(), getVariation());
 			}
 			else
 			{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceReferenceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceReferenceRequestHandler.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceReferenceRequestHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/resource/ResourceReferenceRequestHandler.java Wed Jan 20 00:48:15 2010
@@ -86,5 +86,6 @@
 	 */
 	public void respond(RequestCycle requestCycle)
 	{
+		new ResourceRequestHandler(getResourceReference().getResource(), getPageParameters()).respond(requestCycle);
 	}
 }

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=901016&r1=901015&r2=901016&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 Wed Jan 20 00:48:15 2010
@@ -16,8 +16,6 @@
  */
 package org.apache.wicket.ng.request.handler.resource;
 
-import java.util.Locale;
-
 import org.apache.wicket.IRequestHandler;
 import org.apache.wicket.ng.request.component.PageParameters;
 import org.apache.wicket.ng.request.cycle.RequestCycle;
@@ -32,9 +30,6 @@
 public class ResourceRequestHandler implements IRequestHandler
 {
 	private final IResource resource;
-	private final Locale locale;
-	private final String style;
-	private final String variation;
 	private final PageParameters pageParameters;
 
 	/**
@@ -46,41 +41,15 @@
 	 * @param variation
 	 * @param pageParameters
 	 */
-	public ResourceRequestHandler(IResource resource, Locale locale, String style,
-		String variation, PageParameters pageParameters)
+	public ResourceRequestHandler(IResource resource, PageParameters pageParameters)
 	{
 		Checks.argumentNotNull(resource, "resource");
 
 		this.resource = resource;
-		this.locale = locale;
-		this.style = style;
-		this.variation = variation;
-		this.pageParameters = pageParameters != null ? pageParameters : new PageParameters();
-	}
-
-	/**
-	 * @return locale
-	 */
-	public Locale getLocale()
-	{
-		return locale;
-	}
 
-	/**
-	 * @return style
-	 */
-	public String getStyle()
-	{
-		return style;
+		this.pageParameters = pageParameters != null ? pageParameters : new PageParameters();
 	}
 
-	/**
-	 * @return variation
-	 */
-	public String getVariation()
-	{
-		return variation;
-	}
 
 	/**
 	 * @return page parameters

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=901016&r1=901015&r2=901016&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 Wed Jan 20 00:48:15 2010
@@ -30,44 +30,36 @@
  */
 public abstract class AbstractResourceReferenceMapper extends AbstractMapper
 {
-	/**
-	 * 
-	 */
-	protected static class ResourceReferenceAttributes
-	{
-		protected Locale locale;
-		protected String style;
-		protected String variation;
-	};
 
 	/**
 	 * 
 	 * @param attributes
 	 * @return
 	 */
-	protected static String encodeResourceReferenceAttributes(ResourceReferenceAttributes attributes)
+	protected static String encodeResourceReferenceAttributes(
+		ResourceReference.UrlAttributes attributes)
 	{
 		if (attributes == null ||
-			(attributes.locale == null && attributes.style == null && attributes.variation == null))
+			(attributes.getLocale() == null && attributes.getStyle() == null && attributes.getVariation() == null))
 		{
 			return null;
 		}
 		else
 		{
 			StringBuilder res = new StringBuilder();
-			if (attributes.locale != null)
+			if (attributes.getLocale() != null)
 			{
-				res.append(attributes.locale.toString());
+				res.append(attributes.getLocale().toString());
 			}
-			if (!Strings.isEmpty(attributes.style))
+			if (!Strings.isEmpty(attributes.getStyle()))
 			{
 				res.append("-");
-				res.append(attributes.style);
+				res.append(attributes.getStyle());
 			}
-			if (!Strings.isEmpty(attributes.variation))
+			if (!Strings.isEmpty(attributes.getVariation()))
 			{
 				res.append("-");
-				res.append(attributes.variation);
+				res.append(attributes.getVariation());
 			}
 			return res.toString();
 		}
@@ -78,24 +70,28 @@
 	 * @param attributes
 	 * @return
 	 */
-	protected static ResourceReferenceAttributes decodeResourceReferenceAttributes(String attributes)
+	protected static ResourceReference.UrlAttributes decodeResourceReferenceAttributes(
+		String attributes)
 	{
-		ResourceReferenceAttributes res = new ResourceReferenceAttributes();
+		Locale locale = null;
+		String style = null;
+		String variation = null;
+
 		if (!Strings.isEmpty(attributes))
 		{
 			String split[] = attributes.split("-", 3);
-			res.locale = parseLocale(split[0]);
+			locale = parseLocale(split[0]);
 			if (split.length == 2)
 			{
-				res.style = split[1];
+				style = split[1];
 			}
 			else if (split.length == 3)
 			{
-				res.style = split[1];
-				res.variation = split[2];
+				style = split[1];
+				variation = split[2];
 			}
 		}
-		return res;
+		return new ResourceReference.UrlAttributes(locale, style, variation);
 	}
 
 	/**
@@ -138,11 +134,7 @@
 	 */
 	protected void encodeResourceReferenceAttributes(Url url, ResourceReference reference)
 	{
-		ResourceReferenceAttributes attributes = new ResourceReferenceAttributes();
-		attributes.locale = reference.getLocale();
-		attributes.style = reference.getStyle();
-		attributes.variation = reference.getVariation();
-		String encoded = encodeResourceReferenceAttributes(attributes);
+		String encoded = encodeResourceReferenceAttributes(reference.getUrlAttributes());
 		if (!Strings.isEmpty(encoded))
 		{
 			url.getQueryParameters().add(new Url.QueryParameter(encoded, ""));
@@ -154,7 +146,7 @@
 	 * @param url
 	 * @return
 	 */
-	protected ResourceReferenceAttributes getResourceReferenceAttributes(Url url)
+	protected ResourceReference.UrlAttributes getResourceReferenceAttributes(Url url)
 	{
 		if (url == null)
 		{
@@ -168,6 +160,6 @@
 				return decodeResourceReferenceAttributes(param.getName());
 			}
 		}
-		return new ResourceReferenceAttributes();
+		return new ResourceReference.UrlAttributes(null, null, null);
 	}
 }

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=901016&r1=901015&r2=901016&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 Wed Jan 20 00:48:15 2010
@@ -21,10 +21,8 @@
 import org.apache.wicket.ng.request.Url;
 import org.apache.wicket.ng.request.component.PageParameters;
 import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.ng.request.handler.resource.ResourceRequestHandler;
 import org.apache.wicket.ng.request.mapper.parameters.IPageParametersEncoder;
 import org.apache.wicket.ng.request.mapper.parameters.SimplePageParametersEncoder;
-import org.apache.wicket.ng.resource.IResource;
 import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.util.lang.Classes;
 
@@ -85,7 +83,7 @@
 				name.append(url.getSegments().get(i));
 			}
 
-			ResourceReferenceAttributes attributes = getResourceReferenceAttributes(url);
+			ResourceReference.UrlAttributes attributes = getResourceReferenceAttributes(url);
 
 			// extract the PageParameters from URL if there are any
 			PageParameters pageParameters = extractPageParameters(request,
@@ -95,18 +93,11 @@
 			if (scope != null)
 			{
 				ResourceReference res = getContext().getResourceReferenceRegistry()
-					.getResourceReference(scope, name.toString(), attributes.locale,
-						attributes.style, attributes.variation, false);
+					.getResourceReference(scope, name.toString(), attributes.getLocale(),
+						attributes.getStyle(), attributes.getVariation(), true);
 				if (res != null)
 				{
-					IResource resource = res.getResource();
-					if (resource != null)
-					{
-						ResourceRequestHandler handler = new ResourceRequestHandler(resource,
-							attributes.locale, attributes.style, attributes.variation,
-							pageParameters);
-						return handler;
-					}
+					return new ResourceReferenceRequestHandler(res, pageParameters);
 				}
 			}
 		}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/CompressedResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/CompressedResourceReference.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/CompressedResourceReference.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/CompressedResourceReference.java Wed Jan 20 00:48:15 2010
@@ -19,7 +19,7 @@
 import java.util.Locale;
 
 // TODO NG
-public class CompressedResourceReference extends ResourceReference
+public class CompressedResourceReference extends PackageResourceReference
 {
 
 	public CompressedResourceReference(Class<?> scope, String name, Locale locale, String style,

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/JavascriptResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/JavascriptResourceReference.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/JavascriptResourceReference.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/JavascriptResourceReference.java Wed Jan 20 00:48:15 2010
@@ -23,7 +23,7 @@
  * 
  * @author Matej
  */
-public class JavascriptResourceReference extends ResourceReference
+public class JavascriptResourceReference extends PackageResourceReference
 {
 
 	public JavascriptResourceReference(Class<?> scope, String name, Locale locale, String style,

Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java?rev=901016&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java Wed Jan 20 00:48:15 2010
@@ -0,0 +1,131 @@
+/*
+ * 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.ng.resource;
+
+import java.util.Locale;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Session;
+import org.apache.wicket.util.lang.Packages;
+import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+
+public class PackageResourceReference extends ResourceReference
+{
+
+	public PackageResourceReference(Class<?> scope, String name, Locale locale, String style,
+		String variation)
+	{
+		super(scope, name, locale, style, variation);
+	}
+
+	public PackageResourceReference(Class<?> scope, String name)
+	{
+		super(scope, name);
+	}
+
+	public PackageResourceReference(String name)
+	{
+		super(name);
+	}
+
+	@Override
+	public IResource getResource()
+	{
+		return new PackageResource(getScope(), getName(), getLocale(), getStyle(), getVariation());
+	}
+
+	private UrlAttributes testResource(IResourceStreamLocator locator, Locale locale, String style,
+		String variation)
+	{
+		String absolutePath = Packages.absolutePath(getScope(), getName());
+		if (locator.locate(getScope(), absolutePath, style, variation, locale, null, true) != null)
+		{
+			return new UrlAttributes(locale, style, variation);
+		}
+		else
+		{
+			return null;
+		}
+	}
+
+	private UrlAttributes getUrlAttributes(Locale locale, String style, String variation)
+	{
+		IResourceStreamLocator locator = Application.get()
+			.getResourceSettings()
+			.getResourceStreamLocator();
+
+		UrlAttributes res;
+
+		res = testResource(locator, locale, style, variation);
+		if (res == null)
+		{
+			res = testResource(locator, locale, style, null);
+		}
+		if (res == null)
+		{
+			res = testResource(locator, locale, null, variation);
+		}
+		if (res == null)
+		{
+			res = testResource(locator, null, style, variation);
+		}
+		if (res == null)
+		{
+			res = testResource(locator, locale, null, null);
+		}
+		if (res == null)
+		{
+			res = testResource(locator, null, style, null);
+		}
+		if (res == null)
+		{
+			res = testResource(locator, null, null, variation);
+		}
+		if (res == null)
+		{
+			res = new UrlAttributes(null, null, null);
+		}
+		return res;
+	}
+
+	private transient ConcurrentMap<UrlAttributes, UrlAttributes> urlAttributesCacheMap;
+
+	@Override
+	public UrlAttributes getUrlAttributes()
+	{
+		Locale locale = getLocale() != null ? getLocale() : Session.get().getLocale();
+		String style = getStyle() != null ? getStyle() : Session.get().getStyle();
+		String variation = getVariation();
+
+		UrlAttributes key = new UrlAttributes(locale, style, variation);
+
+		if (urlAttributesCacheMap == null)
+		{
+			urlAttributesCacheMap = new ConcurrentHashMap<UrlAttributes, UrlAttributes>();
+		}
+		UrlAttributes value = urlAttributesCacheMap.get(key);
+		if (value == null)
+		{
+			value = getUrlAttributes(locale, style, variation);
+			urlAttributesCacheMap.put(key, value);
+		}
+
+		return value;
+	}
+}

Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResourceReference.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=901016&r1=901015&r2=901016&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 Wed Jan 20 00:48:15 2010
@@ -35,7 +35,7 @@
  * 
  * @author Matej Knopp
  */
-public class ResourceReference implements Serializable
+public abstract class ResourceReference implements Serializable
 {
 	private static final long serialVersionUID = 1L;
 
@@ -167,12 +167,93 @@
 	}
 
 	/**
-	 * Creates new resource.
+	 * Returns the resource.
 	 * 
-	 * @return new resource instance
+	 * @return resource instance
 	 */
-	public IResource getResource()
+	public abstract IResource getResource();
+
+	/**
+	 * Allows to specify which locale, style and variation values will the generated URL for this
+	 * resource reference have.
+	 * 
+	 * @return url attributes
+	 */
+	public UrlAttributes getUrlAttributes()
 	{
-		return new PackageResource(getScope(), getName(), getLocale(), getStyle(), getVariation());
+		return new UrlAttributes(getLocale(), getStyle(), getVariation());
 	}
+
+	/**
+	 * @see ResourceReference#getUrlAttributes()
+	 * 
+	 * @author Matej Knopp
+	 */
+	public static class UrlAttributes
+	{
+		private final Locale locale;
+		private final String style;
+		private final String variation;
+
+		/**
+		 * Construct.
+		 * 
+		 * @param locale
+		 * @param style
+		 * @param variation
+		 */
+		public UrlAttributes(Locale locale, String style, String variation)
+		{
+			this.locale = locale;
+			this.style = style;
+			this.variation = variation;
+		}
+
+		/**
+		 * @return locale
+		 */
+		public Locale getLocale()
+		{
+			return locale;
+		}
+
+		/**
+		 * @return style
+		 */
+		public String getStyle()
+		{
+			return style;
+		}
+
+		/**
+		 * @return variation
+		 */
+		public String getVariation()
+		{
+			return variation;
+		}
+
+		@Override
+		public boolean equals(Object obj)
+		{
+			if (this == obj)
+			{
+				return true;
+			}
+			if (obj instanceof UrlAttributes == false)
+			{
+				return false;
+			}
+			UrlAttributes that = (UrlAttributes)obj;
+			return Objects.equal(getLocale(), that.getLocale()) &&
+				Objects.equal(getStyle(), that.getStyle()) &&
+				Objects.equal(getVariation(), that.getVariation());
+		}
+
+		@Override
+		public int hashCode()
+		{
+			return Objects.hashCode(getLocale(), getStyle(), getVariation());
+		}
+	};
 }

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=901016&r1=901015&r2=901016&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 Wed Jan 20 00:48:15 2010
@@ -18,7 +18,9 @@
 
 import java.util.Locale;
 import java.util.Map;
+import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.apache.wicket.util.lang.Checks;
 import org.apache.wicket.util.lang.Objects;
@@ -83,6 +85,9 @@
 	};
 
 	private final Map<Key, ResourceReference> map = new ConcurrentHashMap<Key, ResourceReference>();
+	private final Queue<Key> autoAddedQueue = new ConcurrentLinkedQueue<Key>();
+
+	private int autoAddedCapacity = 1000;
 
 	/**
 	 * Construct.
@@ -139,6 +144,13 @@
 	{
 		Key key = new Key(scope.getName(), name, locale, style, variation);
 		ResourceReference res = map.get(key);
+		if (strict)
+		{
+			if (res == null)
+			{
+				res = addDefaultResourceReference(scope, name, locale, style, variation);
+			}
+		}
 		if (strict || res != null)
 		{
 			return res;
@@ -172,7 +184,7 @@
 			}
 			if (res == null && createIfNotFound)
 			{
-				res = createDefaultResourceReference(scope, name, locale, style, variation);
+				res = addDefaultResourceReference(scope, name, locale, style, variation);
 			}
 			return res;
 		}
@@ -225,18 +237,38 @@
 		return reference;
 	}
 
-	/**
-	 * 
-	 * @param scope
-	 * @param name
-	 * @param locale
-	 * @param style
-	 * @param variation
-	 * @return
-	 */
+
+	private ResourceReference addDefaultResourceReference(Class<?> scope, String name,
+		Locale locale, String style, String variation)
+	{
+		Key key = new Key(scope.getName(), name, locale, style, variation);
+		if (autoAddedQueue.size() > getAutoAddedCapacity())
+		{
+			Key first = autoAddedQueue.remove();
+			map.remove(first);
+		}
+		autoAddedQueue.add(key);
+
+		ResourceReference reference = createDefaultResourceReference(scope, name, locale, style,
+			variation);
+		registerResourceReference(reference);
+		return reference;
+	}
+
 	protected ResourceReference createDefaultResourceReference(Class<?> scope, String name,
 		Locale locale, String style, String variation)
 	{
-		return new ResourceReference(scope, name, locale, style, variation);
+		return new PackageResourceReference(scope, name, locale, style, variation);
+	}
+
+
+	public void setAutoAddedCapacity(int autoAddedCapacity)
+	{
+		this.autoAddedCapacity = autoAddedCapacity;
+	}
+
+	public int getAutoAddedCapacity()
+	{
+		return autoAddedCapacity;
 	}
 }

Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java?rev=901016&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java Wed Jan 20 00:48:15 2010
@@ -0,0 +1,71 @@
+/*
+ * 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.ng.resource;
+
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.wicket.Application;
+
+public class SharedResourceReference extends ResourceReference
+{
+
+	public SharedResourceReference(Class<?> scope, String name, Locale locale, String style,
+		String variation)
+	{
+		super(scope, name, locale, style, variation);
+	}
+
+	public SharedResourceReference(Class<?> scope, String name)
+	{
+		super(scope, name);
+	}
+
+	public SharedResourceReference(String name)
+	{
+		super(name);
+	}
+
+	@Override
+	public IResource getResource()
+	{
+		ResourceReference ref = Application.get()
+			.getResourceReferenceRegistry()
+			.getResourceReference(getScope(), getName(), getLocale(), getStyle(), getVariation(),
+				false);
+
+		if (ref == null)
+		{
+			return new AbstractResource()
+			{
+				@Override
+				protected ResourceResponse newResourceResponse(Attributes attributes)
+				{
+					ResourceResponse res = new ResourceResponse();
+					res.setErrorCode(HttpServletResponse.SC_NOT_FOUND);
+					return res;
+				}
+			};
+		}
+		else
+		{
+			return ref.getResource();
+		}
+	}
+
+}

Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/SharedResourceReference.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java Wed Jan 20 00:48:15 2010
@@ -133,7 +133,7 @@
 
 			// Iterator over all the combinations
 			ResourceNameIterator iter = new ResourceNameIterator(path, style, variation, locale,
-				null);
+				null, false);
 			while (iter.hasNext())
 			{
 				String newPath = iter.next();

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java Wed Jan 20 00:48:15 2010
@@ -89,7 +89,7 @@
 
 				// Iterator over all the combinations
 				ResourceNameIterator iter = new ResourceNameIterator(path, style, variation,
-					locale, null);
+					locale, null, false);
 				while (iter.hasNext())
 				{
 					String newPath = iter.next();

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java Wed Jan 20 00:48:15 2010
@@ -77,7 +77,7 @@
 
 			// iterate over all the combinations
 			ResourceNameIterator iter = new ResourceNameIterator(path, style, variation, locale,
-				null);
+				null, false);
 			while (iter.hasNext())
 			{
 				String newPath = iter.next();

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/session/HttpSessionStore.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/session/HttpSessionStore.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/session/HttpSessionStore.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/session/HttpSessionStore.java Wed Jan 20 00:48:15 2010
@@ -63,6 +63,11 @@
 	{
 	}
 
+	private String getSessionAttribute()
+	{
+		return SESSION_ATTRIBUTE_NAME + Application.get().getApplicationKey();
+	}
+
 	/**
 	 * 
 	 * @param request
@@ -98,7 +103,7 @@
 	 */
 	public final void bind(final Request request, final Session newSession)
 	{
-		if (getAttribute(request, SESSION_ATTRIBUTE_NAME) != newSession)
+		if (getAttribute(request, getSessionAttribute()) != newSession)
 		{
 			// call template method
 			onBind(request, newSession);
@@ -111,7 +116,7 @@
 				new SessionBindingListener(applicationKey, httpSession.getId()));
 
 			// register the session object itself
-			setAttribute(request, SESSION_ATTRIBUTE_NAME, newSession);
+			setAttribute(request, getSessionAttribute(), newSession);
 		}
 	}
 
@@ -170,7 +175,7 @@
 		String sessionId = getSessionId(request, false);
 		if (sessionId != null)
 		{
-			return (Session)getAttribute(request, SESSION_ATTRIBUTE_NAME);
+			return (Session)getAttribute(request, getSessionAttribute());
 		}
 		return null;
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/IResourceStreamLocator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/IResourceStreamLocator.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/IResourceStreamLocator.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/IResourceStreamLocator.java Wed Jan 20 00:48:15 2010
@@ -65,4 +65,28 @@
 	 */
 	public IResourceStream locate(Class<?> clazz, String path, String style, String variation,
 		Locale locale, String extension);
+
+	/**
+	 * Loads a resource, given a path, style, variation, locale and extension.
+	 * 
+	 * @param clazz
+	 *            The class loader for delegating the loading of the resource
+	 * @param path
+	 *            The path of the resource
+	 * @param style
+	 *            Any resource style, such as a skin style (see {@link org.apache.wicket.Session})
+	 * @param variation
+	 *            The component's variation (of the style)
+	 * @param locale
+	 *            The locale of the resource to load
+	 * @param extension
+	 *            The extension of the resource
+	 * 
+	 * @param strict
+	 *            whether the specified attributes must match exactly
+	 * 
+	 * @return The resource or null
+	 */
+	public IResourceStream locate(Class<?> clazz, String path, String style, String variation,
+		Locale locale, String extension, boolean strict);
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java Wed Jan 20 00:48:15 2010
@@ -57,6 +57,8 @@
 	/** Internal state */
 	private int state = 0;
 
+	private final boolean strict;
+
 	/**
 	 * While iterating the various combinations, it will always contain the current combination used
 	 * to create the path
@@ -71,11 +73,13 @@
 	 * 
 	 * @param path
 	 * @param locale
+	 * @param strict
 	 */
-	public LocaleResourceNameIterator(final String path, final Locale locale)
+	public LocaleResourceNameIterator(final String path, final Locale locale, boolean strict)
 	{
 		this.path = path;
 		this.locale = locale;
+		this.strict = strict;
 	}
 
 	/**
@@ -92,7 +96,13 @@
 	 */
 	public boolean hasNext()
 	{
-		return (state < 4);
+		int limit = 4;
+		if (strict && locale != null)
+		{
+			// omit the last step
+			limit = 3;
+		}
+		return (state < limit);
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java Wed Jan 20 00:48:15 2010
@@ -76,6 +76,8 @@
 	private final static Set<String> isoLanguages = new ConcurrentHashSet<String>(
 		Arrays.asList(Locale.getISOLanguages()));
 
+	private final boolean strict;
+
 	/**
 	 * Construct.
 	 * 
@@ -89,9 +91,12 @@
 	 *            The Locale to apply
 	 * @param extensions
 	 *            the filname's extensions (comma separated)
+	 * 
+	 * @param strict
+	 *            whether other combinations should be tried
 	 */
 	public ResourceNameIterator(String path, final String style, final String variation,
-		final Locale locale, final String extensions)
+		final Locale locale, final String extensions, boolean strict)
 	{
 		this.locale = locale;
 		if ((extensions == null) && (path.indexOf('.') != -1))
@@ -107,6 +112,7 @@
 		path = getLocaleFromFilename(path);
 
 		styleIterator = new StyleAndVariationResourceNameIterator(path, style, variation);
+		this.strict = strict;
 	}
 
 	/**
@@ -152,7 +158,7 @@
 			{
 				path = path.substring(0, path.length() - filename.length() + matcher.start());
 				localeIterator = new LocaleResourceNameIterator(path, new Locale(language,
-					country != null ? country : "", variant != null ? variant : ""));
+					country != null ? country : "", variant != null ? variant : ""), strict);
 			}
 		} // else skip the whole thing... probably user specific underscores used
 
@@ -212,7 +218,7 @@
 		{
 			String newPath = styleIterator.next();
 
-			localeIterator = new LocaleResourceNameIterator(newPath, locale);
+			localeIterator = new LocaleResourceNameIterator(newPath, locale, strict);
 			while (localeIterator.hasNext())
 			{
 				newPath = localeIterator.next();
@@ -223,6 +229,11 @@
 					return true;
 				}
 			}
+
+			if (strict)
+			{
+				break;
+			}
 		}
 
 		// No more combinations found. End of iteration.

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java?rev=901016&r1=901015&r2=901016&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java Wed Jan 20 00:48:15 2010
@@ -113,10 +113,16 @@
 	public IResourceStream locate(final Class<?> clazz, String path, final String style,
 		final String variation, final Locale locale, final String extension)
 	{
+		return locate(clazz, path, style, variation, locale, extension, false);
+	}
+
+	public IResourceStream locate(Class<?> clazz, String path, String style, String variation,
+		Locale locale, String extension, boolean strict)
+	{
 		// Try the various combinations of style, locale and extension to find
 		// the resource.
 		ResourceNameIterator iter = new ResourceNameIterator(path, style, variation, locale,
-			extension);
+			extension, strict);
 		while (iter.hasNext())
 		{
 			String newPath = iter.next();