Author: ate
Date: Fri Sep 14 18:30:26 2007
New Revision: 575844

URL: http://svn.apache.org/viewvc?rev=575844&view=rev
Log:
WICKET-655: New Wicket Portlet support: Encode Wicket urls through 
RenderContext to allow a PortletRenderContext to replace them by PortletURLs
Much improved the portlet url encoding in WebRequestCodingStrategy such that 
now all wicket-examples run straightforward as portlets, except for the 
PrototypeApplication and the FramesApplication. 
As Prototype Ajax support isn't on my list (now), and frames simply never can 
be used in a portlet, initial Wicket portlet url mapping is now quite complete.

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=575844&r1=575843&r2=575844&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
 Fri Sep 14 18:30:26 2007
@@ -19,6 +19,7 @@
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.TreeSet;
@@ -39,9 +40,12 @@
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
 import org.apache.wicket.behavior.IActivePageBehaviorListener;
 import org.apache.wicket.behavior.IBehaviorListener;
 import org.apache.wicket.protocol.http.UnitTestSettings;
+import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.protocol.http.portlet.PortletRequestContext;
 import org.apache.wicket.request.IRequestCodingStrategy;
 import org.apache.wicket.request.IRequestTargetMountsInfo;
 import org.apache.wicket.request.RequestParameters;
@@ -238,8 +242,8 @@
                // First check to see whether the target is mounted
                CharSequence url = pathForTarget(requestTarget);
 
-               RequestContext renderContext = RequestContext.get();
-               boolean portletRequest = renderContext.isPortletRequest();
+               RequestContext requestContext = RequestContext.get();
+               boolean portletRequest = requestContext.isPortletRequest();
                boolean sharedResourceURL = false;
                
                if (url != null && !portletRequest)
@@ -248,11 +252,11 @@
                }
                else if (requestTarget instanceof 
IBookmarkablePageRequestTarget)
                {
-                       url = renderContext.encodeRenderURL(url == null ? 
encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
+                       url = requestContext.encodeRenderURL(url == null ? 
encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
                }
                else if (requestTarget instanceof ISharedResourceRequestTarget)
                {
-                       url = renderContext.encodeSharedResourceURL(url == null 
? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
+                       url = requestContext.encodeSharedResourceURL(url == 
null ? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
                        sharedResourceURL = true;
                }
                else if (requestTarget instanceof 
IListenerInterfaceRequestTarget)
@@ -263,19 +267,43 @@
                        }
                        if (portletRequest)
                        {
-                               RequestListenerInterface rli = 
((IListenerInterfaceRequestTarget)requestTarget).getRequestListenerInterface();
+                               IListenerInterfaceRequestTarget 
iliRequestTarget = (IListenerInterfaceRequestTarget)requestTarget;
+                               RequestListenerInterface rli = 
iliRequestTarget.getRequestListenerInterface();
                                if 
(IResourceListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass())
                                        || 
IBehaviorListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
                                {
-                                       url = 
renderContext.encodeResourceURL(url);
+                                       url = 
requestContext.encodeResourceURL(url);
                                }
                                else if 
(IRedirectListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
                                {
-                                       url = 
renderContext.encodeRenderURL(url);
+                                       if 
(((WebRequestCycle)requestCycle).getWebRequest().isAjax())
+                                       {
+                        // TODO: Probably not all Ajax based redirects need to 
break out of ResourceURL encoding
+                                               // Need to findout and/or 
provide some kind of extension how to indicate this
+                                               url = 
((PortletRequestContext)requestContext).encodeRenderURL(url,true);
+                                       }
+                                       else
+                                       {
+                                               url = 
requestContext.encodeRenderURL(url);
+                                       }
                                }
                                else
                                {
-                                       url = 
renderContext.encodeActionURL(url);
+                                       PortletRequestContext prc = 
(PortletRequestContext)requestContext;
+                                       boolean forceActionURL = prc.isAjax();
+                                       if (forceActionURL)
+                                       {
+                                               List behaviors = 
iliRequestTarget.getTarget().getBehaviors();
+                                               for (int i = 0, size = 
behaviors.size(); i<size; i++)
+                                               {
+                                                       if 
(AbstractAjaxBehavior.class.isAssignableFrom(behaviors.get(i).getClass()))
+                                                       {
+                                                               forceActionURL 
= false;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                                       url = prc.encodeActionURL(url, 
forceActionURL);
                                }
                        }
                }


Reply via email to