package br.com.concretesolutions.canarinho.formatador;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** */
final class FormatadorBase implements Formatador {
private final Pattern formatted;
private final String formattedReplacement;
private final Pattern unformatted;
private final String unformattedReplacement;
/**
* TODO adicionar JavaDoc
* @param formatted descrever conteúdo
* @param formattedReplacement descrever conteúdo
* @param unformatted descrever conteúdo
* @param unformattedReplacement descrever conteúdo
*/
FormatadorBase(Pattern formatted, String formattedReplacement, Pattern unformatted, String unformattedReplacement) {
this.formatted = formatted;
this.formattedReplacement = formattedReplacement;
this.unformatted = unformatted;
this.unformattedReplacement = unformattedReplacement;
}
@Override
public final String formata(String value) throws IllegalArgumentException {
if (value == null) {
throw new IllegalArgumentException("Value may not be null.");
}
if (formatted.matcher(value).matches()) {
return value;
}
return matchAndReplace(unformatted.matcher(value), formattedReplacement);
}
@Override
public final String desformata(String value) throws IllegalArgumentException {
if (value == null) {
throw new IllegalArgumentException("Value may not be null.");
}
if (unformatted.matcher(value).matches()) {
return value;
}
final Matcher matcher = formatted.matcher(value);
return matchAndReplace(matcher, unformattedReplacement);
}
@Override
public final boolean estaFormatado(String value) {
if (value == null) {
throw new IllegalArgumentException("value must not be null");
}
return formatted.matcher(value).matches();
}
@Override
public final boolean podeSerFormatado(String value) {
if (value == null) {
return false;
}
return unformatted.matcher(value).matches();
}
private String matchAndReplace(Matcher matcher, String replacement) {
if (matcher.matches()) {
return matcher.replaceAll(replacement);
}
throw new IllegalArgumentException("Valor não está formatado propriamente.");
}
}