All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.minijax.validation.metadata.MinijaxBeanDescriptor Maven / Gradle / Ivy

The newest version!
package org.minijax.validation.metadata;

import static java.util.Collections.*;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

import jakarta.validation.metadata.BeanDescriptor;
import jakarta.validation.metadata.ConstructorDescriptor;
import jakarta.validation.metadata.MethodDescriptor;
import jakarta.validation.metadata.MethodType;
import jakarta.validation.metadata.PropertyDescriptor;

public class MinijaxBeanDescriptor extends MinijaxElementDescriptor implements BeanDescriptor {
    private final Set constrainedProperties;

    public MinijaxBeanDescriptor(final Class elementClass) {
        super(elementClass, emptySet());
        constrainedProperties = buildProperties(elementClass);
    }

    @Override
    public boolean isBeanConstrained() {
        return !constrainedProperties.isEmpty();
    }

    @Override
    public Set getConstrainedProperties() {
        return constrainedProperties;
    }

    @Override
    public PropertyDescriptor getConstraintsForProperty(final String propertyName) {
        for (final PropertyDescriptor propertyDescriptor : constrainedProperties) {
            if (propertyDescriptor.getPropertyName().equals(propertyName)) {
                return propertyDescriptor;
            }
        }
        return null;
    }

    /*
     * Not implemented
     */

    @Override
    public MethodDescriptor getConstraintsForMethod(final String methodName, final Class... parameterTypes) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Set getConstrainedMethods(final MethodType methodType, final MethodType... methodTypes) {
        throw new UnsupportedOperationException();
    }

    @Override
    public ConstructorDescriptor getConstraintsForConstructor(final Class... parameterTypes) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Set getConstrainedConstructors() {
        throw new UnsupportedOperationException();
    }

    private static Set buildProperties(final Class c) {
        final Set results = new HashSet<>();
        Class currClass = c;

        while (currClass != null) {
            buildFields(results, currClass);
            buildGetters(results, currClass);
            currClass = currClass.getSuperclass();
        }

        return results;
    }

    private static void buildFields(final Set results, final Class currClass) {
        for (final Field field : currClass.getDeclaredFields()) {
            final MinijaxFieldDescriptor fieldDescriptor = new MinijaxFieldDescriptor(field);
            if (fieldDescriptor.hasConstraints()) {
                field.setAccessible(true);
                results.add(fieldDescriptor);
            }
        }
    }

    private static void buildGetters(final Set results, final Class currClass) {
        for (final Method method : currClass.getDeclaredMethods()) {
            if (method.getName().startsWith("get") && method.getParameterCount() == 0) {
                final MinijaxGetterDescriptor getterDescriptor = new MinijaxGetterDescriptor(method);
                if (getterDescriptor.hasConstraints()) {
                    method.setAccessible(true);
                    results.add(getterDescriptor);
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy