RFWDataFormatter
O RFWDataFormatter é uma interface utilizada para criar implementações de classe que realizam a conversão de dados do sistema (como manipulado no VO ou persistido no banco) e o formato para exibição para o usuário. Por exemplo, no VO temos um valor monetário salvo com o tipo BigDecimal, mas para o usuário precisamos formatar incluindo cifrão, símbolo de moeda e número de casas decimais.
O passo contrário, de tratar as entradas do usuário ou de outras fontes, também podem ser tratadas nesta classe e otimizadas por todo o sistema.
Classes Implementadas
O RFW já contém diversas classes implementadas que ajudarão no processo de parser e formatação dos dados, por exemplo:
- RFWEnumerationDataFormatter - Formata uma enumeration de acordo com seu valor no arquivo de bundle. Esta classe não faz o processo de parser.
- RFWLongDataFormatter - Formata um número Long para exibição, permitindo algumas configurações de formato, número máximo e mínimo, etc. para realização do parser.
Todas as classes seguem o padrão de nome: RFW....DataFormatter.
Parser e Conversão
O parser da informação e a formação são realizadas respectivamente pelos métodos:
- toVO() - recebe o dados bruto como entrado pelo usuário ou outra fonte e retorna o objeto para ser inserido no VO; e,
- toPresentation() - recebe o objeto do VO e formata para exibição conforme definições da classe.
Validação no Parser
Há o método validate() na classe. Que tem a função exclusiva de validar se a entrada do usuário pode ser interpretada e convertida pela classe.
Em suma ela tem a mesma validação do toVO(), com a diferença que não retorna nenhum objeto, apenas lança exceção se falhar.
Tamanho Máximo
O DataFormatter costuma ter um método de tamanho máximo (maxLenght) para informar o tamanho máximo de entrada de dados para aquela formatação. Que muitas vezes pode diferir do tamanho do VO. Por exemplo, imagine que o formato salvo no VO seja uma data no formato timestamp em String: "20230721", tamanho máximo de 8 caracteres. Já o usuário entrará no formato brasileiro: "21/07/2023", tamanho máximo 10. Outro exemplo seria um CPF, salvo no VO apenas os números, mas para exibição teremos a pontuação.
Este método é muito útil para limitar entradas de campos de UI.
reformatPresentationContent
Este método tem uma dinâmica relativamente simples, tem a função de reformatar o dado que um usuário digita para exibi-lo no formato do sistema. Por exemplo, para um valor monetário, o usuário digita "1054,3", a aplicação consegue fazer o parser, mas exibe o valor reformatado para "$ 1.054,30". Este método tem essa finalidade.
Na implementação padrão este método chama o método toVO() para realizar o parser, e em seguida chama novamente o toPresentation() para obter o valor formatado.