// 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 com.google.common.collect.ImmutableList; import fi.hsl.parkandride.core.domain.Violation; import java.util.Comparator; import java.util.List; import java.util.StringJoiner; import java.util.stream.StreamSupport; public class ValidationException extends IllegalArgumentException { public final List<Violation> violations; public ValidationException(Violation violation) { this(ImmutableList.of(violation)); } public ValidationException(Iterable<Violation> violations) { super("Invalid data. Violations in " + formatViolations(violations)); this.violations = ImmutableList.copyOf(violations); } private static String formatViolations(Iterable<Violation> violations) { StringJoiner joiner = new StringJoiner(", "); StreamSupport.stream(violations.spliterator(), false) .sorted(Comparator.comparing((Violation v) -> v.path).thenComparing(v -> v.type)) .forEach(v -> joiner.add(v.path + " (" + v.type + ")")); return joiner.toString(); } }