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 tipoStringrepresentaria 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
TagInteractiveficou 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
TagInteractivedevem implementar a nova interface expandida. Elas só existem nas chamadas principais das plataformas que os usam, que são:- a classe
ControleSobreno NXJ; - a classe
BaseThreaddos 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 deTagExceptionpara 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çamTagExceptionnã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
TagExceptions sendo lançadas nas aplicações - o que pode ser obtido marcando todas as classes do framework antigo como@deprecatedem algum momento - então será interessante mudar todos oscatchdeTagExceptionparacatchdeMsg, 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.