Como fazer utilizar a API Imaginary.Validator.Vamos inicialmente ver os conceitos ( arquitetura ) da api para entender o seu funcionamento, depois como utilizar e alterar as mensagens de dados invalidos.
Vamos definir um exemplo para a validação de dados, um formulário medico para os funcionários de uma empresa solicitar exame medico de rotina.
| nome do medico |
Tamanho minimo:3 Tamanho maximo:80 Requerido |
exemplo: Mario Ananias |
| e-mail do medico |
e-mail valido | mario@med.net |
| CRM | Requerido | exemplo: Mario Ananias |
| Seu peso atual |
maior que 0 | |
| Sua altura |
maior que 0 | |
| Sua idade |
maior que 0 Requerido |
|
| Valor Consulta |
maior que 0 Requerido |
|
| Data Consulta |
maior que 0 Requerido |
String nomeMedico = "Jose Mane Ortis";
String emailMedico="mane@mail.net";
Double pesoPaciente=82.34;
//nomeMedico ->Tamanho minimo:3 | Tamanho maximo:80 | Requerido
if(nomeMedico==null)
{
throw new IllegalArgumentException("Nome do medico deve ser preenchido");
}else if (nomeMedico.length() < 3 || nomeMedico.length() > 80)
{
throw new
IllegalArgumentException(
"Nome do medico dever ter um tamanho minimo de 3 e máximo de 256 Caracteres");
}
//emailMedico -> e-mail valido | não e requerido (não obrigatório)
String patternEmail =
"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[_A-Za-z0-9-]+)";
if ((emailMedico!=null || !emailMedico.isEmpty() ) && !emailMedico.matches(patternEmail))
{
throw new IllegalArgumentException("e-mail do medico invalido.");
}
//Seu peso atual -> maior que 0 | Requerido
if(pesoPaciente==null )
{
throw new IllegalArgumentException("Peso deve ser preenchido.");
}else if ( pesoPaciente <= 0 )
{
throw new IllegalArgumentException("Peso deve ser maior que 0.");
}
Podemos observar que no trecho de codigo estamos validando o nome do medico, e obrigatorio o preenchimento e deve possuir mais que 3 caracteres e menos que 256 caracteres.
A validação e denominado na api de Validator , o validator agrega um conjunto de verificações(regras) para validação.Cada regra para verificação e denomidado de ValidatorRule , cada if no codigo acima pode ser definindo como uma regra para verificação.As mensagens são colocadas em um arquivo de propriedades, chave da regra que e violada, e mensagem para ser exibida para o usuario.
Utilizando a API Imaginary.Validator, o codigo fica mais simples e padronizado, e as mensagens podem ser facilmentes alteradas no arquivo de mensagens invalidas sem ter que sair verficando em todo o codigo, onde esta o erro de portugues da mensagem, ou alterar a mensagen que e exibida.Veja o codigo de validação que foi exibido acima com a API Imaginary.Validator.
String nomeMedico = "Mane";
String emailMedico="mane@mail.net";
Double pesoPaciente=82.34;
//Lista para adicionar as validações
List<Validator<? extends Object>> validaList = new ArrayList<Validator<? extends Object>>();
//nomeMedico ->Tamanho minimo:3 | Tamanho maximo:80 | Requerido
// <- Criação de uma Validator do tipo String , o construtor deve possuir um nome para obter
//as mensagens de dados invalidos, caso os dados não estiverem ok.
Validator<String> validarNomeMedico = new Validator<String>("nomeMedico", nomeMedico );
//Regras- substituição dos ifs
//Regra - Requerido
ValidatorRule requerido = new RequiredRule();
//adicionar a regra ao validador do nome do medico.
validarNomeMedico.addRule(requerido);
//Regra -Tamanho minimo:3 | Tamanho maximo:80
ValidatorRule<String> regraTamMinMax = new StrMinMaxSizeRule();
//Parametro para a regra StrMinMaxSizeRule
regraTamMinMax.addParameter(StrMinMaxSizeRule.PARAM_MIN_SIZE, 3);
regraTamMinMax.addParameter(StrMinMaxSizeRule.PARAM_MAX_SIZE, 80);
//adicionar a regra ao validador
validarNomeMedico.addRule(regraTamMinMax);
//adicionar o validador para ser executado depois.
validaList.add(validarNomeMedico);
//e-mail não e requerido por isto tem que ser verificado antes para validar
if (!ValidatorUtil.isEmpty(emailMedico))
{
Validator<String> validatorEmail = new Validator<String>("emailMedico", emailMedico);
ValidatorRule<String> emailRule = new MailRule();
validatorEmail.addRule(emailRule);
validaList.add(validatorEmail);
}
//Seu peso atual -> maior que 0 , requerido
Validator<Number> validaPesoPaciente = new Validator<Number>("validaPesoPaciente", pesoPaciente);
ValidatorRule requeridoPesoPaciente = new RequiredRule();
//adiciona a regra requerido
validaPesoPaciente.addRule(requeridoPesoPaciente);
//Regra para verificar o minimo
ValidatorRule<Number> minPeso = new NumberMinRule();
minPeso.addParameter(NumberMinRule.PARAM_MIN, 0);
validaPesoPaciente.addRule(minPeso);
validaList.add(validaPesoPaciente);
//Cada metodo Validator tem um metodo validate que retorna um Map<>
//Na api tem um metodo utilitario para executar um conjunto de validadores.
//Map com as mensagens de dados invalidos, so vai existir mensagens de dados invalidos, caso
// os dados não estiver de acordo com as regras de validação.
Map<String,Map<String, Map<String,String>>> erros = ValidatorManager.validate(validaList);
// <-Chave com os nomes do validador, exemplo: "emailMedico"
//<-Map com as regras invalidas
//<-Chave com o nome da chave da regra.Exemplo "required"
//<- Map com as mensagens da regra que seja invalida.
//<-Chave com o nome da regra que da regra que
// foi violada.Exemplo:"STR_EMAIL_INVALID"
//<- Mensagem do dado invalido.Exemplo:Email mane.mail.net invalido.
rererwerwererwererwerwerrrwe. erewrwerwerwerewrewrewrwerwerwe. erewrerwererwerwerewrewrwererer.