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.
      */

Reply via email to