Author: ehillenius
Date: Mon May 28 17:34:26 2007
New Revision: 542368

URL: http://svn.apache.org/viewvc?view=rev&rev=542368
Log:
WICKET-590

Modified:
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/PackageRequestTargetUrlCodingStrategy.java

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?view=diff&rev=542368&r1=542367&r2=542368
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
 Mon May 28 17:34:26 2007
@@ -393,13 +393,13 @@
                        if (log.isDebugEnabled())
                        {
                                log.debug(ex.toString());
-                               
+
                                return new 
WebErrorCodeResponseTarget(HttpServletResponse.SC_NOT_FOUND,
-                               "Unable to load Page: " + ex.toString());
+                                               "Unable to load Page: " + 
ex.toString());
                        }
-                       
+
                        return new 
WebErrorCodeResponseTarget(HttpServletResponse.SC_NOT_FOUND,
-                               "Unable to load Page");
+                                       "Unable to load Page");
                }
        }
 
@@ -477,57 +477,71 @@
         */
        protected void addInterfaceParameters(final Request request, final 
RequestParameters parameters)
        {
-               // Format of interface target parameter is
-               // 
<page-map-name>:<path>:<version>:<interface>:<behaviourId>:urlDepth
-               final String requestString = 
request.getParameter(INTERFACE_PARAMETER_NAME);
-               if (requestString != null)
-               {
-                       // Split into array of strings
-                       String[] pathComponents = Strings.split(requestString, 
Component.PATH_SEPARATOR);
+               
addInterfaceParameters(request.getParameter(INTERFACE_PARAMETER_NAME), 
parameters);
+       }
 
-                       // There must be 6 components
-                       // 
pagemap:(pageid:componenta:componentb:...):version:interface:behavior:depth
-                       if (pathComponents.length < 6)
-                       {
-                               throw new WicketRuntimeException("Internal 
error parsing "
-                                               + INTERFACE_PARAMETER_NAME + " 
= " + requestString);
-                       }
+       /**
+        * Analyses the passed in interfaceParameter for the relevant parts and 
puts
+        * the parts as parameters in the provided request parameters object.
+        * 
+        * @param interfaceParameter
+        *            The format of the interfaceParameter is: <code>
+        * page-map-name:path:version:interface:behaviourId:urlDepth
+        * </code>
+        * @param parameters
+        *            parameters object to set the found parts in
+        */
+       public static void addInterfaceParameters(final String 
interfaceParameter,
+                       final RequestParameters parameters)
+       {
+               if (interfaceParameter == null)
+               {
+                       return;
+               }
 
-                       // Set pagemap name
-                       final String pageMapName = pathComponents[0];
-                       parameters.setPageMapName(pageMapName.length() == 0
-                                       ? PageMap.DEFAULT_NAME
-                                       : pageMapName);
+               // Split into array of strings
+               String[] pathComponents = Strings.split(interfaceParameter, 
Component.PATH_SEPARATOR);
 
-                       // Extract URL depth after last colon
-                       final String urlDepthString = 
pathComponents[pathComponents.length - 1];
-                       final int urlDepth = Strings.isEmpty(urlDepthString) ? 
-1 : Integer
-                                       .parseInt(urlDepthString);
-                       parameters.setUrlDepth(urlDepth);
-                       
-                       // Extract behaviour ID after last colon
-                       final String behaviourId = 
pathComponents[pathComponents.length - 2];
-                       parameters.setBehaviorId(behaviourId.length() != 0 ? 
behaviourId : null);
-
-                       // Extract interface name after second-to-last colon
-                       final String interfaceName = 
pathComponents[pathComponents.length - 3];
-                       parameters.setInterfaceName(interfaceName.length() != 0
-                                       ? interfaceName
-                                       : 
IRedirectListener.INTERFACE.getName());
-
-                       // Extract version
-                       final String versionNumberString = 
pathComponents[pathComponents.length - 4];
-                       final int versionNumber = 
Strings.isEmpty(versionNumberString) ? 0 : Integer
-                                       .parseInt(versionNumberString);
-                       parameters.setVersionNumber(versionNumber);
-
-                       // Component path is everything after pageMapName and 
before version
-                       final int start = pageMapName.length() + 1;
-                       final int end = requestString.length() - 
behaviourId.length() - interfaceName.length()
-                                       - versionNumberString.length() - 
urlDepthString.length() - 4;
-                       final String componentPath = 
requestString.substring(start, end);
-                       parameters.setComponentPath(componentPath);
-               }
+               // There must be 6 components
+               // 
pagemap:(pageid:componenta:componentb:...):version:interface:behavior:depth
+               if (pathComponents.length < 6)
+               {
+                       throw new WicketRuntimeException("Internal error 
parsing " + INTERFACE_PARAMETER_NAME
+                                       + " = " + interfaceParameter);
+               }
+
+               // Set pagemap name
+               final String pageMapName = pathComponents[0];
+               parameters.setPageMapName(pageMapName.length() == 0 ? 
PageMap.DEFAULT_NAME : pageMapName);
+
+               // Extract URL depth after last colon
+               final String urlDepthString = 
pathComponents[pathComponents.length - 1];
+               final int urlDepth = Strings.isEmpty(urlDepthString) ? -1 : 
Integer
+                               .parseInt(urlDepthString);
+               parameters.setUrlDepth(urlDepth);
+
+               // Extract behaviour ID after last colon
+               final String behaviourId = pathComponents[pathComponents.length 
- 2];
+               parameters.setBehaviorId(behaviourId.length() != 0 ? 
behaviourId : null);
+
+               // Extract interface name after second-to-last colon
+               final String interfaceName = 
pathComponents[pathComponents.length - 3];
+               parameters.setInterfaceName(interfaceName.length() != 0
+                               ? interfaceName
+                               : IRedirectListener.INTERFACE.getName());
+
+               // Extract version
+               final String versionNumberString = 
pathComponents[pathComponents.length - 4];
+               final int versionNumber = Strings.isEmpty(versionNumberString) 
? 0 : Integer
+                               .parseInt(versionNumberString);
+               parameters.setVersionNumber(versionNumber);
+
+               // Component path is everything after pageMapName and before 
version
+               final int start = pageMapName.length() + 1;
+               final int end = interfaceParameter.length() - 
behaviourId.length() - interfaceName.length()
+                               - versionNumberString.length() - 
urlDepthString.length() - 4;
+               final String componentPath = 
interfaceParameter.substring(start, end);
+               parameters.setComponentPath(componentPath);
        }
 
        /**
@@ -652,8 +666,8 @@
                         * because we can't rely on the browser to interpret 
the unencoded
                         * url correctly.
                         */
-                       
encoder.addValue(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME,
-                                       pageMapName + Component.PATH_SEPARATOR 
+ pageClass.getName());
+                       
encoder.addValue(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME, 
pageMapName
+                                       + Component.PATH_SEPARATOR + 
pageClass.getName());
                }
 
                // Get page parameters
