Olá Amigos do Sou Java, Hoje vou demonstrar como usar o Hibernate Validator. (org.hibernate.validator.*)
O Problema:
Caso de uso - Manter Faixa de Peso.
1.Manter Faixa de Peso
O objetivo deste caso de uso é manter as faixas de pesos que os caminhões podem carregar.
1.1.Fluxo de Eventos
1.1.1.Basic Path - FB - Acessar tela de Faixa de Peso
1.Este fluxo inicia-se quando o usuário entra na tela 'Manter Faixa de Peso', através do menu de cadastro.
2 - O usuário digita as informações da Faixa de Peso (R1).
3 - O usuário salvar as informações (R2).
4 - Fim do fluxo básico.
1.2.Regras
1.2.1.Invariant - R1 - Digitar campos
1 - Digitar a faixa inicial do peso em toneladas (Campo obrigatório)
2 - Digitar a faixa final do peso em toneladas (Campo obrigatório)
1.2.2.Invariant - R2 - Gravar as informações
1 - Fazer as seguintes validações antes de salvar:
2 - O peso inicial não pode ser igual ou superior ao peso final.
(...)
A Solução:
Para resolver este problema, usaremos uma simples anotacao na entidade a ser persistida, veja:
@SouJavaValDominioCondicional(valorPropA="pesoFaixaInicial", valorPropB="pesoFaixaFinal",
operador=SouJavaValDominioCondicional.Operador.MENOR, message="{erro.validacao.faixaPeso.intervalo}")
Long pesoFaixaInicial;
Long pesoFaixaFinal;
Quando a entidade for criada a anotacao será executada em tempo de runtime (@Retention(RUNTIME)) a validação será efetuada da seguinte maneira:
se --> pesoFaixaInicial < pesoFaixaFinal ? persist : erro.validacao.faixaPeso.intervalo;
Para os seguintes tipos: Integer, Double, Long, Float, BigDecimal, Date, String, Character;
Codigo fonte:
Como o objetivo do Artigo é demonstrar as funcionalidades do Hibernate Validator, no Source não está disponivel nada referente a camada de View. Ao terminar o download do artigo descompacte o arquivo e importe o projeto para dentro do eclipse. Para simplificar todo o processo o projeto já vem com as libs: commons-beanutils.jar, commons-lang.jar, commons-logging.jar, hibernate-validator.jar, junit-3.8.1.jar, log4j.jar;
Codigo Fonte
JUnit - TestCase:
Classe sem TestCase não prova nada e não pode entrar em Produção, por isso execute os testes:
SouJavaValDominioCondicionalValidatorTest.java
Este TestCase testa o validator em todos os tipos de validacao aceitos: MAIOR, MAIOR_OU_IGUAL, IGUAL, MENOR, MENOR_OU_IGUAL,DIFERENTE;
SouJavaValDominioCondicionalWrapperTest.java
Este TestCase testa o validator para aceitar todos os tipos de comparacoes entre inteiros e chars. Integer, Double, Long, Float, BigDecimal, Date, String, Character;
Agradecimentos:
George Gastaldi - Chief Software Architect at Elosoft S.A.
Todos que leram até aqui, e espero tenha sido útil.
Autor:
Thomas Rafael Modeneis - Sun Certified Programmer for Java Platform, SE 5.0 - 310-055.
Equipe Sou Java, Fortalecendo a comunidade de usuários de Java do Brasil.