![JAR search and dependency download from the Maven repository](/logo.png)
com.opensymphony.xwork2.interceptor.ChainingInterceptor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xwork Show documentation
Show all versions of xwork Show documentation
XWork is an command-pattern framework that is used to power WebWork
as well as other applications. XWork provides an Inversion of Control
container, a powerful expression language, data type conversion,
validation, and pluggable configuration.
/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Unchainable;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.OgnlUtil;
import com.opensymphony.xwork2.util.ValueStack;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
*
* An interceptor that copies all the properties of every object in the value stack to the currently executing object,
* except for any object that implements {@link Unchainable}. A collection of optional includes and
* excludes may be provided to control how and which parameters are copied. Only includes or excludes may be
* specified. Specifying both results in undefined behavior. See the javadocs for {@link OgnlUtil#copy(Object, Object,
* java.util.Map, java.util.Collection, java.util.Collection)} for more information.
*
* It is important to remember that this interceptor does nothing if there are no objects already on the stack.
* This means two things: One, you can safely apply it to all your actions without any worry of adverse affects. Two, it
* is up to you to ensure an object exists in the stack prior to invoking this action. The most typical way this is done
* is through the use of the chain result type, which combines with this interceptor to make up the action
* chaining feature.
*
*
*
* Interceptor parameters:
*
*
*
*
*
* - excludes (optional) - the list of parameter names to exclude from copying (all others will be included).
*
* - includes (optional) - the list of parameter names to include when copying (all others will be excluded).
*
*
*
*
*
* Extending the interceptor:
*
*
*
*
*
* There are no known extension points to this interceptor.
*
*
*
* Example code:
*
*
*
*
* <action name="someAction" class="com.examples.SomeAction">
* <interceptor-ref name="basicStack"/>
* <result name="success" type="chain">otherAction</result>
* </action>
*
* <action name="otherAction" class="com.examples.OtherAction">
* <interceptor-ref name="chain"/>
* <interceptor-ref name="basicStack"/>
* <result name="success">good_result.ftl</result>
* </action>
*
*
*
*
* @author $Author: mrdon $
* @author tm_jee ( tm_jee(at)yahoo.co.uk )
* @version $Revision: 1142 $
*/
public class ChainingInterceptor extends AbstractInterceptor {
private static final Log _log = LogFactory.getLog(ChainingInterceptor.class);
Collection excludes;
Collection includes;
public String intercept(ActionInvocation invocation) throws Exception {
ValueStack stack = invocation.getStack();
CompoundRoot root = stack.getRoot();
if (root.size() > 1) {
List list = new ArrayList(root);
list.remove(0);
Collections.reverse(list);
Map ctxMap = invocation.getInvocationContext().getContextMap();
Iterator iterator = list.iterator();
int index = 1; // starts with 1, 0 has been removed
while (iterator.hasNext()) {
index = index + 1;
Object o = iterator.next();
if (o != null) {
if (!(o instanceof Unchainable)) {
OgnlUtil.copy(o, invocation.getAction(), ctxMap, excludes, includes);
}
}
else {
_log.warn("compound root element at index "+index+" is null");
}
}
}
return invocation.invoke();
}
public Collection getExcludes() {
return excludes;
}
public void setExcludes(Collection excludes) {
this.excludes = excludes;
}
public Collection getIncludes() {
return includes;
}
public void setIncludes(Collection includes) {
this.includes = includes;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy