RFWBundle
RFWBundle
Introdução
Visão Geral
O RFWBundle é uma classe estática que centraliza a gestão de mensagens no sistema, permitindo a recuperação de mensagens configuráveis a partir de arquivos de propriedades, conhecidos como bundles. Essas mensagens são amplamente utilizadas para fornecer feedback ao usuário, registrar logs, e suportar a internacionalização da aplicação. O RFWBundle facilita a substituição de parâmetros dinâmicos nas mensagens, tornando-as adaptáveis a diferentes contextos e necessidades.
Contexto de Uso
O RFWBundle é utilizado em diversos pontos do sistema onde é necessário recuperar mensagens de forma consistente e centralizada. Situações típicas de uso incluem:
- Internacionalização: Suporte a múltiplos idiomas através da recuperação de mensagens configuradas em arquivos de propriedades específicos para cada idioma.
- Gestão de Erros e Logs: Recuperação de mensagens de erro e avisos a partir de chaves definidas, com a capacidade de personalizar a mensagem com parâmetros específicos.
- Flexibilidade de Configuração: Permite que as mensagens do sistema sejam alteradas sem modificar o código-fonte, bastando atualizar os arquivos de bundle, o que facilita a manutenção e a adaptação do sistema a diferentes ambientes e requisitos.
A classe RFWBundle é essencial para sistemas que necessitam de uma camada de apresentação de mensagens flexível e facilmente configurável, garantindo que as informações exibidas ou registradas sejam coerentes e adaptadas ao contexto de uso.
Estrutura e Componentes
Atributos Principais
Atributo bundle
Métodos Principais
loadBundle
get(String key, String... params)
get(Throwable t)
replaceParameters
get(Enum<?> value)
get(MeasureUnit measureUnit)
Carregamento e Configuração do Bundle
Processo de Carregamento
= Bundles Padrão
Erro ao Carregar Bundles
Recuperação de Mensagens
Chaves e Substituição de Parâmetros
Mensagens Baseadas em Exceções
Tratamento de Enums
Unidades de Medida
Boas Práticas e Considerações
Organização de Arquivos de Bundle
Substituição de Parâmetros
Manutenção e Atualização
Exemplos Práticos
Exemplo 1: Recuperação Simples de Mensagem
Exemplo 2: Tratamento de Exceções com Mensagens
Exemplo 3: Uso de Enums no Bundle
Exemplo 4: Trabalhando com Unidades de Medida
Considerações Finais
Resumo dos Benefícios
Possíveis Melhorias e Expansões
Referências
Links para Classes Relacionadas
Documentação Externa
Conteúdo Anterior
O RFWBundle é um serviço de Bundle oferecido pelo RFW. A classe estática RFWBundle ao ser inicializada já carrega os bundles do próprio RFW, trazendo as mensagens para as exceptions e Enumarations do próprio framework.
Carregando Arquivos de Bundles
Para incluir um arquivo de properties dentro do RFWBundle, deve ser chamado o método loadBundle(...) e passar o novo arquivo de bundle. Também é possível realizar a operação ao inicializar o framework, pelo método initializeBundle(...) da classe RFW.
![]() |
Carregando Arquivo de Bundle |
RFWBundle.loadBundle("bundlefile.properties");
|
Obtendo o Bundle
Para obter o Bundle o RFWBundle oferece os métodos get(...). Dependendo do objeto passado o módulo é capaz de extrair a chave e procurar nos arquivos de bundle automaticamente. Veja os detalhes de cada método a seguir:
get(Enum<?>)
Este método recebe como um argumento um objeto de Enumeração. O objeto de enumeração é procurado no arquivo de bundle pelo CanonicalName da sua Classe + Name da Enmeration. Por exemplo, imagine a Enumeration CASE_INSENSITIVE_ORDER da classe java.lang.String, será convertida na chave java.lang.String.CASE_INSENSITIVE_ORDER, para procurar entre os arquivos de bundle.
Neste caso, o arquivo de bundle deve ter uma entrada similar a esta:
java.lang.String.CASE_INSENSITIVE_ORDER=Ordem sem sensibilidade de caixa alta.
![]() |
|
get(String, String...)
Recupera os bundles dos arquivos e substitui propriedades dentro deles. Este método procura por bundles que tenham o texto ${i}, onde i é o índice do array recebido para substituir seu conteúdo.
Por exemplo, o bundle seja:
warnmsg=Mensagem de erro (${0}): ${1}
E código executado seja:
![]() |
Obtendo o conteúdo do Bundle |
String v = RFWBundle.get("warnmsg", "500", "Erro Crítico");
|
O conteúdo da variável v será "Mensagem de Erro (500): Erro Crítico".
get(MeasureUnit)
Similar o método de Enumeration, ele recebe um objeto da interface MeasureUnit e se resolve para tentar descobrir o enumeration correto. Para mais informações sobre esta classe veja mais sobre o MeasureRuler.
get(Throwable)
É um método criado para tentar obter o bundle diretamente dos erros (Throwables). Esta método considera que está em uso o padrão de Exceções & Tratamento do RFW.
O método funciona na seguinte cascata para obter o bundle:
- O Throwable é instância de RFWException?
- Sim: Tem um 'ExceptionCode' definido no padrão "[A-Z0-9_]+"?
- Sim: Busca a mensagem de Bundle pelo 'ExceptionCode' e tenta substituir os parâmetros na mensagem.
- Não: Retornará CanonicalName + Message (se Existir) + " at " + StackTrace()[0]
- Sim: Tem um 'ExceptionCode' definido no padrão "[A-Z0-9_]+"?
![]() |
|
No caso de ser a exception de validação RFWValidationException, o RFW ainda tem algumas variáveis adicionais que podem ser utilizadas no bundle:
- ${fieldname} - substitui pelo nome do campo em que ocorreu o problema de validação (veja atributos ClassName e FieldName da classe RFWValidationException)
- ${classname} - substitui pele nome da classe em que a falha de validação ocorreu
- ${cause} - substitui pelo CannonicalName da exception que causou a validação. Note que não é da própria RFWValidationException, mas sim da Throwable passada dentro dela como causa.