You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2015/05/22 12:59:16 UTC
[49/50] struts git commit: Moves deprecated plugins to struts-archive
repo
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
deleted file mode 100644
index 0840e21..0000000
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.PackageProvider;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
-import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.ResolverUtil;
-import com.opensymphony.xwork2.util.ResolverUtil.ClassTest;
-import com.opensymphony.xwork2.util.logging.Logger;
-import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import org.apache.commons.lang3.StringUtils;
-
-import javax.servlet.ServletContext;
-import java.lang.reflect.Modifier;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * ClasspathPackageProvider loads the configuration
- * by scanning the classpath or selected packages for Action classes.
- * <p>
- * This provider is only invoked if one or more action packages are passed to the dispatcher,
- * usually from the web.xml.
- * Configurations are created for objects that either implement Action or have classnames that end with "Action".
- */
-public class ClasspathPackageProvider implements PackageProvider {
-
- /**
- * The default page prefix (or "path").
- * Some applications may place pages under "/WEB-INF" as an extreme security precaution.
- */
- protected static final String DEFAULT_PAGE_PREFIX = "struts.configuration.classpath.defaultPagePrefix";
-
- /**
- * The default page prefix (none).
- */
- private String defaultPagePrefix = "";
-
- /**
- * The default page extension, to use in place of ".jsp".
- */
- protected static final String DEFAULT_PAGE_EXTENSION = "struts.configuration.classpath.defaultPageExtension";
-
- /**
- * The defacto default page extension, usually associated with JavaServer Pages.
- */
- private String defaultPageExtension = ".jsp";
-
- /**
- * A setting to indicate a custom default parent package,
- * to use in place of "struts-default".
- */
- protected static final String DEFAULT_PARENT_PACKAGE = "struts.configuration.classpath.defaultParentPackage";
-
- /**
- * A setting to disable action scanning.
- */
- protected static final String DISABLE_ACTION_SCANNING = "struts.configuration.classpath.disableActionScanning";
-
- /**
- * Name of the framework's default configuration package,
- * that application configuration packages automatically inherit.
- */
- private String defaultParentPackage = "struts-default";
-
- /**
- * The default page prefix (or "path").
- * Some applications may place pages under "/WEB-INF" as an extreme security precaution.
- */
- protected static final String FORCE_LOWER_CASE = "struts.configuration.classpath.forceLowerCase";
-
- /**
- * Whether to use a lowercase letter as the initial letter of an action.
- * If false, actions will retain the initial uppercase letter from the Action class.
- * (<code>view.action</code> (true) versus <code>View.action</code> (false)).
- */
- private boolean forceLowerCase = true;
-
- protected static final String CLASS_SUFFIX = "struts.codebehind.classSuffix";
- /**
- * Default suffix that can be used to indicate POJO "Action" classes.
- */
- protected String classSuffix = "Action";
-
- protected static final String CHECK_IMPLEMENTS_ACTION = "struts.codebehind.checkImplementsAction";
-
- /**
- * When testing a class, check that it implements Action
- */
- protected boolean checkImplementsAction = true;
-
- protected static final String CHECK_ANNOTATION = "struts.codebehind.checkAnnotation";
-
- /**
- * When testing a class, check that it has an @Action annotation
- */
- protected boolean checkAnnotation = true;
-
- /**
- * Helper class to scan class path for server pages.
- */
- private PageLocator pageLocator = new ClasspathPageLocator();
-
- /**
- * Flag to indicate the packages have been loaded.
- *
- * @see #loadPackages
- * @see #needsReload
- */
- private boolean initialized = false;
-
- private boolean disableActionScanning = false;
-
- private PackageLoader packageLoader;
-
- /**
- * Logging instance for this class.
- */
- private static final Logger LOG = LoggerFactory.getLogger(ClasspathPackageProvider.class);
-
- /**
- * The XWork Configuration for this application.
- *
- * @see #init
- */
- private Configuration configuration;
-
- private String actionPackages;
-
- private ServletContext servletContext;
-
- public ClasspathPackageProvider() {
- }
-
- /**
- * PageLocator defines a locate method that can be used to discover server pages.
- */
- public static interface PageLocator {
- public URL locate(String path);
- }
-
- /**
- * ClasspathPathLocator searches the classpath for server pages.
- */
- public static class ClasspathPageLocator implements PageLocator {
- public URL locate(String path) {
- return ClassLoaderUtil.getResource(path, getClass());
- }
- }
-
- @Inject("actionPackages")
- public void setActionPackages(String packages) {
- this.actionPackages = packages;
- }
-
- public void setServletContext(ServletContext ctx) {
- this.servletContext = ctx;
- }
-
- /**
- * Disables action scanning.
- *
- * @param disableActionScanning True to disable
- */
- @Inject(value=DISABLE_ACTION_SCANNING, required=false)
- public void setDisableActionScanning(String disableActionScanning) {
- this.disableActionScanning = "true".equals(disableActionScanning);
- }
-
- /**
- * Check that the class implements Action
- *
- * @param checkImplementsAction True to check
- */
- @Inject(value=CHECK_IMPLEMENTS_ACTION, required=false)
- public void setCheckImplementsAction(String checkImplementsAction) {
- this.checkImplementsAction = "true".equals(checkImplementsAction);
- }
-
- /**
- * Check that the class has an @Action annotation
- *
- * @param checkImplementsAction True to check
- */
- @Inject(value=CHECK_ANNOTATION, required=false)
- public void setCheckAnnotation(String checkAnnotation) {
- this.checkAnnotation = "true".equals(checkAnnotation);
- }
-
- /**
- * Register a default parent package for the actions.
- *
- * @param defaultParentPackage the new defaultParentPackage
- */
- @Inject(value=DEFAULT_PARENT_PACKAGE, required=false)
- public void setDefaultParentPackage(String defaultParentPackage) {
- this.defaultParentPackage = defaultParentPackage;
- }
-
- /**
- * Register a default page extension to use when locating pages.
- *
- * @param defaultPageExtension the new defaultPageExtension
- */
- @Inject(value=DEFAULT_PAGE_EXTENSION, required=false)
- public void setDefaultPageExtension(String defaultPageExtension) {
- this.defaultPageExtension = defaultPageExtension;
- }
-
- /**
- * Reigster a default page prefix to use when locating pages.
- *
- * @param defaultPagePrefix the defaultPagePrefix to set
- */
- @Inject(value=DEFAULT_PAGE_PREFIX, required=false)
- public void setDefaultPagePrefix(String defaultPagePrefix) {
- this.defaultPagePrefix = defaultPagePrefix;
- }
-
- /**
- * Default suffix that can be used to indicate POJO "Action" classes.
- *
- * @param classSuffix the classSuffix to set
- */
- @Inject(value=CLASS_SUFFIX, required=false)
- public void setClassSuffix(String classSuffix) {
- this.classSuffix = classSuffix;
- }
-
- /**
- * Whether to use a lowercase letter as the initial letter of an action.
- *
- * @param force If false, actions will retain the initial uppercase letter from the Action class.
- * (<code>view.action</code> (true) versus <code>View.action</code> (false)).
- */
- @Inject(value=FORCE_LOWER_CASE, required=false)
- public void setForceLowerCase(String force) {
- this.forceLowerCase = "true".equals(force);
- }
-
- /**
- * Register a PageLocation to use to scan for server pages.
- *
- * @param locator
- */
- public void setPageLocator(PageLocator locator) {
- this.pageLocator = locator;
- }
-
- /**
- * Scan a list of packages for Action classes.
- *
- * This method loads classes that implement the Action interface
- * or have a class name that ends with the letters "Action".
- *
- * @param pkgs A list of packages to load
- * @see #processActionClass
- */
- protected void loadPackages(String[] pkgs) {
-
- packageLoader = new PackageLoader();
- ResolverUtil<Class> resolver = new ResolverUtil<Class>();
- resolver.find(createActionClassTest(), pkgs);
-
- Set<? extends Class<? extends Class>> actionClasses = resolver.getClasses();
- for (Object obj : actionClasses) {
- Class cls = (Class) obj;
- if (!Modifier.isAbstract(cls.getModifiers())) {
- processActionClass(cls, pkgs);
- }
- }
-
- for (PackageConfig config : packageLoader.createPackageConfigs()) {
- configuration.addPackageConfig(config.getName(), config);
- }
- }
-
- protected ClassTest createActionClassTest() {
- return new ClassTest() {
- // Match Action implementations and classes ending with "Action"
- public boolean matches(Class type) {
- // TODO: should also find annotated classes
- return ((checkImplementsAction && Action.class.isAssignableFrom(type)) ||
- type.getSimpleName().endsWith(getClassSuffix()) ||
- (checkAnnotation && type.getAnnotation(org.apache.struts2.config.Action.class) != null));
- }
-
- };
- }
-
- protected String getClassSuffix() {
- return classSuffix;
- }
-
- /**
- * Create a default action mapping for a class instance.
- *
- * The namespace annotation is honored, if found, otherwise
- * the Java package is converted into the namespace
- * by changing the dots (".") to slashes ("/").
- *
- * @param cls Action or POJO instance to process
- * @param pkgs List of packages that were scanned for Actions
- */
- protected void processActionClass(Class<?> cls, String[] pkgs) {
- String name = cls.getName();
- String actionPackage = cls.getPackage().getName();
- String actionNamespace = null;
- String actionName = null;
-
- org.apache.struts2.config.Action actionAnn =
- (org.apache.struts2.config.Action) cls.getAnnotation(org.apache.struts2.config.Action.class);
- if (actionAnn != null) {
- actionName = actionAnn.name();
- if (actionAnn.namespace().equals(org.apache.struts2.config.Action.DEFAULT_NAMESPACE)) {
- actionNamespace = "";
- } else {
- actionNamespace = actionAnn.namespace();
- }
- } else {
- for (String pkg : pkgs) {
- if (name.startsWith(pkg)) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("ClasspathPackageProvider: Processing class "+name);
- }
- name = name.substring(pkg.length() + 1);
-
- actionNamespace = "";
- actionName = name;
- int pos = name.lastIndexOf('.');
- if (pos > -1) {
- actionNamespace = "/" + name.substring(0, pos).replace('.','/');
- actionName = name.substring(pos+1);
- }
- break;
- }
- }
- // Truncate Action suffix if found
- if (actionName.endsWith(getClassSuffix())) {
- actionName = actionName.substring(0, actionName.length() - getClassSuffix().length());
- }
-
- // Force initial letter of action to lowercase, if desired
- if ((forceLowerCase) && (actionName.length() > 1)) {
- int lowerPos = actionName.lastIndexOf('/') + 1;
- StringBuilder sb = new StringBuilder();
- sb.append(actionName.substring(0, lowerPos));
- sb.append(Character.toLowerCase(actionName.charAt(lowerPos)));
- sb.append(actionName.substring(lowerPos + 1));
- actionName = sb.toString();
- }
- }
-
- PackageConfig.Builder pkgConfig = loadPackageConfig(actionNamespace, actionPackage, cls);
-
- // In case the package changed due to namespace annotation processing
- if (!actionPackage.equals(pkgConfig.getName())) {
- actionPackage = pkgConfig.getName();
- }
-
- List<PackageConfig> parents = findAllParentPackages(cls);
- if (parents.size() > 0) {
- pkgConfig.addParents(parents);
-
- // Try to guess the namespace from the first package
- PackageConfig firstParent = parents.get(0);
- if (StringUtils.isEmpty(pkgConfig.getNamespace()) && StringUtils.isNotEmpty(firstParent.getNamespace())) {
- pkgConfig.namespace(firstParent.getNamespace());
- }
- }
-
-
- ResultTypeConfig defaultResultType = packageLoader.getDefaultResultType(pkgConfig);
- ActionConfig actionConfig = new ActionConfig.Builder(actionPackage, actionName, cls.getName())
- .addResultConfigs(new ResultMap<String,ResultConfig>(cls, actionName, defaultResultType))
- .build();
- pkgConfig.addActionConfig(actionName, actionConfig);
- }
-
- /**
- * Finds all parent packages by first looking at the ParentPackage annotation on the package, then the class
- * @param cls The action class
- * @return A list of unique packages to add
- */
- private List<PackageConfig> findAllParentPackages(Class<?> cls) {
-
- List<PackageConfig> parents = new ArrayList<PackageConfig>();
- // Favor parent package annotations from the package
- Set<String> parentNames = new LinkedHashSet<String>();
- ParentPackage annotation = cls.getPackage().getAnnotation(ParentPackage.class);
- if (annotation != null) {
- parentNames.addAll(Arrays.asList(annotation.value()));
- }
- annotation = cls.getAnnotation(ParentPackage.class);
- if (annotation != null) {
- parentNames.addAll(Arrays.asList(annotation.value()));
- }
- if (parentNames.size() > 0) {
- for (String parent : parentNames) {
- PackageConfig parentPkg = configuration.getPackageConfig(parent);
- if (parentPkg == null) {
- throw new ConfigurationException("ClasspathPackageProvider: Unable to locate parent package "+parent, annotation);
- }
- parents.add(parentPkg);
- }
- }
- return parents;
- }
-
- /**
- * Finds or creates the package configuration for an Action class.
- *
- * The namespace annotation is honored, if found,
- * and the namespace is checked for a parent configuration.
- *
- * @param actionNamespace The configuration namespace
- * @param actionPackage The Java package containing our Action classes
- * @param actionClass The Action class instance
- * @return PackageConfig object for the Action class
- */
- protected PackageConfig.Builder loadPackageConfig(String actionNamespace, String actionPackage, Class actionClass) {
- PackageConfig.Builder parent = null;
-
- // Check for the @Namespace annotation
- if (actionClass != null) {
- Namespace ns = (Namespace) actionClass.getAnnotation(Namespace.class);
- if (ns != null) {
- parent = loadPackageConfig(actionNamespace, actionPackage, null);
- actionNamespace = ns.value();
- actionPackage = actionClass.getName();
-
- // See if the namespace has been overridden by the @Action annotation
- } else {
- org.apache.struts2.config.Action actionAnn =
- (org.apache.struts2.config.Action) actionClass.getAnnotation(org.apache.struts2.config.Action.class);
- if (actionAnn != null && !actionAnn.DEFAULT_NAMESPACE.equals(actionAnn.namespace())) {
- // we pass null as the namespace in case the parent package hasn't been loaded yet
- parent = loadPackageConfig(null, actionPackage, null);
- actionPackage = actionClass.getName();
- }
- }
- }
-
-
- PackageConfig.Builder pkgConfig = packageLoader.getPackage(actionPackage);
- if (pkgConfig == null) {
- pkgConfig = new PackageConfig.Builder(actionPackage);
-
- pkgConfig.namespace(actionNamespace);
- if (parent == null) {
- PackageConfig cfg = configuration.getPackageConfig(defaultParentPackage);
- if (cfg != null) {
- pkgConfig.addParent(cfg);
- } else {
- throw new ConfigurationException("ClasspathPackageProvider: Unable to locate default parent package: " +
- defaultParentPackage);
- }
- }
-
- packageLoader.registerPackage(pkgConfig);
-
- // if the parent package was first created by a child, ensure the namespace is correct
- } else if (pkgConfig.getNamespace() == null) {
- pkgConfig.namespace(actionNamespace);
- }
-
- if (parent != null) {
- packageLoader.registerChildToParent(pkgConfig, parent);
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("class:"+actionClass+" parent:"+parent+" current:"+(pkgConfig != null ? pkgConfig.getName() : ""));
- }
-
- return pkgConfig;
- }
-
- /**
- * Default destructor. Override to provide behavior.
- */
- public void destroy() {
-
- }
-
- /**
- * Register this application's configuration.
- *
- * @param config The configuration for this application.
- */
- public void init(Configuration config) {
- this.configuration = config;
- }
-
- /**
- * Clears and loads the list of packages registered at construction.
- *
- * @throws ConfigurationException
- */
- public void loadPackages() throws ConfigurationException {
- if (actionPackages != null && !disableActionScanning) {
- String[] names = actionPackages.split("\\s*[,]\\s*");
- // Initialize the classloader scanner with the configured packages
- if (names.length > 0) {
- setPageLocator(new ServletContextPageLocator(servletContext));
- }
- loadPackages(names);
- }
- initialized = true;
- }
-
- /**
- * Indicates whether the packages have been initialized.
- *
- * @return True if the packages have been initialized
- */
- public boolean needsReload() {
- return !initialized;
- }
-
- /**
- * Creates ResultConfig objects from result annotations,
- * and if a result isn't found, creates it on the fly.
- */
- class ResultMap<K,V> extends HashMap<K,V> {
- private Class actionClass;
- private String actionName;
- private ResultTypeConfig defaultResultType;
-
- public ResultMap(Class actionClass, String actionName, ResultTypeConfig defaultResultType) {
- this.actionClass = actionClass;
- this.actionName = actionName;
- this.defaultResultType = defaultResultType;
-
- // check if any annotations are around
- while (!actionClass.getName().equals(Object.class.getName())) {
- //noinspection unchecked
- Results results = (Results) actionClass.getAnnotation(Results.class);
- if (results != null) {
- // first check here...
- for (int i = 0; i < results.value().length; i++) {
- Result result = results.value()[i];
- ResultConfig config = createResultConfig(result);
- if (!containsKey((K)config.getName())) {
- put((K)config.getName(), (V)config);
- }
- }
- }
-
- // what about a single Result annotation?
- Result result = (Result) actionClass.getAnnotation(Result.class);
- if (result != null) {
- ResultConfig config = createResultConfig(result);
- if (!containsKey((K)config.getName())) {
- put((K)config.getName(), (V)config);
- }
- }
-
- actionClass = actionClass.getSuperclass();
- }
- }
-
- /**
- * Extracts result name and value and calls {@link #createResultConfig}.
- *
- * @param result Result annotation reference representing result type to create
- * @return New or cached ResultConfig object for result
- */
- protected ResultConfig createResultConfig(Result result) {
- Class<? extends Object> cls = result.type();
- if (cls == NullResult.class) {
- cls = null;
- }
- return createResultConfig(result.name(), cls, result.value(), createParameterMap(result.params()));
- }
-
- protected Map<String, String> createParameterMap(String[] parms) {
- Map<String, String> map = new HashMap<String, String>();
- int subtract = parms.length % 2;
- if(subtract != 0) {
- LOG.warn("Odd number of result parameters key/values specified. The final one will be ignored.");
- }
- for (int i = 0; i < parms.length - subtract; i++) {
- String key = parms[i++];
- String value = parms[i];
- map.put(key, value);
- if(LOG.isDebugEnabled()) {
- LOG.debug("Adding parmeter["+key+":"+value+"] to result.");
- }
- }
- return map;
- }
-
- /**
- * Creates a default ResultConfig,
- * using either the resultClass or the default ResultType for configuration package
- * associated this ResultMap class.
- *
- * @param key The result type name
- * @param resultClass The class for the result type
- * @param location Path to the resource represented by this type
- * @return A ResultConfig for key mapped to location
- */
- private ResultConfig createResultConfig(Object key, Class<? extends Object> resultClass,
- String location,
- Map<? extends Object,? extends Object > configParams) {
- if (resultClass == null) {
- configParams = defaultResultType.getParams();
- String className = defaultResultType.getClassName();
- try {
- resultClass = ClassLoaderUtil.loadClass(className, getClass());
- } catch (ClassNotFoundException ex) {
- throw new ConfigurationException("ClasspathPackageProvider: Unable to locate result class "+className, actionClass);
- }
- }
-
- String defaultParam;
- try {
- defaultParam = (String) resultClass.getField("DEFAULT_PARAM").get(null);
- } catch (Exception e) {
- // not sure why this happened, but let's just use a sensible choice
- defaultParam = "location";
- }
-
- HashMap params = new HashMap();
- if (configParams != null) {
- params.putAll(configParams);
- }
-
- params.put(defaultParam, location);
- return new ResultConfig.Builder((String) key, resultClass.getName()).addParams(params).build();
- }
- }
-
- /**
- * Search classpath for a page.
- */
- private final class ServletContextPageLocator implements PageLocator {
- private final ServletContext context;
- private ClasspathPageLocator classpathPageLocator = new ClasspathPageLocator();
-
- private ServletContextPageLocator(ServletContext context) {
- this.context = context;
- }
-
- public URL locate(String path) {
- URL url = null;
- try {
- url = context.getResource(path);
- if (url == null) {
- url = classpathPageLocator.locate(path);
- }
- } catch (MalformedURLException e) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Unable to resolve path "+path+" against the servlet context");
- }
- }
- return url;
- }
- }
-
- private static class PackageLoader {
-
- /**
- * The package configurations for scanned Actions.
- */
- private Map<String,PackageConfig.Builder> packageConfigBuilders = new HashMap<String,PackageConfig.Builder>();
-
- private Map<PackageConfig.Builder,PackageConfig.Builder> childToParent = new HashMap<PackageConfig.Builder,PackageConfig.Builder>();
-
- public PackageConfig.Builder getPackage(String name) {
- return packageConfigBuilders.get(name);
- }
-
- public void registerChildToParent(PackageConfig.Builder child, PackageConfig.Builder parent) {
- childToParent.put(child, parent);
- }
-
- public void registerPackage(PackageConfig.Builder builder) {
- packageConfigBuilders.put(builder.getName(), builder);
- }
-
- public Collection<PackageConfig> createPackageConfigs() {
- Map<String, PackageConfig> configs = new HashMap<String, PackageConfig>();
-
- Set<PackageConfig.Builder> builders;
- while ((builders = findPackagesWithNoParents()).size() > 0) {
- for (PackageConfig.Builder parent : builders) {
- PackageConfig config = parent.build();
- configs.put(config.getName(), config);
- packageConfigBuilders.remove(config.getName());
-
- for (Iterator<Map.Entry<PackageConfig.Builder,PackageConfig.Builder>> i = childToParent.entrySet().iterator(); i.hasNext(); ) {
- Map.Entry<PackageConfig.Builder,PackageConfig.Builder> entry = i.next();
- if (entry.getValue() == parent) {
- entry.getKey().addParent(config);
- i.remove();
- }
- }
- }
- }
- return configs.values();
- }
-
- Set<PackageConfig.Builder> findPackagesWithNoParents() {
- Set<PackageConfig.Builder> builders = new HashSet<PackageConfig.Builder>();
- for (PackageConfig.Builder child : packageConfigBuilders.values()) {
- if (!childToParent.containsKey(child)) {
- builders.add(child);
- }
- }
- return builders;
- }
-
- public ResultTypeConfig getDefaultResultType(PackageConfig.Builder pkgConfig) {
- PackageConfig.Builder parent;
- PackageConfig.Builder current = pkgConfig;
-
- while ((parent = childToParent.get(current)) != null) {
- current = parent;
- }
- return current.getResultType(current.getFullDefaultResultType());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/java/org/apache/struts2/config/Namespace.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/Namespace.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/Namespace.java
deleted file mode 100644
index 636f942..0000000
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/Namespace.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Allows an action class to specify its namespace
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface Namespace {
- String value();
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/java/org/apache/struts2/config/ParentPackage.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/ParentPackage.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/ParentPackage.java
deleted file mode 100644
index 2d23d4a..0000000
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/ParentPackage.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Allows an action class or package to specify an xwork package to inherit
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.PACKAGE})
-public @interface ParentPackage {
- String[] value();
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/java/org/apache/struts2/config/Result.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/Result.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/Result.java
deleted file mode 100644
index fc7c5bd..0000000
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/Result.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import com.opensymphony.xwork2.Action;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Defines an XWork Result
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface Result {
- String name() default Action.SUCCESS;
- Class<? extends com.opensymphony.xwork2.Result> type() default NullResult.class;
- String value();
- String[] params() default {};
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/java/org/apache/struts2/config/Results.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/Results.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/Results.java
deleted file mode 100644
index a7d9096..0000000
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/Results.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Defines multiple XWork Results
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface Results {
- Result[] value();
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/resources/LICENSE.txt
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/resources/LICENSE.txt b/plugins/codebehind/src/main/resources/LICENSE.txt
deleted file mode 100644
index dd5b3a5..0000000
--- a/plugins/codebehind/src/main/resources/LICENSE.txt
+++ /dev/null
@@ -1,174 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/resources/NOTICE.txt
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/resources/NOTICE.txt b/plugins/codebehind/src/main/resources/NOTICE.txt
deleted file mode 100644
index bfba90c..0000000
--- a/plugins/codebehind/src/main/resources/NOTICE.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Struts
-Copyright 2000-2011 The Apache Software Foundation
-
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/main/resources/struts-plugin.xml
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/main/resources/struts-plugin.xml b/plugins/codebehind/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 601ba8c..0000000
--- a/plugins/codebehind/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-/*
- * $Id$
- *
- * 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.
- */
--->
-<!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
-
-<struts>
- <bean type="com.opensymphony.xwork2.UnknownHandler" class="org.apache.struts2.codebehind.CodebehindUnknownHandler" />
- <bean type="com.opensymphony.xwork2.config.PackageProvider" name="codebehind" class="org.apache.struts2.config.ClasspathPackageProvider" />
-
- <constant name="struts.codebehind.pathPrefix" value="/"/>
- <constant name="struts.codebehind.defaultPackage" value="codebehind-default"/>
- <constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
-
- <package name="codebehind-default" extends="struts-default">
- </package>
-</struts>
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/site/site.xml
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/site/site.xml b/plugins/codebehind/src/site/site.xml
deleted file mode 100644
index 07a667e..0000000
--- a/plugins/codebehind/src/site/site.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-/*
- * 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.
- */
--->
-<project name="Struts 2">
- <skin>
- <groupId>org.apache.maven.skins</groupId>
- <artifactId>maven-fluido-skin</artifactId>
- <version>1.3.1</version>
- </skin>
- <bannerLeft>
- <name>Apache Software Foundation</name>
- <src>http://www.apache.org/images/asf-logo.gif</src>
- <href>http://www.apache.org/</href>
- </bannerLeft>
- <bannerRight>
- <name>Apache Struts</name>
- <src>http://struts.apache.org/img/struts-logo.svg</src>
- <href>http://struts.apache.org/</href>
- </bannerRight>
- <publishDate position="none"/>
- <version position="none"/>
- <body>
- <links>
- <item name="Apache" href="http://www.apache.org/"/>
- <item name="Struts" href="http://struts.apache.org/"/>
- </links>
-
- <menu ref="parent"/>
- <menu ref="reports"/>
-
- <footer>
- <div class="row span12">
- Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts
- project logos are trademarks of The Apache Software Foundation.
- </div>
- </footer>
-
- </body>
-</project>
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java b/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
deleted file mode 100644
index e6cff79..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * $Id$
- *
- * 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.codebehind;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.*;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
-import com.opensymphony.xwork2.util.XWorkTestCaseHelper;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.ServletDispatcherResult;
-import org.springframework.mock.web.MockServletContext;
-
-import javax.servlet.ServletContext;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-
-public class CodebehindUnknownHandlerTest extends StrutsTestCase {
-
- CodebehindUnknownHandler handler;
- Mock mockServletContext;
-
- public void setUp() throws Exception {
- configurationManager = XWorkTestCaseHelper.setUp();
- configuration = configurationManager.getConfiguration();
- container = configuration.getContainer();
- actionProxyFactory = container.getInstance(ActionProxyFactory.class);
- servletContext = new MockServletContext();
- initDispatcher(Collections.singletonMap("actionPackages", "foo.bar"));
- mockServletContext = new Mock(ServletContext.class);
- handler = new CodebehindUnknownHandler("codebehind-default", configuration);
- handler.setPathPrefix("/");
- handler.setObjectFactory(container.getInstance(ObjectFactory.class));
- handler.setServletContext((ServletContext)mockServletContext.proxy());
- }
-
- public void testBuildResult() {
- ActionContext ctx = new ActionContext(new HashMap());
- ResultTypeConfig config = new ResultTypeConfig.Builder("null", SomeResult.class.getName()).defaultResultParam("location").build();
-
- Result result = handler.buildResult("/foo.jsp", "success", config, ctx);
- assertNotNull(result);
- assertTrue(result instanceof SomeResult);
- assertEquals("/foo.jsp", ((SomeResult) result).location);
-
- }
-
- public void testString() {
- assertEquals("foo.bar.jim", handler.string("foo", ".", "bar", ".", "jim"));
- }
-
- public void testDeterminePath() {
- assertEquals("/", handler.determinePath("/", ""));
- assertEquals("/", handler.determinePath("/", null));
- assertEquals("/", handler.determinePath("/", "/"));
- assertEquals("/foo/", handler.determinePath("/", "/foo"));
- assertEquals("/foo/", handler.determinePath("/", "/foo/"));
- assertEquals("/foo/", handler.determinePath("/", "foo"));
- assertEquals("/", handler.determinePath("", ""));
- assertEquals("/foo/", handler.determinePath("", "foo"));
- assertEquals("/foo/", handler.determinePath("", "/foo/"));
- }
-
- public void testLocateTemplate() throws MalformedURLException {
- URL url = new URL("file:/foo.xml");
- mockServletContext.expectAndReturn("getResource", C.args(C.eq("/foo.xml")), url);
- assertEquals(url, handler.locateTemplate("/foo.xml"));
- mockServletContext.verify();
-
- }
-
- public void testLocateTemplateFromClasspath() throws MalformedURLException {
- mockServletContext.expectAndReturn("getResource", C.args(C.eq("struts-plugin.xml")), null);
- URL url = handler.locateTemplate("struts-plugin.xml");
- assertNotNull(url);
- assertTrue(url.toString().endsWith("struts-plugin.xml"));
- mockServletContext.verify();
- }
-
- /**
- * Assert that an unknown action like /foo maps to ActionSupport with a ServletDispatcherResult to /foo.jsp
- */
- public void testBuildActionConfigForUnknownAction() throws MalformedURLException {
- URL url = new URL("file:/foo.jsp");
- mockServletContext.expectAndReturn("getResource", C.args(C.eq("/foo.jsp")), url);
- ActionConfig actionConfig = handler.handleUnknownAction("/", "foo");
- // we need a package
- assertEquals("codebehind-default", actionConfig.getPackageName());
- // a non-empty interceptor stack
- assertTrue(actionConfig.getInterceptors().size() > 0);
- // ActionSupport as the implementation
- assertEquals(ActionSupport.class.getName(), actionConfig.getClassName());
- // with one result
- assertEquals(1, actionConfig.getResults().size());
- // named success
- assertNotNull(actionConfig.getResults().get("success"));
- // of ServletDispatcherResult type
- assertEquals(ServletDispatcherResult.class.getName(), actionConfig.getResults().get("success").getClassName());
- // and finally pointing to foo.jsp!
- assertEquals("/foo.jsp", actionConfig.getResults().get("success").getParams().get("location"));
- }
-
- public static class SomeResult implements Result {
-
- public String location;
- public void setLocation(String loc) {
- this.location = loc;
- }
-
- public void execute(ActionInvocation invocation) throws Exception {
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/AnnotatedAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/AnnotatedAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/AnnotatedAction.java
deleted file mode 100644
index 61ee16c..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/AnnotatedAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-@Action(name="myaction",namespace="/foo")
-public class AnnotatedAction {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/AnotherAnnotatedObject.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/AnotherAnnotatedObject.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/AnotherAnnotatedObject.java
deleted file mode 100644
index 2238bb4..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/AnotherAnnotatedObject.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-@Action(name="myaction2")
-public class AnotherAnnotatedObject {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
deleted file mode 100644
index b25558b..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
-import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-import junit.framework.TestCase;
-import org.apache.struts2.dispatcher.ServletDispatcherResult;
-
-import java.util.Map;
-
-public class ClasspathPackageProviderTest extends TestCase {
-
- ClasspathPackageProvider provider;
- Configuration config;
-
- public void setUp() throws Exception {
- provider = new ClasspathPackageProvider();
- provider.setActionPackages("org.apache.struts2.config");
- config = createNewConfiguration();
- provider.init(config);
- provider.loadPackages();
- }
-
- private Configuration createNewConfiguration() {
- Configuration config = new DefaultConfiguration();
- PackageConfig strutsDefault = new PackageConfig.Builder("struts-default")
- .addResultTypeConfig(new ResultTypeConfig.Builder("dispatcher", ServletDispatcherResult.class.getName())
- .defaultResultParam("location")
- .build())
- .defaultResultType("dispatcher")
- .build();
- config.addPackageConfig("struts-default", strutsDefault);
- PackageConfig customPackage = new PackageConfig.Builder("custom-package")
- .namespace("/custom")
- .build();
- config.addPackageConfig("custom-package", customPackage);
- return config;
- }
-
- public void tearDown() throws Exception {
- provider = null;
- config = null;
- }
-
- public void testFoundRootPackages() {
- assertEquals(7, config.getPackageConfigs().size());
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config");
- assertNotNull(pkg);
- Map configs = pkg.getActionConfigs();
- assertNotNull(configs);
- // assertEquals(1, configs.size());
- ActionConfig actionConfig = (ActionConfig) configs.get("customParentPackage");
- assertNotNull(actionConfig);
- }
-
- public void testDisableScanning() {
- provider = new ClasspathPackageProvider();
- provider.setActionPackages("org.apache.struts2.config");
- provider.setDisableActionScanning("true");
- config = new DefaultConfiguration();
- provider.init(config);
- provider.loadPackages();
-
- assertEquals(0, config.getPackageConfigs().size());
- }
-
- public void testParentPackage() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config");
- // assertEquals(2, pkg.getParents().size());
- Map configs = pkg.getActionConfigs();
- ActionConfig config = (ActionConfig) configs.get("customParentPackage");
- assertNotNull(config);
- assertEquals("/custom", pkg.getNamespace());
- }
-
- public void testParentPackageOnPackage() {
- provider = new ClasspathPackageProvider();
- provider.setActionPackages("org.apache.struts2.config.parenttest");
- provider.init(createNewConfiguration());
- provider.loadPackages();
-
-
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config.parenttest");
- // assertEquals(2, pkg.getParents().size());
- assertNotNull(pkg);
-
- assertEquals("custom-package", pkg.getParents().get(0).getName());
- Map configs = pkg.getActionConfigs();
- ActionConfig config = (ActionConfig) configs.get("some");
- assertNotNull(config);
- }
-
- public void testCustomNamespace() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config.CustomNamespaceAction");
- Map configs = pkg.getAllActionConfigs();
- // assertEquals(2, configs.size());
- ActionConfig config = (ActionConfig) configs.get("customNamespace");
- assertEquals(config.getPackageName(), pkg.getName());
- assertEquals(1, pkg.getParents().size());
- assertNotNull(config);
- assertEquals("/mynamespace", pkg.getNamespace());
- ActionConfig ac = (ActionConfig) configs.get("customParentPackage");
- assertNotNull(ac);
- }
-
- public void testCustomActionAnnotation() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config.AnnotatedAction");
- Map configs = pkg.getAllActionConfigs();
- // assertEquals(2, configs.size());
- ActionConfig config = (ActionConfig) configs.get("myaction");
- assertNotNull(config);
- }
-
- public void testCustomActionAnnotationOfAnyName() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config");
- Map configs = pkg.getAllActionConfigs();
- // assertEquals(2, configs.size());
- ActionConfig config = (ActionConfig) configs.get("myaction2");
- assertNotNull(config);
- }
-
- public void testResultAnnotations() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config.cltest");
- assertEquals("/cltest", pkg.getNamespace());
- ActionConfig acfg = pkg.getActionConfigs().get("twoResult");
- assertNotNull(acfg);
- assertEquals(2, acfg.getResults().size());
- assertEquals("input.jsp", acfg.getResults().get("input").getParams().get("location"));
- assertEquals("bob", acfg.getResults().get("chain").getParams().get("location"));
-
- acfg = pkg.getActionConfigs().get("oneResult");
- assertNotNull(acfg);
- assertEquals(1, acfg.getResults().size());
- assertEquals("input-parent.jsp", acfg.getResults().get("input").getParams().get("location"));
- }
-
- public void testActionImplementation() {
- PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config.cltest");
- assertEquals("/cltest", pkg.getNamespace());
- ActionConfig acfg = pkg.getActionConfigs().get("actionImpl");
- assertNotNull(acfg);
- }
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomNamespaceAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomNamespaceAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomNamespaceAction.java
deleted file mode 100644
index 8231bb4..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomNamespaceAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-@Namespace("/mynamespace")
-public class CustomNamespaceAction {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomParentPackageAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomParentPackageAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomParentPackageAction.java
deleted file mode 100644
index 734d2f9..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/CustomParentPackageAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * $Id$
- *
- * 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.config;
-
-@ParentPackage("custom-package")
-public class CustomParentPackageAction {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/ActionImpl.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/ActionImpl.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/ActionImpl.java
deleted file mode 100644
index 6863e75..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/ActionImpl.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * $Id$
- *
- * 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.config.cltest;
-
-import com.opensymphony.xwork2.Action;
-
-public class ActionImpl implements Action {
-
- public String execute() throws Exception {
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/OneResultAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/OneResultAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/OneResultAction.java
deleted file mode 100644
index 72efc3c..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/OneResultAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * $Id$
- *
- * 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.config.cltest;
-
-import org.apache.struts2.config.Result;
-
-@Result(name="input", value="input-parent.jsp")
-public class OneResultAction {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/TwoResultAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/TwoResultAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/TwoResultAction.java
deleted file mode 100644
index a62e02b..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/cltest/TwoResultAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id$
- *
- * 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.config.cltest;
-
-import org.apache.struts2.config.Result;
-import org.apache.struts2.config.Results;
-import org.apache.struts2.dispatcher.ServletDispatcherResult;
-
-
-@Results({
- @Result(name="chain", value="bob", type=ServletDispatcherResult.class),
- @Result(name="input", value="input.jsp")
-})
-public class TwoResultAction extends OneResultAction {
-
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/SomeAction.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/SomeAction.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/SomeAction.java
deleted file mode 100644
index 08263af..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/SomeAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id: ParentPackage.java 651946 2008-04-27 13:41:38Z apetrelli $
- *
- * 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.config.parenttest;
-
-import com.opensymphony.xwork2.Action;
-
-public class SomeAction implements Action {
-
- public String execute() throws Exception {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-}
http://git-wip-us.apache.org/repos/asf/struts/blob/17d73d21/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/package-info.java
----------------------------------------------------------------------
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/package-info.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/package-info.java
deleted file mode 100644
index fdb5c92..0000000
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/parenttest/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * $Id: ParentPackage.java 651946 2008-04-27 13:41:38Z apetrelli $
- *
- * 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.
- */
-@ParentPackage("custom-package")
-package org.apache.struts2.config.parenttest;
-
-import org.apache.struts2.config.ParentPackage;
\ No newline at end of file