You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by at...@apache.org on 2007/09/04 12:50:24 UTC

svn commit: r572613 - /wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java

Author: ate
Date: Tue Sep  4 03:50:23 2007
New Revision: 572613

URL: http://svn.apache.org/viewvc?rev=572613&view=rev
Log:
WICKET-655: New Wicket Portlet support: Encode Wicket urls through RenderContext to allow a PortletRenderContext to replace them by PortletURLs
See: https://issues.apache.org/jira/browse/WICKET-655
- Switching to a new 1.3.0-beta3-portlet-support branch and provide a much improved implementation which now covers most standard use-cases I think

Modified:
    wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java

Modified: wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?rev=572613&r1=572612&r2=572613&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java (original)
+++ wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java Tue Sep  4 03:50:23 2007
@@ -29,14 +29,17 @@
 import org.apache.wicket.IPageMap;
 import org.apache.wicket.IRedirectListener;
 import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.IResourceListener;
 import org.apache.wicket.Page;
 import org.apache.wicket.PageMap;
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestContext;
 import org.apache.wicket.Request;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.behavior.IBehaviorListener;
 import org.apache.wicket.protocol.http.UnitTestSettings;
 import org.apache.wicket.request.IRequestCodingStrategy;
 import org.apache.wicket.request.IRequestTargetMountsInfo;
@@ -234,52 +237,89 @@
 		// First check to see whether the target is mounted
 		CharSequence url = pathForTarget(requestTarget);
 
-		if (url != null)
+		RequestContext renderContext = RequestContext.get();
+		boolean portletRequest = renderContext.isPortletRequest();
+		boolean sharedResourceURL = false;
+		
+		if (url != null && !portletRequest)
 		{
 			// Do nothing - we've found the URL and it's mounted.
 		}
 		else if (requestTarget instanceof IBookmarkablePageRequestTarget)
 		{
-			url = encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget);
+			url = renderContext.encodeRenderURL(url == null ? encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
 		}
 		else if (requestTarget instanceof ISharedResourceRequestTarget)
 		{
-			url = encode(requestCycle, (ISharedResourceRequestTarget)requestTarget);
+			url = renderContext.encodeSharedResourceURL(url == null ? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
+			sharedResourceURL = true;
 		}
 		else if (requestTarget instanceof IListenerInterfaceRequestTarget)
 		{
-			url = encode(requestCycle, (IListenerInterfaceRequestTarget)requestTarget);
-		}
-		else if (requestTarget instanceof IPageRequestTarget)
-		{
-			// This calls page.urlFor(IRedirectListener.INTERFACE), which calls
-			// the function we're in again. We therefore need to jump out here
-			// and return the url immediately, otherwise we end up prefixing it
-			// with relative path or absolute prefixes twice.
-			return encode(requestCycle, (IPageRequestTarget)requestTarget);
+			if (url == null)
+			{
+				url = encode(requestCycle, (IListenerInterfaceRequestTarget)requestTarget);
+			}
+			if (portletRequest)
+			{
+				RequestListenerInterface rli = ((IListenerInterfaceRequestTarget)requestTarget).getRequestListenerInterface();
+				if (IResourceListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass())
+					|| IBehaviorListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
+				{
+					url = renderContext.encodeResourceURL(url);
+				}
+				else if (IRedirectListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
+				{
+					url = renderContext.encodeRenderURL(url);
+				}
+				else
+				{
+					url = renderContext.encodeActionURL(url);
+				}
+			}
 		}
-		// fallthough for non-default request targets
-		else
+		else if (url == null)
 		{
-			url = doEncode(requestCycle, requestTarget);
+			if (requestTarget instanceof IPageRequestTarget)
+			{
+				// This calls page.urlFor(IRedirectListener.INTERFACE), which calls
+				// the function we're in again. We therefore need to jump out here
+				// and return the url immediately, otherwise we end up prefixing it
+				// with relative path or absolute prefixes twice.
+				return encode(requestCycle, (IPageRequestTarget)requestTarget);
+			}
+			// fallthough for non-default request targets
+			else
+			{
+				url = doEncode(requestCycle, requestTarget);
+			}
 		}
 
 		if (url != null)
 		{
-			// Add the actual URL. This will be relative to the Wicket
-			// Servlet/Filter, with no leading '/'.
-			PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
-
-			// Prepend prefix to the URL to make it relative to the current
-			// request.
-			prepender.prepend(requestCycle.getRequest().getRelativePathPrefixToWicketHandler());
-
-			String result = prepender.toString();
-			// We need to special-case links to the home page if we're at the
-			// same level.
-			if (result.length() == 0)
+			String result = null;
+			
+			if (!sharedResourceURL && portletRequest)
+			{
+				result = url.toString();
+			}
+			else
 			{
-				result = "./";
+				// Add the actual URL. This will be relative to the Wicket
+			    // Servlet/Filter, with no leading '/'.
+				PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
+
+				// Prepend prefix to the URL to make it relative to the current
+				// request.
+				prepender.prepend(requestCycle.getRequest().getRelativePathPrefixToWicketHandler());
+
+				result = prepender.toString();
+				// We need to special-case links to the home page if we're at the
+				// same level.
+				if (result.length() == 0)
+				{
+					result = "./";
+				}
 			}
 			return requestCycle.getOriginalResponse().encodeURL(result);
 		}