// Copyright © 2015 HSL <https://www.hsl.fi> // This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses. package fi.hsl.parkandride.core.service; import java.util.Collection; import java.util.Set; import javax.annotation.Nullable; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import com.google.common.base.Function; import com.google.common.collect.Iterables; import fi.hsl.parkandride.core.domain.Violation; public class ValidationService { private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); private static final Function<ConstraintViolation<?>, Violation> TO_VIOLATION = new Function<ConstraintViolation<?>, Violation>() { @Nullable @Override public Violation apply(@Nullable ConstraintViolation<?> input) { return new Violation(input); } }; public void validate(Object object) { Set<ConstraintViolation<Object>> violations = validator.validate(object); if (!violations.isEmpty()) { throw new ValidationException(Iterables.transform(violations, TO_VIOLATION)); } } public void validate(Object object, Collection<Violation> violations) { Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object); for (ConstraintViolation<Object> constraintViolation : constraintViolations) { violations.add(TO_VIOLATION.apply(constraintViolation)); } } }