package com.constellio.model.frameworks.validation; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class ValidationErrors { private final List<ValidationError> validationErrors = new ArrayList<>(); private final List<ValidationError> validationWarnings = new ArrayList<>(); public ValidationErrors() { } public ValidationErrors(ValidationErrors copy) { this.validationErrors.addAll(new ArrayList<>(copy.getValidationErrors())); this.validationWarnings.addAll(new ArrayList<>(copy.getValidationWarnings())); } public final void add(Class<?> validatorClass, String code) { add(validatorClass, code, new HashMap<String, Object>()); } public final void add(ValidationError e, Map<String, Object> parameters) { add(e.getValidatorClass(), e.getValidatorErrorCode(), parameters); } public void add(Class<?> validatorClass, String code, Map<String, Object> parameters) { validationErrors.add(new ValidationError(validatorClass, code, parameters)); } public final void addWarning(Class<?> validatorClass, String code) { addWarning(validatorClass, code, new HashMap<String, Object>()); } public final void addWarning(ValidationError e, Map<String, Object> parameters) { addWarning(e.getValidatorClass(), e.getValidatorErrorCode(), parameters); } public void addWarning(Class<?> validatorClass, String code, Map<String, Object> parameters) { validationWarnings.add(new ValidationError(validatorClass, code, parameters)); } public final String toMultilineErrorsSummaryString() { StringBuilder sb = new StringBuilder(); sb.append("Validation errors :\n"); for (ValidationError validationError : getValidationErrors()) { if (!sb.toString().isEmpty()) { sb.append("\n"); } sb.append(validationError.toMultilineErrorSummaryString()); } sb.append("\nValidation warnings :\n"); for (ValidationError validationError : getValidationWarnings()) { if (!sb.toString().isEmpty()) { sb.append("\n"); } sb.append(validationError.toMultilineErrorSummaryString()); } return sb.toString(); } public final String toErrorsSummaryString() { StringBuilder sb = new StringBuilder(); sb.append("Validation errors :\n"); for (ValidationError validationError : getValidationErrors()) { if (sb.toString().length() < 1000) { if (!sb.toString().isEmpty()) { sb.append(", "); } sb.append(validationError.toErrorSummaryString()); } } sb.append("\nValidation warnings :\n"); for (ValidationError validationError : getValidationWarnings()) { if (sb.toString().length() < 1000) { if (!sb.toString().isEmpty()) { sb.append(", "); } sb.append(validationError.toErrorSummaryString()); } } return sb.toString(); } public List<ValidationError> getValidationWarnings() { return Collections.unmodifiableList(validationWarnings); } public void addAllWarnings(List<ValidationError> validationWarnings) { this.validationWarnings.addAll(validationWarnings); } public List<ValidationError> getValidationErrors() { return Collections.unmodifiableList(validationErrors); } public void addAll(List<ValidationError> validationErrors) { this.validationErrors.addAll(validationErrors); } public final boolean isEmpty() { return getValidationErrors().isEmpty(); } public final void throwIfNonEmpty() throws ValidationException { if (!isEmpty()) { throw new ValidationException(this); } } public final boolean isEmptyErrorAndWarnings() { return getValidationErrors().isEmpty() && getValidationWarnings().isEmpty(); } public final void throwIfNonEmptyErrorOrWarnings() throws ValidationException { if (!isEmptyErrorAndWarnings()) { throw new ValidationException(this); } } }