Author: ate
Date: Thu Jun 14 09:28:37 2007
New Revision: 547294

URL: http://svn.apache.org/viewvc?view=rev&rev=547294
Log:
WICKET-654: New Wicket Portlet support: translating Wicket relative paths back 
to fully qualified paths for usage in a portlet context
See: https://issues.apache.org/jira/browse/WICKET-654

- note: initial implementation, probably needs further improvement

Modified:
    
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java

Modified: 
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java?view=diff&rev=547294&r1=547293&r2=547294
==============================================================================
--- 
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
 Thu Jun 14 09:28:37 2007
@@ -24,6 +24,7 @@
 
 import org.apache.wicket.Application;
 import org.apache.wicket.IRedirectListener;
+import org.apache.wicket.RenderContext;
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.protocol.http.WebApplication;
@@ -149,10 +150,23 @@
                        return relativePathPrefixToContextRoot;
                }
 
+               if (RenderContext.get().isEmbedded())
+               {
+                       return relativePathPrefixToContextRoot = 
getHttpServletRequest().getContextPath()+"/";
+               }
+
                // Prepend to get back to the wicket handler.
                String tmp = getRelativePathPrefixToWicketHandler();
-               PrependingStringBuffer prepender = new 
PrependingStringBuffer(tmp);
-
+               
+               boolean embeddedRequest = RenderContext.get().isEmbedded();
+               
+               PrependingStringBuffer prepender = new PrependingStringBuffer();
+               
+               if (!embeddedRequest)
+               {
+                       prepender.prepend(tmp);
+               }
+               
                String path = Strings.replaceAll(getPath(), "%3A", 
":").toString();
                if (path == null || path.length() == 0)
                {
@@ -218,10 +232,12 @@
                }
                
                PrependingStringBuffer prepender = new PrependingStringBuffer();
+
+               boolean embeddedRequest = RenderContext.get().isEmbedded();
                
                // For AJAX requests, we need to make the URLs relative to the
                // original page.
-               if (isAjax())
+               if (!embeddedRequest && isAjax())
                {
                        for (int i = 0; i < 
getRequestParameters().getUrlDepth(); i++)
                        {
@@ -289,28 +305,42 @@
                        relativeUrl = wicketRedirectUrl;
                }
 
+               int lastPathPos = -1;
                if (depthRelativeToWicketHandler == -1)
                {
                        int depth = 0;
+                       int ajaxUrlDepth = isAjax() ? 
getRequestParameters().getUrlDepth() : -1;
                        for (int i = 0; i < relativeUrl.length(); i++)
                        {
                                if (relativeUrl.charAt(i) == '?')
-                               {
+                               {                                       
                                        break;
                                }
                                if (relativeUrl.charAt(i) == '/')
                                {
                                        depth++;
+                                       lastPathPos = i;
+                                       if (depth == ajaxUrlDepth)
+                                       {
+                                               return 
relativeUrl.substring(0,lastPathPos+1);
+                                       }
                                }
                        }
                        depthRelativeToWicketHandler = depth;
                }
-
-               for (int i = 0; i < depthRelativeToWicketHandler; i++)
+               
+               if (embeddedRequest)
                {
-                       prepender.prepend("../");
+                       
prepender.prepend(getHttpServletRequest().getServletPath());
+                       
prepender.prepend(getHttpServletRequest().getContextPath());
+               }
+               else
+               {
+                       for (int i = 0; i < depthRelativeToWicketHandler; i++)
+                       {
+                               prepender.prepend("../");
+                       }
                }
-
                return relativePathPrefixToWicketHandler = prepender.toString();
        }
 


Reply via email to