diff --git a/src/java/com/samskivert/velocity/Application.java b/src/java/com/samskivert/velocity/Application.java index 025ff266..ca2c276c 100644 --- a/src/java/com/samskivert/velocity/Application.java +++ b/src/java/com/samskivert/velocity/Application.java @@ -41,58 +41,50 @@ import com.samskivert.servlet.util.RequestUtils; import com.samskivert.util.StringUtil; /** - * The servlet API defines the concept of a web application and associates - * certain attributes with it like document root and so on. This - * application class extends that concept by providing a base class that - * represents the web application. The application class is responsible - * for initializing services that will be used by the application's logic - * objects as well as cleaning them up when the application is shut down. + * The servlet API defines the concept of a web application and associates certain attributes with + * it like document root and so on. This application class extends that concept by providing a base + * class that represents the web application. The application class is responsible for initializing + * services that will be used by the application's logic objects as well as cleaning them up when + * the application is shut down. * *
Error handling
- * The application provides a common error handling mechanism. The design is to
- * catch any exceptions thrown by the logic and to convert them into friendly
- * error messages that are inserted into the invocation context with the key
- * "error" for easy display in the resulting web page.
+ * The application provides a common error handling mechanism. The design is to catch any
+ * exceptions thrown by the logic and to convert them into friendly error messages that are
+ * inserted into the invocation context with the key "error" for easy display in the
+ * resulting web page.
*
- *
The default process of mapping exceptions to friendly error messages is - * done using the {@link ExceptionMap} class. This can be replaced by - * overriding {@link #handleException}. + *
The default process of mapping exceptions to friendly error messages is done using the
+ * {@link ExceptionMap} class. This can be replaced by overriding {@link #handleException}.
*/
public class Application
{
/**
- * An initialized application automatically registers itself as a
- * Velocity application attribute so that it can be retrieved by
- * Velocity plugins using
+ * An initialized application automatically registers itself as a Velocity application
+ * attribute so that it can be retrieved by Velocity plugins using
* getApplicationAttribute(VELOCITY_ATTR_KEY).
*/
public static final String VELOCITY_ATTR_KEY = "!application!";
/**
- * Performs initializations common to all applications. Applications
- * should override {@link #willInit} to perform initializations that
- * need to take place before the common initialization (which includes
- * the creation of the site identifier and message manager) and should
- * override {@link #didInit} to perform initializations that need to
- * take place after the common initialization (like passing the
- * application to entities that might turn around and request a
- * reference to our site identifier).
+ * Performs initializations common to all applications. Applications should override {@link
+ * #willInit} to perform initializations that need to take place before the common
+ * initialization (which includes the creation of the site identifier and message manager) and
+ * should override {@link #didInit} to perform initializations that need to take place after
+ * the common initialization (like passing the application to entities that might turn around
+ * and request a reference to our site identifier).
*
- * @param config the servlet config from which the application will
- * load configuration information.
- * @param context the servlet context in which this application is
- * operating.
- * @param logicPkg the base package for all of the logic
- * implementations for this application.
+ * @param config the servlet config from which the application will load configuration
+ * information.
+ * @param context the servlet context in which this application is operating.
+ * @param logicPkg the base package for all of the logic implementations for this application.
*/
- public void init (ServletConfig config, ServletContext context,
- String logicPkg)
+ public void init (ServletConfig config, ServletContext context, String logicPkg)
{
// keep this around for later
_context = context;
- // stick ourselves into an application attribute so that we can be
- // accessed by Velocity plugins
+ // stick ourselves into an application attribute so that we can be accessed by Velocity
+ // plugins
Velocity.setApplicationAttribute(VELOCITY_ATTR_KEY, this);
// let the derived application do pre-init stuff
@@ -108,8 +100,7 @@ public class Application
// create our site identifier
_siteIdent = createSiteIdentifier(_context);
- // create a site resource loader if the user set up the
- // site-specific jar file path
+ // create a site resource loader if the user set up the site-specific jar file path
String siteJarPath = getInitParameter(config, SITE_JAR_PATH_KEY);
if (!StringUtil.isBlank(siteJarPath)) {
_siteLoader = new SiteResourceLoader(_siteIdent, siteJarPath);
@@ -118,23 +109,19 @@ public class Application
// instantiate our message manager if the application wants one
String bundlePath = getInitParameter(config, MESSAGE_BUNDLE_PATH_KEY);
if (!StringUtil.isBlank(bundlePath)) {
- _msgmgr = new MessageManager(bundlePath, null, _siteIdent);
+ _msgmgr = createMessageManager(bundlePath);
}
- // if we have a site-specific resource loader, configure the
- // message manager with it, so that it can load site-specific
- // message resources
+ // if we have a site-specific resource loader, configure the message manager with it, so
+ // that it can load site-specific message resources
if (_msgmgr != null && _siteLoader != null) {
- String siteBundlePath = getInitParameter(
- config, SITE_MESSAGE_BUNDLE_PATH_KEY);
+ String siteBundlePath = getInitParameter(config, SITE_MESSAGE_BUNDLE_PATH_KEY);
if (!StringUtil.isBlank(siteBundlePath)) {
- _msgmgr.activateSiteSpecificMessages(
- siteBundlePath, _siteLoader);
+ _msgmgr.activateSiteSpecificMessages(siteBundlePath, _siteLoader);
} else {
- Log.info("No '" + SITE_MESSAGE_BUNDLE_PATH_KEY + "' " +
- "specified in servlet configuration. This is " +
- "required to allow the message manager to load " +
+ Log.info("No '" + SITE_MESSAGE_BUNDLE_PATH_KEY + "' specified in servlet " +
+ "configuration. This is required to allow the message manager to load " +
"site-specific translation resources.");
}
}
@@ -144,18 +131,17 @@ public class Application
}
/**
- * Called prior to initializing Velocity to allow the application to
- * specify custom configuration properties.
+ * Called prior to initializing Velocity to allow the application to specify custom
+ * configuration properties.
*/
protected void configureVelocity (ServletConfig config, Properties props)
{
}
/**
- * Looks up an initialization parameter for this application. The
- * default implementation retrieves the value from the servlet config,
- * but derived classes may wish to get certain parameters from some
- * other configuration source.
+ * Looks up an initialization parameter for this application. The default implementation
+ * retrieves the value from the servlet config, but derived classes may wish to get certain
+ * parameters from some other configuration source.
*/
protected String getInitParameter (ServletConfig config, String key)
{
@@ -163,38 +149,42 @@ public class Application
}
/**
- * This should be overridden by the application implementation to
- * invoke any necessary pre-initialization code. They should be sure
- * to call super.willInit().
+ * Creates the message manager to be used for this application.
+ */
+ protected MessageManager createMessageManager (String bundlePath)
+ {
+ return new MessageManager(bundlePath, null, _siteIdent);
+ }
+
+ /**
+ * This should be overridden by the application implementation to invoke any necessary
+ * pre-initialization code. They should be sure to call super.willInit().
*/
protected void willInit (ServletConfig config)
{
}
/**
- * This should be overridden by the application implementation to
- * invoke any necessary post-initialization code. They should be sure
- * to call super.didInit().
+ * This should be overridden by the application implementation to invoke any necessary
+ * post-initialization code. They should be sure to call super.didInit().
*/
protected void didInit (ServletConfig config)
{
}
/**
- * Allows derived aplication classes to prepare an invocation context
- * prior to the logic class being invoked. They may wish to add
- * standard tools to the context or do any other request-invariant
- * preparation.
+ * Allows derived aplication classes to prepare an invocation context prior to the logic class
+ * being invoked. They may wish to add standard tools to the context or do any other
+ * request-invariant preparation.
*/
protected void prepareContext (InvocationContext ctx)
{
}
/**
- * Allows derived application classes to check access in a single location
- * prior to resolving and dispatching a logic class, if they desire access
- * control at this level. Alternatively, access control can be performed by
- * the logic instance.
+ * Allows derived application classes to check access in a single location prior to resolving
+ * and dispatching a logic class, if they desire access control at this level. Alternatively,
+ * access control can be performed by the logic instance.
*/
protected void checkAccess (InvocationContext ctx)
throws RedirectException, HttpErrorException
@@ -202,10 +192,9 @@ public class Application
}
/**
- * If an exception propagates up from {@link Logic#invoke}, the application
- * is given the chance to convert a low-level exception into a {@link
- * FriendlyException} or a {@link RedirectException} which will be handled
- * in the normal way.
+ * If an exception propagates up from {@link Logic#invoke}, the application is given the chance
+ * to convert a low-level exception into a {@link FriendlyException} or a {@link
+ * RedirectException} which will be handled in the normal way.
*/
protected Exception translateException (Exception error)
{
@@ -213,18 +202,15 @@ public class Application
}
/**
- * If a generic exception propagates up from {@link Logic#invoke} and is
- * not otherwise converted into a friendly or redirect exception, the
- * application will be required to provide a generic error message to be
- * inserted into the context and should take this opportunity to log the
- * exception.
+ * If a generic exception propagates up from {@link Logic#invoke} and is not otherwise
+ * converted into a friendly or redirect exception, the application will be required to provide
+ * a generic error message to be inserted into the context and should take this opportunity to
+ * log the exception.
*
- *
Note: the string returned by this method will be translated - * using the application's message manager before being inserted into the - * Velocity context. + *
Note: the string returned by this method will be translated using the + * application's message manager before being inserted into the Velocity context. */ - protected String handleException ( - HttpServletRequest req, Logic logic, Exception error) + protected String handleException (HttpServletRequest req, Logic logic, Exception error) { Log.warning(logic + " failed on: " + RequestUtils.reconstructURL(req)); Log.logStackTrace(error); @@ -232,16 +218,15 @@ public class Application } /** - * This should be overridden by the application implementation to - * perform any necessary cleanup. + * This should be overridden by the application implementation to perform any necessary + * cleanup. */ public void shutdown () { } /** - * Returns a reference to the servlet context in which this - * application is operating. + * Returns a reference to the servlet context in which this application is operating. */ public ServletContext getServletContext () { @@ -249,8 +234,7 @@ public class Application } /** - * Returns the message manager in effect for this application, if one - * is in effect. + * Returns the message manager in effect for this application, if one is in effect. */ public MessageManager getMessageManager () { @@ -258,8 +242,8 @@ public class Application } /** - * Returns the site identifier in effect for figuring out which site - * through which a user is making a request. + * Returns the site identifier in effect for figuring out which site through which a user is + * making a request. */ public SiteIdentifier getSiteIdentifier () { @@ -267,9 +251,8 @@ public class Application } /** - * Returns a reference to the loader used to obtain site-specific - * resources. This is only valid if the user specified the - * site-specific jar file path in the servlet configuration. + * Returns a reference to the loader used to obtain site-specific resources. This is only valid + * if the user specified the site-specific jar file path in the servlet configuration. * * @see #SITE_JAR_PATH_KEY */ @@ -279,12 +262,10 @@ public class Application } /** - * Called to instantiate the site identifier that we'd like to use in - * this application. This will be an instance of {@link - * IndiscriminateSiteIdentifier} unless the derived application class - * overrides this method and creates something more to its liking. - * This will be called after the application's {@link #init} method - * has been called. + * Called to instantiate the site identifier that we'd like to use in this application. This + * will be an instance of {@link IndiscriminateSiteIdentifier} unless the derived application + * class overrides this method and creates something more to its liking. This will be called + * after the application's {@link #init} method has been called. */ protected SiteIdentifier createSiteIdentifier (ServletContext ctx) { @@ -302,46 +283,14 @@ public class Application /** * A convenience function for translating messages. */ - public final String translate (InvocationContext ctx, String msg, - Object arg) - { - return _msgmgr.getMessage(ctx.getRequest(), msg, - new Object[]{ arg }); - } - - /** - * A convenience function for translating messages. - */ - public final String translate (InvocationContext ctx, String msg, - Object arg1, Object arg2) - { - return _msgmgr.getMessage(ctx.getRequest(), msg, - new Object[]{ arg1, arg2 }); - } - - /** - * A convenience function for translating messages. - */ - public final String translate (InvocationContext ctx, String msg, - Object arg1, Object arg2, Object arg3) - { - return _msgmgr.getMessage(ctx.getRequest(), msg, - new Object[]{ arg1, arg2, arg3 }); - } - - /** - * A convenience function for translating messages. - */ - public final String translate (InvocationContext ctx, String msg, - Object[] args) + public final String translate (InvocationContext ctx, String msg, Object... args) { return _msgmgr.getMessage(ctx.getRequest(), msg, args); } /** - * Given the servlet path (the part of the URI after the context path) - * this generates the classname of the logic class that should handle - * the request. + * Given the servlet path (the part of the URI after the context path) this generates the + * classname of the logic class that should handle the request. */ protected String generateClass (String path) { @@ -356,12 +305,10 @@ public class Application return _logicPkg + path; } - /** A reference to the servlet context in which this application is - * operating. */ + /** A reference to the servlet context in which this application is operating. */ protected ServletContext _context; - /** The prefix that we use to generate fully qualified logic class - * names. */ + /** The prefix that we use to generate fully qualified logic class names. */ protected String _logicPkg; /** A reference to our message manager or null if we have none. */ @@ -373,16 +320,14 @@ public class Application /** Provides access to site-specific resources. */ protected SiteResourceLoader _siteLoader; - /** The servlet parameter key specifying the path to the application's - * translated message resources. */ + /** The servlet parameter key specifying the path to the application's translated message + * resources. */ protected static final String MESSAGE_BUNDLE_PATH_KEY = "messages_path"; - /** The servlet parameter key specifying the path to the site-specific - * jar files. */ + /** The servlet parameter key specifying the path to the site-specific jar files. */ protected static final String SITE_JAR_PATH_KEY = "site_jar_path"; - /** The servlet parameter key specifying the path to the site-specific - * translated message resources. */ - protected static final String SITE_MESSAGE_BUNDLE_PATH_KEY = - "site_messages_path"; + /** The servlet parameter key specifying the path to the site-specific translated message + * resources. */ + protected static final String SITE_MESSAGE_BUNDLE_PATH_KEY = "site_messages_path"; }