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/04 02:03:49 UTC

svn commit: r895520 [3/7] - in /wicket/trunk: wicket-examples/src/main/java/org/apache/wicket/examples/staticpages/ wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/ wicket/src/main/disabled/ wicket/src/main/di...

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/BaseWicketTester.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.html (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.html)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.html?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.html&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.html&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.html
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyHomePage.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.html (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyPanelPage.html)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.html?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.html&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyPanelPage.html&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.html
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyPanelPage.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/DummyPanelPage.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/DummyPanelPage.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ExternalPageViewer.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/ExternalPageViewer.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ExternalPageViewer.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ExternalPageViewer.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/ExternalPageViewer.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ExternalPageViewer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ExternalPageViewer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/FormTester.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/FormTester.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/FormTester.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/FormTester.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/FormTester.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ITestPageSource.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/ITestPageSource.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ITestPageSource.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ITestPageSource.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/ITestPageSource.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ITestPageSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/ITestPageSource.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/Result.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/Result.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/Result.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/Result.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/Result.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/Result.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TagTester.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/TagTester.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TagTester.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TagTester.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/TagTester.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TagTester.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TagTester.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TestPanelSource.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/TestPanelSource.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TestPanelSource.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TestPanelSource.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/TestPanelSource.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TestPanelSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/TestPanelSource.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTester.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTester.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTester.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTester.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTester.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTesterHelper.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTesterHelper.java?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTesterHelper.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTesterHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/WicketTesterHelper.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/package.html (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/package.html)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/package.html?p2=wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/package.html&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/package.html&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
    (empty)

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/util/tester/package.html
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

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=895520&r1=895519&r2=895520&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 Mon Jan  4 01:03:29 2010
@@ -46,13 +46,33 @@
 import org.apache.wicket.markup.resolver.MarkupInheritanceResolver;
 import org.apache.wicket.markup.resolver.WicketContainerResolver;
 import org.apache.wicket.markup.resolver.WicketMessageResolver;
-import org.apache.wicket.ng.request.IRequestMapper;
+import org.apache.wicket.ng.DefaultExceptionMapper;
+import org.apache.wicket.ng.ThreadContext;
+import org.apache.wicket.ng.request.ICompoundRequestMapper;
+import org.apache.wicket.ng.request.component.IRequestablePage;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.ng.request.cycle.RequestCycleContext;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.render.RenderPageRequestHandlerDelegate;
+import org.apache.wicket.ng.request.mapper.IMapperContext;
 import org.apache.wicket.ng.request.mapper.SystemMapper;
+import org.apache.wicket.ng.resource.ResourceReferenceRegistry;
+import org.apache.wicket.pageStore.DefaultPageManagerContext;
+import org.apache.wicket.pageStore.DefaultPageStore;
+import org.apache.wicket.pageStore.DiskDataStore;
+import org.apache.wicket.pageStore.IDataStore;
+import org.apache.wicket.pageStore.IPageManager;
+import org.apache.wicket.pageStore.IPageManagerContext;
+import org.apache.wicket.pageStore.IPageStore;
+import org.apache.wicket.pageStore.PersistentPageManager;
 import org.apache.wicket.protocol.http.IRequestLogger;
 import org.apache.wicket.protocol.http.RequestLogger;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WebSession;
+import org.apache.wicket.session.DefaultPageFactory;
 import org.apache.wicket.session.ISessionStore;
+import org.apache.wicket.session.ISessionStore.UnboundListener;
 import org.apache.wicket.settings.IApplicationSettings;
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.settings.IExceptionSettings;
@@ -66,7 +86,7 @@
 import org.apache.wicket.settings.ISessionSettings;
 import org.apache.wicket.settings.Settings;
 import org.apache.wicket.util.convert.ConverterLocator;
-import org.apache.wicket.util.lang.Classes;
+import org.apache.wicket.util.lang.Checks;
 import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.lang.PropertyResolver;
 import org.apache.wicket.util.time.Duration;
@@ -112,7 +132,7 @@
  * @see org.apache.wicket.protocol.http.WebApplication
  * @author Jonathan Locke
  */
