You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/10/28 01:36:17 UTC
svn commit: r589240 - in /struts/struts2/trunk/core/src:
main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
Author: mrdon
Date: Sat Oct 27 16:36:15 2007
New Revision: 589240
URL: http://svn.apache.org/viewvc?rev=589240&view=rev
Log:
Adding automatic mode for message store interceptor
WW-2276
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java?rev=589240&r1=589239&r2=589240&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java Sat Oct 27 16:36:15 2007
@@ -25,6 +25,8 @@
import java.util.LinkedHashMap;
import java.util.Map;
+import org.apache.struts2.dispatcher.ServletRedirectResult;
+
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ValidationAware;
@@ -42,12 +44,19 @@
* <p/>
*
* In the 'STORE' mode, the interceptor will store the {@link ValidationAware} action's message / errors
- * and field errors into Http session.
+ * and field errors into HTTP session.
*
* <p/>
*
* In the 'RETRIEVE' mode, the interceptor will retrieve the stored action's message / errors and field
* errors and put them back into the {@link ValidationAware} action.
+ *
+ * <p/>
+ *
+ * In the 'AUTOMATIC' mode, the interceptor will always retrieve the stored action's message / errors
+ * and field errors and put them back into the {@link ValidationAware} action, and after Action execution,
+ * if the {@link Result} is an instance of {@link ServletRedirectResult}, the action's message / errors
+ * and field errors into automatically be stored in the HTTP session..
*
* <p/>
*
@@ -84,7 +93,7 @@
* <li>requestParameterSwitch - The request parameter that will indicate what mode this
* interceptor is in. </li>
* <li>operationMode - The operation mode this interceptor should be in
- * (either 'STORE', 'RETRIEVE' or 'NONE'). 'NONE' being the default.</li>
+ * (either 'STORE', 'RETRIEVE', 'AUTOMATIC', or 'NONE'). 'NONE' being the default.</li>
* </ul>
*
* <!-- END SNIPPET: parameters -->
@@ -141,7 +150,7 @@
private static final Logger LOG = LoggerFactory.getLogger(MessageStoreInterceptor.class);
-
+ public static final String AUTOMATIC_MODE = "AUTOMATIC";
public static final String STORE_MODE = "STORE";
public static final String RETRIEVE_MODE = "RETRIEVE";
public static final String NONE = "NONE";
@@ -209,7 +218,8 @@
String reqOperationMode = getRequestOperationMode(invocation);
if (RETRIEVE_MODE.equalsIgnoreCase(reqOperationMode) ||
- RETRIEVE_MODE.equalsIgnoreCase(operationMode)) {
+ RETRIEVE_MODE.equalsIgnoreCase(operationMode) ||
+ AUTOMATIC_MODE.equalsIgnoreCase(operationMode)) {
Object action = invocation.getAction();
if (action instanceof ValidationAware) {
@@ -255,8 +265,10 @@
protected void after(ActionInvocation invocation, String result) throws Exception {
String reqOperationMode = getRequestOperationMode(invocation);
+ boolean isRedirect = invocation.getResult() instanceof ServletRedirectResult;
if (STORE_MODE.equalsIgnoreCase(reqOperationMode) ||
- STORE_MODE.equalsIgnoreCase(operationMode)) {
+ STORE_MODE.equalsIgnoreCase(operationMode) ||
+ (AUTOMATIC_MODE.equalsIgnoreCase(operationMode) && isRedirect)) {
Object action = invocation.getAction();
if (action instanceof ValidationAware) {
Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java?rev=589240&r1=589239&r2=589240&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java Sat Oct 27 16:36:15 2007
@@ -27,6 +27,7 @@
import java.util.Map;
import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.dispatcher.ServletActionRedirectResult;
import org.easymock.EasyMock;
import com.opensymphony.xwork2.Action;
@@ -74,7 +75,9 @@
mockActionInvocation.getAction();
EasyMock.expectLastCall().andReturn(action);
-
+
+ mockActionInvocation.getResult();
+ EasyMock.expectLastCall().andReturn(new ServletActionRedirectResult());
EasyMock.replay(mockActionInvocation);
@@ -154,6 +157,10 @@
mockActionInvocation.getAction();
EasyMock.expectLastCall().andReturn(action);
+ EasyMock.expectLastCall().anyTimes();
+
+ mockActionInvocation.getResult();
+ EasyMock.expectLastCall().andReturn(new ServletActionRedirectResult());
EasyMock.replay(mockActionInvocation);
@@ -168,6 +175,122 @@
assertTrue(action.getActionErrors().contains("some action error 2"));
assertTrue(action.getActionMessages().contains("some action messages 1"));
assertTrue(action.getActionMessages().contains("some action messages 2"));
+ assertEquals(((List)action.getFieldErrors().get("field1")).size(), 1);
+ assertEquals(((List)action.getFieldErrors().get("field2")).size(), 1);
+ assertEquals(((List)action.getFieldErrors().get("field1")).get(0), "some field error 1");
+ assertEquals(((List)action.getFieldErrors().get("field2")).get(0), "some field error 2");
+
+ EasyMock.verify(mockActionInvocation);
+ }
+
+ public void testAutomatic() throws Exception {
+ MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
+ interceptor.setAllowRequestParameterSwitch(true);
+ interceptor.setOperationMode(MessageStoreInterceptor.AUTOMATIC_MODE);
+
+
+ Map paramMap = new LinkedHashMap();
+ Map sessionMap = new LinkedHashMap();
+
+ ActionSupport action = new ActionSupport();
+ action.addActionError("some action error 1");
+ action.addActionError("some action error 2");
+ action.addActionMessage("some action message 1");
+ action.addActionMessage("some action message 2");
+ action.addFieldError("field1", "some field error 1");
+ action.addFieldError("field2", "some field error 2");
+
+ ActionContext actionContext = new ActionContext(new HashMap());
+ actionContext.put(ActionContext.PARAMETERS, paramMap);
+ actionContext.put(ActionContext.SESSION, sessionMap);
+
+ // Mock (ActionInvocation)
+ ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
+ mockActionInvocation.getInvocationContext();
+ EasyMock.expectLastCall().andReturn(actionContext);
+ EasyMock.expectLastCall().anyTimes();
+
+ mockActionInvocation.invoke();
+ EasyMock.expectLastCall().andReturn(Action.SUCCESS);
+
+ mockActionInvocation.getAction();
+ EasyMock.expectLastCall().andReturn(action);
+ EasyMock.expectLastCall().anyTimes();
+
+ mockActionInvocation.getResult();
+ EasyMock.expectLastCall().andReturn(new ServletActionRedirectResult());
+
+ EasyMock.replay(mockActionInvocation);
+
+ interceptor.init();
+ interceptor.intercept(mockActionInvocation);
+ interceptor.destroy();
+
+ assertEquals(3, sessionMap.size());
+ assertTrue(sessionMap.containsKey(MessageStoreInterceptor.actionErrorsSessionKey));
+ assertTrue(sessionMap.containsKey(MessageStoreInterceptor.actionMessagesSessionKey));
+ assertTrue(sessionMap.containsKey(MessageStoreInterceptor.fieldErrorsSessionKey));
+
+ List actionErrors = (List) sessionMap.get(MessageStoreInterceptor.actionErrorsSessionKey);
+ List actionMessages = (List) sessionMap.get(MessageStoreInterceptor.actionMessagesSessionKey);
+ Map fieldErrors = (Map) sessionMap.get(MessageStoreInterceptor.fieldErrorsSessionKey);
+
+ assertEquals(2, actionErrors.size());
+ assertEquals(2, actionMessages.size());
+ assertEquals(2, fieldErrors.size());
+
+ assertTrue(actionErrors.contains("some action error 1"));
+ assertTrue(actionErrors.contains("some action error 2"));
+ assertTrue(actionMessages.contains("some action message 1"));
+ assertTrue(actionMessages.contains("some action message 2"));
+ assertTrue(fieldErrors.containsKey("field1"));
+ assertTrue(fieldErrors.containsKey("field2"));
+ assertEquals(((List)fieldErrors.get("field1")).size(), 1);
+ assertEquals(((List)fieldErrors.get("field2")).size(), 1);
+ assertEquals(((List)fieldErrors.get("field1")).get(0), "some field error 1");
+ assertEquals(((List)fieldErrors.get("field2")).get(0), "some field error 2");
+
+ EasyMock.verify(mockActionInvocation);
+
+ action = new ActionSupport();
+
+ mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
+ mockActionInvocation.invoke();
+ EasyMock.expectLastCall().andReturn(Action.SUCCESS);
+
+ sessionMap.put(MessageStoreInterceptor.actionErrorsSessionKey, actionErrors);
+ sessionMap.put(MessageStoreInterceptor.actionMessagesSessionKey, actionMessages);
+ sessionMap.put(MessageStoreInterceptor.fieldErrorsSessionKey, fieldErrors);
+
+
+ actionContext = new ActionContext(new HashMap());
+ actionContext.put(ActionContext.PARAMETERS, paramMap);
+ actionContext.put(ActionContext.SESSION, sessionMap);
+
+ mockActionInvocation.getInvocationContext();
+ EasyMock.expectLastCall().andReturn(actionContext);
+ EasyMock.expectLastCall().anyTimes();
+
+ mockActionInvocation.getAction();
+ EasyMock.expectLastCall().andReturn(action);
+ EasyMock.expectLastCall().anyTimes();
+
+ mockActionInvocation.getResult();
+ EasyMock.expectLastCall().andReturn(new ServletActionRedirectResult());
+
+ EasyMock.replay(mockActionInvocation);
+
+ interceptor.init();
+ interceptor.intercept(mockActionInvocation);
+ interceptor.destroy();
+
+ assertEquals(action.getActionErrors().size(), 2);
+ assertEquals(action.getActionMessages().size(), 2);
+ assertEquals(action.getFieldErrors().size(), 2);
+ assertTrue(action.getActionErrors().contains("some action error 1"));
+ assertTrue(action.getActionErrors().contains("some action error 2"));
+ assertTrue(action.getActionMessages().contains("some action message 1"));
+ assertTrue(action.getActionMessages().contains("some action message 2"));
assertEquals(((List)action.getFieldErrors().get("field1")).size(), 1);
assertEquals(((List)action.getFieldErrors().get("field2")).size(), 1);
assertEquals(((List)action.getFieldErrors().get("field1")).get(0), "some field error 1");