BundleManager

De BIS Wiki
Ir para navegação Ir para pesquisar

O BundleManager é uma classe singleton que permite a centralização de bundles de internacionalização. Seu funcionamento consiste em permitir que, no nosso caso, Plugins diferentes registrem seus bundles informando quais prefixos de chaves ou mesmo de package de classes (para internacionalização dos Enums e outras classes) podem ser encontrados em cada bundle.

Uma vez que os bundles estejam registrados qualquer parte do software pode ter acesso à todos os bundles mesmo sem ter conhecimento prévia da chave. Por exemplo, um plugin qualquer pode solicitar a internacionalização de um código de erro ou chave de Enum para o BundleManager, e desde que o bundle já esteja registrado adequadamente no BundleManager o valor será retornado.

Desta forma ao usar funções de outro plugin, quando resultam em erro, o código do erro pode ser internacionalizado apenas requisitando o código do erro para o BundleManager.

Regras de Funcionamento

Uma chave de internacionalização do BundleManager é composto por duas partes:

  • Prefixo - O prefixo da chave é o conteúdo desde o começo até o primeiro caractere '_'. Isto é, se tivermos uma chave "BISKernel_000001" o prefixo será "BISKernel".
  • Identificação - A identificação é tudo o que vêm depois deste primeiro caractere '_', e deve ser único em todo o arquivo assim como as regras de bundles. No exemplo citado acima, a identificação é toda numérica: "000001".


Uma vez que o BundleManager direciona a consulta do bundle de acordo com o prefixo registrado do bundle, precisamos criar prefixos diferentes para cada arquivo de bundle. O que na prática quer dizer um prefixo para cada plugin. Normalmente temos 2 prefixos sendo usados por Plugin, o primeiro para identificar as chaves de bundles comuns (mensagens de erros, internacionalização de campos, etc.) e o segundo é um prefixo baseado no package padrão do plugin. Esse segundo tem a finalidade de permitir que o BundleManager possa direcionar as consultar de bundles dos Enums e objetos de classes automatizados. Utilizando o próprio Canonical Name da entidade para trocar o "código Java" pela internacionalização sem ter que ficar definindo chaves para cada objeto.

Note 64.png
Internacionalização por Canonical Name do Objeto
Todo o BIS é orientado a usar o BundleManager, e diversos controles de tela bem como internacionalização de Enuns é feito usando o CanonicalName do objeto e solicitado diretamente no BundleManager. Por isso é importante que cada Plugin registre seu package como prefixo no bundle e crie as chaves adequadas no arquivo.


Exemplo

Para entender nada melhor que um exemplo! Imagine que temos a classe 'x.y.z.plugin.entities.Cliente'. E dentro temos um enum chamado 'STATUS', sendo que este tem três valores definidos: 'ACTIVE', 'INACTIVE' E 'DELETED'.


Se todo o código do plugin estiver dentro do package 'x.y.z.plugin', esse é o package que deve ser usado para registrar o bundle. Deve-se tomar cuidado para não registrar um package genérico demais ou poderá impedir que o BundleManager encontre outros bundles cujo prefixo do package seja o mesmo. por outro lado não deve-se especificar demais o package a ponto de excluir packages que possam ter códigos do plugin.


Já para a criação do arquivo de bundle, em português, teremos as seguintes entradas:

x.y.z.plugin.entities.Cliente.STATUS.ACTIVE=Ativo
x.y.z.plugin.entities.Cliente.STATUS.INACTIVE=Inativo
x.y.z.plugin.entities.Cliente.STATUS.DELETED=Excluído