package org.teachingextensions.approvals.lite.util.servlets;
import java.util.HashMap;
import java.util.HashSet;
import org.teachingextensions.approvals.lite.util.StringUtils;
public class ValidationError extends RuntimeException {
private static final long serialVersionUID = 7940285202708976073L;
private HashMap<String, String> errors = new HashMap<>();
private HashSet<String> assertions = null;
public ValidationError(Enum<?> enumerations[]) {
this.assertions = new HashSet<>();
for (Enum<?> e : enumerations) {
this.assertions.add(e.toString());
}
}
@Override
public String getMessage() {
return toString();
}
@Override
public String toString() {
return "Validation(s) failed " + errors.keySet().toString() + " - "
+ errors.values().toString();
}
public void set(Enum<?> assertion, boolean isOk, String errorDescription) {
setError(assertion.toString(), !isOk, errorDescription);
}
public void setError(String assertion, boolean isError,
String errorDescription) {
if (isError && !StringUtils.isNonZero(errorDescription)) {
throw new Error("You can not use empty error descriptions");
}
assertValidAssertion(assertion);
if (isError) {
errors.put(assertion, errorDescription);
} else {
errors.remove(assertion);
}
}
public boolean isOk() {
return errors.size() == 0;
}
private void assertValidAssertion(String assertion) {
if (!this.assertions.contains(assertion)) {
throw new Error("Assertion '" + assertion + "' not found from "
+ assertions.toString());
}
}
public int size() {
return errors.size();
}
}