CSVGenerator

De BIS Wiki
Revisão de 22h05min de 4 de setembro de 2017 por Rodrigogml (discussão | contribs) (CSVGenerator)
Ir para navegação Ir para pesquisar

O CSVGenerator tem o objeto de permitir a geração de arquivos CSV a partir da estrutura de dados utilizada pelo BIS. Aproveito a estrutura dos VOs e BISMetaObjects (VO_), isto é, aceita uma lista de VOs, e gera o arquivo CSV a partir das colunas selecionadas de dentro desses objetos.

Para exemplificar o funcionamento de todas as partes do CSVGenerator vamos imaginar que queremos exportar como CSV nosso cadastro de pessoas, lista de PersonVO.

CSVGeneratorOptions

O CSVGeneratorOptions carrega praticamente toda a configuração de como o arquivo deve ser gerado. Desta forma é possível realizar toda a definição em qualquer cama (UI por exemplo) e passar para o gerador de uma única vez. Permite que seja criado um componente único para manipular o objeto para as UIs e reaproveitado em todas as telas, útil principalmente quando o gerador ganha novas opções.

Entre as configurações básicas do arquivo estão:

  • Delimitador - utilizado para separar os campos do arquivo
  • Localidade - Define a localidade para formatação básica dos valores, como caractere de decimais, data, etc.
  • Títulos das Colunas - Define se deve ser escrito uma linha no começo com os títulos das colunas.
  • Valor de Nulo - Valor que deve ser utilizado caso o objeto tenha um valor nulo. Por padrão não é escrito nada, o equivalente á "", mas pode ser necessário distinguir o "" do null.

CSVGenerator

Todos os atributos de configuração já tem um valor padrão, de forma que para gerar um CSV, basta definir as colunas desejadas e passar a coleção de dados no método .generate().


Exemplos de Uso
    // Define as colunas no options
    options.setColumns(new String[]{
        PersonVO_.VO.displayname(),
        PersonVO_.VO.fullname(), 
        PersonVO_.VO.cpfcnpj()
    });

    // Construtor vazio cria um CSVGeneratorOptions com a opções padrão. Mas depois tem que pegar o options para colocar as colunas ou terá um CSV vazio.
    final CSVGenerator<PersonVO> gen = new CSVGenerator<PersonVO>(options);

    // Retorna o CSV com as colunas selecionadas.
    return gen.generate(personList);
Colunas Repetidas
Note que o nome da coluna é o identificador da coluna, por isso o CSVGenerator não aceita colunas com o mesmo nome, ou, no caso, colunas repetidas. Para inserir a mesma coluna duas vezes, (há vários casos para isso explicados mais a seguir) é necessário incluir uma coluna "personalizada". Também explicada mais a seguir.


O arquivo foi gerado, mas muitas vezes não é o que desejamos. Agora para formatar, configurar e manipular os dados é que precisará de configurações adicionais.


Formatando os Dados

A formatação dos dados é feita de forma simples e de acordo com o locale passado. São formatados os números e datas apenas. De resto os campos são escritos utilizando o equivalente ao .toString() do objeto, e apenas dos objetos conhecidos pelo CSVGenerator, como String, BigDecimal, Enum, Float, Double, etc.. Outros formatos geram exception crítica para forçar um tratamento mais adequado do desenvolvedor.

O CSVGenerator permite a configuração das colunas utilizando a interface BISDataFormatter. Para isso defina a instância do BISDataFormatter desejado na coluna através do CSVGeneratorOptions:

Exemplos de Uso
    // inclui o formatador de cpf/cnpj na coluna com o valor do documento
    options.getColumnFormatter().put(PersonVO_.VO.cpfcnpj(), BISCPFOrCNPJDataFormatter.getInstance());