RFWBundle

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

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 da própria biblioteca.

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 [MeasureUnit].


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.