ValidatorMessages.java
package org.andromda.cartridges.jsf.validator;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import javax.faces.context.FacesContext;
import org.andromda.cartridges.jsf.Messages;
import org.apache.commons.validator.Arg;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
/**
* Retrieves and formats the validation messages.
*
* @author Chad Brandon
*/
public class ValidatorMessages
{
/**
* Gets the <code>message</code> based on the <code>action</code>
* message and the <code>field</code>'s arg objects.
*
* @param action Validator action
* @param args any message arguments to be substituted.
* @param context the faces context
* @return action message
*/
public static String getMessage(
final ValidatorAction action,
final String[] args,
final FacesContext context)
{
final Locale locale = context.getViewRoot().getLocale();
String message = null;
final String messageKey = action.getMsg();
if (messageKey != null)
{
try
{
message = Messages.get(
messageKey,
args);
}
catch (final MissingResourceException exception)
{
message = messageKey;
}
}
message = new MessageFormat(
message,
locale).format(args);
return message;
}
/**
* Gets the message given the action, field and faces context.
*
* @param action the validator action instance.
* @param field the field.
* @param context the faces context.
* @return the message
*/
public static String getMessage(
final ValidatorAction action,
final Field field,
final FacesContext context)
{
return getMessage(
action,
getArgs(
action.getName(),
field),
context);
}
/**
* Gets the message arguments based on the given
* validator <code>action</code> and <code>field</code>.
* @param action action name
* @param field the validator field
* @return message arguments
*/
public static String[] getArgs(
final String action,
final Field field)
{
final Arg[] args = field.getArgs(action);
final String[] argMessages = new String[args.length];
for (int ctr = 0; ctr < args.length; ctr++)
{
final Arg arg = args[ctr];
if (arg != null)
{
if (arg.isResource())
{
argMessages[ctr] = Messages.get(
arg.getKey(),
null);
}
else
{
argMessages[ctr] = arg.getKey();
}
}
}
return argMessages;
}
}