package br.com.caelum.stella.validation;
import java.util.ArrayList;
import java.util.List;
import br.com.caelum.stella.MessageProducer;
import br.com.caelum.stella.ValidationMessage;
import br.com.caelum.stella.validation.error.LengthError;
/**
* Validador para aceitar cadeias de tamanho pré-definido. A cadeia verificada
* por este validador é a retornada pelo método {@code toString()} do objeto em
* questão.
*
* @author leonardobessa
*
*/
public class LengthValidator implements Validator<Object> {
private final int validLength;
private final BaseValidator base;
/**
* @param validLength
* quantidade de caracteres das cadeias a serem aceitas.
*/
public LengthValidator(int validLength) {
this.validLength = validLength;
base = new BaseValidator();
}
/**
* @param messageProducer
* produto de mensagens.
* @param validLength
* quantidade de caracteres das cadeias a serem aceitas.
*
*/
public LengthValidator(MessageProducer messageProducer, int validLength) {
base = new BaseValidator(messageProducer);
this.validLength = validLength;
}
public void assertValid(Object object) {
base.assertValid(getInvalidValuesFor(object));
}
private List<InvalidValue> getInvalidValuesFor(Object object) {
List<InvalidValue> messages = new ArrayList<InvalidValue>();
if (object.toString().length() != validLength) {
messages.add(new LengthError(validLength));
}
return messages;
}
public List<ValidationMessage> invalidMessagesFor(Object object) {
List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
messages.addAll(base.generateValidationMessages(getInvalidValuesFor(object)));
return messages;
}
public boolean isEligible(Object object) {
return true;
}
@Override
public Object generateRandomValid() {
throw new UnsupportedOperationException("Operação não suportada por este validador");
}
}