package br.com.concretesolutions.canarinho.validator; import android.text.Editable; /** * Interface de validação de campos. Há basicamente duas formas de validação: * <ul> * <li>Uma {@link String} completa</li> * <li>Um {@link Editable} e um {@link br.com.concretesolutions.canarinho.validator.Validador.ResultadoParcial}</li> * </ul> * No primeiro caso o retorno será: true ou false. No segundo caso, o resultado será sempre * atualizado no objeto {@link br.com.concretesolutions.canarinho.validator.Validador.ResultadoParcial} passado. */ public interface Validador { /** * Referência para o singleton de validação de CPF */ Validador CPF = ValidadorCPF.getInstance(); /** * Referência para o singleton de validação de CNPJ */ Validador CNPJ = ValidadorCNPJ.getInstance(); /** * Referência para o singleton de validação de boleto */ Validador BOLETO = ValidadorBoleto.getInstance(); /** * Referência para o singleton de validação de telefone */ Validador TELFONE = ValidadorTelefone.getInstance(); /** * Referência para o singleton de validação de CEP */ Validador CEP = ValidadorCEP.getInstance(); /** * Valida uma {@link String} completa * * @param valor Valor a ser validado * @return true se estiver válida e false caso contrário */ boolean ehValido(String valor); /** * Valida um {@link Editable} retornando o * {@link br.com.concretesolutions.canarinho.validator.Validador.ResultadoParcial} * * @param valor Editable * @param resultadoParcial Objeto com o estado da validação * @return Objeto com o estado da validação atualizado */ ResultadoParcial ehValido(Editable valor, ResultadoParcial resultadoParcial); /** * Value Object com o estado da validação. */ class ResultadoParcial { private boolean valido; private boolean parcialmenteValido = true; private String mensagem; public boolean isValido() { return valido; } public boolean isParcialmenteValido() { return parcialmenteValido; } public String getMensagem() { return mensagem; } /** * Ajusta a validação com o valor de "totalmente válido". * * @param valido Flag totalmenteValido * @return Fluent Interface "this" */ public ResultadoParcial totalmenteValido(boolean valido) { this.valido = valido; return this; } /** * Ajusta a validação com o valor de "totalmente válido". * * @param parcialmenteValido Flag parcialmenteValido * @return Fluent Interface "this" */ public ResultadoParcial parcialmenteValido(boolean parcialmenteValido) { this.parcialmenteValido = parcialmenteValido; return this; } /** * Ajusta a mensagem de erro * * @param mensagem Mensagem usada na apresentação do erro. * @return Fluent Interface "this" */ public ResultadoParcial mensagem(String mensagem) { this.mensagem = mensagem; return this; } } }