@@ -800,13 +814,13 @@
                        url.append(params.getBehaviorId());
                }
                url.append(Component.PATH_SEPARATOR);
-               
+
                // Add URL depth
                if (params != null && params.getUrlDepth() != 0)
                {
                        url.append(params.getUrlDepth());
                }
-               
+
                return url;
        }
 

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java?view=diff&rev=542368&r1=542367&r2=542368
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java
 Mon May 28 17:34:26 2007
@@ -16,17 +16,14 @@
  */
 package org.apache.wicket.request.target.coding;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.IRequestTarget;
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
 import org.apache.wicket.request.RequestParameters;
 import 
org.apache.wicket.request.target.component.BookmarkableListenerInterfaceRequestTarget;
 import 
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import 
org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
 import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.string.Strings;
 
 /**
  * Encodes and decodes mounts for a single bookmarkable page class.
@@ -86,41 +83,23 @@
                        pageMapName = requestParameters.getPageMapName();
                }
 
-               final BookmarkablePageRequestTarget target;
-
-               final String bookmarkableInterfaceListener = (String)parameters
+               // do some extra work for checking whether this is a normal 
request to a
+               // bookmarkable page, or a request to a stateless page (in 
which case a
+               // wicket:interface parameter should be available
+               final String interfaceParameter = (String)parameters
                                
.remove(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME);
 
-               // Do the parameters contain component path and listener 
interface?
-               if (bookmarkableInterfaceListener != null)
+               if (interfaceParameter != null)
                {
-                       // TODO check if the page already exists and reuse that?
-
-                       // try to parse component path and listener interface
-                       final String[] pathComponents = 
Strings.split(bookmarkableInterfaceListener,
-                                       Component.PATH_SEPARATOR);
-                       // There must be at least 6 path components
-                       if (pathComponents.length < 6)
-                       {
-                               throw new WicketRuntimeException("Internal 
error parsing "
-                                               + 
WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME + " = "
-                                               + 
bookmarkableInterfaceListener);
-                       }
-                       final String interfaceName = 
pathComponents[pathComponents.length - 3];
-                       int start = (pageMapName != null) ? 
pageMapName.length() + 1 : 1;
-                       final String componentPath = 
bookmarkableInterfaceListener.substring(start,
-                                       bookmarkableInterfaceListener.length() 
- interfaceName.length() - 3);
-
-                       target = new 
BookmarkableListenerInterfaceRequestTarget(pageMapName,
-                                       bookmarkablePageClass, parameters, 
componentPath, interfaceName);
+                       
WebRequestCodingStrategy.addInterfaceParameters(interfaceParameter, 
requestParameters);
+                       return new 
BookmarkableListenerInterfaceRequestTarget(pageMapName,
+                                       bookmarkablePageClass, parameters, 
requestParameters.getComponentPath(),
+                                       requestParameters.getInterfaceName());
                }
                else
                {
-                       target = new BookmarkablePageRequestTarget(pageMapName, 
bookmarkablePageClass,
-                                       parameters);
+                       return new BookmarkablePageRequestTarget(pageMapName, 
bookmarkablePageClass, parameters);
                }
-
-               return target;
        }
 
        /**

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/PackageRequestTargetUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/PackageRequestTargetUrlCodingStrategy.java?view=diff&rev=542368&r1=542367&r2=542368
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/PackageRequestTargetUrlCodingStrategy.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/PackageRequestTargetUrlCodingStrategy.java
 Mon May 28 17:34:26 2007
@@ -21,6 +21,7 @@
 import org.apache.wicket.Session;
 import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
 import org.apache.wicket.request.RequestParameters;
+import 
org.apache.wicket.request.target.component.BookmarkableListenerInterfaceRequestTarget;
 import 
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import 
org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
 import org.apache.wicket.util.lang.Classes;
@@ -96,9 +97,23 @@
                final String pageMapName = 
(String)parameters.remove(WebRequestCodingStrategy.PAGEMAP);
                requestParameters.setPageMapName(pageMapName);
 
-               BookmarkablePageRequestTarget target = new 
BookmarkablePageRequestTarget(pageMapName,
-                               bookmarkablePageClass, parameters);
-               return target;
+               // do some extra work for checking whether this is a normal 
request to a
+               // bookmarkable page, or a request to a stateless page (in 
which case a
+               // wicket:interface parameter should be available
+               final String interfaceParameter = (String)parameters
+                               
.remove(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME);
+
+               if (interfaceParameter != null)
+               {
+                       
WebRequestCodingStrategy.addInterfaceParameters(interfaceParameter, 
requestParameters);
+                       return new 
BookmarkableListenerInterfaceRequestTarget(pageMapName,
+                                       bookmarkablePageClass, parameters, 
requestParameters.getComponentPath(),
+                                       requestParameters.getInterfaceName());
+               }
+               else
+               {
+                       return new BookmarkablePageRequestTarget(pageMapName, 
bookmarkablePageClass, parameters);
+               }
        }
 
        /**


Reply via email to