br.com.caelum.stella.ResourceBundleMessageProducer Maven / Gradle / Ivy
package br.com.caelum.stella;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import br.com.caelum.stella.validation.InvalidValue;
/**
*
* ResourceBlundeMessageProducer é responsável pela geração de mensagens de
* erro. Estas mensagens são procuradas em um ResourceBundle, através de uma
* chave associada a cada erro.
*
*
* A chave de um erro é composta do seguinte modo:
*
*
* String key = simpleName + "." + errorName;
*
*
* Onde simpleName é o atributo simpleName do Enum e o errorName é o nome da
* constante enum. Além disso, a chave é convertida em letras minúsculas.
*
*
* Veja o exemplo:
*
*
* A chave do erro representado por CPFError.INVALID_DIGITS é
* cpferror.invalid_digits .
*
*
* @author Fabio Kung
* @author Leonardo Bessa
*
*/
public class ResourceBundleMessageProducer implements MessageProducer {
private final ResourceBundle bundle;
/**
* @param bundle
* ResourceBlunde que contém o mapa que associa erros as
* mensagens.
*/
public ResourceBundleMessageProducer(final ResourceBundle bundle) {
this.bundle = bundle;
}
public ValidationMessage getMessage(InvalidValue error) {
Locale locale = bundle.getLocale();
if (locale == null) {
locale = Locale.getDefault();
}
String key = messageKeyFor(locale, error.getClass(), error);
String message;
try {
message = bundle.getString(key);
} catch (MissingResourceException ex) {
message = key.replaceFirst("[.]", " : ").replaceAll("_", " ");
}
return new SimpleValidationMessage(message);
}
/**
* A chave padrao é gerada com base no nome da classe do erro e do nome do
* erro, sempre minúscula.
*
*
* Ex.:
*
* - classe do erro: CPFError
* - nome do erro: INVALID_DIGITS
*
*
* Chave gerada: cpferror.invalid_digits.
*
*
* @param locale
* a ser usado na conversão para minúsculo
* @param errorClass
* @param error
* @return chave que representa o erro a ser usada para recuperar sua
* mensagem associada
*/
public String messageKeyFor(Locale locale, Class extends InvalidValue> errorClass, InvalidValue error) {
String simpleName = errorClass.getSimpleName();
String errorName = error.name();
String key = simpleName + "." + errorName;
return key.toLowerCase(locale);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy