Revision: 1367
          http://stripes.svn.sourceforge.net/stripes/?rev=1367&view=rev
Author:   bengunter
Date:     2010-12-03 16:49:24 +0000 (Fri, 03 Dec 2010)

Log Message:
-----------
Applied fix for STS-750 from trunk.

Modified Paths:
--------------
    trunk/stripes/src/net/sourceforge/stripes/action/RedirectResolution.java

Added Paths:
-----------
    trunk/tests/src/net/sourceforge/stripes/action/RedirectResolutionTest.java

Modified: 
trunk/stripes/src/net/sourceforge/stripes/action/RedirectResolution.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/action/RedirectResolution.java    
2010-12-03 16:46:53 UTC (rev 1366)
+++ trunk/stripes/src/net/sourceforge/stripes/action/RedirectResolution.java    
2010-12-03 16:49:24 UTC (rev 1367)
@@ -21,6 +21,8 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
 import java.io.IOException;
 import java.util.Collection;
 import java.util.HashSet;
@@ -40,6 +42,11 @@
  * methods, and by invoking includeRequestParameters() which will cause all of 
the current
  * request parameters to be included into the URL.</p>
  *
+ * <p>
+ * The redirect type can be switched from a 302 temporary redirect (default) 
to a 301 permanent
+ * redirect using the setPermanent method.
+ * </p>
+ * 
  * @see ForwardResolution
  * @author Tim Fennell
  */
@@ -48,6 +55,7 @@
     private boolean prependContext = true;
     private boolean includeRequestParameters;
     private Collection<ActionBean> beans; // used to flash action beans
+    private boolean permanent = false;
 
     /**
      * Simple constructor that takes the URL to which to forward the user. 
Defaults to
@@ -143,9 +151,24 @@
      * @throws IOException thrown when the Servlet container encounters an 
error
      */
     @SuppressWarnings("unchecked")
-       public void execute(HttpServletRequest request, HttpServletResponse 
response)
-        throws ServletException, IOException {
+    public void execute(HttpServletRequest request, HttpServletResponse 
response)
+            throws ServletException, IOException {
 
+        if (permanent) {
+            response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
+            response = new HttpServletResponseWrapper(response) {
+
+                @Override
+                public void setStatus(int sc) {
+                }
+
+                @Override
+                public void sendRedirect(String location) throws IOException {
+                    setHeader("Location", location);
+                }
+
+            };
+        }
         if (this.includeRequestParameters) {
             addParameters(request.getParameterMap());
         }
@@ -177,4 +200,10 @@
 
         response.sendRedirect(url);
     }
+
+    /** Sets the redirect type to permanent (301) instead of temporary (302). 
*/
+    public RedirectResolution setPermanent(boolean permanent) {
+        this.permanent = permanent;
+        return this;
+    }
 }

Added: 
trunk/tests/src/net/sourceforge/stripes/action/RedirectResolutionTest.java
===================================================================
--- trunk/tests/src/net/sourceforge/stripes/action/RedirectResolutionTest.java  
                        (rev 0)
+++ trunk/tests/src/net/sourceforge/stripes/action/RedirectResolutionTest.java  
2010-12-03 16:49:24 UTC (rev 1367)
@@ -0,0 +1,68 @@
+package net.sourceforge.stripes.action;
+
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletResponse;
+
+import net.sourceforge.stripes.StripesTestFixture;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+import net.sourceforge.stripes.mock.MockHttpServletResponse;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class RedirectResolutionTest {
+    
+    @BeforeClass
+    public void setupServletContext(){
+        StripesTestFixture.getServletContext();
+    }
+    //helper method
+    private MockHttpServletRequest buildMockServletRequest(){
+        MockHttpServletRequest request = new 
MockHttpServletRequest("/context", "/whatever");
+        request.addLocale(Locale.US);
+        return request;
+    }
+
+    @Test(groups = "fast")
+    public void testPermanantRedirect() throws Exception {
+        RedirectResolution resolution = new 
RedirectResolution("http://www.stripesframework.org";, false).setPermanent(true);
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        resolution.execute(buildMockServletRequest(), response);
+        
+        Assert.assertEquals(response.getStatus(), 
HttpServletResponse.SC_MOVED_PERMANENTLY);
+        
Assert.assertEquals(response.getHeaderMap().get("Location").iterator().next(), 
"http://www.stripesframework.org";);
+    }
+
+    @Test(groups = "fast")
+    public void testTemporaryRedirect() throws Exception {
+        RedirectResolution resolution = new 
RedirectResolution("http://www.stripesframework.org";, false);
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        resolution.execute(buildMockServletRequest(), response);
+        
+        Assert.assertEquals(response.getStatus(), 
HttpServletResponse.SC_MOVED_TEMPORARILY);
+        Assert.assertEquals(response.getRedirectUrl(), 
"http://www.stripesframework.org";);
+    }
+    
+    @Test(groups = "fast")
+    public void testPermanantRedirectWithParameters() throws Exception {
+        RedirectResolution resolution = new 
RedirectResolution("http://www.stripesframework.org";, 
false).setPermanent(true).addParameter("test", "test");
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        resolution.execute(buildMockServletRequest(), response);
+        
+        Assert.assertEquals(response.getStatus(), 
HttpServletResponse.SC_MOVED_PERMANENTLY);
+        
Assert.assertEquals(response.getHeaderMap().get("Location").iterator().next(), 
"http://www.stripesframework.org?test=test";);
+    }
+
+    @Test(groups = "fast")
+    public void testTemporaryRedirectWithParameters() throws Exception {
+        RedirectResolution resolution = new 
RedirectResolution("http://www.stripesframework.org";, 
false).addParameter("test", "test");
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        resolution.execute(buildMockServletRequest(), response);
+        
+        Assert.assertEquals(response.getStatus(), 
HttpServletResponse.SC_MOVED_TEMPORARILY);
+        Assert.assertEquals(response.getRedirectUrl(), 
"http://www.stripesframework.org?test=test";);
+    }
+
+}


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Stripes-development mailing list
Stripes-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to