Skip to content

Instantly share code, notes, and snippets.

@dennysfredericci
Created January 12, 2012 00:05

Revisions

  1. dennysfredericci revised this gist Feb 2, 2012. 1 changed file with 7 additions and 7 deletions.
    14 changes: 7 additions & 7 deletions Validator.java
    Original file line number Diff line number Diff line change
    @@ -3,9 +3,7 @@
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    @@ -26,6 +24,9 @@
    import br.com.caelum.vraptor.validator.Validations;
    import br.com.caelum.vraptor.view.ValidationViewsFactory;

    import com.google.common.collect.HashMultimap;
    import com.google.common.collect.Multimap;

    /**
    * Implementacao alternativa do validator para adicionar um mapa com os erros
    * ocorridos no request
    @@ -78,21 +79,20 @@ public <T extends View> T onErrorUse(Class<T> view) {
    return new MockResult(proxifier).use(view); // ignore anything, no
    // errors occurred
    }
    result.include("errors", toMap(errors));
    result.include("errors", errors);
    result.include("errorsMap", toMap(errors));
    outjector.outjectRequestMap();
    return viewsFactory.instanceFor(view, errors);
    }

    private Map<String, String> toMap(List<Message> errorsList) {
    private Multimap<String, String> toMap(List<Message> errorsList) {

    HashMap<String, String> errorsMap = new HashMap<String, String>();
    Multimap<String, String> errorsMap = HashMultimap.create();

    for (Message message : errorsList) {
    errorsMap.put(message.getCategory(), message.getMessage());
    }

    Collections.unmodifiableMap(errorsMap);

    return errorsMap;
    }

  2. dennysfredericci created this gist Jan 12, 2012.
    120 changes: 120 additions & 0 deletions Validator.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,120 @@
    package br.com.fredericci.validation;

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import br.com.caelum.vraptor.Result;
    import br.com.caelum.vraptor.View;
    import br.com.caelum.vraptor.core.Localization;
    import br.com.caelum.vraptor.ioc.Component;
    import br.com.caelum.vraptor.ioc.RequestScoped;
    import br.com.caelum.vraptor.proxy.Proxifier;
    import br.com.caelum.vraptor.util.test.MockResult;
    import br.com.caelum.vraptor.validator.AbstractValidator;
    import br.com.caelum.vraptor.validator.BeanValidator;
    import br.com.caelum.vraptor.validator.DefaultValidator;
    import br.com.caelum.vraptor.validator.I18nMessage;
    import br.com.caelum.vraptor.validator.Message;
    import br.com.caelum.vraptor.validator.Outjector;
    import br.com.caelum.vraptor.validator.Validations;
    import br.com.caelum.vraptor.view.ValidationViewsFactory;

    /**
    * Implementacao alternativa do validator para adicionar um mapa com os erros
    * ocorridos no request
    *
    * @author dennys
    *
    */
    @Component
    @RequestScoped
    public class Validator extends AbstractValidator {
    private static final Logger logger = LoggerFactory.getLogger(DefaultValidator.class);

    private final Result result;

    private final List<Message> errors = new ArrayList<Message>();
    private final ValidationViewsFactory viewsFactory;
    private final List<BeanValidator> beanValidators;

    private final Outjector outjector;

    private final Proxifier proxifier;

    private final Localization localization;

    public Validator(Result result, ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, List<BeanValidator> beanValidators, Localization localization) {
    this.result = result;
    this.viewsFactory = factory;
    this.outjector = outjector;
    this.proxifier = proxifier;
    this.beanValidators = beanValidators;
    this.localization = localization;
    }

    public void checking(Validations validations) {
    addAll(validations.getErrors(localization.getBundle()));
    }

    public void validate(Object object) {
    if (beanValidators == null || beanValidators.isEmpty()) {
    logger.warn("has no validators registered");
    } else {
    for (BeanValidator validator : beanValidators) {
    addAll(validator.validate(object));
    }
    }
    }

    public <T extends View> T onErrorUse(Class<T> view) {
    if (!hasErrors()) {
    return new MockResult(proxifier).use(view); // ignore anything, no
    // errors occurred
    }
    result.include("errors", toMap(errors));
    outjector.outjectRequestMap();
    return viewsFactory.instanceFor(view, errors);
    }

    private Map<String, String> toMap(List<Message> errorsList) {

    HashMap<String, String> errorsMap = new HashMap<String, String>();

    for (Message message : errorsList) {
    errorsMap.put(message.getCategory(), message.getMessage());
    }

    Collections.unmodifiableMap(errorsMap);

    return errorsMap;
    }

    public void addAll(Collection<? extends Message> messages) {
    for (Message message : messages) {
    add(message);
    }
    }

    public void add(Message message) {
    if (message instanceof I18nMessage && !((I18nMessage) message).hasBundle()) {
    ((I18nMessage) message).setBundle(localization.getBundle());
    }
    this.errors.add(message);
    }

    public boolean hasErrors() {
    return !errors.isEmpty();
    }

    public List<Message> getErrors() {
    return Collections.unmodifiableList(this.errors);
    }

    }