EnumeratorValidator.java
package no.ntnu.idi.stud.savingsapp.validation.impl;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import no.ntnu.idi.stud.savingsapp.validation.Enumerator;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Validator for the Enumerator constraint. This validator ensures that an enumerator
* meets the specified criteria defined in the application properties.
*/
public final class EnumeratorValidator implements ConstraintValidator<Enumerator, String> {
private Enumerator enumerator;
private Set<String> types;
/**
* Initializes the validator.
* @param enumerator The Enumerator annotation.
*/
@Override
public void initialize(Enumerator enumerator) {
this.enumerator = enumerator;
this.types = Arrays.stream(enumerator.value().getEnumConstants()).map(Enum::name).collect(Collectors.toSet());
;
}
/**
* Validates an enumerator.
* @param value The value to validate.
* @param context The constraint validator context.
* @return true if the value is valid, false otherwise.
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
String message = null;
if (value == null && !enumerator.nullable()) {
message = enumerator.value().getSimpleName() + " value is required";
}
else if (value != null && !types.contains(value)) {
message = "Invalid enum value '" + value + "' for " + enumerator.value().getSimpleName();
}
if (message != null) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(message).addConstraintViolation();
return false;
}
return true;
}
}