Author: almaw
Date: Thu Jan 25 12:08:08 2007
New Revision: 499941
URL: http://svn.apache.org/viewvc?view=rev&rev=499941
Log:
Move to using relative URLs.
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/request/WebRequestCodingStrategy.java
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/request/WebRequestCodingStrategy.java?view=diff&rev=499941&r1=499940&r2=499941
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/request/WebRequestCodingStrategy.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/request/WebRequestCodingStrategy.java
Thu Jan 25 12:08:08 2007
@@ -224,50 +224,72 @@
* wicket.IRequestTarget)
*/
public final CharSequence encode(final RequestCycle requestCycle,
- final IRequestTarget requestTarget)
+ final IRequestTarget requestTarget, final boolean
absolutePath)
{
- // first check whether the target was mounted
- CharSequence path = pathForTarget(requestTarget);
- if (path != null)
- {
- CharSequence prefix = urlPrefix(requestCycle);
- if (prefix.length() > 0) {
- // special check if the prefix ends on '/'
because a mount always
- // starts with '/'
- if (prefix.charAt(prefix.length() - 1) == '/')
- prefix = prefix.subSequence(0,
prefix.length() - 1);
- }
- final AppendingStringBuffer buffer = new
AppendingStringBuffer(prefix.length()
- + path.length());
- buffer.append(prefix);
- buffer.append(path);
- return
requestCycle.getOriginalResponse().encodeURL(buffer);
+ // First check to see whether the target is mounted
+ CharSequence url = pathForTarget(requestTarget);
+
+ if (url != null) {
+ // Do nothing - we've found the URL and it's mounted.
}
-
- // no mount found; go on with default processing
- if (requestTarget instanceof IBookmarkablePageRequestTarget)
+ else if (requestTarget instanceof
IBookmarkablePageRequestTarget)
{
- return encode(requestCycle,
(IBookmarkablePageRequestTarget)requestTarget);
+ url = encode(requestCycle,
(IBookmarkablePageRequestTarget)requestTarget);
}
else if (requestTarget instanceof ISharedResourceRequestTarget)
{
- return encode(requestCycle,
(ISharedResourceRequestTarget)requestTarget);
+ url = encode(requestCycle,
(ISharedResourceRequestTarget)requestTarget);
}
else if (requestTarget instanceof
IListenerInterfaceRequestTarget)
{
- return encode(requestCycle,
(IListenerInterfaceRequestTarget)requestTarget);
+ url = encode(requestCycle,
(IListenerInterfaceRequestTarget)requestTarget);
}
else if (requestTarget instanceof IPageRequestTarget)
{
- return encode(requestCycle,
(IPageRequestTarget)requestTarget);
+ url = encode(requestCycle,
(IPageRequestTarget)requestTarget);
}
-
// fallthough for non-default request targets
- String url = doEncode(requestCycle, requestTarget);
+ else
+ {
+ url = doEncode(requestCycle, requestTarget);
+ }
+
if (url != null)
{
+ if (url.length() > 0 && url.charAt(0) == '/')
+ {
+ url = url.subSequence(1, url.length());
+ }
+
+ if (absolutePath)
+ {
+ url = urlPrefix(requestCycle).toString() + url;
+ }
+ String relativeUrl =
requestCycle.getRequest().getRelativeURL();
+ String segments = "";
+ for (int i = 0; i < relativeUrl.length(); i++)
+ {
+ if (relativeUrl.charAt(i) == '?')
+ {
+ break;
+ }
+ if (relativeUrl.charAt(i) == '/')
+ {
+ segments += "../";
+ }
+ }
+ if (segments.length() > 0)
+ {
+ url = segments + url;
+ }
+ else if (url.length() > 0 && (url.charAt(0) == '?' ||
url.charAt(0) == ';'))
+ {
+ url = "./" + url;
+ }
+ url = requestCycle.getOriginalResponse().encodeURL(url);
return url;
}
+
// Just return null intead of throwing an exception. So that it
can be
// handled better
return null;
@@ -553,7 +575,6 @@
{
// Begin encoding URL
final AppendingStringBuffer url = new AppendingStringBuffer(64);
- url.append(urlPrefix(requestCycle));
// Get page Class
final Class pageClass = requestTarget.getPageClass();
@@ -652,7 +673,7 @@
}
}
}
- return requestCycle.getOriginalResponse().encodeURL(url);
+ return url;
}
/**
@@ -671,26 +692,16 @@
protected CharSequence encode(RequestCycle requestCycle,
ISharedResourceRequestTarget requestTarget)
{
- final CharSequence prefix = urlPrefix(requestCycle);
final String sharedResourceKey = requestTarget.getResourceKey();
if ((sharedResourceKey == null) ||
(sharedResourceKey.trim().length() == 0))
{
- return prefix;
+ return "";
}
else
{
final AppendingStringBuffer buffer = new
AppendingStringBuffer(sharedResourceKey
- .length()
- + prefix.length() + 11);
- buffer.append(prefix);
- if ((buffer.length() > 0) &&
buffer.charAt(buffer.length() - 1) == '/')
- {
- buffer.append("resources/");
- }
- else
- {
- buffer.append("/resources/");
- }
+ .length());
+ buffer.append("resources/");
buffer.append(sharedResourceKey);
Map map =
requestTarget.getRequestParameters().getParameters();
if (map != null && map.size() > 0)
@@ -707,7 +718,7 @@
}
buffer.setLength(buffer.length() - 1);
}
- return
requestCycle.getOriginalResponse().encodeURL(buffer);
+ return buffer;
}
}
@@ -731,7 +742,6 @@
// Start string buffer for url
final AppendingStringBuffer url = new AppendingStringBuffer(64);
- url.append(urlPrefix(requestCycle));
url.append('?');
url.append(INTERFACE_PARAMETER_NAME);
url.append('=');
@@ -771,7 +781,7 @@
url.append(listenerName);
}
- return requestCycle.getOriginalResponse().encodeURL(url);
+ return url;
}
/**