OneOf.java
package com.cloudforge.core.utilities;
import jakarta.validation.*;
import java.lang.annotation.*;
import java.util.*;
@Documented @Constraint(validatedBy = OneOf.Validator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME)
public @interface OneOf {
String message() default "must be one of: {value}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] value();
class Validator implements ConstraintValidator<OneOf, String> {
private Set<String> allowed;
@Override
public void initialize(OneOf a) { allowed = Set.of(a.value()); }
@Override
public boolean isValid(String v, ConstraintValidatorContext c) {
return v == null || allowed.contains(v);
}
}
}