Package systextil.msg


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 tipo String 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 interface Interactive. 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 Msg é uma subclasse de TagException 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çam TagException não precisa ser alterada. Entretanto, à medida que novas mensagens são lançadas, recomenda-se que os métodos sejam alterados para lançar Msg.

    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 @deprecated em algum momento - então será interessante mudar todos os catch de TagException para catch de Msg, e eliminar as classes antigas.

  • Class
    Description
    Fornece 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.