Addresses my concerns quite nicely and should be easy to refactor code against.

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]

Reply via email to