-public abstract class Application
+public abstract class Application implements UnboundListener
 {
 	/** Configuration constant for the 2 types */
 	public static final String CONFIGURATION = "configuration";
@@ -134,9 +154,6 @@
 	private static final Map<String, Application> applicationKeyToApplication = new HashMap<String, Application>(
 		1);
 
-	/** Thread local holder of the application object. */
-	private static final ThreadLocal<Application> current = new ThreadLocal<Application>();
-
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(Application.class);
 
@@ -153,7 +170,7 @@
 	private List<IHeaderContributor> renderHeadListeners;
 
 	/** root mapper */
-	private IRequestMapper rootRequestMapper;
+	private ICompoundRequestMapper rootRequestMapper;
 
 	/** list of {@link IComponentInstantiationListener}s. */
 	private IComponentInstantiationListener[] componentInstantiationListeners = new IComponentInstantiationListener[0];
@@ -168,7 +185,7 @@
 	private MetaDataEntry<?>[] metaData;
 
 	/** Name of application subclass. */
-	private final String name;
+	private String name;
 
 	/** Request logger instance. */
 	private IRequestLogger requestLogger;
@@ -193,7 +210,7 @@
 	 */
 	public static boolean exists()
 	{
-		return current.get() != null;
+		return ThreadContext.getApplication() != null;
 	}
 
 	/**
@@ -203,7 +220,7 @@
 	 */
 	public static Application get()
 	{
-		final Application application = current.get();
+		Application application = ThreadContext.getApplication();
 		if (application == null)
 		{
 			throw new WicketRuntimeException("There is no application attached to current thread " +
@@ -213,6 +230,15 @@
 	}
 
 	/**
+	 * Assign this application to current thread. This method should never be called by framework
+	 * clients.
+	 */
+	public void set()
+	{
+		ThreadContext.setApplication(this);
+	}
+
+	/**
 	 * Gets the Application based on the application key of that application. You typically never
 	 * have to use this method unless you are working on an integration project.
 	 * 
@@ -240,37 +266,11 @@
 	}
 
 	/**
-	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.
-	 * 
-	 * @param application
-	 *            The current application or null for this thread
-	 */
-	public static void set(final Application application)
-	{
-		if (application == null)
-		{
-			throw new IllegalArgumentException("Argument application can not be null");
-		}
-		current.set(application);
-	}
-
-	/**
-	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.
-	 */
-	public static void unset()
-	{
-		current.set(null);
-	}
-
-	/**
 	 * Constructor. <strong>Use {@link #init()} for any configuration of your application instead of
 	 * overriding the constructor.</strong>
 	 */
 	public Application()
 	{
-		// Create name from subclass
-		name = Classes.simpleName(getClass());
-
 		// Create shared resources repository
 		sharedResources = new SharedResources(this);
 
@@ -486,7 +486,7 @@
 	 * 
 	 * @return Home page class for this application
 	 */
-	public abstract Class<? extends Page> getHomePage();
+	public abstract Class<? extends IRequestablePage> getHomePage();
 
 	/**
 	 * @return Application's markup related settings
@@ -613,6 +613,12 @@
 		return sessionStore;
 	}
 
+	public void sessionUnbound(String sessionId)
+	{
+		getPageManager().sessionExpired(sessionId);
+	}
+
+
 	/**
 	 * Gets the shared resources.
 	 * 
@@ -671,7 +677,7 @@
 	 * 
 	 * @param target
 	 */
-	public void logEventTarget(IRequestTarget target)
+	public void logEventTarget(IRequestHandler target)
 	{
 	}
 
@@ -680,25 +686,11 @@
 	 * 
 	 * @param requestTarget
 	 */
-	public void logResponseTarget(IRequestTarget requestTarget)
+	public void logResponseTarget(IRequestHandler requestTarget)
 	{
 	}
 
 	/**
-	 * Creates a new RequestCycle object. Override this method if you want to provide a custom
-	 * request cycle.
-	 * 
-	 * @param request
-	 *            The request
-	 * @param response
-	 *            The response
-	 * @return The request cycle
-	 * 
-	 * @since 1.3
-	 */
-	public abstract RequestCycle newRequestCycle(final Request request, final Response response);
-
-	/**
 	 * Creates a new session. Override this method if you want to provide a custom session.
 	 * 
 	 * @param request
@@ -890,9 +882,11 @@
 
 		callDestroyers();
 		applicationKeyToApplication.remove(getApplicationKey());
-		Session.unset();
+
+		pageManager.destroy();
+		sessionStore.destroy();
+
 		RequestContext.unset();
-		RequestCycle.set(null);
 	}
 
 	/**
@@ -925,8 +919,12 @@
 		applicationKeyToApplication.put(applicationKey, this);
 
 		sessionStore = newSessionStore();
+		sessionStore.registerUnboundListener(this);
 		converterLocator = newConverterLocator();
 
+		pageManager = newPageManager(getPageManagerContext());
+		resourceReferenceRegistry = newResourceReferenceRegistry();
+
 		// set up default request mapper
 		setRootRequestMapper(new SystemMapper());
 	}
@@ -1191,7 +1189,7 @@
 	/**
 	 * @return The root request mapper
 	 */
-	public final IRequestMapper getRootRequestMapper()
+	public final ICompoundRequestMapper getRootRequestMapper()
 	{
 		return rootRequestMapper;
 	}
@@ -1201,8 +1199,277 @@
 	 * 
 	 * @param rootRequestMapper
 	 */
-	public final void setRootRequestMapper(final IRequestMapper rootRequestMapper)
+	public final void setRootRequestMapper(final ICompoundRequestMapper rootRequestMapper)
 	{
 		this.rootRequestMapper = rootRequestMapper;
 	}
+
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	//
+	// Page Manager
+	//
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	protected IPageManager newPageManager(IPageManagerContext context)
+	{
+		int cacheSize = 40;
+		int fileChannelPoolCapacity = 50;
+		IDataStore dataStore = new DiskDataStore(getName(), 1000000, fileChannelPoolCapacity);
+		IPageStore pageStore = new DefaultPageStore(getName(), dataStore, cacheSize);
+		return new PersistentPageManager(getName(), pageStore, context);
+	}
+
+	private IPageManager pageManager;
+
+	/**
+	 * Context for PageManager to interact with rest of Wicket
+	 */
+	private final IPageManagerContext pageManagerContext = new DefaultPageManagerContext();
+
+	/**
+	 * 
+	 * @return the page manager
+	 */
+	public IPageManager getPageManager()
+	{
+		return pageManager;
+	}
+
+	/**
+	 * 
+	 * @return the page manager context
+	 */
+	protected IPageManagerContext getPageManagerContext()
+	{
+		return pageManagerContext;
+	}
+
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	//
+	// Page Rendering
+	//
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	/**
+	 * Returns the {@link RenderPageRequestHandlerDelegate} responsible for rendering the page.
+	 */
+	public abstract RenderPageRequestHandlerDelegate getRenderPageRequestHandlerDelegate(
+		RenderPageRequestHandler renderPageRequestHandler);
+
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	//
+	// Request Handler encoding
+	//
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+	private ResourceReferenceRegistry resourceReferenceRegistry;
+
+	/**
+	 * Override to create custom {@link ResourceReferenceRegistry}.
+	 * 
+	 * @return new {@link ResourceReferenceRegistry} instance.
+	 */
+	protected ResourceReferenceRegistry newResourceReferenceRegistry()
+	{
+		return new ResourceReferenceRegistry();
+	}
+
+	/**
+	 * Returns {@link ResourceReferenceRegistry} for this application.
+	 * 
+	 * @return
+	 */
+	public final ResourceReferenceRegistry getResourceReferenceRegistry()
+	{
+		return resourceReferenceRegistry;
+	}
+
+	private IPageFactory pageFactory;
+
+	/**
+	 * Override to create custom {@link PageFactory}
+	 * 
+	 * @return new {@link PageFactory} instance.
+	 */
+	protected IPageFactory newPageFactory()
+	{
+		return new DefaultPageFactory();
+	}
+
+	/**
+	 * Returns {@link PageFactory} for this application.
+	 * 
+	 * @return
+	 */
+	public final IPageFactory getPageFactory()
+	{
+		return pageFactory;
+	}
+
+	private final IMapperContext encoderContext = new IMapperContext()
+	{
+		public String getBookmarkableIdentifier()
+		{
+			return "bookmarkable";
+		}
+
+		public String getNamespace()
+		{
+			return "wicket";
+		}
+
+		public String getPageIdentifier()
+		{
+			return "page";
+		}
+
+		public String getResourceIdentifier()
+		{
+			return "resource";
+		}
+
+		public ResourceReferenceRegistry getResourceReferenceRegistry()
+		{
+			return Application.this.getResourceReferenceRegistry();
+		}
+
+		public RequestListenerInterface requestListenerInterfaceFromString(String interfaceName)
+		{
+			return RequestListenerInterface.forName(interfaceName);
+		}
+
+		public String requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
+		{
+			return listenerInterface.getName();
+		}
+
+		public IRequestablePage newPageInstance(Class<? extends IRequestablePage> pageClass,
+			PageParameters pageParameters)
+		{
+			if (pageParameters == null)
+			{
+				return getPageFactory().newPage((Class<? extends Page>)pageClass);
+			}
+			else
+			{
+				return getPageFactory().newPage((Class<? extends Page>)pageClass, pageParameters);
+			}
+		}
+
+		public IRequestablePage getPageInstance(int pageId)
+		{
+			return Page.getPage(pageId);
+		}
+
+		public Class<? extends IRequestablePage> getHomePageClass()
+		{
+			return Application.this.getHomePage();
+		}
+	};
+
+	public final IMapperContext getEncoderContext()
+	{
+		return encoderContext;
+	}
+
+	public Session fetchCreateAndSetSession(RequestCycle requestCycle)
+	{
+		Checks.argumentNotNull(requestCycle, "requestCycle");
+
+		Session session = getSessionStore().lookup(requestCycle.getRequest());
+		if (session == null)
+		{
+			session = newSession(requestCycle);
+			ThreadContext.setSession(session);
+			getPageManager().newSessionCreated();
+		}
+		else
+		{
+			ThreadContext.setSession(session);
+		}
+		return session;
+	}
+
+	protected Session newSession(RequestCycle requestCycle)
+	{
+		return new WebSession(requestCycle.getRequest());
+	}
+
+	/**
+	 * Override this method to create custom Request Cycle instance.
+	 * 
+	 * @param context
+	 *            holds context necessary to instantiate a request cycle, such as the current
+	 *            request, response, and request mappers
+	 * @return
+	 */
+	protected RequestCycle newRequestCycle(RequestCycleContext context)
+	{
+
+		return new RequestCycle(context);
+	}
+
+
+	public final RequestCycle createRequestCycle(Request request, Response response)
+	{
+		// FIXME exception mapper should come from elsewhere
+		RequestCycleContext context = new RequestCycleContext(request, response,
+			getRootRequestMapper(), new DefaultExceptionMapper());
+
+		RequestCycle requestCycle = newRequestCycle(context);
+		requestCycle.register(new RequestCycle.DetachCallback()
+		{
+			public void onDetach(RequestCycle requestCycle)
+			{
+				getPageManager().commitRequest();
+			}
+		});
+		return requestCycle;
+	}
+
+	/**
+	 * Initialize the application
+	 */
+	public final void initApplication()
+	{
+		if (name == null)
+		{
+			throw new IllegalStateException("setName must be called before initApplication");
+		}
+		internalInit();
+		init();
+	}
+
+	/**
+	 * Sets application name. This method must be called before any other methods are invoked and
+	 * can only be called once per application instance.
+	 * 
+	 * @param name
+	 *            unique application name
+	 */
+	public final void setName(String name)
+	{
+		Checks.argumentNotEmpty(name, "name");
+
+		if (this.name != null)
+		{
+			throw new IllegalStateException("Application name can only be set once.");
+		}
+
+		if (applicationKeyToApplication.get(name) != null)
+		{
+			throw new IllegalStateException("Application with name '" + name + "' already exists.'");
+		}
+
+		this.name = name;
+		applicationKeyToApplication.put(name, this);
+	}
+
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Mon Jan  4 01:03:29 2010
@@ -48,6 +48,14 @@
 import org.apache.wicket.model.IModelComparator;
 import org.apache.wicket.model.IWrapModel;
 import org.apache.wicket.ng.request.component.IRequestableComponent;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.ng.request.handler.DefaultPageProvider;
+import org.apache.wicket.ng.request.handler.PageAndComponentProvider;
+import org.apache.wicket.ng.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.ng.resource.ResourceReference;
 import org.apache.wicket.protocol.http.WebRequest;
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.util.convert.IConverter;
@@ -3034,16 +3042,6 @@
 	}
 
 	/**
-	 * @param redirect
-	 *            True if the response should be redirected to
-	 * @see RequestCycle#setRedirect(boolean)
-	 */
-	public final void setRedirect(final boolean redirect)
-	{
-		getRequestCycle().setRedirect(redirect);
-	}
-
-	/**
 	 * If false the component's tag will be printed as well as its body (which is default). If true
 	 * only the body will be printed, but not the component's tag.
 	 * 
@@ -3068,7 +3066,7 @@
 	 */
 	public final <C extends Page> void setResponsePage(final Class<C> cls)
 	{
-		getRequestCycle().setResponsePage(cls);
+		getRequestCycle().setResponsePage(cls, null);
 	}
 
 	/**
@@ -3200,7 +3198,9 @@
 	public final <C extends Page> CharSequence urlFor(final Class<C> pageClass,
 		final PageParameters parameters)
 	{
-		return getRequestCycle().urlFor(pageClass, parameters);
+		IRequestHandler handler = new RenderPageRequestHandler(new DefaultPageProvider(pageClass,
+			parameters));
+		return getRequestCycle().renderUrlFor(handler);
 	}
 
 	/**
@@ -3216,7 +3216,10 @@
 	public final CharSequence urlFor(final IBehavior behaviour,
 		final RequestListenerInterface listener)
 	{
-		return getRequestCycle().urlFor(this, behaviour, listener);
+		PageAndComponentProvider provider = new PageAndComponentProvider(getPage(), this);
+		int index = getBehaviors().indexOf(behaviour);
+		IRequestHandler handler = new ListenerInterfaceRequestHandler(provider, listener, index);
+		return getRequestCycle().renderUrlFor(handler);
 	}
 
 	/**
@@ -3224,14 +3227,14 @@
 	 * 
 	 * @see RequestCycle#urlFor(IRequestTarget)
 	 * 
-	 * @param requestTarget
+	 * @param requestHandler
 	 *            the request target to reference
 	 * 
 	 * @return a URL that references the given request target
 	 */
-	public final CharSequence urlFor(final IRequestTarget requestTarget)
+	public final CharSequence urlFor(final IRequestHandler requestHandler)
 	{
-		return getRequestCycle().urlFor(requestTarget);
+		return getRequestCycle().renderUrlFor(requestHandler);
 	}
 
 	/**
@@ -3243,7 +3246,9 @@
 	 */
 	public final CharSequence urlFor(final RequestListenerInterface listener)
 	{
-		return getRequestCycle().urlFor(this, listener);
+		PageAndComponentProvider provider = new PageAndComponentProvider(getPage(), this);
+		IRequestHandler handler = new ListenerInterfaceRequestHandler(provider, listener);
+		return getRequestCycle().renderUrlFor(handler);
 	}
 
 	/**
@@ -3257,7 +3262,8 @@
 	 */
 	public final CharSequence urlFor(final ResourceReference resourceReference)
 	{
-		return getRequestCycle().urlFor(resourceReference);
+		return getRequestCycle().renderUrlFor(
+			new ResourceReferenceRequestHandler(resourceReference));
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/IPageFactory.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/IPageFactory.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/IPageFactory.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/IPageFactory.java Mon Jan  4 01:03:29 2010
@@ -17,7 +17,7 @@
 package org.apache.wicket;
 
 import org.apache.wicket.ng.request.component.IRequestablePage;
-import org.apache.wicket.ng.request.component.PageParametersNg;
+import org.apache.wicket.ng.request.component.PageParameters;
 
 
 /**
@@ -34,7 +34,6 @@
  * @author Juergen Donnerstag
  * @author Jonathan Locke
  */
-// TODO WICKET-NG change Page to RequestablePage
 public interface IPageFactory
 {
 	/**
@@ -48,7 +47,7 @@
 	 * @throws WicketRuntimeException
 	 *             Thrown if the page cannot be constructed
 	 */
-	<C extends Page> Page newPage(final Class<C> pageClass);
+	<C extends IRequestablePage> IRequestablePage newPage(final Class<C> pageClass);
 
 	/**
 	 * Creates a new Page, passing PageParameters to the Page constructor if such a constructor
@@ -64,26 +63,7 @@
 	 * @return The new page
 	 * @throws WicketRuntimeException
 	 *             Thrown if the page cannot be constructed
-	 * @deprecated
 	 */
-	@Deprecated
-	<C extends Page> Page newPage(final Class<C> pageClass, final PageParameters parameters);
-
-	/**
-	 * Creates a new Page, passing PageParameters to the Page constructor if such a constructor
-	 * exists. If no such constructor exists and the parameters argument is null or empty, then any
-	 * available default constructor will be used.
-	 * 
-	 * @param <C>
-	 * 
-	 * @param pageClass
-	 *            The class of Page to create
-	 * @param parameters
-	 *            Any parameters to pass to the Page's constructor
-	 * @return The new page
-	 * @throws WicketRuntimeException
-	 *             Thrown if the page cannot be constructed
-	 */
-	<C extends Page> IRequestablePage newPage(final Class<C> pageClass,
-		final PageParametersNg parameters);
+	<C extends IRequestablePage> IRequestablePage newPage(final Class<C> pageClass,
+		final PageParameters parameters);
 }

Copied: wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java (from r895314, wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestTarget.java)
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java?p2=wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java&p1=wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestTarget.java&r1=895314&r2=895520&rev=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestTarget.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java Mon Jan  4 01:03:29 2010
@@ -16,23 +16,18 @@
  */
 package org.apache.wicket;
 
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+
 /**
- * <p>
- * A request target is the base entity that is the subject of a request. Different types of request
+ * A request handler is the base entity that is the subject of a request. Different types of request
  * have different request targets. For instance a request for a bookmarkable page differs from a
  * request for a link on a previously rendered page, which in turn differs from a request for a
  * shared resource.
- * </p>
- * <p>
- * It is very important (for mounting) that implementations implement
- * {@link java.lang.Object#equals(java.lang.Object)} and {@link java.lang.Object#hashCode()} in a
- * consistent way.
- * </p>
- * Typically, implementations of IRequestTarget are not meant to be used more than once.
  * 
  * @author Eelco Hillenius
+ * @author Matej Knopp
  */
-public interface IRequestTarget
+public interface IRequestHandler
 {
 	/**
 	 * Generates a response.
@@ -50,4 +45,4 @@
 	 *            the current request cycle
 	 */
 	void detach(RequestCycle requestCycle);
-}
+}
\ No newline at end of file

Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/IRequestHandler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/IResourceListener.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/IResourceListener.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/IResourceListener.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/IResourceListener.java Mon Jan  4 01:03:29 2010
@@ -16,8 +16,6 @@
  */
 package org.apache.wicket;
 
-import org.apache.wicket.request.ObsoleteRequestParameters;
-import org.apache.wicket.request.target.resource.ComponentResourceRequestTarget;
 
 /**
  * Listens for requests regarding resources. Such resources are typically non-static in nature and
@@ -37,15 +35,7 @@
 {
 	/** Resource listener interface object */
 	public static final RequestListenerInterface INTERFACE = new RequestListenerInterface(
-		IResourceListener.class)
-	{
-		@Override
-		public IRequestTarget newRequestTarget(Page page, Component component,
-			RequestListenerInterface listener, ObsoleteRequestParameters requestParameters)
-		{
-			return new ComponentResourceRequestTarget(page, component, listener);
-		}
-	};
+		IResourceListener.class);
 
 	/**
 	 * Called when a resource is requested.

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java Mon Jan  4 01:03:29 2010
@@ -39,7 +39,9 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.ng.page.IManageablePage;
 import org.apache.wicket.ng.request.component.IRequestablePage;
-import org.apache.wicket.ng.request.component.PageParametersNg;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.protocol.http.WebResponse;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.util.lang.Classes;
@@ -223,7 +225,7 @@
 
 
 	/** Page parameters used to construct this page */
-	private final PageParametersNg pageParameters;
+	private final PageParameters pageParameters;
 
 	/** page render count TODO WICKET-NG more javadoc */
 	private int renderCount = 0;
@@ -266,21 +268,16 @@
 	{
 		super(null);
 		this.parameters = parameters;
-		pageParameters = new PageParametersNg();
+		pageParameters = new PageParameters();
 		init();
 	}
 
-	public Page(final PageParametersNg parameters)
-	{
-		this(parameters, null);
-	}
-
-	private Page(final PageParametersNg parameters, IModel<?> model)
+	private Page(final PageParameters parameters, IModel<?> model)
 	{
 		super(null, model);
 		if (parameters == null)
 		{ // TODO WICKET-NG is this necessary or can we keep the field as null to save space?
-			pageParameters = new PageParametersNg();
+			pageParameters = new PageParameters();
 		}
 		else
 		{
@@ -508,7 +505,7 @@
 		{
 			try
 			{
-				if (getClass().getConstructor(new Class[] { }) != null)
+				if (getClass().getConstructor(new Class[] {}) != null)
 				{
 					bookmarkable = Boolean.TRUE;
 				}
@@ -710,7 +707,7 @@
 		// If the application wants component uses checked and
 		// the response is not a redirect
 		final IDebugSettings debugSettings = Application.get().getDebugSettings();
-		if (debugSettings.getComponentUseCheck() && !getResponse().isRedirect())
+		if (debugSettings.getComponentUseCheck())
 		{
 			final List<Component> unrenderedComponents = new ArrayList<Component>();
 			final StringBuffer buffer = new StringBuffer();
@@ -931,8 +928,8 @@
 	{
 		// Get the response and application
 		final RequestCycle cycle = getRequestCycle();
-		final Application application = cycle.getApplication();
-		final Response response = cycle.getResponse();
+		final Application application = Application.get();
+		final WebResponse response = (WebResponse)cycle.getResponse();
 
 		// Determine encoding
 		final String encoding = application.getRequestCycleSettings().getResponseRequestEncoding();
@@ -963,7 +960,8 @@
 		}
 
 		// Set response locale from session locale
-		response.setLocale(getSession().getLocale());
+		// TODO: NG Is this really necessary
+		// response.setLocale(getSession().getLocale());
 	}
 
 	/**
@@ -1205,11 +1203,6 @@
 		return numericId;
 	}
 
-	public PageParametersNg getPageParametersNg()
-	{
-		return pageParameters;
-	}
-
 	/**
 	 * @see org.apache.wicket.ng.request.component.IRequestablePage#getRenderCount()
 	 */

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Request.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Request.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Request.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Request.java Mon Jan  4 01:03:29 2010
@@ -17,197 +17,28 @@
 package org.apache.wicket;
 
 import java.util.Locale;
-import java.util.Map;
 
 import org.apache.wicket.ng.request.IRequestParameters;
 import org.apache.wicket.ng.request.Url;
 import org.apache.wicket.ng.request.parameter.CombinedRequestParametersAdapter;
 import org.apache.wicket.ng.request.parameter.EmptyRequestParameters;
 import org.apache.wicket.ng.request.parameter.UrlRequestParametersAdapter;
-import org.apache.wicket.request.IRequestCodingStrategy;
-import org.apache.wicket.request.IRequestCycleProcessor;
-import org.apache.wicket.request.ObsoleteRequestParameters;
-
 
 /**
- * Base class for page request implementations allowing access to request parameters. A Request has
- * a URL and a parameter map. You can retrieve the URL of the request with getURL(). The entire
- * parameter map can be retrieved via getParameterMap(). Individual parameters can be retrieved via
- * getParameter(String). If multiple values are available for a given parameter, they can be
- * retrieved via getParameters(String).
+ * Request object.
  * 
- * @author Jonathan Locke
+ * @author Matej Knopp
  */
 public abstract class Request
 {
-	/** the type safe request parameters object for this request. */
-	private ObsoleteRequestParameters requestParameters;
-
-	/**
-	 * Construct.
-	 */
-	public Request()
-	{
-	}
-
-	/**
-	 * An implementation of this method is only required if a subclass wishes to support sessions
-	 * via URL rewriting. This default implementation simply returns the URL String it is passed.
-	 * 
-	 * @param url
-	 *            The URL to decode
-	 * @return The decoded url
-	 */
-	public Url decodeURL(final Url url)
-	{
-		return url;
-	}
-
-	/**
-	 * @return The locale for this request
-	 */
-	public abstract Locale getLocale();
-
-	/**
-	 * Gets a given (query) parameter by name.
-	 * 
-	 * @param key
-	 *            Parameter name
-	 * @return Parameter value
-	 */
-	public abstract String getParameter(final String key);
-
-	/**
-	 * Gets a map of (query) parameters sent with the request.
-	 * 
-	 * @return Map of parameters
-	 */
-	public abstract Map<String, String[]> getParameterMap();
-
-	/**
-	 * Gets an array of multiple parameters by name.
-	 * 
-	 * @param key
-	 *            Parameter name
-	 * @return Parameter values
-	 */
-	public abstract String[] getParameters(final String key);
-
-	/**
-	 * @return Path info for request
-	 */
-	public abstract String getPath();
-
-	/**
-	 * Gets a prefix to make this relative to the context root.
-	 * <p>
-	 * For example, if your context root is http://server.com/myApp/ and the request is for
-	 * /myApp/mountedPage/, then the prefix returned might be "../../".
-	 * <p>
-	 * For a particular technology, this might return either an absolute prefix or a relative one.
-	 * 
-	 * @return Prefix relative to this request required to back up to context root.
-	 */
-	public abstract String getRelativePathPrefixToContextRoot();
-
 	/**
-	 * Gets a prefix to make this relative to the Wicket Servlet/Filter.
-	 * <p>
-	 * For example, if your context root is http://server.com/myApp/ and the request is for
-	 * /myApp/mountedPage/, then the prefix returned might be "../".
-	 * <p>
-	 * For a particular technology, this might return either an absolute prefix or a relative one.
+	 * Returns the URL for this request. URL is relative to Wicket filter path.
 	 * 
-	 * @return Prefix relative to this request required to back up to context root.
-	 */
-	public abstract String getRelativePathPrefixToWicketHandler();
-
-
-	/**
-	 * Sets request parameters. Should only be used when one request is being created as a
-	 * replacement for another.
-	 * 
-	 * @param requestParameters
-	 * @deprecated wicket-ng
-	 */
-	@Deprecated
-	public final void setObsoleteRequestParameters(ObsoleteRequestParameters requestParameters)
-	{
-		this.requestParameters = requestParameters;
-	}
-
-	/**
-	 * Gets the request parameters object using the instance of {@link IRequestCodingStrategy} of
-	 * the provided request cycle processor.
-	 * 
-	 * @return the request parameters object
-	 * @deprecated wicket-ng
-	 */
-	@Deprecated
-	public final ObsoleteRequestParameters getObsoleteRequestParameters()
-	{
-		// reused cached parameters
-		if (requestParameters != null)
-		{
-			return requestParameters;
-		}
-
-		// get the request encoder to decode the request parameters
-		IRequestCycleProcessor processor = RequestCycle.get().getProcessor();
-		final IRequestCodingStrategy encoder = processor.getRequestCodingStrategy();
-		if (encoder == null)
-		{
-			throw new WicketRuntimeException("request encoder must be not-null (provided by " +
-				processor + ")");
-		}
-
-		// decode the request parameters into a strongly typed parameters
-		// object that is to be used by the target resolving
-		try
-		{
-			requestParameters = encoder.decode(this);
-		}
-		catch (RuntimeException re)
-		{
-			// do set the parameters as it was parsed.
-			// else the error page will also error again (infinite loop)
-			requestParameters = new ObsoleteRequestParameters();
-			throw re;
-		}
-
-		if (requestParameters == null)
-		{
-			throw new WicketRuntimeException("request parameters must be not-null (provided by " +
-				encoder + ")");
-		}
-		return requestParameters;
-	}
-
-	/**
-	 * Retrieves the relative URL of this request for local use. This is relative to the context
-	 * root.
-	 * 
-	 * @return The relative request URL for local use
+	 * @return Url instance
 	 */
 	public abstract Url getUrl();
 
 	/**
-	 * @see java.lang.Object#toString()
-	 */
-	@Override
-	public String toString()
-	{
-		return "Request[url=" + getUrl() + "]";
-	}
-
-	/**
-	 * Returns the query string (part after ?) of this request.
-	 * 
-	 * @return request query string
-	 */
-	public abstract String getQueryString();
-
-	/**
 	 * @return POST request parameters for this request.
 	 */
 	public IRequestParameters getPostRequestParameters()
@@ -233,6 +64,13 @@
 	}
 
 	/**
+	 * Returns locale for this request.
+	 * 
+	 * @return locale
+	 */
+	public abstract Locale getLocale();
+
+	/**
 	 * Returns request with specified URL and same POST parameters as this request.
 	 * 
 	 * @param url
@@ -241,8 +79,6 @@
 	 */
 	public Request requestWithUrl(final Url url)
 	{
-		final Request delegate = this;
-
 		return new Request()
 		{
 			@Override
@@ -252,58 +88,17 @@
 			}
 
 			@Override
-			public IRequestParameters getPostRequestParameters()
-			{
-				return delegate.getPostRequestParameters();
-			}
-
-			@Override
 			public Locale getLocale()
 			{
-				return delegate.getLocale();
+				return Request.this.getLocale();
 			}
 
 			@Override
-			public String getParameter(String key)
-			{
-				return delegate.getParameter(key);
-			}
-
-			@Override
-			public Map<String, String[]> getParameterMap()
-			{
-				return delegate.getParameterMap();
-			}
-
-			@Override
-			public String[] getParameters(String key)
-			{
-				return delegate.getParameters(key);
-			}
-
-			@Override
-			public String getPath()
-			{
-				return delegate.getPath();
-			}
-
-			@Override
-			public String getQueryString()
-			{
-				return delegate.getQueryString();
-			}
-
-			@Override
-			public String getRelativePathPrefixToContextRoot()
-			{
-				return delegate.getRelativePathPrefixToContextRoot();
-			}
-
-			@Override
-			public String getRelativePathPrefixToWicketHandler()
+			public IRequestParameters getPostRequestParameters()
 			{
-				return delegate.getRelativePathPrefixToWicketHandler();
+				return Request.this.getPostRequestParameters();
 			}
 		};
 	}
-}
\ No newline at end of file
+
+}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestListenerInterface.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestListenerInterface.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestListenerInterface.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestListenerInterface.java Mon Jan  4 01:03:29 2010
@@ -23,8 +23,8 @@
 import java.util.Map;
 
 import org.apache.wicket.authorization.AuthorizationException;
-import org.apache.wicket.request.ObsoleteRequestParameters;
-import org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget;
+import org.apache.wicket.behavior.IBehavior;
+import org.apache.wicket.ng.request.component.IRequestableComponent;
 import org.apache.wicket.util.lang.Classes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -164,9 +164,9 @@
 	 * @param component
 	 *            The component
 	 */
-	public final void invoke(final Page page, final Component component)
+	public final void invoke(final IRequestableComponent component)
 	{
-		if (!component.isEnabled() || !component.isVisibleInHierarchy())
+		if (!component.isEnabledInHierarchy() || !component.isVisibleInHierarchy())
 		{
 			// just return so that we have a silent fail and just re-render the
 			// page
@@ -174,7 +174,6 @@
 			return;
 		}
 
-		page.beforeCallComponent(component, this);
 
 		try
 		{
@@ -202,27 +201,49 @@
 		}
 		finally
 		{
-			page.afterCallComponent(component, this);
 		}
 	}
 
 	/**
-	 * Creates a new request target for this request listener interface
+	 * Invokes a given interface on a component's behavior.
 	 * 
-	 * @param page
-	 *            The page
 	 * @param component
 	 *            The component
-	 * @param listener
-	 *            The listener to call
-	 * @param requestParameters
-	 *            Request parameters
-	 * @return The request target
+	 * @param behavior
 	 */
-	public IRequestTarget newRequestTarget(final Page page, final Component component,
-		final RequestListenerInterface listener, final ObsoleteRequestParameters requestParameters)
+	public final void invoke(final IRequestableComponent component, final IBehavior behavior)
 	{
-		return new ListenerInterfaceRequestTarget(page, component, listener, requestParameters);
+		if (!component.canCallListenerInterface())
+		{
+			// just return so that we have a silent fail and just re-render the
+			// page
+			log.info("component not enabled or visible; ignoring call. Component: " + component);
+			return;
+		}
+
+		try
+		{
+			// Invoke the interface method on the component
+			method.invoke(behavior, new Object[] {});
+		}
+		catch (InvocationTargetException e)
+		{
+			if (e.getTargetException() instanceof AbstractRestartResponseException ||
+				e.getTargetException() instanceof AuthorizationException ||
+				e.getTargetException() instanceof WicketRuntimeException)
+			{
+				throw (RuntimeException)e.getTargetException();
+			}
+			throw new WicketRuntimeException("Method " + method.getName() + " of " +
+				method.getDeclaringClass() + " targeted at behavior " + behavior +
+				" on component " + component + " threw an exception", e);
+		}
+		catch (Exception e)
+		{
+			throw new WicketRuntimeException("Method " + method.getName() + " of " +
+				method.getDeclaringClass() + " targeted at behavior " + behavior +
+				" on component " + component + " threw an exception", e);
+		}
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java Mon Jan  4 01:03:29 2010
@@ -18,9 +18,10 @@
 
 import java.util.Map;
 
-import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.protocol.http.WebResponse;
+import org.apache.wicket.request.target.resource.ResourceStreamRequestHandler;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.time.Time;
 import org.apache.wicket.util.value.IValueMap;
 import org.apache.wicket.util.value.ValueMap;
 import org.slf4j.Logger;
@@ -107,20 +108,21 @@
 			IResourceStream resourceStream = init();
 
 			// Get servlet response to use when responding with resource
-			final Response response = cycle.getResponse();
+			final WebResponse response = (WebResponse)cycle.getResponse();
 
 			// FIXME WICKET-385 Move HTTP caching features out of org.apache.wicket.Resource
 			if (isCacheable())
 			{
-				response.setLastModifiedTime(resourceStream.lastModifiedTime());
+				response.setLastModifiedTime(resourceStream.lastModifiedTime().getMilliseconds());
 			}
 			else
 			{
-				response.setLastModifiedTime(Time.valueOf(-1));
+				response.setLastModifiedTime(-1);
 			}
 			configureResponse(response);
 
-			cycle.setRequestTarget(new ResourceStreamRequestTarget(resourceStream));
+			cycle.scheduleRequestHandlerAfterCurrent(new ResourceStreamRequestHandler(
+				resourceStream));
 		}
 		finally
 		{
@@ -172,21 +174,6 @@
 	}
 
 	/**
-	 * @return Any query parameters associated with the request for this resource
-	 */
-	protected ValueMap getParameters()
-	{
-		if (parameters.get() == null)
-		{
-			return new ValueMap(RequestCycle.get()
-				.getRequest()
-				.getObsoleteRequestParameters()
-				.getParameters());
-		}
-		return (ValueMap)parameters.get();
-	}
-
-	/**
 	 * Sets any loaded resource to null, thus forcing a reload on the next request.
 	 */
 	protected void invalidate()

Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/Response.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Response.java?rev=895520&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Response.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Response.java Mon Jan  4 01:03:29 2010
@@ -0,0 +1,63 @@
+/*
+ * 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;
+
+/**
+ * Abstract base class for different implementations of response writing.
+ * <p>
+ * The implementation may not support calling both {@link #write(byte[])} and
+ * {@link #write(CharSequence)} on the same {@link Response} instance.
+ * 
+ * @author Matej Knopp
+ */
+public abstract class Response
+{
+	/**
+	 * Writes the {@link CharSequence} to output.
+	 * 
+	 * @param sequence
+	 * @throws IllegalStateException
+	 *             if {@link #write(byte[])} has already been called on this instance
+	 */
+	public abstract void write(CharSequence sequence);
+
+	/**
+	 * Writes the buffer to output.
+	 * 
+	 * @param array
+	 * @throws IllegalStateException
+	 *             if {@link #write(CharSequence)} has already been called on this instance
+	 */
+	public abstract void write(byte[] array);
+
+	/**
+	 * Closes the response
+	 */
+	public void close()
+	{
+	}
+
+
+	/**
+	 * Encodes the specified URL by including the session ID in it, or, if encoding is not needed,
+	 * returns the URL unchanged.
+	 * 
+	 * @param url
+	 * @return encoded URL
+	 */
+	public abstract String encodeURL(CharSequence url);
+}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java Mon Jan  4 01:03:29 2010
@@ -28,14 +28,9 @@
 import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.FeedbackMessages;
-import org.apache.wicket.pageStore.DefaultPageManagerContext;
-import org.apache.wicket.pageStore.DefaultPageStore;
-import org.apache.wicket.pageStore.DiskDataStore;
-import org.apache.wicket.pageStore.IDataStore;
+import org.apache.wicket.ng.ThreadContext;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.pageStore.IPageManager;
-import org.apache.wicket.pageStore.IPageManagerContext;
-import org.apache.wicket.pageStore.IPageStore;
-import org.apache.wicket.pageStore.PersistentPageManager;
 import org.apache.wicket.request.ClientInfo;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.util.lang.Objects;
@@ -120,17 +115,12 @@
 	/** Name of session attribute under which this session is stored */
 	public static final String SESSION_ATTRIBUTE_NAME = "session";
 
-	/** Thread-local current session. */
-	private static final ThreadLocal<Session> current = new ThreadLocal<Session>();
-
 	/** a sequence used for whenever something session-specific needs a unique value */
 	private int sequence = 1;
 
 	/** a sequence used for generating page IDs */
 	private int pageId = 0;
 
-	/** page manager */
-	private IPageManager pageManager;
 
 	/**
 	 * Checks if the <code>Session</code> threadlocal is set in this thread
@@ -139,106 +129,20 @@
 	 */
 	public static boolean exists()
 	{
-		return current.get() != null;
-	}
-
-	/**
-	 * Locate the session for the client of this request in the {@link ISessionStore} or create a
-	 * new one and attach it when none could be located and sets it as the current instance for this
-	 * thread. Typically, clients never touch this method, but rather use {@link Session#get()},
-	 * which does the locating implicitly when not yet set as a thread local.
-	 * 
-	 * @return The session for the client of this request or a new, unbound
-	 */
-	public static final Session findOrCreate()
-	{
-		RequestCycle requestCycle = RequestCycle.get();
-		if (requestCycle == null)
-		{
-			throw new IllegalStateException(
-				"you can only locate or create sessions in the context of a request cycle");
-		}
-		Response response = requestCycle.getResponse();
-		Request request = requestCycle.getRequest();
-		return findOrCreate(request, response);
-	}
-
-	/**
-	 * @param response
-	 * @param request
-	 * @return The Session that is found in the current request or created if not.
-	 */
-	public static Session findOrCreate(Request request, Response response)
-	{
-		Application application = Application.get();
-		ISessionStore sessionStore = application.getSessionStore();
-		Session session = sessionStore.lookup(request);
-
-		boolean created = false;
-
-		if (session == null)
-		{
-			// Create session using session factory
-			session = application.newSession(request, response);
-			created = true;
-		}
-
-		// set thread local
-		set(session);
-
-		if (created)
-		{
-			session.getPageManager().newSessionCreated();
-		}
-
-		return session;
+		return ThreadContext.getSession() != null;
 	}
 
-	/**
-	 * Get the session for the calling thread.
-	 * 
-	 * @return Session for calling thread
-	 */
 	public static Session get()
 	{
-		Session session = current.get();
-		if (session == null)
+		Session session = ThreadContext.getSession();
+		if (session != null)
 		{
-			session = findOrCreate();
+			return session;
 		}
-		return session;
-	}
-
-	/**
-	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
-	 * <p>
-	 * Sets session for calling thread. Also triggers {@link #attach()} being called.
-	 * 
-	 * @param session
-	 *            The session
-	 */
-	public static void set(final Session session)
-	{
-		if (session == null)
+		else
 		{
-			throw new IllegalArgumentException("Argument session can not be null");
+			return Application.get().fetchCreateAndSetSession(RequestCycle.get());
 		}
-
-		current.set(session);
-
-		// execute any attach logic now
-		session.attach();
-	}
-
-	/**
-	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
-	 * <p>
-	 * Clears the session for calling thread.
-	 * 
-	 */
-	public static void unset()
-	{
-		current.set(null);
 	}
 
 	/**
@@ -557,12 +461,6 @@
 			sessionStore.invalidate(RequestCycle.get().getRequest());
 			sessionStore = null;
 		}
-
-		if (pageManager != null)
-		{
-			pageManager.destroy();
-			pageManager = null;
-		}
 	}
 
 	/**
@@ -934,38 +832,6 @@
 	 */
 	public final IPageManager getPageManager()
 	{
-		if (pageManager == null)
-		{
-			pageManager = newPageManager(new DefaultPageManagerContext());
-		}
-		return pageManager;
-	}
-
-	/**
-	 * Create a new page manager on each call. By default a PeristentPageManager with a new
-	 * DiskDataStore and new DefaultPageStore.
-	 * 
-	 * @see #getPageManager()
-	 * 
-	 * @param context
-	 *            the page manager context
-	 * @return a new page manager
-	 */
-	protected IPageManager newPageManager(final IPageManagerContext context)
-	{
-		String name = Application.get().getName();
-		int cacheSize = 40;
-		int fileChannelPoolCapacity = 50;
-		IDataStore dataStore = new DiskDataStore(name, 1000000, fileChannelPoolCapacity);
-		IPageStore pageStore = new DefaultPageStore(name, dataStore, cacheSize);
-		return new PersistentPageManager(name, pageStore, context);
-	}
-
-	/**
-	 * @return the page manager context
-	 */
-	protected final IPageManagerContext getPageManagerContext()
-	{
-		return getPageManager().getContext();
+		return getApplication().getPageManager();
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java Mon Jan  4 01:03:29 2010
@@ -17,8 +17,8 @@
 package org.apache.wicket.ajax;
 
 import org.apache.wicket.Page;
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.protocol.http.WebRequest;
 import org.apache.wicket.util.time.Duration;
 

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=895520&r1=895519&r2=895520&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 Mon Jan  4 01:03:29 2010
@@ -20,12 +20,12 @@
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.RequestContext;
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.ResourceReference;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
 import org.apache.wicket.markup.html.IHeaderResponse;
 import org.apache.wicket.markup.html.WicketEventReference;
 import org.apache.wicket.markup.html.resources.JavascriptResourceReference;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.util.string.AppendingStringBuffer;
@@ -293,7 +293,7 @@
 	{
 		WebApplication app = (WebApplication)getComponent().getApplication();
 		AjaxRequestTarget target = app.newAjaxRequestTarget(getComponent().getPage());
-		RequestCycle.get().setRequestTarget(target);
+		RequestCycle.get().scheduleRequestHandlerAfterCurrent(target);
 		respond(target);
 	}
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Mon Jan  4 01:03:29 2010
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.ajax;
 
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -31,10 +30,9 @@
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
+import org.apache.wicket.IRequestHandler;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
-import org.apache.wicket.RequestCycle;
-import org.apache.wicket.ResourceReference;
 import org.apache.wicket.Response;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.html.IHeaderResponse;
@@ -42,9 +40,15 @@
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
 import org.apache.wicket.markup.repeater.AbstractRepeater;
-import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.ng.request.component.IRequestablePage;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.ng.request.handler.DefaultPageProvider;
+import org.apache.wicket.ng.request.handler.IPageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.resource.ResourceReference;
+import org.apache.wicket.protocol.http.WebRequest;
 import org.apache.wicket.protocol.http.WebResponse;
-import org.apache.wicket.request.target.component.IPageRequestTarget;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
@@ -78,7 +82,7 @@
  * @author Igor Vaynberg (ivaynberg)
  * @author Eelco Hillenius
  */
-public class AjaxRequestTarget implements IPageRequestTarget
+public class AjaxRequestTarget implements IPageRequestHandler
 {
 	/**
 	 * An {@link AjaxRequestTarget} listener that can be used to respond to various target-related
@@ -137,7 +141,7 @@
 	 * 
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
-	private final class AjaxResponse extends WebResponse
+	private final class AjaxResponse extends Response
 	{
 		private final AppendingStringBuffer buffer = new AppendingStringBuffer(256);
 
@@ -152,16 +156,14 @@
 		 */
 		public AjaxResponse(Response originalResponse)
 		{
-			super(((WebResponse)originalResponse).getHttpServletResponse());
 			this.originalResponse = originalResponse;
-			setAjax(true);
 		}
 
 		/**
 		 * @see org.apache.wicket.Response#encodeURL(CharSequence)
 		 */
 		@Override
-		public CharSequence encodeURL(CharSequence url)
+		public String encodeURL(CharSequence url)
 		{
 			return originalResponse.encodeURL(url);
 		}
@@ -175,17 +177,6 @@
 		}
 
 		/**
-		 * NOTE: this method is not supported
-		 * 
-		 * @see org.apache.wicket.Response#getOutputStream()
-		 */
-		@Override
-		public OutputStream getOutputStream()
-		{
-			throw new UnsupportedOperationException("Cannot get output stream on StringResponse");
-		}
-
-		/**
 		 * @return true if any escaping has been performed, false otherwise
 		 */
 		public boolean isContentsEncoded()
@@ -194,17 +185,6 @@
 		}
 
 		/**
-		 * Resets the response to a clean state so it can be reused to save on garbage.
-		 */
-		@Override
-		public void reset()
-		{
-			buffer.clear();
-			escaped = false;
-
-		}
-
-		/**
 		 * @see org.apache.wicket.Response#write(CharSequence)
 		 */
 		@Override
@@ -222,6 +202,21 @@
 				buffer.append(cs);
 			}
 		}
+
+		/**
+		 * Resets the response to a clean state so it can be reused to save on garbage.
+		 */
+		public void reset()
+		{
+			buffer.clear();
+			escaped = false;
+		}
+
+		@Override
+		public void write(byte[] array)
+		{
+			throw new UnsupportedOperationException("Cannot write binary data.");
+		}
 	}
 
 	private static final Logger LOG = LoggerFactory.getLogger(AjaxRequestTarget.class);
