package br.com.caelum.stella.format;
/**
* Formatador que insere ou remove zeros a esquerda de um String que <b>deve</b>
* representar um numero decimal.
*
* @author Leonardo Bessa
*
*/
public class LeftSideZerosFormatter implements Formatter {
/**
* Tamanaho da cadeia a ser retornada quando se chama o metodo
* {@link #format(String)}
*/
private final int formattedLength;
/**
* @param formattedLength
* tamanaho da cadeia a ser retornada quando se chama o metodo
* {@link #format(String)}
*/
public LeftSideZerosFormatter(int formattedLength) {
super();
this.formattedLength = formattedLength;
}
@Override
public String format(String value) {
if (!canBeFormatted(value)) {
throw new IllegalArgumentException("Argument value must have only " + formattedLength + " digits at most.");
}
String formated = value;
while (formated.length() < formattedLength) {
formated = "0" + formated;
}
return formated;
}
@Override
public String unformat(String value) {
Integer integer = Integer.valueOf(value);
String formated = integer.toString();
return formated;
}
@Override
public boolean isFormatted(String value) {
return value.matches("\\d{" + formattedLength + "}");
}
@Override
public boolean canBeFormatted(String value) {
return value.matches("\\d{0," + formattedLength + "}");
}
}