Continuando com a parte dois do tutorial sobre iReport, na parte um implementamos o método para fazer a exportação do arquivo de relatório. Agora iremos utilizar um servlet para invocar o método. No package de servlet crie a servlet ServletDownloadFile.

Então o primeiro passo é instanciar o objeto RelatorioService(). E como será preciso carregar uma lista de usuários, e nós utilizaremos o que já temos pronto, instancie também o DaoUsuario().

private RelatorioService relatorioService = new RelatorioService();
private DaoUsuario daoUsuario = new DaoUsuario();

E dentro do método doGet(), envolvido em um bloco try declare a variável tipoExportar, será ela a responsável por pegar da requisição por parâmetro o tipo de arquivo, isto é, se este arquivo é do tipo PDF ou do tipo Excel. Declare também a ServletContext.

ServletContext context = request.getServletContext();
String tipoExportar = request.getParamenter("tipoExportar");

E ainda dentro do doGet() implementaremos o método que de fato irá gerar o relatório. e para isso, é preciso antes carregar a lista de usuários. Tendo criado a lista de usuários, na sequência crie uma lista genérica, visto que a fonte de dados para a geração de relatórios recebe uma lista genérica.

Definiremos agora o caminho do relatório, onde como parâmetros teremos os dados, um new HashMap() vazio, porque aqui não temos parâmetro para passar.  Teremos ainda o relatório de entrada e o relatório de saída, ambos com o mesmo nome e por fim, o servletContext para que seja identificado no servidor a url.

Feito isso, construiremos agora o caminho completo e absoluto do arquivo. Assim, começaremos instanciando o arquivo de download, que receberá por parâmetro a variável que define o caminho do arquivo.

File downloadFile = new File(fileURL);

E este arquivo precisa ser lido pelo FileInputStream que cumpre o objetivo de fazer a leitura de dados, e que, portanto, ele está conectado a alguma fonte de dados.

File InputStream inputStream = new FileInputStream(downloadFile);

OBTENDO O TIPO DE ARQUIVO

O passo seguinte á obter o tipo MIME do arquivo. MIME é a sigla em inglês para Multipurpose Internet Mail Extensions, um padrão da internet que pode ser utilizado para incluir vários tipos de conteúdo dentro de uma única mensagem.

Grosso modo pode-se dizer que ele é usado para determinar o tipo de arquivo (basicamente a extensão) na comunicação pela Internet. Ao obtê-lo possibilitaremos que a nossa resposta possa entender de que tipo de arquivo se trata. E para obter o tipo MIME do arquivo escreva a linha de código abaixo:

String mimeType = contexto.getMimeType(fileUrl);

Desse modo se mimeType for igual a nulo, isto é, se o mapeamento MIME não for encontrado, ele será definido como tipo binário, podendo dessa forma fazer o download de qualquer arquivo.

E por meio do response definiremos os atributos para a resposta da requisição, atributos estes como a definição do tipo de arquivo, bem como o tamanho dele, onde o valor deverá ser convertido para um tipo inteiro.

E ainda, a seguir definiremos os parâmetros para o cabeçalho e obteremos o fluxo de saída para a resposta que deverá ser dada em um array de bytes, que recebe um tamanho padrão.

E processando os bytes iremos escrevê-los a partir do fluxo de entrada para o fluxo de saída. Assim enquanto o byte lido for diferente de menos um (-1) o fluxo de entrada continuará a ser escrito.

Assim, quando a leitura for finalizada, daremos um comando para fechar e encerrar o fluxo de leitura.

inputStream.close();
outInputStream.close();

EM POUCAS PALAVRAS

E assim concluímos a parte dois dessa série de tutoriais sobre iReport onde implementamos o processamento na servlet. No próximo tutorial criaremos o relatório em iReport. Eu fico por aqui e nos vemos no próximo tutorial.