Author: knopp
Date: Thu Sep 18 09:49:02 2008
New Revision: 696703

URL: http://svn.apache.org/viewvc?rev=696703&view=rev
Log:
redirect from home page

Modified:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java?rev=696703&r1=696702&r2=696703&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
 Thu Sep 18 09:49:02 2008
@@ -80,4 +80,11 @@
         * @return listener interface
         */
        public RequestListenerInterface 
requestListenerInterfaceFromString(String interfaceName);
+       
+       /**
+        * Returns the home page class.
+        * 
+        * @return home page class
+        */
+       public Class<? extends IPage> getHomePageClass();
 }

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java?rev=696703&r1=696702&r2=696703&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
 Thu Sep 18 09:49:02 2008
@@ -32,6 +32,7 @@
 import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
 import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
 import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
+import 
org.apache._wicket.request.handler.impl.RenderPageRequestHandler.RedirectPolicy;
 import org.apache._wicket.request.request.Request;
 import org.apache.wicket.RequestListenerInterface;
 
@@ -155,10 +156,49 @@
                        componentInfo.getBehaviorIndex());
        }
 
+       /**
+        * Check if the URL is for home page and the home page class match 
mounted class. If so,
+        * redirect to mounted URL.
+        * 
+        * @param url
+        * @return request handler or <code>null</code>
+        */
+       private RequestHandler checkHomePage(Url url)
+       {
+               if (url.getSegments().isEmpty() && 
url.getQueryParameters().isEmpty())
+               {
+                       // this is home page
+                       if 
(pageClass.get().equals(getContext().getHomePageClass()) && 
redirectFromHomePage())
+                       {
+                               IPage page = newPageInstance(null, 
pageClass.get(), new PageParameters());
+                               return new RenderPageRequestHandler(page, 
RedirectPolicy.ALWAYS_REDIRECT);
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * If this method returns true and application home page class is same 
as the class mounted with
+        * this encoder, request to home page will create a redirect to the 
mounted path.
+        * 
+        * @return whether this encode should respond to home page request when 
home page class is same
+        *         as mounted class.
+        */
+       protected boolean redirectFromHomePage()
+       {
+               return true;
+       }
+
        public RequestHandler decode(Request request)
        {
                Url url = request.getUrl();
 
+               RequestHandler handler = checkHomePage(url);
+               if (handler != null)
+               {
+                       return handler;
+               }
+
                // check if the URL is long enough and starts with the proper 
segments
                if (url.getSegments().size() >= mountSegments.length && 
urlStartsWith(url, mountSegments))
                {

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java?rev=696703&r1=696702&r2=696703&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
 Thu Sep 18 09:49:02 2008
@@ -192,6 +192,28 @@
        /**
         * 
         */
+       public void testDecode8()
+       {
+               Url url = 
Url.parse("some/mmount/path?15-ILinkListener.4-foo-bar");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertNull(handler);
+       }
+       
+       /**
+        * 
+        */
+       public void testDecode9()
+       {
+               // capture the home page
+               Url url = Url.parse("");
+               RequestHandler handler = encoder.decode(getRequest(url));
+               assertTrue(handler instanceof RenderPageRequestHandler);
+       }
+       
+       /**
+        * 
+        */
        public void testEncode1()
        {
                RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, null,

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java?rev=696703&r1=696702&r2=696703&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
 Thu Sep 18 09:49:02 2008
@@ -118,5 +118,10 @@
        {
                return listenerInterface.getName();
        }
+       
+       public Class<? extends IPage> getHomePageClass()
+       {
+               return MockPage.class;
+       }
 
 }


Reply via email to