What about a String constant representing a global warning, and then only
warn(String fieldName, String key)
warn(String fieldName, String key, Object...)
i.e.
warn(GLOBAL, "warnings.foo", 42);
Joe
At 12:26 PM -0700 5/5/06, Bob Lee wrote:
There's some potential overloading ambiguity. For example:
void warn(String key, Object... arguments);
void warn(String fieldName, String key);
Right now, if I want to add a global warning with one String argument,
I'll have to cast the argument to Object:
messages.warn("key", (Object) "argument");
I think we should rename the global methods (as they're the lesser
used) or the argument methods. Here are some options:
void formatAndWarn(String key, Object... arguments);
void warnGlobally(String key, Object... arguments);
void globalWarn(String key, Object... arguments);
void generalWarn(String key, Object... arguments);
void warnAll(String key, Object... arguments);
void warnOverall(String key, Object... arguments);
void addGlobalWarning(String key, Object... arguments);
void warnWithArguments(String key, Object... arguments);
Preferences, more suggestions?
Bob
On 5/5/06, Don Brown <[EMAIL PROTECTED]> wrote:
I like it, Level should extend Comparable, and Global works for me.
Don
Bob Lee wrote:
- The attached version supports arbitrary levels. I used an interface
instead of an enum so the user can define additional levels if they
wish. Should Level extend Comparable?
- It has built in support for INFO, WARN, and ERROR along with
respective convenience methods.
- It provides a Map of field messages. It's not necessary for Messages
itself to implement both Map and List. Delegating to separate objects
is less confusing.
- Adding messages and checking for the presence of messages
(hasErrors()) should be dead simple. Getting the messages doesn't have
to be as convenient (at least not through the published API).
- "Request-scoped" is the wrong word. We're really talking about "not
associated with a field." Page-scoped? Form-scoped? Global?
Thanks,
Bob
------------------------------------------------------------------------
package org.apache.struts.action2;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.io.Serializable;
/**
* Request and field-scoped messages. Uses keys instead of actual
messages to decouple code from messages. Messages
* may come from multiple actions and interceptors.
*
* @author [EMAIL PROTECTED] (Bob Lee)
*/
public interface Messages {
/**
* Message level.
*/
public interface Level {
/**
* Informational message level.
*/
public static final Level INFO = new LevelImpl("info");
/**
* Warning message level.
*/
public static final Level WARN = new LevelImpl("warn");
/**
* Error message level.
*/
public static final Level ERROR = new LevelImpl("error");
}
/**
* Adds request-scoped informational message.
*
* @param key message key
* @see Level.INFO
*/
void info(String key);
/**
* Adds request-scoped informational message.
*
* @param key message key
* @param arguments message arguments
* @see Level.INFO
*/
void info(String key, Object... arguments);
/**
* Adds field-scoped informational message.
*
* @param fieldName name of field to attach message to
* @param key message key
* @see Level.INFO
*/
void info(String fieldName, String key);
/**
* Adds field-scoped informational message.
*
* @param fieldName name of field to attach message to
* @param key message key
> * @param arguments message arguments
* @see Level.INFO
*/
void info(String fieldName, String key, Object... arguments);
/**
* Adds request-scoped warning message.
*
* @param key message key
* @see Level.WARN
*/
void warn(String key);
/**
* Adds request-scoped warning message.
*
* @param key message key
* @param arguments message arguments
* @see Level.WARN
*/
void warn(String key, Object... arguments);
/**
* Adds field-scoped warning message.
*
* @param fieldName name of field to attach message to
* @param key message key
* @see Level.WARN
*/
void warn(String fieldName, String key);
/**
* Adds field-scoped warning message.
*
* @param fieldName name of field to attach message to
* @param key message key
* @param arguments message arguments
* @see Level.WARN
*/
void warn(String fieldName, String key, Object... arguments);
/**
* Adds request-scoped error message.
*
* @param key message key
* @see Level.ERROR
*/
void error(String key);
/**
* Adds request-scoped error message.
*
* @param key message key
* @param arguments message arguments
* @see Level.ERROR
*/
void error(String key, Object... arguments);
/**
* Adds field-scoped error message.
*
* @param fieldName name of field to attach message to
* @param key message key
* @see Level.ERROR
*/
void error(String fieldName, String key);
/**
* Adds field-scoped error message.
*
* @param fieldName name of field to attach message to
* @param key message key
* @param arguments message arguments
* @see Level.ERROR
*/
void error(String fieldName, String key, Object... arguments);
/**
* Adds request-scoped message.
*
* @param level message level
* @param key message key
*/
void add(Level level, String key);
/**
* Adds request-scoped message.
*
* @param level message level
* @param key message key
* @param arguments message arguments
*/
void add(Level level, String key, Object... arguments);
/**
* Adds field-scoped message.
*
* @param level message level
* @param fieldName name of field to attach message to
* @param key message key
*/
void add(Level level, String fieldName, String key);
/**
* Adds field-scoped message.
*
* @param level message level
* @param fieldName name of field to attach message to
* @param key message key
* @param arguments message arguments
*/
void add(Level level, String fieldName, String key, Object...
arguments);
/**
* Gets request-scoped messages.
*
* @param level message level
* @return unmodifiable list of messages for this request.
*/
List<String> forRequest(Level level);
/**
* Gets field-scoped messages.
*
* @param level message level
* @return unmodifiable map of field names to message lists
*/
Map<String, List<String>> forFields(Level level);
/**
* Returns set of levels for which we have messages.
*
* @return unmodifiable set of levels
*/
Set<Level> levels();
/**
* Returns true if we have request or field-scoped error messages.
*
* @see Level.ERROR
*/
boolean hasErrors();
/**
* Returns true if we have request or field-scoped warning messages.
*
* @see Level.WARN
*/
boolean hasWarnings();
/**
* Returns true if we have request or field-scoped
informational messages.
*
* @see Level.INFO
*/
boolean hasInformation();
>
/**
* Returns true if no request or field-scoped messages have been added.
*/
boolean isEmpty();
/**
* Returns true if no request or field-scoped messages have
been added for the given level.
*
* @param level message level
*/
boolean isEmpty(Level level);
static class LevelImpl implements Messages.Level, Serializable {
private static final long serialVersionUID = 0;
static Map<String, Level> levels = new HashMap<String, Level>();
String name;
public LevelImpl(String name) {
this.name = name;
levels.put(name, this);
}
Object readResolve() {
return forName(name);
}
public String toString() {
return "Level(" + name + ")";
}
static Level forName(String name) {
Level level = levels.get(name);
if (level == null)
throw new NullPointerException("Invalid level: " + name);
return level;
}
}
}
------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
Joe Germuska
[EMAIL PROTECTED] * http://blog.germuska.com
"You really can't burn anything out by trying something new, and
even if you can burn it out, it can be fixed. Try something new."
-- Robert Moog
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]