quarta-feira, 19 de janeiro de 2011

Gaia Framework - utilizando API do Ant para gerar Jar

Como primeiro post técnico sobre o Gaia Framework escolhi a integração feita com a API do Ant. Mais especificamente a task que fazia a compactação dos arquivos e criar um Jar bacana. Basicamente o XML visto a baixo:

<project default="createJar">
   <target
name="createJar" >
     <jar
destfile="gaia-dynamic-entity-2.0.jar" basedir="." />
   </target>
</project>


O foda é fazer esse XML virar código Java. Depois de muito procurar no Google eu descobri que não sei procurar ahhahhahaha. Por isso parti pro velho e sábio método milenar da "Tentativa e Erro" ... basicamente é simples ... adicionamos o jar do Ant no projeto e vamos chutando as classes a serem usadas. Não deve ser muito difícil né? eheheheheheh

Bom para inlcuir o Jar do Ant no projeto basta que seja importada a seguinte dependência:

<dependency>
   <groupId>
org.apache.ant</groupId>
   <artifactId>
ant</artifactId>
   <version>
1.8.2</version>
</dependency>


Segundo passo é decobrir as classes que tinha que usar, mas até que foi simples. O nome delas é igual ao das tags, veja o código Java:

package net.sf.gaia.util;

import java.io.File;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Jar;

public abstract class GaiaUtils {

  private static final Log logger = LogFactory.getLog(GaiaUtils.class);

  public final static String getGaiaPath() {
    String path = System.getProperty("gaia.dir");
    if (path == null) {
       path = System.getProperty("user.dir");
    }
    return path;
  }

  public final static String getGaiaTempPath() {
    return getGaiaPath() + File.separator + "temp";
  }

  public final static String getGaiaServicePath() {
    String path = System.getProperty("gaia.service.dir");
    if (path == null) {
       path = System.getProperty("user.dir");
    }
    return path;
  }
  public final static void createJarFile(String jarName, String classPath) {
    try {
       if (classPath == null) {
          classPath = getGaiaTempPath() + File.separator + "classes";
       }
       
       logger.info("Creating pack classes from: " + classPath + " ...");
       long l = System.currentTimeMillis();

       if (!jarName.endsWith(".jar")) {
          jarName += ".jar";
       }
       
       File jarDir = new File(getGaiaServicePath());
       if (!jarDir.exists()) {
          jarDir.mkdir();
       }
       
       File jarTempDir = new File(classPath);
       if (!jarTempDir.exists()) {
          jarTempDir.mkdir();
       }

       Project proj = new Project();
       Target target = new Target();
       Jar jar = new Jar();
       jar.setBasedir(jarTempDir);
       
       File fileJar = new File(jarDir, jarName);
       // Delete the jar file if it already exists
       if (fileJar.exists() == true) {
          fileJar.delete();
       }
       
       jar.setDestFile(fileJar);

       jar.setProject(proj);
       
       target.addTask(jar);
       target.setName("createJar");
       target.setProject(proj);
       
       proj.addTarget(target);
       proj.setDefault("createJar");
       
       jar.execute();
       logger.info("Created jar file: " + jarName + " ... " + (System.currentTimeMillis() - l) + " ms");
    } catch (Exception e) {
       logger.error("Can't create " + jarName, e);
    }
  }
}

Gaia Framework - O Inicio

Bom senhores compatriotas ... eheheh ... faz um bom tempo que não escrevo um post. Não por falta de assunto, mas sim por falta de tempo. Tinha selecionado uns bons tópicos pra escrever, mas ainda não achei a voia pra escrevo-los.

Os assuntos variavam um pouco era sobre Hibernate, Java, Maven e afins ... mas ai pensei porque não juntar tudo e fazer algo de útil ... sei lá uma ideiazinha de uma API Java ... mas o que?

Bem a resposta veio quando estava conversando com um amigo meu e ele comentou que estava fazendo um projetozinho com E-Forms. De inicio a ideia não parecia grande coisa, mas ai surgiu a vontade de juntar um pouco do conceito dos E-Forms e adapta-los num sistema Georreferenciado. Convidei-o para participar mas ele fico com medinho e desistiu logo de inicio.

Aproveitei que eu já tinha um SVN e comecei a organizar o projeto. Todo estruturado no Maven, isso eu não tinha dúvida. O foda era o nome. Que nome botar? ... Fazer uma API que adivinha qual a codificação de um arquivo é moleza, mas escolher o nome dela é o que demora ... Bem que nome escolher? E o que fazer de inicio?

Como diz meu avó - "No é facile" ... Mas de inicio pensei em fazer uma especie de framework. Algo que me disponibiliza-se classes e métodos para gerar as minhas tabelas, fazer as transações com o banco de dados e disponibilizar funções utilitárias para as mais diversas situações. Viajei um pouco mas no fim surgiu o projeto do Gaia.

O que vem a ser e porque do nome? Bem Gaia na mitologia é a mãe de vários seres (titãs, deuses, semideuses e uns outros lá que ainda num sei digitar). E como essa API tem por ser o corpo vital do projeto do Georreferenciamento (e outros que por ventura venham a surgir) o nome caiu como uma luva ... pelo menos eu achei e nesse caso a minha opinião é a que importa ahahahahaha :D

Bom nos próximos tópicos vou começar a publicar algumas das funções e integrações com bibliotecas que achei muito interessante e que deram um pouco de trabalho. Até estava pensando em já disponibilizar o link do repositório do Maven para utilizar a API, mas num adianta porque mesmo querendo baixar você não vai saber usar direito :P. Espere os próximos post e ai sim da de brincar com o filhote ^^.