Mudanças entre as edições de "RFWBundle"

De Wiki do Leitão
Ir para: navegação, pesquisa
Linha 16: Linha 16:


== Estrutura e Componentes ==
== Estrutura e Componentes ==
=== Atributos Principais ===
 
==== Atributo bundle ====
=== Métodos Principais ===
=== Métodos Principais ===
==== loadBundle ====
==== '''loadBundle''' ====
==== get(String key, String... params) ====
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(Throwable t) ====
 
==== replaceParameters ====
==== '''get(String key, String... params)''' ====
==== get(Enum<?> value) ====
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(MeasureUnit measureUnit) ====
 
==== '''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.
 
{{nota|Tratamento Específico para RFWValidationException|
Se a exceção recebida for uma instância de `RFWValidationException`, o método realiza substituições adicionais na mensagem além dos parâmetros padrão `${0}`, `${1}`, etc. As variáveis suportadas incluem:
 
* `'''${fieldname}'''`: Substituído pelos nomes dos campos da classe que causaram a validação a falhar.
* `'''${classname}'''`: Substituído pelo nome da classe onde ocorreu a falha de validação.
* `'''${cause}'''`: Substituído pelo nome da classe da causa original da exceção.
 
Essas substituições permitem que a mensagem seja mais informativa e específica ao contexto da validação que falhou.
Os valores dessas variáveis podem ser definidos nos construtores da '''[[RFWValidationException]]'''.
}}
 
 
==== '''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 ==
== Carregamento e Configuração do Bundle ==

Edição das 02h17min de 4 de setembro de 2024

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.

Note 64.png
Tratamento Específico para RFWValidationException

Se a exceção recebida for uma instância de `RFWValidationException`, o método realiza substituições adicionais na mensagem além dos parâmetros padrão `${0}`, `${1}`, etc. As variáveis suportadas incluem:

  • `${fieldname}`: Substituído pelos nomes dos campos da classe que causaram a validação a falhar.
  • `${classname}`: Substituído pelo nome da classe onde ocorreu a falha de validação.
  • `${cause}`: Substituído pelo nome da classe da causa original da exceção.

Essas substituições permitem que a mensagem seja mais informativa e específica ao contexto da validação que falhou. Os valores dessas variáveis podem ser definidos nos construtores da RFWValidationException.


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.

Java 256.png 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.


Note 64.png
RUString.getEnumKey()
A classe [RUString] contém um método getEnumKey(Enum<?>) que retorna exatamente a chave do Enumeration passado, mesmo método utilizado pelo RFWVBundle.


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:

Java 256.png 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]


Note 64.png
Parâmetros das Exceptions
Note que os parâmetros que são substituídos no bundle são os mesmos passados na RFWException, seguindo a mesma lógica do método get(String, String...).


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.