package com.constellio.model.frameworks.validation;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
public class ValidationError {
private final Class<?> validatorClass;
private final String errorCode;
private final String code;
private final Map<String, Object> parameters;
public ValidationError(Class<?> validatorClass, String errorCode, Map<String, Object> parameters) {
this.validatorClass = validatorClass;
this.errorCode = errorCode;
this.code = validatorClass.getName() + "_" + errorCode;
this.parameters = parameters;
}
public Class<?> getValidatorClass() {
return validatorClass;
}
public String getValidatorErrorCode() {
return errorCode;
}
public String getCode() {
return code;
}
public Map<String, Object> getParameters() {
return parameters;
}
@Override
public String toString() {
return "ValidationError [code=" + code + ", parameters=" + parameters + "]";
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
public String toErrorSummaryString() {
if (parameters == null || parameters.isEmpty()) {
return code;
} else {
StringBuilder stringBuilder = new StringBuilder(code + "[");
boolean first = true;
for (Map.Entry<String, Object> parameter : parameters.entrySet()) {
if (!first) {
stringBuilder.append(",");
}
Object parameterValue = parameter.getValue();
if (parameterValue instanceof String) {
stringBuilder.append(parameter.getKey() + "=" + parameterValue);
} else if (parameterValue instanceof Map) {
// TODO Pat manage Map value here...
Map<String, String> labelsMap = (Map<String, String>) parameterValue;
boolean firstLabel = true;
stringBuilder.append(" ");
for (Map.Entry<String, String> labelsEntry : labelsMap.entrySet()) {
if (!firstLabel) {
stringBuilder.append(",");
}
stringBuilder.append(labelsEntry.getKey() + "=" + labelsEntry.getValue());
firstLabel = false;
}
}
first = false;
}
return stringBuilder.toString() + "]";
}
}
public String toMultilineErrorSummaryString() {
StringBuilder sb = new StringBuilder();
sb.append(code);
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
Object entryValue = entry.getValue();
if (entryValue instanceof String) {
sb.append("\n\t" + entry.getKey() + "=" + entryValue);
} else if (entryValue instanceof Map) {
// TODO Pat manage Map value here...
Map<String, String> labelsMap = (Map<String, String>) entryValue;
boolean firstLabel = true;
for (Map.Entry<String, String> labelsEntry : labelsMap.entrySet()) {
if (!firstLabel) {
sb.append(",");
}
sb.append(labelsEntry.getKey() + "=" + labelsEntry.getValue());
firstLabel = false;
}
}
}
return sb.toString();
}
public Object getParameter(String key) {
return parameters.get(key);
}
}