package org.sculptor.framework.errorhandling; import java.util.Collections; import java.util.Set; import javax.validation.ConstraintViolation; import org.sculptor.framework.errorhandling.annotation.ApplicationException; /** * Thrown when the bean has violated one or several of its constraints You can * get the violation details in getInvalidValues() * */ @SuppressWarnings("serial") @ApplicationException public class ValidationException extends SystemException { public static final String ERROR_CODE = ValidationException.class.getName(); private String constraintViolationsStr = null; private Set<ConstraintViolation<?>> constraintViolations; public ValidationException(String message) { super(ERROR_CODE, message); } public ValidationException(String errorCode, String message, Throwable cause) { super(errorCode, message, cause); } public ValidationException(String errorCode, String message) { super(errorCode, message); } public ValidationException(String message, Set<? extends ConstraintViolation<?>> constraintViolations) { super(ERROR_CODE, message); this.constraintViolations = Collections .<ConstraintViolation<?>> unmodifiableSet(constraintViolations); } public void setConstraintViolations( Set<? extends ConstraintViolation<?>> constraintViolations) { constraintViolationsStr = null; this.constraintViolations = Collections .<ConstraintViolation<?>> unmodifiableSet(constraintViolations); } public Set<ConstraintViolation<?>> getConstraintViolations() { return constraintViolations; } @Override public String toString() { if (constraintViolationsStr == null) { StringBuilder sb = new StringBuilder(); if (constraintViolations != null) { for (ConstraintViolation<?> constraintViolation : constraintViolations) { sb.append(", ") .append(constraintViolation.getPropertyPath()) .append("=") .append(constraintViolation.getInvalidValue()); } } constraintViolationsStr = sb.length() > 0 ? sb.substring(2) : ""; } String errorCodeStr = getErrorCode() != null ? "[" + getErrorCode() + "] " : ""; return errorCodeStr + getMessage() + " (constraint violations: " + constraintViolationsStr + ")"; } }