Author: knopp
Date: Sat Jul 28 02:52:59 2007
New Revision: 560525
URL: http://svn.apache.org/viewvc?view=rev&rev=560525
Log:
WICKET-30 - IRequestTargetUrlCodingStrategy should decide if it can handle the
mount point
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
---
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
(original)
+++
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
Sat Jul 28 02:52:59 2007
@@ -932,14 +932,10 @@
final String key = (String)entry.getKey();
if (path.startsWith(key))
{
- /*
- * We need to match /mount/point or
- * /mount/point/with/extra/path, but
not /mount/pointXXX
- */
- String remainder =
path.substring(key.length());
- if (remainder.length() == 0 ||
remainder.startsWith("/"))
+ IRequestTargetUrlCodingStrategy
strategy = (IRequestTargetUrlCodingStrategy)entry.getValue();
+ if (strategy.matches(path))
{
- return
(IRequestTargetUrlCodingStrategy)entry.getValue();
+ return strategy;
}
}
}
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
---
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
(original)
+++
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
Sat Jul 28 02:52:59 2007
@@ -236,4 +236,21 @@
}
}
+
+ public boolean matches(String path)
+ {
+ if (path.startsWith(mountPath))
+ {
+ /*
+ * We need to match /mount/point or
+ * /mount/point/with/extra/path, but not /mount/pointXXX
+ */
+ String remainder = path.substring(mountPath.length());
+ if (remainder.length() == 0 ||
remainder.startsWith("/"))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
---
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
(original)
+++
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
Sat Jul 28 02:52:59 2007
@@ -115,8 +115,8 @@
}
else
{
- return new
HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
- parameters);
+ return new
HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef
+ .get(), parameters);
}
}
@@ -262,31 +262,36 @@
*/
protected PageInfoExtraction extractPageInfo(String url)
{
- int lastIndexLeft = url.lastIndexOf('(');
- int lastIndexRight = url.lastIndexOf(')');
+ int lastIndexLeft = url.lastIndexOf(getBeginSeparator());
+ int lastIndexRight = url.lastIndexOf(getEndSeparator());
if (lastIndexLeft != -1 && lastIndexRight != -1 &&
lastIndexLeft < lastIndexRight &&
- lastIndexRight - lastIndexLeft > 0 &&
lastIndexRight == url.length() - 1 &&
- url.charAt(lastIndexLeft - 1) == '/')
+ lastIndexRight - lastIndexLeft > 0 &&
lastIndexRight == url.length() - 1)
{
String infoSubstring = url.substring(lastIndexLeft + 1,
lastIndexRight);
PageInfo info = PageInfo.parsePageInfo(infoSubstring);
if (info != null)
{
- return new PageInfoExtraction(url.substring(0,
lastIndexLeft - 1), info);
+ return new PageInfoExtraction(url.substring(0,
lastIndexLeft), info);
}
}
return new PageInfoExtraction(url, null);
}
+ protected char getBeginSeparator()
+ {
+ return '(';
+ }
+
+ protected char getEndSeparator()
+ {
+ return ')';
+ }
+
protected String addPageInfo(String url, PageInfo pageInfo)
{
if (pageInfo != null)
{
- if (url.endsWith("/") == false)
- {
- url = url + "/";
- }
- return url + "(" + pageInfo.toString() + ")";
+ return url + getBeginSeparator() + pageInfo.toString()
+ getEndSeparator();
}
else
{
@@ -468,22 +473,24 @@
{
/**
* Construct.
+ *
* @param pageMapName
* @param pageClass
* @param pageParameters
*/
- public HybridBookmarkablePageRequestTarget(String pageMapName,
Class pageClass, PageParameters pageParameters)
+ public HybridBookmarkablePageRequestTarget(String pageMapName,
Class pageClass,
+ PageParameters pageParameters)
{
super(pageMapName, pageClass, pageParameters);
}
-
+
protected Page newPage(Class pageClass, RequestCycle
requestCycle)
{
Page page = super.newPage(pageClass, requestCycle);
page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY,
getPageParameters());
return page;
}
-
+
public void respond(RequestCycle requestCycle)
{
super.respond(requestCycle);
@@ -497,6 +504,39 @@
}
}
};
+
+ /**
+ * @see
org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#matches(java.lang.String)
+ */
+ public boolean matches(String path)
+ {
+ if (path.startsWith(getMountPath()))
+ {
+ /*
+ * We need to match /mount/point or
/mount/point/with/extra/path,
+ * but not /mount/pointXXX
+ */
+ String remainder =
path.substring(getMountPath().length());
+ if (remainder.length() == 0 ||
remainder.startsWith("/"))
+ {
+ return true;
+ }
+ /*
+ * We also need to accept /mount/point(XXX)
+ */
+ if (remainder.length() > 2 && remainder.charAt(0) ==
getBeginSeparator() &&
+ remainder.charAt(remainder.length() -
1) == getEndSeparator())
+ {
+ String substring = remainder.substring(1,
remainder.length() - 1);
+ PageInfo info =
PageInfo.parsePageInfo(substring);
+ if (info != null)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
public String toString()
{
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
---
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
(original)
+++
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
Sat Jul 28 02:52:59 2007
@@ -66,4 +66,11 @@
* target
*/
boolean matches(IRequestTarget requestTarget);
+
+ /**
+ * Returns true if this mounter is applicable for the URL path
+ * @param path
+ * @return
+ */
+ boolean matches(String path);
}