I have the following method that recursively breaks down a compound constraint into its component constraints:
private void handleComposingConstraints(String friendlyName, Constraint parentConstraint, ConstraintDescriptor<? extends Annotation> parentDescriptor) {
if(parentDescriptor.getAnnotation().annotationType().getName().indexOf("javax.validation") < 0 &&
parentDescriptor.getAnnotation().annotationType().getName().indexOf("org.hibernate") < 0) {
parentConstraint.setCompound(true);
for(ConstraintDescriptor<? extends Annotation> composingDescriptor : parentDescriptor.getComposingConstraints()) {
Constraint composingConstraint = createConstraintFromDescriptor(friendlyName, composingDescriptor);
if(composingDescriptor.getComposingConstraints().size() > 0) {
handleComposingConstraints(friendlyName, composingConstraint, composingDescriptor);
}
parentConstraint.addComposingConstraint(composingConstraint);
}
}
}
Constraint
is a class of my own that I use to keep track of constraint information. ConstraintDescriptor
comes from Spring's BeanUtils
. I am trying to skip compound constraints that come from javax.validation
and org.hibernate
(for example @NotBlank
is a compound constraint that contains @NotNull
). I don't like having to depend on the fully-qualified class-name. Is there a better way to do this?