[gatein-commits] gatein SVN: r2040 - portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Mar 8 13:10:57 EST 2010


Author: mwringe
Date: 2010-03-08 13:10:56 -0500 (Mon, 08 Mar 2010)
New Revision: 2040

Modified:
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
Log:
GTNPORTAL-825: Add support for HTTPRedirectionResponse from the portlet container. This will allow for sendRedirects to work properly during an action.

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-03-08 17:37:50 UTC (rev 2039)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-03-08 18:10:56 UTC (rev 2040)
@@ -47,6 +47,7 @@
 import org.gatein.pc.api.invocation.ResourceInvocation;
 import org.gatein.pc.api.invocation.response.ContentResponse;
 import org.gatein.pc.api.invocation.response.ErrorResponse;
+import org.gatein.pc.api.invocation.response.HTTPRedirectionResponse;
 import org.gatein.pc.api.invocation.response.PortletInvocationResponse;
 import org.gatein.pc.api.invocation.response.UpdateNavigationalStateResponse;
 
@@ -55,6 +56,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.namespace.QName;
+
+import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -125,25 +128,35 @@
                uiPortlet.update((C)wsrp);
             }
          }
-
-         // todo: handle the error response better than this.
-         if (!(portletResponse instanceof UpdateNavigationalStateResponse))
+         
+         if (portletResponse instanceof UpdateNavigationalStateResponse)
          {
-            if (portletResponse instanceof ErrorResponse)
-            {
-               ErrorResponse errorResponse = (ErrorResponse)portletResponse;
-               throw (Exception)errorResponse.getCause();
-            }
-            else
-            {
-               throw new Exception("Unexpected response type [" + portletResponse
-                  + "]. Expected a UpdateNavigationResponse or an ErrorResponse.");
-            }
+            handleUpdateNavigationalStateResponse((UpdateNavigationalStateResponse)portletResponse, uiPortlet, prcontext);
          }
-
-         //
-         UpdateNavigationalStateResponse navStateResponse = (UpdateNavigationalStateResponse)portletResponse;
-
+         else if (portletResponse instanceof HTTPRedirectionResponse)
+         {
+            handleRedirectionResponse((HTTPRedirectionResponse)portletResponse, prcontext.getResponse());
+         }
+         else if (portletResponse instanceof ErrorResponse)
+         {
+            handleErrorResponse((ErrorResponse)portletResponse);
+         }
+         else
+         {
+            throw new Exception("Unexpected response type [" + portletResponse + "]. Expected an UpdateNavigationResponse" +
+            		", a HTTPRedirectionResponse or an ErrorResponse.");
+         }
+      }
+      
+      
+      private void handleRedirectionResponse(HTTPRedirectionResponse redirectionResponse, HttpServletResponse response) throws IOException
+      {
+         String redirectionURL = redirectionResponse.getLocation();
+         response.sendRedirect(redirectionURL);
+      }
+      
+      private void handleUpdateNavigationalStateResponse(UpdateNavigationalStateResponse navStateResponse, UIPortlet<S, C> uiPortlet, PortalRequestContext prcontext) throws Exception
+      {
          /*
           * Update the portlet window state according to the action output
           * information
@@ -228,6 +241,11 @@
          }
 
       }
+      
+      private void handleErrorResponse(ErrorResponse response) throws Exception
+      {
+         throw (Exception)response.getCause();  
+      }
    }
 
    /**



More information about the gatein-commits mailing list