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 2007/08/03 19:30:13 UTC
svn commit: r562528 -
/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
Author: knopp
Date: Fri Aug 3 10:30:12 2007
New Revision: 562528
URL: http://svn.apache.org/viewvc?view=rev&rev=562528
Log:
WICKET-30 encoding/decoding improvements
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
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=562528&r1=562527&r2=562528
==============================================================================
--- 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 Fri Aug 3 10:30:12 2007
@@ -44,13 +44,13 @@
* the state is preserved on refresh.
* <p>
* The url with {@link HybridUrlCodingStrategy} looks like
- * /mount/path/param1/value1|3| or /mount/path/param1/value1|3:2| where 3 is
- * page Id and 2 is version number.
+ * /mount/path/param1/value1.3. or /mount/path/param1/value1.3.2 where 3 is page
+ * Id and 2 is version number.
* <p>
* Also to preserve state on refresh with ajax-only pages the
* {@link HybridUrlCodingStrategy} does an immediate redirect after hitting
* bookmarkable URL, e.g. it immediately redirects from /mount/path to
- * /mount/path|3| where 3 is the next page id. This preserves the page instance
+ * /mount/path.3 where 3 is the next page id. This preserves the page instance
* on subsequent page refresh.
*
* @author Matej Knopp
@@ -177,8 +177,9 @@
// bookmarkable page request
return new HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
parameters, originalUrlTrailingSlashesCount, isRedirectOnBookmarkableRequest());
-// return new BookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
-// parameters);
+// return new BookmarkablePageRequestTarget(pageMapName,
+// (Class)pageClassRef.get(),
+// parameters);
}
else
// hybrid url
@@ -471,7 +472,7 @@
lastSubstring.startsWith(getBeginSeparator()) &&
lastSubstring.endsWith(getEndSeparator()))
{
- String pageInfoString= lastSubstring.substring(getBeginSeparator().length(), //
+ String pageInfoString = lastSubstring.substring(getBeginSeparator().length(), //
lastSubstring.length() - getEndSeparator().length());
PageInfo info = PageInfo.parsePageInfo(pageInfoString);
last = info;
@@ -514,11 +515,11 @@
* Possible string representation of PageInfo:
* <ul>
* <li>pageId
- * <li>pageId:version
- * <li>:pageMap
- * <li>pageMap:pageId: (the first colon distingues between this and the
- * previous one)
- * <li>pageMap:pageId:version
+ * <li>pageId.version
+ * <li>pageMap (only if pageMap starts with a letter)
+ * <li>.pageMap
+ * <li>pageMap.pageId.version
+ * <li>pageMap.pageId (only if pageMap name starts with a letter)
* </ul>
*
* @author Matej Knopp
@@ -573,40 +574,70 @@
return pageMapName;
}
- private static char getPageInfoSeparator() {
+ private static char getPageInfoSeparator()
+ {
return '.';
}
-
+
+ /**
+ * <ul>
+ * <li>pageId
+ * <li>pageId.version
+ * <li>pageMap (only in if pagemap strats with a letter)
+ * <li>.pageMap
+ * <li>pageMap.pageId (only in if pageMap name starts with a letter)
+ * <li>pageMap.pageId.version
+ * </ul>
+ */
public String toString()
{
AppendingStringBuffer buffer = new AppendingStringBuffer(5);
-
- if (pageMapName != null)
+ final boolean pmEmpty = Strings.isEmpty(pageMapName);
+ final boolean pmStartsWithCharacter = !pmEmpty &&
+ Character.isLetter(pageMapName.charAt(0));
+
+
+ if (pageId != null && pmEmpty && versionNumber.intValue() == 0)
{
- if (versionNumber == null && pageId == null)
- {
- buffer.append(getPageInfoSeparator());
- }
- buffer.append(pageMapName);
- if (pageId != null)
- {
- buffer.append(getPageInfoSeparator());
- }
+ // pageId
+ buffer.append(pageId);
}
- if (pageId != null)
+ else if (pageId != null && pmEmpty && versionNumber.intValue() != 0)
{
+ // pageId.version
buffer.append(pageId);
+ buffer.append(getPageInfoSeparator());
+ buffer.append(versionNumber);
}
- if (pageId != null && (versionNumber == null || versionNumber.intValue() == 0) && pageMapName != null)
+ else if (pageId == null && pmStartsWithCharacter)
{
+ // pageMap (must start with letter)
+ buffer.append(pageMapName);
+ }
+ else if (pageId == null && !pmEmpty && !pmStartsWithCharacter)
+ {
+ // .pageMap
+ buffer.append(getPageInfoSeparator());
+ buffer.append(pageMapName);
+ }
+ else if (pmStartsWithCharacter && pageId != null && versionNumber.intValue() == 0)
+ {
+ // pageMap.pageId (pageMap must start with a letter)
+ buffer.append(pageMapName);
buffer.append(getPageInfoSeparator());
+ buffer.append(pageId);
}
- if (versionNumber != null && versionNumber.intValue() != 0)
+ else if (!pmEmpty && pageId != null)
{
+ // pageMap.pageId.pageVersion
+ buffer.append(pageMapName);
+ buffer.append(getPageInfoSeparator());
+ buffer.append(pageId);
buffer.append(getPageInfoSeparator());
buffer.append(versionNumber);
}
+
return buffer.toString();
}
@@ -633,6 +664,15 @@
}
/**
+ * <ul>
+ * <li>pageId
+ * <li>pageId.version
+ * <li>pageMap (only in if pagemap strats with a letter)
+ * <li>.pageMap
+ * <li>pageMap.pageId (only in if pageMap name starts with a letter)
+ * <li>pageMap.pageId.version
+ * </ul>
+ *
* @param src
* @return
*/
@@ -661,21 +701,33 @@
return new PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
null);
}
+ else if (segments.length == 1 && !isNumber(segments[0]))
+ {
+ // pageMap (starts with leter)
+ return new PageInfo(null, null, segments[0]);
+ }
else if (segments.length == 2 && segments[0].length() == 0)
{
- // :pageMapName
+ // .pageMap
return new PageInfo(null, null, segments[1]);
}
+ else if (segments.length == 2 && !isNumber(segments[0]))
+ {
+ // pageMap.pageId (pageMap starts with letter)
+ return new PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
+ }
else if (segments.length == 3)
{
if (segments[2].length() == 0 && isNumber(segments[1]))
{
- // pageMapName:pageId:
+ // we don't encode it like this, but we still should be able
+ // to parse it
+ // pageMapName.pageId.
return new PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
}
else if (isNumber(segments[1]) && isNumber(segments[2]))
{
- // pageMapName:pageId:pageVersion
+ // pageMapName.pageId.pageVersion
return new PageInfo(Integer.valueOf(segments[1]), Integer.valueOf(segments[2]),
segments[0]);
}
@@ -725,8 +777,8 @@
public void respond(RequestCycle requestCycle)
{
-// super.respond(requestCycle);
-// if (requestCycle.isRedirect() == false)
+// super.respond(requestCycle);
+// if (requestCycle.isRedirect() == false)
{
Page page = getPage(requestCycle);
if (page.isPageStateless() == false && redirect)