This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch kusal-depr-apis in repository https://gitbox.apache.org/repos/asf/struts.git
commit fc009fd5401cdaf22a3de3e402c564cf3b0dd02c Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Thu Oct 17 13:13:28 2024 +1100 WW-3714 Deprecate and migrate ActionContext --- .../com/opensymphony/xwork2/ActionContext.java | 462 ++++----------------- .../apache/struts2}/ActionContext.java | 12 +- 2 files changed, 95 insertions(+), 379 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionContext.java b/core/src/main/java/com/opensymphony/xwork2/ActionContext.java index fb7b0abcb..d2f78e87a 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionContext.java +++ b/core/src/main/java/com/opensymphony/xwork2/ActionContext.java @@ -21,8 +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 org.apache.struts2.StrutsException; -import org.apache.struts2.StrutsStatics; import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.mapper.ActionMapping; @@ -30,515 +28,233 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.PageContext; -import java.io.Serializable; -import java.util.HashMap; import java.util.Locale; import java.util.Map; /** - * <p> - * The ActionContext is the context in which an {@link Action} is executed. Each context is basically a - * container of objects an action needs for execution like the session, parameters, locale, etc. - * </p> + * {@inheritDoc} * - * <p> - * The ActionContext is thread local which means that values stored in the ActionContext are - * unique per thread. See the {@link ThreadLocal} class for more information. The benefit of - * this is you don't need to worry about a user specific action context, you just get it: - * </p> - * - * <code>ActionContext context = ActionContext.getContext();</code> - * - * <p> - * Finally, because of the thread local usage you don't need to worry about making your actions thread safe. - * </p> - * - * @author Patrick Lightbody - * @author Bill Lynch (docs) + * @deprecated since 6.7.0, use {@link org.apache.struts2.ActionContext} instead. */ -public class ActionContext implements Serializable { - - private static final ThreadLocal<ActionContext> actionContext = new ThreadLocal<>(); - - /** - * Constant for the name of the action being executed. - */ - private static final String ACTION_NAME = "org.apache.struts2.ActionContext.name"; - - /** - * Constant for the {@link com.opensymphony.xwork2.util.ValueStack OGNL value stack}. - */ - private static final String VALUE_STACK = ValueStack.VALUE_STACK; - - /** - * Constant for the action's session. - */ - private static final String SESSION = "org.apache.struts2.ActionContext.session"; - - /** - * Constant for the action's application context. - */ - private static final String APPLICATION = "org.apache.struts2.ActionContext.application"; - - /** - * Constant for the action's parameters. - */ - private static final String PARAMETERS = "org.apache.struts2.ActionContext.parameters"; - - /** - * Constant for the action's locale. - */ - private static final String LOCALE = "org.apache.struts2.ActionContext.locale"; - - /** - * Constant for the action's {@link com.opensymphony.xwork2.ActionInvocation invocation} context. - */ - private static final String ACTION_INVOCATION = "org.apache.struts2.ActionContext.actionInvocation"; - - /** - * Constant for the map of type conversion errors. - */ - private static final String CONVERSION_ERRORS = "org.apache.struts2.ActionContext.conversionErrors"; - - /** - * Constant for the container - */ - private static final String CONTAINER = "org.apache.struts2.ActionContext.container"; - - private final Map<String, Object> context; - - /** - * Creates a new ActionContext initialized with another context. - * - * @param context a context map. - */ - protected ActionContext(Map<String, Object> context) { - this.context = context; - } - - /** - * Creates a new ActionContext based on passed in Map - * - * @param context a map with context values - * @return new ActionContext - */ +@Deprecated +public class ActionContext extends org.apache.struts2.ActionContext { + + private ActionContext(org.apache.struts2.ActionContext actualContext) { + super(actualContext.getContextMap()); + } + public static ActionContext of(Map<String, Object> context) { - if (context == null) { - throw new IllegalArgumentException("Context cannot be null!"); - } - return new ActionContext(context); + return new ActionContext(org.apache.struts2.ActionContext.of(context)); } - /** - * Creates a new ActionContext based on empty Map - * - * @return new ActionContext - */ public static ActionContext of() { - return of(new HashMap<>()); + return new ActionContext(org.apache.struts2.ActionContext.of()); } - /** - * Binds the provided context with the current thread - * - * @param actionContext context to bind to the thread - * @return context which was bound to the thread - */ public static ActionContext bind(ActionContext actionContext) { - ActionContext.setContext(actionContext); - return ActionContext.getContext(); + return new ActionContext(org.apache.struts2.ActionContext.bind(actionContext)); } public static boolean containsValueStack(Map<String, Object> context) { - return context != null && context.containsKey(VALUE_STACK); - } - - /** - * Binds this context with the current thread - * - * @return this context which was bound to the thread - */ - public ActionContext bind() { - ActionContext.setContext(this); - return ActionContext.getContext(); + return org.apache.struts2.ActionContext.containsValueStack(context); } - /** - * Wipes out current ActionContext, use wisely! - */ public static void clear() { - actionContext.remove(); + org.apache.struts2.ActionContext.clear(); } - /** - * Sets the action context for the current thread. - * - * @param context the action context. - */ - private static void setContext(ActionContext context) { - actionContext.set(context); + public static ActionContext getContext() { + return new ActionContext(org.apache.struts2.ActionContext.getContext()); } - /** - * Returns the ActionContext specific to the current thread. - * - * @return the ActionContext for the current thread, is never <tt>null</tt>. - */ - public static ActionContext getContext() { - return actionContext.get(); + @Override + public ActionContext bind() { + return new ActionContext(org.apache.struts2.ActionContext.bind(this)); } - /** - * Sets the action invocation (the execution state). - * - * @param actionInvocation the action execution state. - */ + @Override public ActionContext withActionInvocation(ActionInvocation actionInvocation) { - put(ACTION_INVOCATION, actionInvocation); + super.withActionInvocation(actionInvocation); return this; } - /** - * Gets the action invocation (the execution state). - * - * @return the action invocation (the execution state). - */ + @Override public ActionInvocation getActionInvocation() { - return (ActionInvocation) get(ACTION_INVOCATION); + return super.getActionInvocation(); } - /** - * Sets the action's application context. - * - * @param application the action's application context. - */ + @Override public ActionContext withApplication(Map<String, Object> application) { - put(APPLICATION, application); + super.withApplication(application); return this; } - /** - * Returns a Map of the ServletContext when in a servlet environment or a generic application level Map otherwise. - * - * @return a Map of ServletContext or generic application level Map - */ - @SuppressWarnings("unchecked") + @Override public Map<String, Object> getApplication() { - return (Map<String, Object>) get(APPLICATION); + return super.getApplication(); } - /** - * Gets the context map. - * - * @return the context map. - */ + @Override public Map<String, Object> getContextMap() { - return context; + return super.getContextMap(); } - /** - * Sets conversion errors which occurred when executing the action. - * - * @param conversionErrors a Map of errors which occurred when executing the action. - */ + @Override public ActionContext withConversionErrors(Map<String, ConversionData> conversionErrors) { - put(CONVERSION_ERRORS, conversionErrors); + super.withConversionErrors(conversionErrors); return this; } - /** - * Gets the map of conversion errors which occurred when executing the action. - * - * @return the map of conversion errors which occurred when executing the action or an empty map if - * there were no errors. - */ - @SuppressWarnings("unchecked") + @Override public Map<String, ConversionData> getConversionErrors() { - Map<String, ConversionData> errors = (Map<String, ConversionData>) get(CONVERSION_ERRORS); - - if (errors == null) { - errors = withConversionErrors(new HashMap<>()).getConversionErrors(); - } - - return errors; + return super.getConversionErrors(); } - /** - * Sets the Locale for the current action. - * - * @param locale the Locale for the current action. - */ + @Override public ActionContext withLocale(Locale locale) { - put(LOCALE, locale); + super.withLocale(locale); return this; } - /** - * Gets the Locale of the current action. If no locale was ever specified the platform's - * {@link java.util.Locale#getDefault() default locale} is used. - * - * @return the Locale of the current action. - */ + @Override public Locale getLocale() { - Locale locale = (Locale) get(LOCALE); - - if (locale == null) { - locale = Locale.getDefault(); - withLocale(locale); - } - - return locale; + return super.getLocale(); } - /** - * Sets the name of the current Action in the ActionContext. - * - * @param actionName the name of the current action. - */ + @Override public ActionContext withActionName(String actionName) { - put(ACTION_NAME, actionName); + super.withActionName(actionName); return this; } - /** - * Gets the name of the current Action. - * - * @return the name of the current action. - */ + @Override public String getActionName() { - return (String) get(ACTION_NAME); + return super.getActionName(); } - /** - * Sets the action parameters. - * - * @param parameters the parameters for the current action. - */ + @Override public ActionContext withParameters(HttpParameters parameters) { - put(PARAMETERS, parameters); + super.withParameters(parameters); return this; } - /** - * Returns a Map of the HttpServletRequest parameters when in a servlet environment or a generic Map of - * parameters otherwise. - * - * @return a Map of HttpServletRequest parameters or a multipart map when in a servlet environment, or a - * generic Map of parameters otherwise. - */ + @Override public HttpParameters getParameters() { - return (HttpParameters) get(PARAMETERS); + return super.getParameters(); } - /** - * Sets a map of action session values. - * - * @param session the session values. - */ + @Override public ActionContext withSession(Map<String, Object> session) { - put(SESSION, session); + super.withSession(session); return this; } - /** - * Gets the Map of HttpSession values when in a servlet environment or a generic session map otherwise. - * - * @return the Map of HttpSession values when in a servlet environment or a generic session map otherwise. - */ - @SuppressWarnings("unchecked") + @Override public Map<String, Object> getSession() { - return (Map<String, Object>) get(SESSION); + return super.getSession(); } - /** - * Sets the OGNL value stack. - * - * @param valueStack the OGNL value stack. - */ + @Override public ActionContext withValueStack(ValueStack valueStack) { - put(VALUE_STACK, valueStack); + super.withValueStack(valueStack); return this; } - /** - * Gets the OGNL value stack. - * - * @return the OGNL value stack. - */ + @Override public ValueStack getValueStack() { - return (ValueStack) get(VALUE_STACK); + return super.getValueStack(); } - /** - * Gets the container for this request - * - * @param container The container - */ + @Override public ActionContext withContainer(Container container) { - put(CONTAINER, container); + super.withContainer(container); return this; } - /** - * Sets the container for this request - * - * @return The container - */ + @Override public Container getContainer() { - return (Container) get(CONTAINER); + return super.getContainer(); } + @Override public <T> T getInstance(Class<T> type) { - Container cont = getContainer(); - if (cont != null) { - return cont.getInstance(type); - } else { - throw new StrutsException("Cannot find an initialized container for this request."); - } - } - - /** - * Returns a value that is stored in the current ActionContext by doing a lookup using the value's key. - * - * @param key the key used to find the value. - * @return the value that was found using the key or <tt>null</tt> if the key was not found. - */ + return super.getInstance(type); + } + + @Override public Object get(String key) { - return context.get(key); + return super.get(key); } - /** - * Stores a value in the current ActionContext. The value can be looked up using the key. - * - * @param key the key of the value. - * @param value the value to be stored. - */ + @Override public void put(String key, Object value) { - context.put(key, value); + super.put(key, value); } - /** - * Gets ServletContext associated with current action - * - * @return current ServletContext - */ + @Override public ServletContext getServletContext() { - return (ServletContext) get(StrutsStatics.SERVLET_CONTEXT); + return super.getServletContext(); } - /** - * Assigns ServletContext to action context - * - * @param servletContext associated with current request - * @return ActionContext - */ + @Override public ActionContext withServletContext(ServletContext servletContext) { - put(StrutsStatics.SERVLET_CONTEXT, servletContext); + super.withServletContext(servletContext); return this; } - /** - * Gets ServletRequest associated with current action - * - * @return current ServletRequest - */ + @Override public HttpServletRequest getServletRequest() { - return (HttpServletRequest) get(StrutsStatics.HTTP_REQUEST); + return super.getServletRequest(); } - /** - * Assigns ServletRequest to action context - * - * @param request associated with current request - * @return ActionContext - */ + @Override public ActionContext withServletRequest(HttpServletRequest request) { - put(StrutsStatics.HTTP_REQUEST, request); + super.withServletRequest(request); return this; } - /** - * Gets ServletResponse associated with current action - * - * @return current ServletResponse - */ + @Override public HttpServletResponse getServletResponse() { - return (HttpServletResponse) get(StrutsStatics.HTTP_RESPONSE); + return super.getServletResponse(); } - /** - * Assigns ServletResponse to action context - * - * @param response associated with current request - * @return ActionContext - */ + @Override public ActionContext withServletResponse(HttpServletResponse response) { - put(StrutsStatics.HTTP_RESPONSE, response); + super.withServletResponse(response); return this; } - /** - * Gets PageContext associated with current action - * - * @return current PageContext - */ + @Override public PageContext getPageContext() { - return (PageContext) get(StrutsStatics.PAGE_CONTEXT); + return super.getPageContext(); } - /** - * Assigns PageContext to action context - * - * @param pageContext associated with current request - * @return ActionContext - */ + @Override public ActionContext withPageContext(PageContext pageContext) { - put(StrutsStatics.PAGE_CONTEXT, pageContext); + super.withPageContext(pageContext); return this; } - /** - * Gets ActionMapping associated with current action - * - * @return current ActionMapping - */ + @Override public ActionMapping getActionMapping() { - return (ActionMapping) get(StrutsStatics.ACTION_MAPPING); + return super.getActionMapping(); } - /** - * Assigns ActionMapping to action context - * - * @param actionMapping associated with current request - * @return ActionContext - */ + @Override public ActionContext withActionMapping(ActionMapping actionMapping) { - put(StrutsStatics.ACTION_MAPPING, actionMapping); + super.withActionMapping(actionMapping); return this; } - /** - * Assigns an extra context map to action context - * - * @param extraContext to add to the current action context - * @return ActionContext - */ + @Override public ActionContext withExtraContext(Map<String, Object> extraContext) { - if (extraContext != null) { - context.putAll(extraContext); - } + super.withExtraContext(extraContext); return this; } - /** - * Adds arbitrary key to action context - * - * @param key a string - * @param value an object - * @return ActionContext - */ + @Override public ActionContext with(String key, Object value) { - put(key, value); + super.with(key, value); return this; } } diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionContext.java b/core/src/main/java/org/apache/struts2/ActionContext.java similarity index 97% copy from core/src/main/java/com/opensymphony/xwork2/ActionContext.java copy to core/src/main/java/org/apache/struts2/ActionContext.java index fb7b0abcb..33f935e79 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionContext.java +++ b/core/src/main/java/org/apache/struts2/ActionContext.java @@ -16,13 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package com.opensymphony.xwork2; +package org.apache.struts2; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.conversion.impl.ConversionData; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.util.ValueStack; -import org.apache.struts2.StrutsException; -import org.apache.struts2.StrutsStatics; import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.mapper.ActionMapping; @@ -66,7 +66,7 @@ public class ActionContext implements Serializable { private static final String ACTION_NAME = "org.apache.struts2.ActionContext.name"; /** - * Constant for the {@link com.opensymphony.xwork2.util.ValueStack OGNL value stack}. + * Constant for the {@link ValueStack OGNL value stack}. */ private static final String VALUE_STACK = ValueStack.VALUE_STACK; @@ -91,7 +91,7 @@ public class ActionContext implements Serializable { private static final String LOCALE = "org.apache.struts2.ActionContext.locale"; /** - * Constant for the action's {@link com.opensymphony.xwork2.ActionInvocation invocation} context. + * Constant for the action's {@link ActionInvocation invocation} context. */ private static final String ACTION_INVOCATION = "org.apache.struts2.ActionContext.actionInvocation"; @@ -275,7 +275,7 @@ public class ActionContext implements Serializable { /** * Gets the Locale of the current action. If no locale was ever specified the platform's - * {@link java.util.Locale#getDefault() default locale} is used. + * {@link Locale#getDefault() default locale} is used. * * @return the Locale of the current action. */