Package systextil.msg
Framework para mensagens de negócio e internacionalização.
Baseia-se nas interfaces Translator
para tradutores e
Translatable
para objetos que podem requerer tradução.
Estão disponíveis implementações básicas de classes para objetos traduzíveis,
que são Msg
para mensagens e Tag
para as unidades
básicas de tradução que são usadas pelas mensagens. A interface
Interactive
pode ser usada quando há necessidade de apresentar
ao usuário mensagens que requerem sua intervenção imediata.
Mais informações podem ser obtidas na documentação de cada classe.
Exemplos de uso
- Lançar uma mensagem de validação fixa
if(!valid) throw new Msg("O resultado obtido não é válido.");
- Lançar uma mensagem de validação simples
if(!valid) throw new Msg(new Tag("notValid"));
ATENÇÃO! Um argumento do tipoString
representaria um texto fixo, e não a tag de um texto a traduzir.Por isso, o melhor mesmo é usar:
if(!valid) throw Msg.fromTag("notValid");
- Lançar uma mensagem de validação com parâmetros
if(!isValid(value)) throw new Msg(new Tag("notValid").add(value1).add(value2));
ou, em classes Java:if(!isValid(value)) throw Msg.fromTag("notValid", value1, value2);
- Lançar uma mensagem de validação composta
if(!isValid(value)) { Msg msg = new Msg() .println(new Tag("dontBeStupid")) .println(new Tag("notValid").add(value)) .println(today); .print(new Tag("fuckYou")); throw msg; }
- Assinatura de um método de negócio
public double calcular(AppConnection conn, int whatever) throws Msg
- Tratamento de mensagem lançada
try { calcular(conn, 1000); commitTransaction(); } catch(Msg msg) { rollbackTransaction(); throw msg; }
- Pedir confirmação simples ao usuário
if(!interactive.prompt(new Tag("pleaseConfirm").add(value))) return false;
- Pedir confirmação fixa ao usuário
if(!interactive.prompt(new Msg("Tem certeza?"))) return false;
- Pedir confirmação complexa ao usuário
Msg msg = new Msg() .println(new Tag("somethingWrong")) .println(new Tag("notValid").add(value)) .println(today); .print(new Tag("pleaseConfirm")); if(!interactive.prompt(msg)) return false;
Considerações para migração do framework antigo
O framework antigo, baseado em Tag
, TagException
, TagMessage
e UtilTag
, passa a ser uma extensão deste novo, e destina-se a ficar obsoleto.
Isto preserva grande parte da compatibilidade de forma transparente, mas não em tudo.
Alguns ajustes devem ser feitos nas aplicações que o usam imediatamente na implantação
(não podem esperar para depois) enquanto outros podem - e devem ser aplicados
gradualmente.
São os seguintes os ajustes necessários:
- A interface
TagInteractive
ficou maior, expandindo a nova interfaceInteractive
. Não foi tornada uma classe abstrata para não causar incompatibilidade binária em tempo de execução. - Todas as implementações de
TagInteractive
devem implementar a nova interface expandida. Elas só existem nas chamadas principais das plataformas que os usam, que são:- a classe
ControleSobre
no NXJ; - a classe
BaseThread
dos processos agendados; - o componente
systextil-vision.jar
; - talvez outros aplicativos auxiliares, como o de importação de lojas da Totall.
- a classe
- A classe
Msg
é uma subclasse deTagException
para manter a compatibilidade reversa nos lançamentos e capturas de Exceptions.No primeiro instante, não há nenhuma instância de
Msg
. Por isso, a assinatura dos métodos que lançamTagException
não precisa ser alterada. Entretanto, à medida que novas mensagens são lançadas, recomenda-se que os métodos sejam alterados para lançarMsg
.Quando não existirem mais
TagException
s sendo lançadas nas aplicações - o que pode ser obtido marcando todas as classes do framework antigo como@deprecated
em algum momento - então será interessante mudar todos oscatch
deTagException
paracatch
deMsg
, e eliminar as classes antigas.
-
ClassDescriptionFornece um objeto capaz de apresentar uma pergunta e obter uma resposta do tipo SIM ou NÃO.Apresenta ao usuário mensagens traduzíveis que requerem sua intervenção imediata.Conveniência para criar mensagens que requerem (ou não) tradução para serem comunicadas pelos componentes da aplicação.Representa uma Tag simples (sem parâmetros) ou composta (com parâmetros).Mensagem traduzível: indica que pode (ou deve) ser traduzida para fornecer uma mensagem adequada.Tradutor: obtém de um repositório de tags a mensagem traduzida correspondente a uma tag.