Velocity


Nesse tutorial vamos aprender como utilizar a api do Velocity para geração de saídas baseadas em Templates, veremos como configurar um projeto para criarmos um gerador com os mais diversos propósitos. Podemos criar um gerador de html ou até mesmo um gerador de código baseado em um modelo de objetos, por exemplo.

1 - Configurando o pom.xml do projeto

A para utilizarmos o Velocity em nossos projetos é muito simples, basta adicionarmos a seguinte dependencia no projeto:

  <dependencies>
    ...
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.6.3</version>
    </dependency>
  </dependencies></pre>

Nota: No final da página disponibilizamos o exemplo para download. Por enquanto vamos seguindo para vermos como é fácil configurá-lo nos projetos.


2 - Criando o template

Os arquivos de templates do velocity devem ficar na pasta:

..\src\main\resources

e os arquivos de templates devem ter a extensão .vm.

O Velocity possui um linguagem simples que você vai utilizar para construir como quer a saída, pode utilizar repetições (for), condicionais (ifs), entre outros, para a montagem do template. O nosso exemplo é bem simples, o que vamos fazer é passar para o contexto de execução do Engine do Velocity um objeto e dentro do template vamos acessar um método set do nosso Bean.

Usando o Velocity.

Podemos gerar a saida em diversos formatos, aqui estamos usando texto, mas por exemplo, poderiamos 
gerar a saida em HTML.

Abaixo a mensagem que configuramos:

- Mensagem: $msg.Message

Para acessarmos um objeto que está no contexto utilizamos o simbolo $, o nome que definimos para o objeto no momento que o adicionamos ao Contexto velocityContext.put("msg", messageBean); e o nome do método sem o set, acessamos diretamente pelo seu nome.


3 - Entendendo o código

Vamos entender os pontos principais do código, primeiro vamos criar o MessagemBean.java

public class MessageBean
{
  private String message;

  public MessageBean()
  {
  }

  public MessageBean(String message)
  {
    this.message = message;
  }

  public String getMessage()
  {
    return message;
  }

  public void setMessage(String message)
  {
    this.message = message;
  }
}

Criamos um Bean Simples, sem nenhuma novidade, vamos agora entender a Classe que inicializa o Engine e o executa:

public class MessageVelocity
{
  private VelocityEngine velocityEngine;

  public MessageVelocity()
  {
    try
    {
      Properties properties = new Properties();
      properties.load(getClass().getClassLoader()
	    .getResourceAsStream("velocity.properties"));

      // Cria e inicializa o engine do velocity
      velocityEngine = new VelocityEngine(properties);
    }
    catch( Exception e )
    {
      e.printStackTrace();
    }
  }

  public String execute()
  {
    try
    {
      MessageBean messageBean = new MessageBean();
	  messageBean.setMessage("Exemplo de uso do Velocity");

      // Build a context to hold the model
      VelocityContext velocityContext = new VelocityContext();
      velocityContext.put("msg", messageBean);

      // Execute the template
      StringWriter writer = new StringWriter();
      velocityEngine.mergeTemplate("message.vm", "utf-8", 
	    velocityContext, writer);

      // Return the result
      return writer.toString();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    return null;
  }

  public static void main( String[] args )
  {
    MessageVelocity message = new MessageVelocity();
    System.out.println(message.execute());
  }
}

A Classe MessageVelocity é composta por três métodos, o construtor, que inicializa o engine com as configurações básicas, o método execute() que inicializa o MessageBean, o seta no contexto do Velocity para que o merge seja realizado e a saída gerada velocityEngine.mergeTemplate("message.vm", "utf-8", velocityContext, writer);. Criamos um StringWriter onde o resultado será gerado e direcionado a saída. Podemos também direcionar a saída para um arquivo, quando por exemplo, estamos fazendo um gerador de código.


4 - Executando o Projeto

Para executar o projeto é simples, uma vez que o pom está configurado, basta digitar:

mvn exec:java

E a saída será algo parecido com:

[INFO] Building Project Velocity Template 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ velocity-jar >>>
[INFO]
[INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ velocity-jar <<<
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ velocity-jar ---
Usando o Velocity.

Podemos gerar a saida em diversos formatos, aqui estamos usando texto, mas por exemplo, poderiamos
gerar a saida em HTML.

Abaixo a mensagem que configuramos:

- Mensagem: Exemplo de uso do Velocity

5 - Conclusão

Vemos com esse tutorial como é bem simples habilitar um projeto para gerar conteúdo dinamicamente utilizando a API do Veolcity. Com esse recurso podemos criar coisas muito interessantes, tudo vai depender da necessidade e da nossa criatividade para utilizarmos esse recurso.


6 - Referências

http://velocity.apache.org/


7 - Download

Para fazer o download do exemplo, clique em: Exemplo do tutorial.