mirror of
https://github.com/apache/struts.git
synced 2026-08-07 15:46:57 +00:00
WW-1483 Javadoc and IDEA refactorings only. No functional changes.
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@478313 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -132,6 +132,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
|
||||
/**
|
||||
* Create instance utilizing a list of packages to scan for Action classes.
|
||||
*
|
||||
* @param pkgs List of pacaktges to scan for Action Classes.
|
||||
*/
|
||||
public ClasspathConfigurationProvider(String[] pkgs) {
|
||||
@@ -151,10 +152,16 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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());
|
||||
@@ -162,32 +169,49 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param defaultParentPackage the defaultParentPackage to set
|
||||
* Register a default parent package for the actions.
|
||||
*
|
||||
* @param defaultParentPackage the new defaultParentPackage
|
||||
*/
|
||||
public void setDefaultParentPackage(String defaultParentPackage) {
|
||||
this.defaultParentPackage = defaultParentPackage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param defaultPageExtension the defaultPageExtension to set
|
||||
* Register a default page extension to use when locating pages.
|
||||
*
|
||||
* @param defaultPageExtension the new defaultPageExtension
|
||||
*/
|
||||
public void setDefaultPageExtension(String defaultPageExtension) {
|
||||
this.defaultPageExtension = defaultPageExtension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reigster a default page prefix to use when locating pages.
|
||||
*
|
||||
* @param defaultPagePrefix the defaultPagePrefix to set
|
||||
*/
|
||||
public void setDefaultPagePrefix(String defaultPagePrefix) {
|
||||
this.defaultPagePrefix = defaultPagePrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a PageLocation to use to scan for server pages.
|
||||
*
|
||||
* @param locator
|
||||
*/
|
||||
public void setPageLocator(PageLocator locator) {
|
||||
this.pageLocator = locator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pkgs A set of packages to load
|
||||
* 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) {
|
||||
|
||||
@@ -201,6 +225,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
}, pkgs);
|
||||
|
||||
Set<? extends Class<? extends Class>> actionClasses = resolver.getClasses();
|
||||
for (Object obj : actionClasses) {
|
||||
Class cls = (Class) obj;
|
||||
@@ -215,9 +240,14 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 Set of packages to scan for Actions
|
||||
* @param pkgs List of packages that were scanned for Actions
|
||||
*/
|
||||
protected void processActionClass(Class cls, String[] pkgs) {
|
||||
String name = cls.getName();
|
||||
@@ -227,7 +257,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
for (String pkg : pkgs) {
|
||||
if (name.startsWith(pkg)) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Processing class "+name);
|
||||
LOG.debug("ClasspathConfigurationProvider: Processing class "+name);
|
||||
}
|
||||
name = name.substring(pkg.length() + 1);
|
||||
|
||||
@@ -249,7 +279,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
String parent = ((ParentPackage)annotation).value();
|
||||
PackageConfig parentPkg = configuration.getPackageConfig(parent);
|
||||
if (parentPkg == null) {
|
||||
throw new ConfigurationException("Unable to locate parent package "+parent, annotation);
|
||||
throw new ConfigurationException("ClasspathConfigurationProvider: Unable to locate parent package "+parent, annotation);
|
||||
}
|
||||
pkgConfig.addParent(parentPkg);
|
||||
|
||||
@@ -263,6 +293,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
actionName = actionName.substring(0, actionName.length() - ACTION.length());
|
||||
}
|
||||
|
||||
// Force initial letter of action to lowercase
|
||||
if (actionName.length() > 1) {
|
||||
int lowerPos = actionName.lastIndexOf('/') + 1;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -282,8 +313,15 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @return
|
||||
* @param actionClass The Action class instance
|
||||
* @return PackageConfig object for the Action class
|
||||
*/
|
||||
protected PackageConfig loadPackageConfig(String actionNamespace, String actionPackage, Class actionClass) {
|
||||
PackageConfig parent = null;
|
||||
@@ -307,7 +345,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
if (parent == null) {
|
||||
throw new ConfigurationException("Unable to locate default parent package: " +
|
||||
throw new ConfigurationException("ClasspathConfigurationProvider: Unable to locate default parent package: " +
|
||||
defaultParentPackage);
|
||||
}
|
||||
pkgConfig.addParent(parent);
|
||||
@@ -319,27 +357,45 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
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 {
|
||||
loadedPackageConfigs.clear();
|
||||
loadPackages(packages);
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the packages have been initialized.
|
||||
*
|
||||
* @return True if the packages have been initialized
|
||||
*/
|
||||
public boolean needsReload() {
|
||||
return !initialized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates result configs from result annotations, and if a result isn't found,
|
||||
* creates them on the fly.
|
||||
* 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;
|
||||
@@ -376,6 +432,12 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
@@ -384,6 +446,12 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
return createResultConfig(result.name(), cls, result.value());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve ResultConfig from cache.
|
||||
*
|
||||
* @param key Name of ResultConfig
|
||||
* @return ResultConfig correspnding to key
|
||||
*/
|
||||
public V get(Object key) {
|
||||
|
||||
V result = super.get(key);
|
||||
@@ -391,8 +459,8 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
return result;
|
||||
} else {
|
||||
|
||||
// TODO: This code never is actually used, do to how the runtime configuration
|
||||
// is created.
|
||||
// This code should never actually be called,
|
||||
// due to how the runtime configuration is created.
|
||||
String actionPath = pkgConfig.getNamespace() + "/" + actionName;
|
||||
|
||||
String fileName = actionPath + "-" + key + defaultPageExtension;
|
||||
@@ -406,22 +474,26 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key
|
||||
* @param resultClass
|
||||
* @param location
|
||||
* @return
|
||||
* 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 = null;
|
||||
if (resultClass == null) {
|
||||
String defaultResultType = pkgConfig.getFullDefaultResultType();
|
||||
ResultTypeConfig resultType = (ResultTypeConfig) pkgConfig.getAllResultTypeConfigs().get(defaultResultType);
|
||||
ResultTypeConfig resultType = pkgConfig.getAllResultTypeConfigs().get(defaultResultType);
|
||||
configParams = resultType.getParams();
|
||||
String className = resultType.getClazz();
|
||||
try {
|
||||
resultClass = ClassLoaderUtil.loadClass(className, getClass());
|
||||
} catch (ClassNotFoundException ex) {
|
||||
throw new ConfigurationException("Unable to locate result class "+className, actionClass);
|
||||
throw new ConfigurationException("ClasspathConfigurationProvider: Unable to locate result class "+className, actionClass);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -442,7 +514,8 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider {
|
||||
}
|
||||
}
|
||||
|
||||
// See superclass for Javadoc
|
||||
public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
|
||||
// Nothing
|
||||
// Override to provide functionality
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,117 +32,111 @@ import com.opensymphony.xwork2.util.LocalizedTextUtil;
|
||||
|
||||
|
||||
/**
|
||||
* Default implementation of Settings - creates and delegates to other settingss by using an internal
|
||||
* {@link DelegatingSettings}.
|
||||
* DefaultSettings implements optional methods of Settings.
|
||||
* <p>
|
||||
* This class creates and delegates to other settings by using an internal
|
||||
* {@link DelegatingSettings} object.
|
||||
*/
|
||||
public class DefaultSettings extends Settings {
|
||||
|
||||
/**
|
||||
* The logging instance for this class.
|
||||
*/
|
||||
protected Log log = LogFactory.getLog(this.getClass());
|
||||
Settings config;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new DefaultSettings object by loading all property files
|
||||
* and creating an internal {@link DelegatingSettings} object. All calls to get and set
|
||||
* in this class will call that settings object.
|
||||
* The Settings object that handles API calls.
|
||||
*/
|
||||
Settings delegate;
|
||||
|
||||
/**
|
||||
* Constructs an instance by loading the standard property files,
|
||||
* any custom property files (<code>struts.custom.properties</code>),
|
||||
* and any custom message resources ().
|
||||
* <p>
|
||||
* Since this constructor combines Settings from multiple resources,
|
||||
* it utilizes a {@link DelegatingSettings} instance,
|
||||
* and all API calls are handled by that instance.
|
||||
*/
|
||||
public DefaultSettings() {
|
||||
// Create default implementations
|
||||
// Use default properties and struts.properties
|
||||
|
||||
ArrayList<Settings> list = new ArrayList<Settings>();
|
||||
|
||||
// stuts.properties, default.properties
|
||||
try {
|
||||
list.add(new PropertiesSettings("struts"));
|
||||
} catch (Exception e) {
|
||||
log.warn("Could not find or error in struts.properties", e);
|
||||
log.warn("DefaultSettings: Could not find or error in struts.properties", e);
|
||||
}
|
||||
|
||||
try {
|
||||
list.add(new PropertiesSettings("org/apache/struts2/default"));
|
||||
} catch (Exception e) {
|
||||
log.error("Could not find org/apache/struts2/default.properties", e);
|
||||
log.error("DefaultSettings: Could not find or error in org/apache/struts2/default.properties", e);
|
||||
}
|
||||
|
||||
Settings[] configList = new Settings[list.size()];
|
||||
config = new DelegatingSettings((Settings[]) list.toArray(configList));
|
||||
Settings[] settings = new Settings[list.size()];
|
||||
delegate = new DelegatingSettings(list.toArray(settings));
|
||||
|
||||
// Add list of additional properties settingss
|
||||
// struts.custom.properties
|
||||
try {
|
||||
StringTokenizer configFiles = new StringTokenizer((String) config.getImpl(StrutsConstants.STRUTS_CUSTOM_PROPERTIES), ",");
|
||||
StringTokenizer customProperties = new StringTokenizer(delegate.getImpl(StrutsConstants.STRUTS_CUSTOM_PROPERTIES), ",");
|
||||
|
||||
while (configFiles.hasMoreTokens()) {
|
||||
String name = configFiles.nextToken();
|
||||
while (customProperties.hasMoreTokens()) {
|
||||
String name = customProperties.nextToken();
|
||||
|
||||
try {
|
||||
list.add(new PropertiesSettings(name));
|
||||
} catch (Exception e) {
|
||||
log.error("Could not find " + name + ".properties. Skipping");
|
||||
log.error("DefaultSettings: Could not find " + name + ".properties. Skipping.");
|
||||
}
|
||||
}
|
||||
|
||||
configList = new Settings[list.size()];
|
||||
config = new DelegatingSettings((Settings[]) list.toArray(configList));
|
||||
settings = new Settings[list.size()];
|
||||
delegate = new DelegatingSettings(list.toArray(settings));
|
||||
} catch (IllegalArgumentException e) {
|
||||
// thrown when Settings is unable to find a certain property
|
||||
// eg. struts.custom.properties in default.properties which is commented
|
||||
// out
|
||||
// Assume it's OK, since IllegalArgumentException is thrown
|
||||
// when Settings is unable to find a certain setting,
|
||||
// like the struts.custom.properties, which is commented out
|
||||
}
|
||||
|
||||
// Add additional list of i18n global resource bundles
|
||||
// struts.custom.i18n.resources
|
||||
try {
|
||||
|
||||
LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");
|
||||
StringTokenizer bundleFiles = new StringTokenizer((String) config.getImpl(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES), ", ");
|
||||
StringTokenizer customBundles = new StringTokenizer(delegate.getImpl(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES), ", ");
|
||||
|
||||
while (bundleFiles.hasMoreTokens()) {
|
||||
String name = bundleFiles.nextToken();
|
||||
while (customBundles.hasMoreTokens()) {
|
||||
String name = customBundles.nextToken();
|
||||
try {
|
||||
log.info("Loading global messages from " + name);
|
||||
log.info("DefaultSettings: Loading global messages from " + name);
|
||||
LocalizedTextUtil.addDefaultResourceBundle(name);
|
||||
} catch (Exception e) {
|
||||
log.error("Could not find " + name + ".properties. Skipping");
|
||||
log.error("DefaultSettings: Could not find " + name + ".properties. Skipping");
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
// struts.custom.i18n.resources wasn't provided
|
||||
// Assume it's OK, since many applications do not provide custom resource bundles.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the given property - delegates to the internal config implementation.
|
||||
*
|
||||
* @see #set(String, String)
|
||||
*/
|
||||
public void setImpl(String aName, String aValue) throws IllegalArgumentException, UnsupportedOperationException {
|
||||
config.setImpl(aName, aValue);
|
||||
// See superclass for Javadoc
|
||||
public void setImpl(String name, String value) throws IllegalArgumentException, UnsupportedOperationException {
|
||||
delegate.setImpl(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the specified property - delegates to the internal config implementation.
|
||||
*
|
||||
* @see #get(String)
|
||||
*/
|
||||
// See superclass for Javadoc
|
||||
public String getImpl(String aName) throws IllegalArgumentException {
|
||||
// Delegate
|
||||
return config.getImpl(aName);
|
||||
return delegate.getImpl(aName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether or not a value has been set - delegates to the internal config implementation.
|
||||
*
|
||||
* @see #isSet(String)
|
||||
*/
|
||||
// See superclass for Javadoc
|
||||
public boolean isSetImpl(String aName) {
|
||||
return config.isSetImpl(aName);
|
||||
return delegate.isSetImpl(aName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all property names - delegates to the internal config implementation.
|
||||
*
|
||||
* @see #list()
|
||||
*/
|
||||
// See superclass for Javadoc
|
||||
public Iterator listImpl() {
|
||||
return config.listImpl();
|
||||
return delegate.listImpl();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,24 +244,24 @@ class Settings {
|
||||
/**
|
||||
* Implements the {@link #get(String)} method.
|
||||
*
|
||||
* @param aName The name of the setting value to retreive
|
||||
* @param name The name of the setting value to retreive
|
||||
* @return The setting value as a String
|
||||
* @throws IllegalArgumentException if an error occurs when retrieving the value
|
||||
* @see #get(String)
|
||||
*/
|
||||
public String getImpl(String aName) throws IllegalArgumentException {
|
||||
public String getImpl(String name) throws IllegalArgumentException {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the {@link #getLocation(String)} method.
|
||||
*
|
||||
* @param name Name of the setting to locate
|
||||
* @return The location of the setting
|
||||
* @param aName Name of the setting to locate
|
||||
* @throws IllegalArgumentException if an error occurs when retrieving the value
|
||||
* @see #getLocation(String)
|
||||
*/
|
||||
public Location getLocationImpl(String aName) throws IllegalArgumentException {
|
||||
public Location getLocationImpl(String name) throws IllegalArgumentException {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user