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);
+ }
}
/**