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 2008/09/14 23:23:52 UTC
svn commit: r695290 - in
/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request:
handler/ handler/impl/ response/
Author: knopp
Date: Sun Sep 14 14:23:52 2008
New Revision: 695290
URL: http://svn.apache.org/viewvc?rev=695290&view=rev
Log: (empty)
Added:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java (with props)
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/BufferedWebResponse.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/ServletWebResponse.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/WebResponse.java
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java?rev=695290&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java Sun Sep 14 14:23:52 2008
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.handler;
+
+import org.apache._wicket.request.RequestHandler;
+import org.apache.wicket.Page;
+
+public interface PageInstanceRequestHandler extends RequestHandler
+{
+ public Page getPageInstance();
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/PageInstanceRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java?rev=695290&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java Sun Sep 14 14:23:52 2008
@@ -0,0 +1,204 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.handler.impl;
+
+import org.apache._wicket.RequestCycle;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.handler.PageInstanceRequestHandler;
+import org.apache._wicket.request.response.BufferedWebResponse;
+import org.apache._wicket.request.response.Response;
+import org.apache._wicket.request.response.WebResponse;
+import org.apache.wicket.Application;
+import org.apache.wicket.Page;
+import org.apache.wicket.settings.IRequestCycleSettings;
+
+/**
+ * {@link RequestHandler} that renders page instance. Depending on the <code>preventRedirect</code>
+ * flag and current request strategy the handler either just renders the page to the response, or
+ * redirects to render the page. <code>REDIRECT_TO_BUFFER</code> strategy is also supported.
+ *
+ * @author Matej Knopp
+ */
+public class RenderPageRequestHandler implements PageInstanceRequestHandler
+{
+ private final Page page;
+ private final boolean preventRedirect;
+
+ /**
+ * Construct. Renders the page with a redirect if necessary.
+ *
+ * @param page
+ */
+ public RenderPageRequestHandler(Page page)
+ {
+ this(page, false);
+ }
+
+ /**
+ * Construct.
+ *
+ * @param page
+ * @param preventRedirect
+ * If <code>true</code> the page is always rendered to current response. If
+ * <code>false</code> a redirect will be issued if required by the request
+ * strategy.
+ */
+ public RenderPageRequestHandler(Page page, boolean preventRedirect)
+ {
+ if (page == null)
+ {
+ throw new IllegalArgumentException("Argument 'page' may not be null.");
+ }
+ this.preventRedirect = preventRedirect;
+ this.page = page;
+ }
+
+ public Page getPageInstance()
+ {
+ return page;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ page.detach();
+ }
+
+ private boolean isOnePassRender()
+ {
+ return Application.get().getRequestCycleSettings().getRenderStrategy() == IRequestCycleSettings.ONE_PASS_RENDER;
+ }
+
+ private boolean isRedirectToRender()
+ {
+ return Application.get().getRequestCycleSettings().getRenderStrategy() == IRequestCycleSettings.REDIRECT_TO_RENDER;
+ }
+
+ private boolean isRedirectToBuffer()
+ {
+ return Application.get().getRequestCycleSettings().getRenderStrategy() == IRequestCycleSettings.REDIRECT_TO_BUFFER;
+ }
+
+ private void renderPage()
+ {
+ page.renderPage();
+ }
+
+ protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)
+ {
+ // TODO: get and remove buffered response
+ return null;
+ }
+
+ /**
+ * Renders page to a {@link BufferedWebResponse}. All URLs in page will be rendered relative to
+ * <code>targetUrl</code>
+ *
+ * @param targetUrl
+ * @param requestCycle
+ * @return BufferedWebResponse containing page body
+ */
+ protected BufferedWebResponse renderPage(Url targetUrl, RequestCycle requestCycle)
+ {
+ // keep the original response
+ final Response originalResponse = requestCycle.getResponse();
+
+ // buffered web response for page
+ BufferedWebResponse response = new BufferedWebResponse()
+ {
+ @Override
+ public String encodeURL(String url)
+ {
+ return originalResponse.encodeURL(url);
+ }
+ };
+
+ // keep the original base URL
+ Url originalBaseUrl = requestCycle.getUrlRenderer().setBaseUrl(targetUrl);
+
+ try
+ {
+ requestCycle.setResponse(response);
+ page.render();
+ return response;
+ }
+ finally
+ {
+ // restore original response and base URL
+ requestCycle.setResponse(originalResponse);
+ requestCycle.getUrlRenderer().setBaseUrl(originalBaseUrl);
+ }
+ }
+
+ protected void storeBufferedResponse(Url url, BufferedWebResponse response)
+ {
+ // TODO:
+ }
+
+ private void redirectTo(Url url, RequestCycle requestCycle)
+ {
+ WebResponse response = (WebResponse)requestCycle.getResponse();
+ String relativeUrl = requestCycle.getUrlRenderer().renderUrl(url);
+ response.sendRedirect(relativeUrl);
+ }
+
+ public void respond(RequestCycle requestCycle)
+ {
+ Url currentUrl = requestCycle.getRequest().getUrl();
+ Url targetUrl = requestCycle.urlFor(this);
+
+ // try to get an already rendered buffered response for current URL
+ BufferedWebResponse bufferedResponse = getAndRemoveBufferedResponse(currentUrl);
+
+ if (bufferedResponse != null)
+ {
+ bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
+ }
+ else if (preventRedirect || isOnePassRender() || targetUrl.equals(currentUrl))
+ {
+ // if the flag is set or one pass render model is on or the targetUrl matches current
+ // url just render the page
+ renderPage();
+ }
+ else if (isRedirectToRender())
+ {
+ redirectTo(targetUrl, requestCycle);
+ }
+ else // redirect to buffer
+ {
+ BufferedWebResponse response = renderPage(targetUrl, requestCycle);
+
+ // check if the url hasn't changed after page has been rendered
+ // (i.e. the stateless flag might have changed which could result in different page url)
+ Url targetUrl2 = requestCycle.urlFor(this);
+
+ if (targetUrl.getSegments().size() != targetUrl2.getSegments().size())
+ {
+ // the amount of segments is different - generated relative URLs will not work, we
+ // need to rerender the page. This shouldn't happen, but in theory it can - with
+ // RequestHandlerEncoders that produce different URLs with different amount of
+ // segments for stateless and stateful pages
+ response = renderPage(targetUrl2, requestCycle);
+ }
+
+ storeBufferedResponse(targetUrl2, response);
+
+ redirectTo(targetUrl2, requestCycle);
+ }
+ }
+
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/BufferedWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/BufferedWebResponse.java?rev=695290&r1=695289&r2=695290&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/BufferedWebResponse.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/BufferedWebResponse.java Sun Sep 14 14:23:52 2008
@@ -148,7 +148,7 @@
private String redirectUrl = null;
@Override
- protected void sendRedirect(String url)
+ public void sendRedirect(String url)
{
this.redirectUrl = url;
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/ServletWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/ServletWebResponse.java?rev=695290&r1=695289&r2=695290&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/ServletWebResponse.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/ServletWebResponse.java Sun Sep 14 14:23:52 2008
@@ -156,7 +156,7 @@
}
@Override
- protected void sendRedirect(String url)
+ public void sendRedirect(String url)
{
url = httpServletResponse.encodeRedirectURL(url);
try
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/WebResponse.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/WebResponse.java?rev=695290&r1=695289&r2=695290&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/WebResponse.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/response/WebResponse.java Sun Sep 14 14:23:52 2008
@@ -133,5 +133,5 @@
*
* @param url
*/
- protected abstract void sendRedirect(String url);
+ public abstract void sendRedirect(String url);
}