All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yammer.dropwizard.validation.Validator Maven / Gradle / Ivy

package com.yammer.dropwizard.validation;

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;

import javax.validation.ConstraintViolation;
import javax.validation.Path;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import java.util.Set;

import static java.lang.String.format;

/**
 * A simple façade for Hibernate Validator.
 */
public class Validator {
    private final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

    /**
     * Validates the given object, and returns a list of error messages, if any. If the returned
     * list is empty, the object is valid.
     *
     * @param o      a potentially-valid object
     * @param     the type of object to validate
     * @return a list of error messages, if any, regarding {@code o}'s validity
     */
    public  ImmutableList validate(T o) {
        final Set errors = Sets.newHashSet();
        final Set> violations = factory.getValidator().validate(o);
        for (ConstraintViolation v : violations) {
            if (v.getConstraintDescriptor().getAnnotation() instanceof ValidationMethod) {
                final ImmutableList nodes = ImmutableList.copyOf(v.getPropertyPath());
                final ImmutableList usefulNodes = nodes.subList(0, nodes.size() - 1);
                final String msg = v.getMessage().startsWith(".") ? "%s%s" : "%s %s";
                errors.add(format(msg, Joiner.on('.').join(usefulNodes), v.getMessage()).trim());
            } else {
                errors.add(format("%s %s (was %s)",
                                  v.getPropertyPath(),
                                  v.getMessage(),
                                  v.getInvalidValue()));
            }
        }
        return ImmutableList.copyOf(Ordering.natural().sortedCopy(errors));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy