com.opensymphony.xwork2.config.entities.ActionConfig 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.
The newest version!
/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.config.entities;
import com.opensymphony.xwork2.util.location.Located;
import com.opensymphony.xwork2.util.location.Location;
import java.io.Serializable;
import java.util.*;
import org.apache.commons.lang.StringUtils;
/**
* Contains everything needed to configure and execute an action:
*
* - methodName - the method name to execute on the action. If this is null, the Action will be cast to the Action
* Interface and the execute() method called
* - clazz - the class name for the action
* - params - the params to be set for this action just before execution
* - results - the result map {String -> View class}
* - resultParameters - params for results {String -> Map}
* - typeConverter - the Ognl TypeConverter to use when getting/setting properties
*
*
* @author Mike
* @author Rainer Hermanns
* @version $Revision: 1947 $
*/
public class ActionConfig extends Located implements Serializable {
public static final String WILDCARD = "*";
protected List interceptors; // a list of interceptorMapping Objects eg. List
protected Map params;
protected Map results;
protected List exceptionMappings;
protected String className;
protected String methodName;
protected String packageName;
protected String name;
protected Set allowedMethods;
protected ActionConfig(String packageName, String name, String className) {
this.packageName = packageName;
this.name = name;
this.className = className;
params = new LinkedHashMap();
results = new LinkedHashMap();
interceptors = new ArrayList();
exceptionMappings = new ArrayList();
allowedMethods = new HashSet();
allowedMethods.add(WILDCARD);
}
/**
* Clones an ActionConfig, copying data into new maps and lists
* @param orig The ActionConfig to clone
* @Since 2.1
*/
protected ActionConfig(ActionConfig orig) {
this.name = orig.name;
this.className = orig.className;
this.methodName = orig.methodName;
this.packageName = orig.packageName;
this.params = new LinkedHashMap(orig.params);
this.interceptors = new ArrayList(orig.interceptors);
this.results = new LinkedHashMap(orig.results);
this.exceptionMappings = new ArrayList(orig.exceptionMappings);
this.allowedMethods = new HashSet(orig.allowedMethods);
}
public String getName() {
return name;
}
public String getClassName() {
return className;
}
public List getExceptionMappings() {
return exceptionMappings;
}
public List getInterceptors() {
return interceptors;
}
public Set getAllowedMethods() {
return allowedMethods;
}
/**
* Returns name of the action method
*
* @return name of the method to execute
*/
public String getMethodName() {
return methodName;
}
/**
* @return Returns the packageName.
*/
public String getPackageName() {
return packageName;
}
public Map getParams() {
return params;
}
public Map getResults() {
return results;
}
public boolean isAllowedMethod(String method) {
if (allowedMethods.size() == 1 && WILDCARD.equals(allowedMethods.iterator().next())) {
return true;
} else {
return allowedMethods.contains(method);
}
}
@Override public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ActionConfig)) {
return false;
}
final ActionConfig actionConfig = (ActionConfig) o;
if ((className != null) ? (!className.equals(actionConfig.className)) : (actionConfig.className != null)) {
return false;
}
if ((name != null) ? (!name.equals(actionConfig.name)) : (actionConfig.name != null)) {
return false;
}
if ((interceptors != null) ? (!interceptors.equals(actionConfig.interceptors)) : (actionConfig.interceptors != null))
{
return false;
}
if ((methodName != null) ? (!methodName.equals(actionConfig.methodName)) : (actionConfig.methodName != null)) {
return false;
}
if ((params != null) ? (!params.equals(actionConfig.params)) : (actionConfig.params != null)) {
return false;
}
if ((results != null) ? (!results.equals(actionConfig.results)) : (actionConfig.results != null)) {
return false;
}
if ((allowedMethods != null) ? (!allowedMethods.equals(actionConfig.allowedMethods)) : (actionConfig.allowedMethods != null)) {
return false;
}
return true;
}
@Override public int hashCode() {
int result;
result = (interceptors != null ? interceptors.hashCode() : 0);
result = 31 * result + (params != null ? params.hashCode() : 0);
result = 31 * result + (results != null ? results.hashCode() : 0);
result = 31 * result + (exceptionMappings != null ? exceptionMappings.hashCode() : 0);
result = 31 * result + (className != null ? className.hashCode() : 0);
result = 31 * result + (methodName != null ? methodName.hashCode() : 0);
result = 31 * result + (packageName != null ? packageName.hashCode() : 0);
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (allowedMethods != null ? allowedMethods.hashCode() : 0);
return result;
}
@Override public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{ActionConfig ");
sb.append(name).append(" (");
sb.append(className);
if (methodName != null) {
sb.append(".").append(methodName).append("()");
}
sb.append(")");
sb.append(" - ").append(location);
sb.append("}");
return sb.toString();
}
/**
* The builder for this object. An instance of this object is the only way to construct a new instance. The
* purpose is to enforce the immutability of the object. The methods are structured in a way to support chaining.
* After setting any values you need, call the {@link #build()} method to create the object.
*/
public static class Builder implements InterceptorListHolder{
private ActionConfig target;
public Builder(ActionConfig toClone) {
target = new ActionConfig(toClone);
}
public Builder(String packageName, String name, String className) {
target = new ActionConfig(packageName, name, className);
}
public Builder packageName(String name) {
target.packageName = name;
return this;
}
public Builder name(String name) {
target.name = name;
return this;
}
public Builder className(String name) {
target.className = name;
return this;
}
public Builder defaultClassName(String name) {
if (StringUtils.isEmpty(target.className)) {
target.className = name;
}
return this;
}
public Builder methodName(String method) {
target.methodName = method;
return this;
}
public Builder addExceptionMapping(ExceptionMappingConfig exceptionMapping) {
target.exceptionMappings.add(exceptionMapping);
return this;
}
public Builder addExceptionMappings(Collection extends ExceptionMappingConfig> mappings) {
target.exceptionMappings.addAll(mappings);
return this;
}
public Builder exceptionMappings(Collection extends ExceptionMappingConfig> mappings) {
target.exceptionMappings.clear();
target.exceptionMappings.addAll(mappings);
return this;
}
public Builder addInterceptor(InterceptorMapping interceptor) {
target.interceptors.add(interceptor);
return this;
}
public Builder addInterceptors(List interceptors) {
target.interceptors.addAll(interceptors);
return this;
}
public Builder interceptors(List interceptors) {
target.interceptors.clear();
target.interceptors.addAll(interceptors);
return this;
}
public Builder addParam(String name, String value) {
target.params.put(name, value);
return this;
}
public Builder addParams(Map params) {
target.params.putAll(params);
return this;
}
public Builder addResultConfig(ResultConfig resultConfig) {
target.results.put(resultConfig.getName(), resultConfig);
return this;
}
public Builder addResultConfigs(Collection configs) {
for (ResultConfig rc : configs) {
target.results.put(rc.getName(), rc);
}
return this;
}
public Builder addResultConfigs(Map configs) {
target.results.putAll(configs);
return this;
}
public Builder addAllowedMethod(String methodName) {
target.allowedMethods.add(methodName);
return this;
}
public Builder addAllowedMethod(Collection methods) {
target.allowedMethods.addAll(methods);
return this;
}
public Builder location(Location loc) {
target.location = loc;
return this;
}
public ActionConfig build() {
target.params = Collections.unmodifiableMap(target.params);
target.results = Collections.unmodifiableMap(target.results);
target.interceptors = Collections.unmodifiableList(target.interceptors);
target.exceptionMappings = Collections.unmodifiableList(target.exceptionMappings);
target.allowedMethods = Collections.unmodifiableSet(target.allowedMethods);
ActionConfig result = target;
target = new ActionConfig(target);
return result;
}
}
}