package com.constellio.model.services.security;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.constellio.data.utils.ImpossibleRuntimeException;
import com.constellio.model.entities.security.Role;
import com.constellio.model.frameworks.validation.ValidationErrors;
import com.constellio.model.frameworks.validation.Validator;
public class RoleValidator implements Validator<Role> {
public static final String INVALID_CODE = "invalidCode";
public static final String NON_UNIQUE_CODE = "codeNotUnique";
public static final String NOT_FOUND = "roleNotFoundForCode";
public static final String EMPTY_CODE = "codeCannotBeEmpty";
private List<Role> roles;
private boolean updateValidation;
public RoleValidator(List<Role> roles, boolean updateValidation) {
this.roles = roles;
this.updateValidation = updateValidation;
if (roles == null) {
throw new ImpossibleRuntimeException("Roles required");
}
}
@Override
public void validate(Role role, ValidationErrors validationErrors) {
this.validate(role.getCode(), validationErrors);
}
public void validate(String code, ValidationErrors validationErrors) {
if (code.isEmpty()) {
addValidationErrors(validationErrors, EMPTY_CODE, code);
}
boolean found = false;
for (Role role : roles) {
if (role.getCode().equals(code) && !updateValidation) {
addValidationErrors(validationErrors, NON_UNIQUE_CODE, code);
break;
} else if (role.getCode().equals(code) && updateValidation) {
found = true;
}
}
if (updateValidation && !found) {
addValidationErrors(validationErrors, NOT_FOUND, code);
}
}
private void addValidationErrors(ValidationErrors validationErrors, String errorCode, String invalidCode) {
Map<String, Object> parameters = new HashMap<>();
parameters.put(INVALID_CODE, invalidCode);
validationErrors.add(getClass(), errorCode, parameters);
}
}