WW-4789 WW-3788 Introduces helper methods to allow build fluent API

This commit is contained in:
Lukasz Lenart
2020-04-07 07:59:11 +02:00
parent dfda16d743
commit 273776e13b
24 changed files with 99 additions and 91 deletions
@@ -21,7 +21,6 @@ package com.opensymphony.xwork2;
import com.opensymphony.xwork2.conversion.impl.ConversionData;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.ValueStack;
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import org.apache.struts2.StrutsException;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.HttpParameters;
@@ -182,11 +181,18 @@ public class ActionContext implements Serializable {
* Sets the action invocation (the execution state).
*
* @param actionInvocation the action execution state.
* @deprecated use {@link #withActionInvocation(ActionInvocation)} instead
*/
@Deprecated
public void setActionInvocation(ActionInvocation actionInvocation) {
put(ACTION_INVOCATION, actionInvocation);
}
public ActionContext withActionInvocation(ActionInvocation actionInvocation) {
put(ACTION_INVOCATION, actionInvocation);
return this;
}
/**
* Gets the action invocation (the execution state).
*
@@ -207,6 +213,11 @@ public class ActionContext implements Serializable {
put(APPLICATION, application);
}
public ActionContext withApplication(Map<String, Object> application) {
put(APPLICATION, application);
return this;
}
/**
* Returns a Map of the ServletContext when in a servlet environment or a generic application level Map otherwise.
*
@@ -236,6 +247,11 @@ public class ActionContext implements Serializable {
put(CONVERSION_ERRORS, conversionErrors);
}
public ActionContext withConversionErrors(Map<String, ConversionData> conversionErrors) {
put(CONVERSION_ERRORS, conversionErrors);
return this;
}
/**
* Gets the map of conversion errors which occurred when executing the action.
*
@@ -289,6 +305,11 @@ public class ActionContext implements Serializable {
put(ACTION_NAME, name);
}
public ActionContext withActionName(String actionName) {
put(ACTION_NAME, actionName);
return this;
}
/**
* Gets the name of the current Action.
*
@@ -316,6 +337,11 @@ public class ActionContext implements Serializable {
put(PARAMETERS, parameters);
}
public ActionContext withParameters(HttpParameters parameters) {
put(PARAMETERS, parameters);
return this;
}
/**
* Returns a Map of the HttpServletRequest parameters when in a servlet environment or a generic Map of
* parameters otherwise.
@@ -338,6 +364,11 @@ public class ActionContext implements Serializable {
put(SESSION, session);
}
public ActionContext withSession(Map<String, Object> session) {
put(SESSION, session);
return this;
}
/**
* Gets the Map of HttpSession values when in a servlet environment or a generic session map otherwise.
*
@@ -358,6 +389,11 @@ public class ActionContext implements Serializable {
put(VALUE_STACK, stack);
}
public ActionContext withValueStack(ValueStack valueStack) {
put(VALUE_STACK, valueStack);
return this;
}
/**
* Gets the OGNL value stack.
*
@@ -371,11 +407,18 @@ public class ActionContext implements Serializable {
* Gets the container for this request
*
* @param cont The container
* @deprecated use {@link #withContainer(Container)} instead
*/
@Deprecated
public void setContainer(Container cont) {
put(CONTAINER, cont);
}
public ActionContext withContainer(Container container) {
put(CONTAINER, container);
return this;
}
/**
* Sets the container for this request
*
@@ -418,24 +461,24 @@ public class ActionContext implements Serializable {
return (ServletContext) get(StrutsStatics.SERVLET_CONTEXT);
}
public HttpServletRequest getServletRequest() {
return (HttpServletRequest) get(StrutsStatics.HTTP_REQUEST);
}
public HttpServletResponse getServletResponse() {
return (HttpServletResponse) get(StrutsStatics.HTTP_RESPONSE);
}
public ActionContext withServletContext(ServletContext servletContext) {
put(StrutsStatics.SERVLET_CONTEXT, servletContext);
return this;
}
public HttpServletRequest getServletRequest() {
return (HttpServletRequest) get(StrutsStatics.HTTP_REQUEST);
}
public ActionContext withServletRequest(HttpServletRequest request) {
put(StrutsStatics.HTTP_REQUEST, request);
return this;
}
public HttpServletResponse getServletResponse() {
return (HttpServletResponse) get(StrutsStatics.HTTP_RESPONSE);
}
public ActionContext withServletResponse(HttpServletResponse response) {
put(StrutsStatics.HTTP_RESPONSE, response);
return this;
@@ -445,6 +488,11 @@ public class ActionContext implements Serializable {
return (PageContext) get(StrutsStatics.PAGE_CONTEXT);
}
public ActionContext withPageContext(PageContext pageContext) {
put(StrutsStatics.PAGE_CONTEXT, pageContext);
return this;
}
public ActionMapping getActionMapping() {
return (ActionMapping) get(StrutsStatics.ACTION_MAPPING);
}
@@ -454,37 +502,7 @@ public class ActionContext implements Serializable {
return this;
}
public ActionContext withApplication(Map<String, Object> application) {
put(APPLICATION, application);
return this;
}
public ActionContext withSession(Map<String, Object> session) {
put(SESSION, session);
return this;
}
public ActionContext withParameters(HttpParameters parameters) {
put(PARAMETERS, parameters);
return this;
}
public ActionContext withActionName(String actionName) {
put(ACTION_NAME, actionName);
return this;
}
public ActionContext withValueStack(ValueStack valueStack) {
put(VALUE_STACK, valueStack);
return this;
}
public ActionContext withPageContext(PageContext pageContext) {
put(StrutsStatics.PAGE_CONTEXT, pageContext);
return this;
}
public ActionContext withPageContextOrClear(ActionContext actionContext) {
public ActionContext usePageContextOrClear(ActionContext actionContext) {
if (actionContext == null) {
put(StrutsStatics.PAGE_CONTEXT, null);
} else {
@@ -493,19 +511,4 @@ public class ActionContext implements Serializable {
return this;
}
public ActionContext withConversionErrors(Map<String, ConversionData> conversionErrors) {
put(CONVERSION_ERRORS, conversionErrors);
return this;
}
public ActionContext withContainer(Container container) {
put(CONTAINER, container);
return this;
}
public ActionContext withActionInvocation(ActionInvocation actionInvocation) {
put(ACTION_INVOCATION, actionInvocation);
return this;
}
}
@@ -385,7 +385,7 @@ public class DefaultActionInvocation implements ActionInvocation {
ActionContext actionContext = ActionContext.getContext();
if (actionContext != null) {
actionContext.setActionInvocation(this);
actionContext.withActionInvocation(this);
}
createAction(contextMap);
@@ -293,7 +293,7 @@ public class ActionComponent extends ContextBean {
// set the old stack back on the request
req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
if (inv != null) {
ActionContext.getContext().setActionInvocation(inv);
ActionContext.getContext().withActionInvocation(inv);
}
}
@@ -64,7 +64,7 @@ public class InvocationSessionStore {
savedInvocation
.getInvocationContext()
.withPageContextOrClear(previousActionContext)
.usePageContextOrClear(previousActionContext)
.withValueStack(savedInvocation.getStack())
.bind();
}
@@ -68,7 +68,7 @@ public class LocaleAwareTest extends XWorkTestCase {
loadConfigurationProviders(configurationProvider, new MockConfigurationProvider());
ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
stack.getActionContext().setContainer(container);
stack.getActionContext().withContainer(container);
ActionContext.of(stack.getContext()).bind();
}
}
@@ -183,8 +183,9 @@ public class DefaultWorkflowInterceptorTest extends XWorkTestCase {
EasyMock.replay(action);
EasyMock.replay(proxy);
ActionContext actionContext = ActionContext.of(new HashMap<>()).bind();
actionContext.setActionInvocation(invocation);
ActionContext.of(new HashMap<>())
.withActionInvocation(invocation)
.bind();
}
@Override
@@ -87,8 +87,9 @@ public class ValidationErrorAwareTest extends XWorkTestCase {
EasyMock.replay(action);
EasyMock.replay(proxy);
ActionContext context = ActionContext.of(new HashMap<>()).bind();
context.setActionInvocation(invocation);
ActionContext.of(new HashMap<>())
.withActionInvocation(invocation)
.bind();
}
@Override
@@ -101,7 +101,8 @@ public class ValidationInterceptorPrefixMethodInvocationTest extends XWorkTestCa
EasyMock.replay(action);
EasyMock.replay(proxy);
ActionContext context = ActionContext.of(new HashMap<>()).bind();
context.setActionInvocation(invocation);
ActionContext.of(new HashMap<>())
.withActionInvocation(invocation)
.bind();
}
}
@@ -63,8 +63,9 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().getValueStack().push(action);
ActionContext.getContext()
.withActionInvocation((ActionInvocation) mockActionInvocation.proxy())
.getValueStack().push(action);
String message = action.getText("barObj.title");
assertEquals("Title:", message);
@@ -92,7 +93,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().getValueStack().push(action);
ActionContext.getContext().getValueStack().push(action.getModel());
@@ -112,8 +113,9 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().getValueStack().push(action);
ActionContext.getContext()
.withActionInvocation((ActionInvocation) mockActionInvocation.proxy())
.getValueStack().push(action);
String message = action.getText("bean.name");
String foundBean2 = action.getText("bean2.name");
@@ -163,7 +165,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("hashCode", 0);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().getValueStack().push(action);
ActionContext.getContext().getValueStack().push(action.getModel());
@@ -175,7 +177,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Action action = new ModelDrivenAction2();
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInvocation.proxy());
String message = localizedTextProvider.findText(ModelDrivenAction2.class, "test.foo", Locale.getDefault());
assertEquals("Foo!", message);
@@ -186,7 +188,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
Mock mockActionInvocation = new Mock(ActionInvocation.class);
mockActionInvocation.expectAndReturn("getAction", action);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInvocation.proxy());
String message = localizedTextProvider.findText(ModelDrivenAction2.class, "package.properties", Locale.getDefault());
assertEquals("It works!", message);
@@ -82,7 +82,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
tpf = container.getInstance(TextProviderFactory.class);
}
@@ -140,7 +140,7 @@ public class ExpressionValidatorTest extends XWorkTestCase {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
tpf = container.getInstance(TextProviderFactory.class);
}
@@ -88,7 +88,7 @@ public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTes
ValueStack stack = ActionContext.getContext().getValueStack();
MockActionInvocation invocation = new MockActionInvocation();
invocation.setStack(stack);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
String[] conversionErrorValue = new String[] { "some value" };
Map<String, ConversionData> conversionErrors = ActionContext.getContext().getConversionErrors();
@@ -218,7 +218,7 @@ public class StringValidatorTest extends XWorkTestCase {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
tpf = container.getInstance(TextProviderFactory.class);
}
@@ -61,8 +61,7 @@ public class VisitorFieldValidatorModelTest extends XWorkTestCase {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
}
public void testModelFieldErrorsAddedWithoutFieldPrefix() throws Exception {
@@ -69,7 +69,7 @@ public class VisitorFieldValidatorTest extends XWorkTestCase {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
}
public void testArrayValidation() throws Exception {
@@ -110,6 +110,6 @@ public class FormTest extends AbstractUITagTest {
((DefaultActionMapper) container.getInstance(ActionMapper.class)).setAllowDynamicMethodCalls("true");
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
}
}
@@ -368,7 +368,7 @@ public class DispatcherTest extends StrutsInternalTestCase {
Dispatcher du = initDispatcher(Collections.<String, String>emptyMap());
MockActionInvocation mai = new MockActionInvocation();
ActionContext.getContext().setActionInvocation(mai);
ActionContext.getContext().withActionInvocation(mai);
MockActionProxy actionProxy = new MockActionProxy();
actionProxy.setInvocation(mai);
@@ -45,7 +45,7 @@ public class AnnotationValidationInterceptorTest extends StrutsInternalTestCase
mockActionInvocation.matchAndReturn("getAction", test);
mockActionInvocation.expect("invoke");
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInvocation.proxy());
}
public void testShouldNotSkip() throws Exception {
@@ -188,7 +188,7 @@ public class ActionTagTest extends AbstractTagTest {
tag.setNamespace("");
tag.setName("testActionTagAction");
tag.setExecuteResult(true);
ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInv.proxy());
ActionContext.getContext().withActionInvocation((ActionInvocation) mockActionInv.proxy());
ActionInvocation oldInvocation = ActionContext.getContext().getActionInvocation();
assertNotNull(oldInvocation);
@@ -199,7 +199,7 @@ public class ActionTagTest extends AbstractTagTest {
ActionComponent component = (ActionComponent) tag.getComponent();
tag.doEndTag();
assertTrue(oldInvocation == ActionContext.getContext().getActionInvocation());
assertSame(oldInvocation, ActionContext.getContext().getActionInvocation());
}
public void testIngoreContextParamsFalse() throws Exception {
@@ -563,7 +563,7 @@ public class URLTagTest extends AbstractUITagTest {
.bind();
// Make sure we have an action invocation available
ActionContext.getContext().setActionInvocation(new DefaultActionInvocation(null, true));
ActionContext.getContext().withActionInvocation(new DefaultActionInvocation(null, true));
DefaultActionProxyFactory apFactory = new DefaultActionProxyFactory();
apFactory.setContainer(container);
ActionProxy ap = apFactory.createActionProxy("/", "hello", null, null);
@@ -354,7 +354,7 @@ public class FormTagTest extends AbstractUITagTest {
EasyMock.replay(invocation);
EasyMock.replay(proxy);
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
}
/**
@@ -89,8 +89,9 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
@Override
public void setUp() throws Exception {
super.setUp();
ActionContext context = ActionContext.of(new HashMap<>()).bind();
context.setContainer(new DummyContainer());
ActionContext.of(new HashMap<>())
.withContainer(new DummyContainer())
.bind();
}
public void testActionPackages() throws MalformedURLException {
@@ -197,7 +197,7 @@ public class JSONValidationInterceptorTest extends StrutsTestCase {
context.put(StrutsStatics.SERVLET_CONTEXT, servletContext);
invocation = new MockActionInvocation();
ActionContext.getContext().setActionInvocation(invocation);
ActionContext.getContext().withActionInvocation(invocation);
invocation.setAction(action);
invocation.setInvocationContext(context);
MockActionProxy proxy = new MockActionProxy();
@@ -100,7 +100,7 @@ public abstract class OldDecorator2NewStrutsDecorator extends BaseWebAppDecorato
// put in a dummy ActionSupport so basic functionality still works
ActionSupport action = new ActionSupport();
vs.push(action);
ctx.setActionInvocation(new DummyActionInvocation(action));
ctx.withActionInvocation(new DummyActionInvocation(action));
}
}