package br.com.concretesolutions.canarinho.formatador;
import java.util.regex.Pattern;
/**
* Interface de formatação. Formata valores completos. Útil caso receba o valor
* desformatado de uma API.
*/
public interface Formatador {
// Formatadores
/**
* Singleton de formatação de CEP
*/
Formatador CEP = new FormatadorBase(Padroes.CEP_FORMATADO, "$1-$2", Padroes.CEP_DESFORMATADO, "$1$2");
/**
* Singleton de formatação de CPF
*/
Formatador CPF = new FormatadorBase(Padroes.CPF_FORMATADO, "$1.$2.$3-$4", Padroes.CPF_DESFORMATADO, "$1$2$3$4");
/**
* Singleton de formatação de CNPJ
*/
Formatador CNPJ = new FormatadorBase(Padroes.CNPJ_FORMATADO, "$1.$2.$3/$4-$5", Padroes.CNPJ_DESFORMATADO,
"$1$2$3$4$5");
/**
* Singleton de formatação de CPF e CNPJ
*/
Formatador CPF_CNPJ = FormatadorCPFCNPJ.getInstance();
/**
* Singleton de formatação de valores monetários
*/
FormatadorValor VALOR = FormatadorValor.getInstance(false);
/**
* Singleton de formatação de valores monetários com símbolo do Real
*/
FormatadorValor VALOR_COM_SIMBOLO = FormatadorValor.getInstance(true);
/**
* Singleton de formatação de boletos bancários
*/
Formatador BOLETO = FormatadorBoleto.getInstance();
/**
* Singleton de formatação de telefones (DDD) número
*/
Formatador TELEFONE = FormatadorTelefone.getInstance();
/**
* Singleton de formatação de linha digitável. Transforma números do código de barras em linha digitável.
*/
Formatador LINHA_DIGITAVEL = FormatadorLinhaDigitavel.getInstance();
/**
* Formata um valor COMPLETO. Deve falhar caso o valor não esteja completo.
*
* @param value valor a formatar
* @return REsultado da formatação
*/
String formata(String value);
/**
* Desformata um valor.
*
* @param value Valor a desformatar
* @return Resultado da desformatação
*/
String desformata(String value);
/**
* Verifica se um parâmetro está formatado.
*
* @param value Valor para verificar
* @return True se estiver formatado, falso caso contrário.
*/
boolean estaFormatado(String value);
/**
* Verifica se um parâmetro pode ser formatado.
*
* @param value Valor para verificar
* @return True se puder ser formatado, falso caso contrário.
*/
boolean podeSerFormatado(String value);
/**
* Classe para guardar os padrões de experssões regulares usados no framework
*/
abstract class Padroes {
// Patterns
public static final Pattern CEP_FORMATADO = Pattern
.compile("(\\d{5})-(\\d{3})");
public static final Pattern CEP_DESFORMATADO = Pattern
.compile("(\\d{5})(\\d{3})");
public static final Pattern CNPJ_FORMATADO = Pattern
.compile("(\\d{2})[.](\\d{3})[.](\\d{3})/(\\d{4})-(\\d{2})");
public static final Pattern CNPJ_DESFORMATADO = Pattern
.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})");
public static final Pattern CPF_FORMATADO = Pattern
.compile("(\\d{3})[.](\\d{3})[.](\\d{3})-(\\d{2})");
public static final Pattern CPF_DESFORMATADO = Pattern
.compile("(\\d{3})(\\d{3})(\\d{3})(\\d{2})");
public static final Pattern PADRAO_SOMENTE_NUMEROS = Pattern
.compile("[^0-9]");
}
}