domingo, 5 de julho de 2015

Interagindo com repositórios usando JGIT e a aplicação Ciclovias SP

Essa é uma postagem super rápida para falar de uma ferramenta extraordinária que tive a oportunidade de trabalhar nessa semana, o JGit. Vamos também descrever brevemente a aplicação Ciclovias SP, criada com programadores do projeto Transparência SJC (ou Dados Abertos SJC).

O projeto transparência SJC reúne programadores da cidade de São José dos Campos em São Paulo que se interessam em explorar dados abertos

Sobre GIT

Criado pelo Linus Torvalds (sim, o criado do Linux) para uso de controle de código do Kernel do Linux, o GIT é atualmente muito popular por causa da rede social para programadores Github
Além de controlar versão de código, as pessoas costumar usar essa ferramenta espetacular para controlar repositórios em geral. Um grande exemplo são os projetos Kie da JBoss que usa git para armazenar e controlar versão dos arquivos relacionados a cada projeto (processos comerciais, regras, entre outros).

GIT a partir do seu código Java com JGIT

Basicamente GIT vai funcionar como um utilitário de linha de comando ou você pode usar a API HTTP do Github. JGit expande as possibilidades de uso trazendo para o código Java uma API completa para lidar com repositórios GIT. Não vou me estender nesse assunto, exemplos de código podem ser encontrados no cookbook(livro de receitas) do JGit que fica no Github (INCEPTION!).

Uso da API

Como mencionei no início dessa postagem, eu usei essa API e chorei de emoção achei muito útil. No meu caso eu a uso para o rápido projeto Ciclovias SP. Nele eu preciso pegar os dados das câmeras de ciclovias de São Paulo que usa reconhecimento de bicicletas passando na ciclovia. Esses dados ficam no github da LabProdam, uma iniciativa da prefeitura de São Paulo de fazer a cidade mais aberta (nada técnico aqui, mas temos que admitir que essa gestão está sendo espetacular para a cidade, quem acompanha sabe).Veja a câmera da ciclovia da famosa Faria Lima (em breve teremos também na Paulista):



O objetivo da aplicação é pegar esses dados todos os dias do github usando um EJB Timer, manter um "track" de arquivos que eu já li e carregar os novos (o gitihub com os dados é atualizado todo dia meia-noite e o EJB Timer é executado todo dia 1 da manhã)  e salvar no banco de dados H2 (padrão do Wildfly) usando JPA sempre. Em seguida eu tenho uma interface REST usando JAX-RS que "cospe" os dados em um formato interessante para mostrar um gráfico e MAGIC, tenho o gráfico em uma aplicação com os famigerados frameworks clientes (que consomem esse WS REST) bootstrap, angularjs e highcharts:


O código que usa o JGit em sí é muito simples. Eu simplesmente clono o repositório remote em um diretório local se não existir o mesmo, se existir eu faço um pull request e um fetch dos dados novos. Veja os códigos relevantes:

Código no GIST:

Conclusão

É muito simples lidar com repositórios GIT em uma aplicação Java usando o JGit.




Nenhum comentário:

Postar um comentário