@@ -439,7 +434,7 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.IRequestTarget#detach(org.apache.wicket.RequestCycle)
+	 * @see org.apache.wicket.IRequestHandler#detach(org.apache.wicket.RequestCycle)
 	 */
 	public void detach(final RequestCycle requestCycle)
 	{
@@ -529,7 +524,7 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.IRequestTarget#respond(org.apache.wicket.RequestCycle)
+	 * @see org.apache.wicket.IRequestHandler#respond(org.apache.wicket.RequestCycle)
 	 */
 	public final void respond(final RequestCycle requestCycle)
 	{
@@ -539,8 +534,9 @@
 		{
 			// the page itself has been added to the request target, we simply issue a redirect back
 			// to the page
-			final String url = requestCycle.urlFor(page).toString();
-			response.redirect(url);
+			IRequestHandler handler = new RenderPageRequestHandler(new DefaultPageProvider(page));
+			final String url = requestCycle.renderUrlFor(handler).toString();
+			response.sendRedirect(url);
 			return;
 		}
 
@@ -555,7 +551,6 @@
 		final String encoding = app.getRequestCycleSettings().getResponseRequestEncoding();
 
 		// Set content type based on markup type for page
-		response.setCharacterEncoding(encoding);
 		response.setContentType("text/xml; charset=" + encoding);
 
 		// Make sure it is not cached by a client
@@ -1162,9 +1157,9 @@
 		final RequestCycle requestCycle = RequestCycle.get();
 		if (requestCycle != null)
 		{
-			if (requestCycle.getRequestTarget() instanceof AjaxRequestTarget)
+			if (requestCycle.getActiveRequestHandler() instanceof AjaxRequestTarget)
 			{
-				return (AjaxRequestTarget)requestCycle.getRequestTarget();
+				return (AjaxRequestTarget)requestCycle.getActiveRequestHandler();
 			}
 		}
 		return null;
@@ -1177,9 +1172,18 @@
 	 */
 	public String getLastFocusedElementId()
 	{
-		String id = ((WebRequestCycle)RequestCycle.get()).getWebRequest()
-			.getHttpServletRequest()
-			.getHeader("Wicket-FocusedElementId");
+		WebRequest request = (WebRequest)RequestCycle.get().getRequest();
+		String id = request.getHeader("Wicket-FocusedElementId");
 		return Strings.isEmpty(id) ? null : id;
 	}
+
+	public Class<? extends IRequestablePage> getPageClass()
+	{
+		return page.getPageClass();
+	}
+
+	public PageParameters getPageParameters()
+	{
+		return page.getPageParameters();
+	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java Mon Jan  4 01:03:29 2010
@@ -113,7 +113,7 @@
 	@Override
 	public final void onSubmit()
 	{
-		if (!(getRequestCycle().getRequestTarget() instanceof AjaxRequestTarget))
+		if (AjaxRequestTarget.get() == null)
 		{
 			onSubmit(null, getForm());
 		}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/AbstractHeaderContributor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/AbstractHeaderContributor.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/AbstractHeaderContributor.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/AbstractHeaderContributor.java Mon Jan  4 01:03:29 2010
@@ -16,9 +16,10 @@
  */
 package org.apache.wicket.behavior;
 
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.html.IHeaderContributor;
 import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
 
 /**
  * Behavior that delegates header contribution to a number of other contributors. It checks the
@@ -58,9 +59,6 @@
 			return location;
 		}
 
-		return RequestCycle.get()
-			.getProcessor()
-			.getRequestCodingStrategy()
-			.rewriteStaticRelativeUrl(location);
+		return RequestCycle.get().getUrlRenderer().renderUrl(Url.parse(location));
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java Mon Jan  4 01:03:29 2010
@@ -16,13 +16,8 @@
  */
 package org.apache.wicket.behavior;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.IRequestListener;
-import org.apache.wicket.IRequestTarget;
-import org.apache.wicket.Page;
 import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.ObsoleteRequestParameters;
-import org.apache.wicket.request.target.component.listener.BehaviorRequestTarget;
 
 /**
  * Listens for requests to behaviors. When {@link org.apache.wicket.behavior.IBehavior}s are
@@ -36,21 +31,7 @@
 {
 	/** Behavior listener interface */
 	public static final RequestListenerInterface INTERFACE = new RequestListenerInterface(
-		IBehaviorListener.class)
-	{
-		/**
-		 * 
-		 * @see org.apache.wicket.RequestListenerInterface#newRequestTarget(org.apache.wicket.Page,
-		 *      org.apache.wicket.Component, org.apache.wicket.RequestListenerInterface,
-		 *      org.apache.wicket.request.ObsoleteRequestParameters)
-		 */
-		@Override
-		public IRequestTarget newRequestTarget(Page page, Component component,
-			RequestListenerInterface listener, ObsoleteRequestParameters requestParameters)
-		{
-			return new BehaviorRequestTarget(page, component, listener, requestParameters);
-		}
-	};
+		IBehaviorListener.class);
 
 	/**
 	 * Called when a request to a behavior is received.

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/StringHeaderContributor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/StringHeaderContributor.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/StringHeaderContributor.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/behavior/StringHeaderContributor.java Mon Jan  4 01:03:29 2010
@@ -75,7 +75,8 @@
 		Object object = contribution.getObject();
 		if (object != null)
 		{
-			response.getResponse().println(object.toString());
+			response.getResponse().write(object.toString());
+			response.getResponse().write("\n");
 		}
 	}
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/CompressedPackageResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/CompressedPackageResource.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/CompressedPackageResource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/CompressedPackageResource.java Mon Jan  4 01:03:29 2010
@@ -25,8 +25,8 @@
 import java.util.zip.GZIPOutputStream;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.html.resources.CompressedResourceReference;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
 import org.apache.wicket.protocol.http.WebRequest;
 import org.apache.wicket.protocol.http.WebResponse;
 import org.apache.wicket.util.io.Streams;
@@ -274,7 +274,7 @@
 			return false;
 		}
 		WebRequest request = (WebRequest)RequestCycle.get().getRequest();
-		String s = request.getHttpServletRequest().getHeader("Accept-Encoding");
+		String s = request.getHeader("Accept-Encoding");
 		if (s == null)
 		{
 			return false;

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java Mon Jan  4 01:03:29 2010
@@ -16,8 +16,8 @@
  */
 package org.apache.wicket.markup.html;
 
-import org.apache.wicket.ResourceReference;
 import org.apache.wicket.Response;
+import org.apache.wicket.ng.resource.ResourceReference;
 
 /**
  * Interface that is used to render header elements (usually javascript and CSS references).

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/PackageResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/PackageResource.java?rev=895520&r1=895519&r2=895520&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/PackageResource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/PackageResource.java Mon Jan  4 01:03:29 2010
@@ -20,13 +20,13 @@
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.wicket.AbortException;
 import org.apache.wicket.Application;
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.SharedResources;
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.protocol.http.WebRequestCycle;
-import org.apache.wicket.protocol.http.servlet.AbortWithWebErrorCodeException;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.protocol.http.WebResponse;
+import org.apache.wicket.protocol.http.request.WebErrorCodeResponseHandler;
+import org.apache.wicket.request.target.basic.AbortRequestHandler;
 import org.apache.wicket.settings.IResourceSettings;
 import org.apache.wicket.util.lang.Classes;
 import org.apache.wicket.util.lang.Packages;
@@ -390,13 +390,14 @@
 				style + ", variation = " + variation + ", locale = " + locale + "]";
 			log.warn(msg);
 
-			if (RequestCycle.get() instanceof WebRequestCycle)
+			if (RequestCycle.get().getResponse() instanceof WebResponse)
 			{
-				throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, msg);
+				RequestCycle.get().replaceAllRequestHandlers(
+					new WebErrorCodeResponseHandler(HttpServletResponse.SC_NOT_FOUND, msg));
 			}
 			else
 			{
-				throw new AbortException();
+				RequestCycle.get().replaceAllRequestHandlers(new AbortRequestHandler());
 			}
 		}
 

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=895520&r1=895519&r2=895520&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 Mon Jan  4 01:03:29 2010
@@ -18,8 +18,8 @@
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
+import org.apache.wicket.IRequestHandler;
 import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
 import org.apache.wicket.ResourceReference;
 import org.apache.wicket.Response;
 import org.apache.wicket.behavior.AbstractBehavior;
@@ -28,10 +28,9 @@
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.handler.IPageRequestHandler;
 import org.apache.wicket.protocol.http.WebResponse;
-import org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressingWebRequestProcessor;
-import org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressor;
 import org.apache.wicket.response.StringResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -102,12 +101,6 @@
 		"cookies.js");
 
 	/**
-	 * The url compressor that will compress the urls by collapsing the component path and listener
-	 * interface
-	 */
-	private UrlCompressor compressor;
-
-	/**
 	 * Constructor. Having this constructor public means that your page is 'bookmarkable' and hence
 	 * can be called/ created from anywhere.
 	 */
@@ -161,33 +154,6 @@
 	}
 
 	/**
-	 * This method is called when the compressing coding and response strategies are configured in
-	 * your Application object like this:
-	 * 
-	 * <pre>
-	 * protected IRequestCycleProcessor newRequestCycleProcessor()
-	 * {
-	 * 	return new UrlCompressingWebRequestProcessor();
-	 * }
-	 * </pre>
-	 * 
-	 * @return The URLCompressor for this webpage.
-	 * 
-	 * @since 1.2
-	 * 
-	 * @see UrlCompressingWebRequestProcessor
-	 * @see UrlCompressor
-	 */
-	public final UrlCompressor getUrlCompressor()
-	{
-		if (compressor == null)
-		{
-			compressor = new UrlCompressor();
-		}
-		return compressor;
-	}
-
-	/**
 	 * @see org.apache.wicket.markup.html.INewBrowserWindowListener#onNewBrowserWindow()
 	 */
 	public void onNewBrowserWindow()
@@ -215,9 +181,9 @@
 	{
 		super.configureResponse();
 
-		if (getWebRequestCycle().getResponse() instanceof WebResponse)
+		if (getRequestCycle().getResponse() instanceof WebResponse)
 		{
-			final WebResponse response = getWebRequestCycle().getWebResponse();
+			final WebResponse response = (WebResponse)getRequestCycle().getResponse();
 			setHeaders(response);
 		}
 	}
@@ -244,26 +210,6 @@
 	}
 
 	/**
-	 * @return The WebRequestCycle for this WebPage.
-	 */
-	protected final WebRequestCycle getWebRequestCycle()
-	{
-		return (WebRequestCycle)getRequestCycle();
-	}
-
-	/**
-	 * Creates and returns a bookmarkable link to this application's home page.
-	 * 
-	 * @param id
-	 *            Name of link
-	 * @return Link to home page for this application
-	 */
-	protected final BookmarkablePageLink<?> homePageLink(final String id)
-	{
-		return new BookmarkablePageLink<Void>(id, getApplication().getHomePage());
-	}
-
-	/**
 	 * 
 	 * @see org.apache.wicket.Component#onAfterRender()
 	 */
@@ -277,9 +223,14 @@
 		{
 			// Ignore if an exception and a redirect happened in between (e.g.
 			// RestartResponseAtInterceptPageException)
-			if (getRequestCycle().getResponsePage() == this)
+			IRequestHandler activeHandler = getRequestCycle().getActiveRequestHandler();
+			if (activeHandler instanceof IPageRequestHandler)
 			{
-				validateHeaders();
+				IPageRequestHandler h = (IPageRequestHandler)activeHandler;
+				if (h.getPage() == this)
+				{
+					validateHeaders();
+				}
 			}
 		}
 	}
@@ -358,4 +309,18 @@
 			}
 		}
 	}
+
+	/**
+	 * Creates and returns a bookmarkable link to this application's home page.
+	 * 
+	 * @param id
+	 *            Name of link
+	 * @return Link to home page for this application
+	 */
+	@SuppressWarnings("unchecked")
+	protected final BookmarkablePageLink<?> homePageLink(final String id)
+	{
+		return new BookmarkablePageLink<Void>(id, (Class)getApplication().getHomePage());
+	}
+
 }