Olá desenvolvedores, avançando um pouco mais em nossos tutoriais damos início a mais uma nova série onde trabalharemos com datas. Dessa forma na página index.jsp onde estamos criando links para as rotinas que temos implementados iremos inserir mais um.

O passo seguinte é criar dentro da subpasta pages a página datas.jsp, e para facilitar o nosso trabalho iremos recorrer ao plugin Datepicker do jQuery. Acesse o site oficial selecione e copie para dentro do cabeçalho (head) da sua página datas.jsp as linhas de código como mostra a imagem.

Agora dentro da tag body iremos criar um formulário. No cabeçalho do formulário na action que é o local que determina para onde os dados serão enviados informaremos a servlet “calcularDataFinal” que o interceptará. E como desejamos enviar o formulário via POST, o método deverá ser informado.

O escopo do formulário trará a data inicial, a data em tempo (horas) e um botão que chamará o evento de cálculo da data. Por meio do datapicker poderemos formatar a data de forma que se torne mais amigável para nós.

E fora do formulário implementaremos um campo que mostrará o resultado da data calculada, resultado este que virá da servlet.

E finalmente implementaremos em Javascript uma função que invocando o jQuery transformará a data inicial em um datepicker.

Quando o usuário inserir a data inicial, o tempo em horas e clicar em enviar, estes dados serão redirecionados para a servlet que irá interceptar, calcular e retornar para a página JSP o resultado.

CLASSE DE CONEXÃO

Utilizaremos então a classe de conexão DAO para que possamos de uma forma simplificada gravar no banco de dados, isto é, realizar o insert.

Antes, porém, é preciso criar a sequência que permitirá a criação automática da chave primária para cada registro. Na base de dados curso-jsp clique com o botão direito em sequences >> New Sequence… e em Name insira final-projetos_id_seq. Na aba Definition em Start e Minimum coloque 1 e clique em OK.

Agora sim, na base de dados curso-jsp crie a tabela finalprojetos. Esta tabela conterá uma chave primária onde o ID que a identifica será do tipo Integer. Além disso o atributo nextval permite que a primary key de cada registro seja incrementada uma a uma. A tabela conterá ainda um campo para a data final.

Tabela criada, vamos agora implementar o DAO – Data Access Object, que é a classe responsável não apenas pela gravação, mas também por qualquer operação do banco de dados.

Assim, para criar o DAO clique com o botão direito do mouse sobre o package DAO >> New >> class. Se não tem este pacote, aconselho que o crie para manter seu projeto bem estruturado e organizado. O nome da classe DAO será DaoCalculaDataFinal.

E como possuímos de implementações anteriores o método de conexão, na classe DaoCalculaDataFinal precisaremos apenas chamá-lo.

private Connection connection;

E do mesmo modo, dentro do método construtor instanciaremos a conexão, que retornará a conexão do banco de dados.

E o DAO implementará além do construtor mais um único método que será o responsável por retornar o resultado do cálculo da data. Este método implementa a Query de Insert que como argumento recebe a datafinal. Os valores serão passados via PreparedStatement, recurso usado para executar instruções de banco de dados.

IMPLEMENTANDO A SERVLET

Clique com o botão direito do mouse no pacote de servlet >> New >> Servlet. Em Class Name defina o nome da servlet como CalcularDataFinal. Na anotação corrija o redirecionamento.

@WebServlet(“/pages/calcularDataFinal”);

Instancie o DAO – Data Access Object.

DaoCalculaDataFinal calculaDataFinal = new DaoCalculaDataFinal();

E lembrando que, como o método de envio do formulário é o POST, toda a regra de negócio da funcionalidade que estamos implementando será então escrita dentro do doPost().

Dessa forma entenda que para a regra de negócio um dia será igual a oito horas, que é a jornada de trabalho diária da maioria das pessoas. Então dentro de um bloco try/catch escreveremos o nosso código. Começando com a implementação dentro do bloco try, definiremos uma variável para receber a hora/dia. Precisaremos também do Date que será a dataCalculada e que será inicializada como nula.

int horaDia = 8;
Date dataCalculada = null;

E também precisaremos receber o parâmetro de data que virá do formulário, bem como o tempo

String data = request.getParamenter(“data”);
int tempo = Integer.parseInt(request.getParameter("tempo"));

CALCULANDO A DATA

Na condição, se o tempo for menor ou igual a horaDia, então ele equivalerá há um dia. Desse modo, a dataCalculada recebe a data que foi passada por parâmetro, visto que será o mesmo dia, no entanto, esta data precisa ser convertida e formatada por meio do SimpleDateFormat.

E a partir da instância do objeto Calendar setaremos a data que foi informada, isto é, que veio por parâmetro. E então adicionaremos a data ao totalDeDias somando mais dois, o que possibilitará em caso de resultado do cálculo igual a oito somar mais um dia. Teremos também a dataCalculada sendo recebida.

Mas se não, se o tempo for maior que horaDia, alguns cálculos em cima do tempo serão necessários. Iniciaremos uma variável do tipo double para receber o total de dias caso este seja superior há um dia. Neste caso, o tempo será dividido por horaDia.

Ainda dentro do contexto do else precisaremos de uma nova verificação. Se totalDeDias for menor ou igual a um, não é um dia completo, entretanto, dentro do nosso contexto se tornará um dia.

Porém, se totalDeDias for maior que um, então novamente efetuaremos um cálculo. E mais, a partir da instância do objeto Calendar setaremos a data que foi informada, isto é, que veio por parâmetro. E então adicionaremos a data ao totalDeDias. Teremos também a dataCalculada sendo recebida.

E fora do escopo de todas as condições, ou seja, após o fluxo de execução, gravaremos o resultado processado no banco de dados. Porém, é preciso por meio do RequestDispatcher redirecionar para a página JSP, setar a dataCalculada e fazer de fato o redirecionamento.

EM POUCAS PALAVRAS

E assim finalizamos o exemplo de datas. Existem muitas outras possiblidades ao se trabalhar com datas, e para conhece-las é preciso estudar a documentação. Bom, eu fico por aqui e nos vemos no próximo tutorial.