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
Métodos Principais
loadBundle
O método loadBundle é responsável por carregar os arquivos de propriedades (bundles) que contêm as mensagens utilizadas pelo sistema. Ele deve ser chamado com um nome de arquivo específico. Se o bundle já estiver carregado uma exceção crítica (`RFWCriticalException`) será lançada. Este método garante que as mensagens estejam disponíveis para recuperação por outros métodos da classe.
get(String key, String... params)
O método get é utilizado para recuperar uma mensagem associada a uma chave específica do bundle. Além disso, ele permite a substituição de parâmetros dinâmicos dentro da mensagem, utilizando placeholders como `${0}`, `${1}`, etc. Isso torna as mensagens adaptáveis a diferentes contextos ao inserir informações específicas em tempo de execução.
get(Throwable t)
O método get sobrecarregado com um parâmetro do tipo `Throwable` é usado para recuperar e formatar mensagens baseadas em exceções, especialmente aquelas que herdam de RFWException. Ele percorre a cadeia de causas da exceção para identificar a raiz do problema e formata a mensagem correspondente, incluindo detalhes como a classe da exceção e os parâmetros associados.
![]() |
|
get(Enum<?> value)
O método get com um parâmetro `Enum` é projetado para recuperar mensagens associadas a valores de enumerações. Ele constrói a chave do bundle a partir do valor da enumeração e tenta recuperar a mensagem correspondente. Se a chave não for encontrada no bundle, um aviso é registrado usando o RFWLogger.
get(MeasureUnit measureUnit)
O método get com um parâmetro MeasureUnit lida com a recuperação de mensagens associadas a unidades de medida. Ele trata instâncias de CustomMeasureUnit de maneira especial, formatando a mensagem com o símbolo e o nome da unidade. Para outras unidades de medida, ele delega a recuperação ao método que lida com enums.
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.