VELOCITY
Velocity é um template-engine feito em Java. É
um conjunto de classes, e não um programa diferente em outra
linguagem. Uma de suas maiores utilidades é no desenvolvimento de
aplicações web, onde o código Java fica totalmente separado do
código HTML, tornando assim a aplicação muito mais modularizada e
fácil de manter (STEIL, 8888. p. xx). Mas a descoberta mais
interessante desta ferramenta desenvolvida para apache e fundamental
neste trabalho, é o uso de templates na geração de arquivos,
tornando o projeto independente de linguagem e dos padrões de cada
equipe dentro de uma grande empresa. Tal qual a mala-direta no Word,
este aplicativo permite a substituição de variáveis, laços e
teste de condições. Um exemplo clássico seria a geração de um
convite para uma lista de pessoas, que possui de um lado a lista de
convidados e em outro o modelo do convite, a mala direta substitui
uma variável pessoa pelo valor encontrado na lista. O mesmo
princípio é aplicado na ferramenta proposta neste documento.
Antes de construir os templates para sua geração
é importante estabelecer um padrão de programação construindo uma
exemplo de como seria um cadastro completo, com pesquisas,
relatórios, tentando incluir nela os mais variados tipos de dados e
relacionamentos. A qualidade deste modelo será refletida na
qualidade do código gerado.
MAPEAMENTO RELACIONAL
Mapeamento de Objeto-Relacional (ORM) é uma
abordagem que permite a construção de sistemas utilizando o
paradigma orientado a objetos com a persistência destes objetos em
bancos de dados relacionais. Utilizando-se de técnicas e estratégias
específicas, é possível mapear classes com seus atributos e
associações para o modelo relacional (SILVA et al., 2006).
“O mapeamento de classes pode ser feito
mediante a paridade entre classe e tabela, ou seja, uma classe é
mapeada para uma tabela” (AMBLER, 1999, pXX). Este mapeamento
direto de classes para tabelas representa a forma mais simples de
mapeamento, tornando mais fácil o entendimento e a manutenção de
uma aplicação.
Desta forma, não se pode desprezar a enorme
quantidade de informações existentes em uma modelagem bem feita de
uma base de dados. Estas informações são cruciais na riqueza do
código gerado neste projeto.
O gerador utiliza diretamente as seguintes
informação da base de dados:
- Tipo da Coluna (varchar, int, bool, etc.)
- Tamanho da Coluna (varchar 100)
- Obrigatoriedade da coluna: se permite nulo ou não.
- Chave primária
- Chaves estrangeiras
- Comentários (metainformação)
Tipo da Coluna
Existe uma relação direta entre o tipo do banco
de dados relacional e o tipo/classe do atributo em uma classe. Cada
banco de dados em particular define seus tipos, bancos como o mysql
possui uma gama bem variada de tipos de datas, como por exemplo:
TIME, DATE, DATETIME e HOUR e no java, temos uma classe que mapeia
todas elas, como Date. O mesmo raciocínio é utilizado para outros
tipos, mas sempre é possível definir um paralelo entre os tipos da
base de dados e os tipos da linguagens. Abaixo segue por exemplo o
mapeamento entre a banco de dados mysql e a linguagem java.
Tipos MySql
|
Tipos JAVA
|
CHAR, VARCHAR, BLOB, TEXT,
ENUM e SET
|
java.lang.String,
java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob
|
FLOAT, REAL, DOUBLE
PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT,
INTEGER, BIGINT
|
java.lang.String,
java.lang.Short, java.lang.Integer, java.lang.Long,
java.lang.Double, java.math.BigDecimal
|
DATE, TIME, DATETIME,
TIMESTAMP
|
java.lang.String,
java.sql.Date, java.sql.Timestamp
|
BIT, TINYINT
|
java.lang.Boolean
|
SMALLINT [SEM SINAL]
|
java.lang.Integer
|
MEDIUMINT [SEM SINAL]
|
java.lang.Integer,
java.lang.Long (SEM SINAL)
|
INTEGER [SEM SINAL]
|
java.lang.Integer,
java.lang.Long (SEM SINAL)
|
BIGINT [SEM SINAL]
|
java.lang.Long,
java.math.BigInteger (SEM SINAL)
|
FLOAT
|
java.lang.Float
|
DOUBLE
|
java.lang.Double
|
DECIMAL
|
java.math.BigDecimal
|
DATE
|
java.sql.Date
|
DATETIME
|
java.sql.Timestamp
|
TIMESTAMP
|
java.sql.Timestamp
|
TIME
|
java.sql.Time
|
YEAR
|
java.sql.Short ou
java.sql.Date
|
CHAR
|
java.lang.String
|
VARCHAR
|
java.lang.String
|
BINARY, VARBINARY,TINYBLOB,
BLOB, MEDIUMBLOB, LONGBLOB
|
byte[]
|
Tamanho da Coluna
O tamanho definido no banco de dados é muito
importante na geração, pois pode determinar o tamanho máximo no
campo no cadastro. Um campo VARCHAR(50) no banco de dados, não pode
ter um campo na tela que aceite mais de 50 caracteres. Se um campo
for do tipo TEXT o gerador pode automaticamente criar um componente
do tipo TEXTAREA no HTML.
Obrigatoriedade da Coluna
Um dos validadores mais básicos e bastante comum
em vários projetos é a obrigatoriedade de uma informação que está
associada a uma base de dados bem elaborada. Desta forma, pode-se
obter esta informação e inserir no código gerado para validação
destes campos, obrigando-os a serem informados.
Chave Primária
No mapeamento objeto relacional é importante
dentro do código informar qual é o identificador da tabela na
classe. Isto é sinalizado através da anotação @id, o gerador
criado faz isto automaticamente utilizando a informação de chave
primária do banco de dados.
Chave Estrangeira
O gerador de código proposto utiliza a chave
estrangeira para criar um campo do tipo combo ou lupa. A chave
estrangeira indica a tabela cujos dados devem aparecer na combo para
seleção. A tela abaixo, no cadastro de réu, temos, por exemplo, o
campo es-colaridade, que pertence à tabela escolaridade, a lista de
informação mostrada nesta tela pertencem à tabela escolaridade.
Mas se a tabela possui mais de um campo, temos o problema de qual
campo ou quais campos representam este cadastro secundário. Esta
indicação é colocada na meta-informação deste campo. Além desta
informação temos que definir se o tipo é combo como escolaridade
ou lupa como unidade penitenciária.
STEIL, Rafael. Introdução
ao Velocity. 2002. Disponível em:
<http://www.guj.com.br/articles>
Acesso em: Maio. 2011.
Disponível
em:
<http://www.javaworld.com/javaworld/jw-12-2001/jw-1228-velocity.html?>
Acesso
em: Junho.2011.
Disponível
em: ?http://velocity.apache.org/? Acesso em: Julho.2011.
STEIL,
Rafael. Velocity template language: aprenda a usar essa linguagem
de templates para o Velocity. [S.l.], 2002. Disponível em:
<http://www.guj.com.br/Java.tutorial.artigo.26.1.guj>.
Acesso em: 31 mar 2012, 11:25.
http://geradorcodigojava.blogspot.com.br/2013/12/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2013/12/velocity-velocity-e-um-template-engine.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_217.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_5.html
http://geradorcodigojava.blogspot.com.br/2013/12/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2013/12/velocity-velocity-e-um-template-engine.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_217.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_5.html