package org.activityinfo.server.entity.change;
import javax.validation.ConstraintViolation;
import java.util.Set;
public class ChangeException extends RuntimeException {
private ChangeFailureType failureType;
private String property;
private Set<? extends ConstraintViolation<?>> violations;
public ChangeException(ChangeFailureType failureType) {
super(failureType.toString());
this.failureType = failureType;
}
public ChangeException(ChangeFailureType failureType, Exception cause) {
super(failureType.toString(), cause);
this.failureType = failureType;
}
public ChangeException(ChangeFailureType failureType, String property) {
super(failureType + " (" + property + ")");
this.failureType = failureType;
this.property = property;
}
public ChangeException(String property, Set<? extends ConstraintViolation<?>> violations) {
super(ChangeFailureType.CONSTRAINT_VIOLATION + " (" + property + ": " + toString(violations) + ")");
this.failureType = ChangeFailureType.CONSTRAINT_VIOLATION;
this.property = property;
this.violations = violations;
}
private static String toString(Set<? extends ConstraintViolation<?>> violations) {
StringBuilder sb = new StringBuilder();
for (ConstraintViolation<?> violation : violations) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(violation.getMessage());
}
return sb.toString();
}
public ChangeException(Exception e) {
this(ChangeFailureType.SERVER_FAULT, e);
}
public ChangeFailureType getFailureType() {
return failureType;
}
public String getProperty() {
return property;
}
}