Author: husted
Date: Wed Nov 22 06:19:53 2006
New Revision: 478167
URL: http://svn.apache.org/viewvc?view=rev&rev=478167
Log:
WW-1483 Javadoc and IDEA refactorings only. No functional changes.
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/ClasspathConfigurationProvider.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/ClasspathConfigurationProvider.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/ClasspathConfigurationProvider.java?view=diff&rev=478167&r1=478166&r2=478167
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/ClasspathConfigurationProvider.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/ClasspathConfigurationProvider.java
Wed Nov 22 06:19:53 2006
@@ -25,7 +25,6 @@
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
-import java.util.Properties;
import java.util.Set;
import org.apache.commons.logging.Log;
@@ -47,28 +46,94 @@
import com.opensymphony.xwork2.util.location.LocatableProperties;
/**
- * Loads the configuration by scanning the classpath looking for classes that
end in
- * 'Action'.
+ * ClasspathConfigurationProvider 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 ClasspathConfigurationProvider implements ConfigurationProvider {
+ /**
+ * The default page prefix (or "path").
+ * Some applications may place pages under "/WEB-INF" as an extreme
security precaution.
+ */
private 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".
+ */
private 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".
+ */
private static final String DEFAULT_PARENT_PACKAGE =
"struts.configuration.classpath.defaultParentPackage";
- private static final String ACTION = "Action";
- private String[] packages;
+
+ /**
+ * Name of the framework's default configuration package,
+ * that application configuration packages automatically inherit.
+ */
private String defaultParentPackage = "struts-default";
- private String defaultPageExtension = ".jsp";
- private String defaultPagePrefix = "";
+
+ /**
+ * Default suffix that can be used to indicate POJO "Action" classes.
+ */
+ private static final String ACTION = "Action";
+
+ /**
+ * 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;
+ /**
+ * The list of packages to scan for Action classes.
+ */
+ private String[] packages;
+
+ /**
+ * The package configurations for scanned Actions.
+ *
+ * @see #loadPackageConfig
+ */
private Map<String,PackageConfig> loadedPackageConfigs = new
HashMap<String,PackageConfig>();
+ /**
+ * Logging instance for this class.
+ */
private static final Log LOG =
LogFactory.getLog(ClasspathConfigurationProvider.class);
+ /**
+ * The XWork Configuration for this application.
+ *
+ * @see #init
+ */
private Configuration configuration;
+ /**
+ * 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) {
this.packages = pkgs;
@@ -122,7 +187,7 @@
}
/**
- * @param pkgs
+ * @param pkgs A set of packages to load
*/
protected void loadPackages(String[] pkgs) {
@@ -136,7 +201,7 @@
}
}, pkgs);
- Set actionClasses = resolver.getClasses();
+ Set<? extends Class<? extends Class>> actionClasses =
resolver.getClasses();
for (Object obj : actionClasses) {
Class cls = (Class) obj;
if (!Modifier.isAbstract(cls.getModifiers())) {
@@ -149,6 +214,11 @@
}
}
+ /**
+ *
+ * @param cls Action or POJO instance to process
+ * @param pkgs Set of packages to scan for Actions
+ */
protected void processActionClass(Class cls, String[] pkgs) {
String name = cls.getName();
String actionPackage = cls.getPackage().getName();
@@ -188,7 +258,7 @@
}
}
- // Cut off the Action suffix if found
+ // Truncate Action suffix if found
if (actionName.endsWith(ACTION)) {
actionName = actionName.substring(0, actionName.length() -
ACTION.length());
}
@@ -212,7 +282,8 @@
}
/**
- * @param actionPackage
+ * @param actionPackage The Java package containing our Action classes
+ * @return
*/
protected PackageConfig loadPackageConfig(String actionNamespace, String
actionPackage, Class actionClass) {
PackageConfig parent = null;
@@ -306,7 +377,7 @@
}
protected ResultConfig createResultConfig(Result result) {
- Class cls = result.type();
+ Class<? extends Object> cls = result.type();
if (cls == NullResult.class) {
cls = null;
}
@@ -315,9 +386,9 @@
public V get(Object key) {
- Object result = super.get(key);
+ V result = super.get(key);
if (result != null) {
- return (V) result;
+ return result;
} else {
// TODO: This code never is actually used, do to how the
runtime configuration
@@ -340,8 +411,8 @@
* @param location
* @return
*/
- private ResultConfig createResultConfig(Object key, Class resultClass,
String location) {
- Map configParams = null;
+ 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);
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java?view=diff&rev=478167&r1=478166&r2=478167
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
Wed Nov 22 06:19:53 2006
@@ -26,89 +26,72 @@
/**
- * A Settings implementation which stores an internal list of settings
objects. Each time
- * a config method is called (get, set, list, etc..) this class will go
through the list of settingss
- * and call the method until successful.
+ * DelegatingSettings stores an internal list of [EMAIL PROTECTED] Settings}
objects
+ * to update settings or retrieve settings values.
+ * <p>
+ * Each time a Settings method is called (get, set, list, and so forth),
+ * this class goes through the list of Settings objects
+ * and calls that method for each delegate,
+ * withholding any exception until all delegates have been called.
*
*/
class DelegatingSettings extends Settings {
- Settings[] configList;
-
-
/**
- * Creates a new DelegatingSettings object given a list of [EMAIL
PROTECTED] Settings} implementations.
- *
- * @param aConfigList a list of Settings implementations.
+ * The Settings objects.
*/
- public DelegatingSettings(Settings[] aConfigList) {
- configList = aConfigList;
- }
-
+ Settings[] delegates;
/**
- * Sets the given property - calls setImpl(String, Object) method on
config objects in the config
- * list until successful.
+ * Creates a new DelegatingSettings object utilizing the list of [EMAIL
PROTECTED] Settings} objects.
*
- * @see #set(String, String)
+ * @param delegates The Settings objects to use as delegates
*/
+ public DelegatingSettings(Settings[] delegates) {
+ this.delegates = delegates;
+ }
+
+ // See superclass for Javadoc
public void setImpl(String name, String value) throws
IllegalArgumentException, UnsupportedOperationException {
- // Determine which config to use by using get
- // Delegate to the other settingss
IllegalArgumentException e = null;
- for (int i = 0; i < configList.length; i++) {
+ for (Settings delegate : delegates) {
try {
- configList[i].getImpl(name);
-
- // Found it, now try setting
- configList[i].setImpl(name, value);
-
- // Worked, now return
- return;
+ delegate.getImpl(name); // Throws exception if not found
+ delegate.setImpl(name, value); // Found it
+ return; // Done
} catch (IllegalArgumentException ex) {
e = ex;
- // Try next config
+ // Try next delegate
}
}
throw e;
}
- /**
- * Gets the specified property - calls getImpl(String) method on config
objects in config list
- * until successful.
- *
- * @see #get(String)
- */
+ // See superclass for Javadoc
public String getImpl(String name) throws IllegalArgumentException {
- // Delegate to the other settings
+
IllegalArgumentException e = null;
- for (int i = 0; i < configList.length; i++) {
+ for (Settings delegate : delegates) {
try {
- return configList[i].getImpl(name);
+ return delegate.getImpl(name); // Throws exception if not
found
} catch (IllegalArgumentException ex) {
e = ex;
- // Try next config
+ // Try next delegate
}
}
throw e;
}
- /**
- * Determines if a paramter has been set - calls the isSetImpl(String)
method on each config object
- * in config list. Returns <tt>true</tt> when one of the config
implementations returns true. Returns
- * <tt>false</tt> otherwise.
- *
- * @see #isSet(String)
- */
+ // See superclass for Javadoc
public boolean isSetImpl(String aName) {
- for (int i = 0; i < configList.length; i++) {
- if (configList[i].isSetImpl(aName)) {
+ for (Settings delegate : delegates) {
+ if (delegate.isSetImpl(aName)) {
return true;
}
}
@@ -116,21 +99,16 @@
return false;
}
- /**
- * Returns a list of all property names - returns a list of all property
names in all config
- * objects in config list.
- *
- * @see #list()
- */
+ // See superclass for Javadoc
public Iterator listImpl() {
boolean workedAtAll = false;
Set<Object> settingList = new HashSet<Object>();
UnsupportedOperationException e = null;
- for (int i = 0; i < configList.length; i++) {
+ for (Settings delegate : delegates) {
try {
- Iterator list = configList[i].listImpl();
+ Iterator list = delegate.listImpl();
while (list.hasNext()) {
settingList.add(list.next());
@@ -140,7 +118,7 @@
} catch (UnsupportedOperationException ex) {
e = ex;
- // Try next config
+ // Try next delegate
}
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/Settings.java?view=diff&rev=478167&r1=478166&r2=478167
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
Wed Nov 22 06:19:53 2006
@@ -33,61 +33,94 @@
/**
- * Handles all Struts config properties. Implementation of this class is
pluggable (the
- * default implementation is [EMAIL PROTECTED] DefaultSettings}). This gives
developers to ability to customize how
- * Struts properties are set and retrieved. As an example, a developer may
wish to check a separate property
- * store before delegating to the Struts one. <p>
- * <p/>
- * Key methods: <ul>
- * <p/>
+ * Settings retrieves and exposes default values used by the framework.
+ * An application can override a factory default and provide its own value for
a setting.
+ * <p>
+ * Implementation of the class is pluggable (the default implementation is
[EMAIL PROTECTED] DefaultSettings}).
+ * Pluggability gives applications to ability to customize how settings are
retrieved.
+ * As an example, an application may wish to check some custom property store
+ * before delegating to the usual configuration and property files.
+ * <p>
+ * Key methods:
+ * <ul>
* <li>[EMAIL PROTECTED] #getLocale()}</li>
* <li>[EMAIL PROTECTED] #get(String)}</li>
* <li>[EMAIL PROTECTED] #set(String, String)}</li>
- * <li>[EMAIL PROTECTED] #list()}</li></ul>
- * <p/>
- * Key methods for subclassers: <ul>
- * <p/>
+ * <li>[EMAIL PROTECTED] #list()}</li>
+ * </ul>
+ * <p>
+ * Key methods for subclasses (plugins):
+ * <ul>
* <li>[EMAIL PROTECTED] #getImpl(String)}</li>
* <li>[EMAIL PROTECTED] #setImpl(String, String)}</li>
* <li>[EMAIL PROTECTED] #listImpl()}</li>
- * <li>[EMAIL PROTECTED] #isSetImpl(String)}</li></ul>
+ * <li>[EMAIL PROTECTED] #isSetImpl(String)}</li>
+ * </ul>
*/
class Settings {
+
+ /**
+ * A pluggable implementation of Settings,
+ * provided through the [EMAIL PROTECTED] #setInstance} method.
+ */
static Settings settingsImpl;
+
+ /**
+ * An instance of [EMAIL PROTECTED] DefaultSettings}
+ * to use when another implementation is not provided (plugged in).
+ */
static Settings defaultImpl;
- static Locale locale; // Cached locale
- private static final Log LOG = LogFactory.getLog(Settings.class);
+ /**
+ * An instance of the default locale as specified by the
<code>struts.locale</code> setting.
+ *
+ * @see #getLocale
+ */
+ static Locale locale;
+
+ /**
+ * The Logging instance for this class.
+ */
+ private static final Log LOG = LogFactory.getLog(Settings.class);
/**
- * Sets the current settings implementation. Can only be called once.
+ * Registers a custom Settings implementation (plugin),
+ * and resets the cached locale.
+ * <p>
+ * This method can only be called once.
*
* @param config a Settings implementation
* @throws IllegalStateException if an error occurs when setting the
settings implementation.
*/
public static void setInstance(Settings config) throws
IllegalStateException {
settingsImpl = config;
- locale = null; // Reset cached locale
+ locale = null;
}
/**
- * Gets the current settings implementation.
+ * Provides the Settings object.
+ * <p>
+ * This method will substitute the default instance if another instance is
not registered.
*
- * @return the current settings implementation.
+ * @return the Settings object.
*/
public static Settings getInstance() {
return (settingsImpl == null) ? getDefaultInstance() : settingsImpl;
}
/**
- * Returns the Struts locale. Keys off the property <tt>struts.locale</tt>
which should be set
- * as the Java [EMAIL PROTECTED] java.util.Locale#toString() toString()}
representation of a Locale object (i.e.,
- * "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr_MAC", etc). <p>
- * <p/>
- * If no locale is specified then the default VM locale is used ([EMAIL
PROTECTED] java.util.Locale#getDefault()}).
+ * Provides the Struts default locale.
+ * <p>
+ * This method utilizes the <code>struts.locale</code> setting, which
should be given
+ * as the Java [EMAIL PROTECTED] java.util.Locale#toString() toString()}
representation of a Locale object
+ * ("en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr_MAC", and so
forth).
+ * <p>
+ * If a <code>struts.locale</code> setting is not registered,
+ * then the default virtual machine locale is substituted and cached.
*
- * @return the Struts locale if specified or the VM default locale.
+ * @return the Struts default locale if specified or the VM default locale.
+ * @see java.util.Locale#getDefault()
*/
public static Locale getLocale() {
if (locale == null) {
@@ -107,7 +140,7 @@
locale = new Locale(lang, country);
} catch (Throwable t) {
// Default
- LOG.warn("Setting locale to the default locale");
+ LOG.warn("Settings: Could not parse struts.locale setting,
substituting default VM locale");
locale = Locale.getDefault();
}
}
@@ -116,46 +149,50 @@
}
/**
- * Determines whether or not a value has been set. Useful for testing for
the existance of parameter without
+ * Determines whether or not a setting has a registered value.
+ * <p>
+ * This method is useful for testing for the existance of setting without
* throwing an IllegalArgumentException.
*
- * @param name the name of the property to test.
- * @return <tt>true</tt> if the property exists and has a value,
<tt>false</tt> otherwise.
+ * @param name the name of a setting to test.
+ * @return <code>true</code> if the setting exists and has a value,
<code>false</code> otherwise.
*/
public static boolean isSet(String name) {
return getInstance().isSetImpl(name);
}
/**
- * Returns a property as an Object. This will throw an
<tt>IllegalArgumentException</tt> if an error occurs
+ * Provides a setting value as a String.
+ * <p>
+ * The method will throw an <code>IllegalArgumentException</code> if an
error occurs
* while retrieveing the property or if the property doesn't exist.
*
- * @param name the name of the property to get.
- * @return the property as an Object.
+ * @param name the name of the setting to retrieve.
+ * @return the setting value as a String.
* @throws IllegalArgumentException if an error occurs retrieving the
property or the property does not exist.
*/
public static String get(String name) throws IllegalArgumentException {
- String val = getInstance().getImpl(name);
-
- return val;
+ return getInstance().getImpl(name);
}
-
+
/**
- * Returns the location of a a property. This will throw an
<tt>IllegalArgumentException</tt> if an error occurs
- * while retrieveing the property or if the property doesn't exist.
+ * Provides the Location of a setting.
+ * <p>
+ * The Location is utilized as part of precise error reporting.
+ * <p>
+ * This method will throw an <code>IllegalArgumentException</code> if an
error occurs
+ * while retrieving the value or if the setting doesn't exist.
*
* @param name the name of the property to get.
* @return the Location of a property.
* @throws IllegalArgumentException if an error occurs retrieving the
property or the property does not exist.
*/
public static Location getLocation(String name) throws
IllegalArgumentException {
- Location loc = getInstance().getLocationImpl(name);
-
- return loc;
+ return getInstance().getLocationImpl(name);
}
/**
- * Returns an Iterator of all properties names.
+ * Provides an Iterator of all properties names.
*
* @return an Iterator of all properties names.
*/
@@ -164,8 +201,10 @@
}
/**
- * Implementation of the [EMAIL PROTECTED] #isSet(String)} method.
+ * Implements the [EMAIL PROTECTED] #isSet(String)} method.
*
+ * @param name Identifier for the setting value to change
+ * @return True if the setting exists and has a value, false otherwise.
* @see #isSet(String)
*/
public boolean isSetImpl(String name) {
@@ -175,39 +214,51 @@
}
/**
- * Sets a property. Throws an exception if an error occurs when setting
the property or if the
- * Settings implementation does not support setting properties.
- *
- * @param name the name of the property to set.
- * @param value the property to set.
- * @throws IllegalArgumentException if an error occurs when setting
the property.
- * @throws UnsupportedOperationException if the config implementation does
not support setting properties.
+ * Registers a value for a setting.
+ * <p>
+ * This method raises an exception if an error occurs when setting the
value or if the
+ * settings implementation does not support setting values.
+ *
+ * @param name the name of the setting.
+ * @param value the value to register for the setting.
+ * @throws IllegalArgumentException if an error occurs when setting
the value.
+ * @throws UnsupportedOperationException if the config implementation does
not support setting values.
*/
public static void set(String name, String value) throws
IllegalArgumentException, UnsupportedOperationException {
getInstance().setImpl(name, value);
}
/**
- * Implementation of the [EMAIL PROTECTED] #set(String, String)} method.
+ * Implements the [EMAIL PROTECTED] #set(String, String)} method.
*
+ * @param name Identifer for the setting to change.
+ * @param value The new value for the setting.
+ * @throws IllegalArgumentException if an error occurs when setting
the value.
+ * @throws UnsupportedOperationException if the config implementation does
not support setting values.
* @see #set(String, String)
*/
public void setImpl(String name, String value) throws
IllegalArgumentException, UnsupportedOperationException {
- throw new UnsupportedOperationException("This settings does not
support updating a setting");
+ throw new UnsupportedOperationException("Settings: This implementation
does not support setting a value.");
}
/**
- * Implementation of the [EMAIL PROTECTED] #get(String)} method.
+ * Implements the [EMAIL PROTECTED] #get(String)} method.
*
+ * @param aName 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 {
return null;
}
-
+
/**
- * Implementation of the [EMAIL PROTECTED] #getLocation(String)} method.
+ * Implements the [EMAIL PROTECTED] #getLocation(String)} method.
*
+ * @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 {
@@ -215,14 +266,23 @@
}
/**
- * Implementation of the [EMAIL PROTECTED] #list()} method.
+ * Implements the [EMAIL PROTECTED] #list()} method.
*
* @see #list()
+ * @return A list of the settings as an iterator
*/
public Iterator listImpl() {
- throw new UnsupportedOperationException("This settings does not
support listing the settings");
+ throw new UnsupportedOperationException("Settings: This implementation
does not support listing the registered settings");
}
+ /**
+ * Creates a default Settings object.
+ * <p>
+ * A default implementation may be specified by the
<code>struts.configuration</code> setting;
+ * otherwise, this method instantiates [EMAIL PROTECTED] DefaultSettings}
as the default implementation.
+ *
+ * @return A default Settings object.
+ */
private static Settings getDefaultInstance() {
if (defaultImpl == null) {
// Create bootstrap implementation
@@ -237,7 +297,7 @@
// singleton instances shouldn't be built accessing
request or session-specific context data
defaultImpl = (Settings)
ObjectFactory.getObjectFactory().buildBean(Thread.currentThread().getContextClassLoader().loadClass(className),
null);
} catch (Exception e) {
- LOG.error("Could not instantiate settings", e);
+ LOG.error("Settings: Could not instantiate the
struts.configuration object, substituting the default implementation.", e);
}
}
} catch (IllegalArgumentException ex) {
@@ -248,6 +308,9 @@
return defaultImpl;
}
+ /**
+ * Resets the default and any plugin Setting instance to null.
+ */
public static void reset() {
defaultImpl = null;
settingsImpl = null;
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?view=diff&rev=478167&r1=478166&r2=478167
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
Wed Nov 22 06:19:53 2006
@@ -29,7 +29,6 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;