Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WW-3714 Deprecate and repackage common APIs part 3 #1082

Merged
merged 2 commits into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 28 additions & 19 deletions core/src/main/java/com/opensymphony/xwork2/ActionEventListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,33 @@
import com.opensymphony.xwork2.util.ValueStack;

/**
* Provides hooks for handling key action events
* {@inheritDoc}
*
* @deprecated since 6.7.0, use {@link org.apache.struts2.ActionEventListener} instead.
*/
public interface ActionEventListener {
/**
* Called after an action has been created.
*
* @param action The action
* @param stack The current value stack
* @return The action to use
*/
public Object prepare(Object action, ValueStack stack);

/**
* Called when an exception is thrown by the action
*
* @param t The exception/error that was thrown
* @param stack The current value stack
* @return A result code to execute, can be null
*/
public String handleException(Throwable t, ValueStack stack);
@Deprecated
public interface ActionEventListener extends org.apache.struts2.ActionEventListener {

static ActionEventListener adapt(org.apache.struts2.ActionEventListener actualListener) {
return actualListener != null ? new LegacyAdapter(actualListener) : null;
}

class LegacyAdapter implements ActionEventListener {

private final org.apache.struts2.ActionEventListener adaptee;

private LegacyAdapter(org.apache.struts2.ActionEventListener adaptee) {
this.adaptee = adaptee;
}

@Override
public Object prepare(Object action, ValueStack stack) {
return adaptee.prepare(action, stack);
}

@Override
public String handleException(Throwable t, ValueStack stack) {
return adaptee.handleException(t, stack);
}
}
}
19 changes: 18 additions & 1 deletion core/src/main/java/com/opensymphony/xwork2/ActionInvocation.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,30 @@ public interface ActionInvocation extends org.apache.struts2.ActionInvocation {
@Override
Result getResult() throws Exception;

@Override
ActionProxy getProxy();

@Override
default void addPreResultListener(org.apache.struts2.interceptor.PreResultListener listener) {
addPreResultListener(PreResultListener.adapt(listener));
}

void addPreResultListener(PreResultListener listener);

@Override
default void setActionEventListener(org.apache.struts2.ActionEventListener listener) {
setActionEventListener(ActionEventListener.adapt(listener));
}

void setActionEventListener(ActionEventListener listener);

@Override
default void init(org.apache.struts2.ActionProxy proxy) {
init(ActionProxy.adapt(proxy));
}

void init(ActionProxy proxy);

static ActionInvocation adapt(org.apache.struts2.ActionInvocation actualInvocation) {
return actualInvocation != null ? new LegacyAdapter(actualInvocation) : null;
}
Expand Down Expand Up @@ -71,7 +88,7 @@ public ActionContext getInvocationContext() {

@Override
public ActionProxy getProxy() {
return adaptee.getProxy();
return ActionProxy.adapt(adaptee.getProxy());
}

@Override
Expand Down
148 changes: 66 additions & 82 deletions core/src/main/java/com/opensymphony/xwork2/ActionProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,88 +20,72 @@

import com.opensymphony.xwork2.config.entities.ActionConfig;

/**
* ActionProxy is an extra layer between XWork and the action so that different proxies are possible.
*
* <p>
* An example of this would be a remote proxy, where the layer between XWork and the action might be RMI or SOAP.
* </p>
*
* @author Jason Carreira
*/
public interface ActionProxy {

/**
* Gets the Action instance for this Proxy.
*
* @return the Action instance
*/
Object getAction();

/**
* Gets the alias name this ActionProxy is mapped to.
*
* @return the alias name
*/
String getActionName();

/**
* Gets the ActionConfig this ActionProxy is built from.
*
* @return the ActionConfig
*/
ActionConfig getConfig();

/**
* Sets whether this ActionProxy should also execute the Result after executing the Action.
*
* @param executeResult <tt>true</tt> to also execute the Result.
*/
void setExecuteResult(boolean executeResult);

/**
* Gets the status of whether the ActionProxy is set to execute the Result after the Action is executed.
*
* @return the status
*/
boolean getExecuteResult();

/**
* Gets the ActionInvocation associated with this ActionProxy.
*
* @return the ActionInvocation
*/
@Deprecated
public interface ActionProxy extends org.apache.struts2.ActionProxy {

@Override
ActionInvocation getInvocation();

/**
* Gets the namespace the ActionConfig for this ActionProxy is mapped to.
*
* @return the namespace
*/
String getNamespace();

/**
* Execute this ActionProxy. This will set the ActionContext from the ActionInvocation into the ActionContext
* ThreadLocal before invoking the ActionInvocation, then set the old ActionContext back into the ThreadLocal.
*
* @return the result code returned from executing the ActionInvocation
* @throws Exception can be thrown.
* @see ActionInvocation
*/
String execute() throws Exception;

/**
* Gets the method name to execute, or <tt>null</tt> if no method has been specified (meaning <code>execute</code> will be invoked).
*
* @return the method to execute
*/
String getMethod();

/**
* Gets status of the method value's initialization.
*
* @return true if the method returned by getMethod() is not a default initializer value.
*/
boolean isMethodSpecified();

static ActionProxy adapt(org.apache.struts2.ActionProxy actualProxy) {
return actualProxy != null ? new LegacyAdapter(actualProxy) : null;
}

class LegacyAdapter implements ActionProxy {

private final org.apache.struts2.ActionProxy adaptee;

private LegacyAdapter(org.apache.struts2.ActionProxy adaptee) {
this.adaptee = adaptee;
}

@Override
public Object getAction() {
return adaptee.getAction();
}

@Override
public String getActionName() {
return adaptee.getActionName();
}

@Override
public ActionConfig getConfig() {
return adaptee.getConfig();
}

@Override
public void setExecuteResult(boolean executeResult) {
adaptee.setExecuteResult(executeResult);
}

@Override
public boolean getExecuteResult() {
return adaptee.getExecuteResult();
}

@Override
public ActionInvocation getInvocation() {
return ActionInvocation.adapt(adaptee.getInvocation());
}

@Override
public String getNamespace() {
return adaptee.getNamespace();
}

@Override
public String execute() throws Exception {
return adaptee.execute();
}

@Override
public String getMethod() {
return adaptee.getMethod();
}

@Override
public boolean isMethodSpecified() {
return adaptee.isMethodSpecified();
}
}
}
44 changes: 44 additions & 0 deletions core/src/main/java/org/apache/struts2/ActionEventListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2;

import com.opensymphony.xwork2.util.ValueStack;

/**
* Provides hooks for handling key action events
*/
public interface ActionEventListener {
/**
* Called after an action has been created.
*
* @param action The action
* @param stack The current value stack
* @return The action to use
*/
Object prepare(Object action, ValueStack stack);

/**
* Called when an exception is thrown by the action
*
* @param t The exception/error that was thrown
* @param stack The current value stack
* @return A result code to execute, can be null
*/
String handleException(Throwable t, ValueStack stack);
}
4 changes: 1 addition & 3 deletions core/src/main/java/org/apache/struts2/ActionInvocation.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
package org.apache.struts2;

import com.opensymphony.xwork2.ActionChainResult;
import com.opensymphony.xwork2.ActionEventListener;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.util.ValueStack;
import org.apache.struts2.interceptor.PreResultListener;

Expand Down Expand Up @@ -177,6 +175,6 @@ public interface ActionInvocation {
*/
void setActionEventListener(ActionEventListener listener);

void init(ActionProxy proxy) ;
void init(ActionProxy proxy);

}
Loading