All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opensymphony.xwork2.interceptor.ChainingInterceptor Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 2.1.3
Show newest version
/*
 * 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