Olá desenvolvedores, continuando com a construção do gráfico de Gantt vamos a parte três dessa série de tutoriais. Perceba que para que o gráfico seja escrito é preciso de uma lista, além do nome do projeto, o qual precisa de um código de identificação.  É preciso também do que é denominado séries, isto é, a lista que inclui os registros do que foi planejado, executado e projetado. E por fim, a data.

A data requer uma especial atenção. É necessário estabelecer em qual formato iremos fornecer a data para que possamos trabalhar com ela do lado do Javascript. Porque é partir do comportamento da biblioteca e da forma como ela trata os dados que entenderemos como processá-los no banco e como codifica-los no lado do servidor.

Para a estrutura do banco de dados teremos uma tabela com o nome do projeto que conterá também um identificador do projeto. Uma tabela de série, isto é, com a descrição do status do projeto, se planejado, em andamento (reais) ou apenas projetado, com as datas inicial e final.

No que se refere a data podemos trabalhar de duas formas, onde a primeira consiste em armazená-la no banco de dados em apenas um campo. Ou podemos especificar um campo para cada elemento da data, um campo para o ano, outro para o mês e outro para o dia. Nesta implementação trabalharemos com apenas um campo para a data inicial e outro para a data final. E na codificação no lado do servidor poderemos proceder com a separação do ano, mês e dia.

BANCO DE DADO – CRIANDO OS CAMPOS

Para a implementação do gráfico Gantt Chart trabalharemos com a base de dados curso-jsp. Com a base de dados selecionada, clique com o botão direito sobre a opção Tables >> New Table para gerarmos os campos do gráfico de Gantt.

Na aba properties da tabela dê a ela o nome de “projeto”, em Owner escolha o usuário postgres. Na aba Columns adicione a coluna “id” e a defina como sendo do tipo bigint. Feito isso crie uma segunda coluna, esta para o “nome” do projeto, ela será do tipo character varying. E para finalizar a construção da tabela de projetos, a chave primária (primary key) em Constraints será a coluna “id”.

Proceda da mesma forma para a criação da segunda tabela, com a base de dados selecionada, clique com o botão direito sobre a opção Tables >> New Table.

Na aba Properties da tabela dê a ela o nome de “series”, em Owner escolha também o usuário postgres. Na aba Columns a primeira coluna será igualmente a coluna “id” do tipo bigint. Para o campo descrição criaremos a coluna “nome” que será do tipo character varying.

A coluna datainicial representará a data inicial e para facilitar a manutenção dos dados, ela será também do tipo String – character varying. Para representar a data final teremos a coluna datafinal que logicamente também será uma string. A chave primária (primary key) em Constraints será a coluna “id”. E para finalizar a construção da tabela series criaremos a partir da chave primária uma Foreign Key (chave estrangeira) que irá referenciar a tabela “projeto” por meio da coluna “id”.

Ressaltando que antes é preciso criar a coluna projeto na tabela séries, caso contrário não será possível referenciá-lo. A Foreign Key faz referência a tabela projetos por meio do id e da coluna projetos.

IMPLEMENTANDO AS ENTIDADES

Voltando ao Java criaremos duas entidades referentes as duas tabelas que acabaram de ser criadas, projetos e series respectivamente. Assim, clique com o botão direito do mouse sobre o package entidades >> New >> Class e dê a ela o nome de “Projeto”. Faça o mesmo procedimento para criar a entidade “Series”.

Agora defina como atributo de cada tabela os seus respectivos campos no banco de dados, desse modo para a entidade Projeto teremos os atributos id e nome. Em ambos os casos gere os métodos Getters and Setters…

private Long id;
private String nome;

Ainda na entidade Projeto, dentro de um contexto de modelo relacional de um para muitos 1:N. Neste modelo cada campo de uma tabela pode se relacionar com um ou mais campos de outra tabela. Assim, instanciaremos uma lista de séries.  E do mesmo modo gere os métodos Getters and Setters para a lista também.

private List<Series> series = new ArrayList<Series>();

Na entidade series o raciocínio é semelhante, definiremos como atributo os campos da tabela. Criando os métodos Getters and Setters para todos os atributos.

private Long id;
private String nome;

private String datafinal;
private String datainicial;

Iremos trabalhar com uma biblioteca que transformará todos os dados em JSON, parta onde iremos passar o objeto Projeto com a lista de series. E para não causarmos um conflito entre objeto projeto e atributo projeto, interferindo no relacionamento de 1:N, declararemos o atributo projeto como sendo do tipo Long.

private Long projeto;

IMPLEMENTANDO A CLASSE DE CONEXÃO

Para pegarmos os dados do banco de dados implementaremos a classe de conexão DAO – Data Access Object. É por ela que todas as operações que precisarmos fazer em nosso banco de dados irão passar, obrigatoriamente.

Desse modo clique com o botão direito sobre o package dao >> Class. Iremos chama-la de DaoGanttChart. No escopo da classe o primeiro passo é estabelecer a conexão.

private Connection connection;

Implemente dentro do construtor a conexão com a base de dados curso-jsp.

public DaoGanttChart(){
connection = ConnectionDataBase.getConnection();
}

E então criaremos o método getProjetos() que importa a lista de projetos, o corpo do método recebe a instancia da lista. E implementaremos ainda uma query para trazer todos os registos do projeto, prepararemos a conexão com o PreparedStatement que armazenará uma instrução SQL pré-compilada para que ela possa ser executada com eficiência. E o ResultSet setará o resultado da busca no banco de dados.

Agora, enquanto existirem projetos para serem lidos, criaremos um objeto “setando” os seus atributos.

Ainda dentro do laço de repetição, após atribuir os dados do projeto, na tabela series iremos selecionar o projeto cujo id da coluna projeto for igual ao projeto que estiver sendo lido. E novamente a conexão será preparada, armazenada e os resultados da busca “setados”. Então instanciaremos uma lista de series.

Enquanto existir serie, um objeto de serie será criado e seus dados serão “setados” e adicionados a lista.

Assim, depois de cada interação todos os dados obtidos serão adicionados à lista de series, e por fim adicionada ao projeto.

Projeto.setSeries(series);
Projeto.add(projeto);

DAO E SERVLET

A classe de conexão DaoGanttChart deverá ser instanciada na servlet BuscarDatasPlanejamento().

private DaoGanttChart  daoGanttChart = new DaoGanttChart();

Assim, dentro do método doGet(), o responsável pela interceptação dos dados teremos a lista de projetos criada envolvida por um bloco try.

List<Projeto> projetos = daoGanttChart.getProjetos();

E para montar o JSON precisaremos fazer o download da biblioteca do Google GSON 2.3.1. Desse modo faça o download do jar e  copie para dentro da pasta lib do seu projeto. Selecione-a e clique com o botão direito do mouse >> Build Path >> Add to Build Path.

Se a lista de projetos estiver vazia, instanciaremos o GSON passando os projetos para ele. Assim será possível transformar toda a lista de dados em JSON e exibi-los no Gantt Chart.

EM POUCAS PALAVRAS

E com esta implementação já estamos trazendo todos os dados para a criação do gráfico de Gantt do banco de dados para gerar o gráfico gantt e transformando em JSON, utilizando a biblioteca do Google GSON. No próximo tutorial iremos promover a interação com o JavaScript. E u fico por aqui e nos vemos no próximo tutorial.