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.SimpleMessageProducer; import br.com.caelum.stella.ValidationMessage; /** * <p> * Esta classe serve como base para validadores utilizados no Caelum Stella * Core. Ela é responsável por extrair {@linkplain ValidationMessage} de um * {@link MessageProducer}. * </p> * <p> * O {@link MessageProducer} pode ser passado pelo construtor. Assim, através * dos métodos {@link #generateValidationMessages(List)} e * {@link #assertValid(List)} as mensagens de validação são geradas. * </p> * * @author leobessa */ public class BaseValidator { private final MessageProducer messageProducer; /** * Utiliza um {@linkplain SimpleMessageProducer}. */ public BaseValidator() { this.messageProducer = new SimpleMessageProducer(); } /** * @param messageProducer * produtor das mensagens de validação. */ public BaseValidator(MessageProducer messageProducer) { this.messageProducer = messageProducer; } /** * @param invalidValues * lista de valores que descrevem erros de validação. * @return lista de mensagens inválidas obtida pelo produto de mensagem. */ public List<ValidationMessage> generateValidationMessages(List<InvalidValue> invalidValues) { List<ValidationMessage> messages = new ArrayList<ValidationMessage>(); for (InvalidValue invalidValue : invalidValues) { ValidationMessage message = messageProducer.getMessage(invalidValue); messages.add(message); } return messages; } /** * @param invalidValues * lista de valores que descrevem erros de validação. * @throws InvalidStateException * caso a lista não esteja vazia. */ public void assertValid(List<InvalidValue> invalidValues) { if (!invalidValues.isEmpty()) { throw new InvalidStateException(generateValidationMessages(invalidValues)); } } }