private EntityMetadata extract()

in deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/EntityMetadataInitializer.java [57:106]


    private EntityMetadata extract(Class<?> repositoryClass)
    {
        // get from annotation
        Repository repository = repositoryClass.getAnnotation(Repository.class);
        if (repository == null)
        {
            return null;
        }
        Class<?> entityClass = repository.forEntity();
        boolean isEntityClass = !Object.class.equals(entityClass) && EntityUtils.isEntityClass(entityClass);
        if (isEntityClass)
        {
            return new EntityMetadata(entityClass, EntityUtils.primaryKeyClass(entityClass));
        }
        
        // get from type
        for (Type inf : repositoryClass.getGenericInterfaces())
        {
            EntityMetadata result = extractFromType(inf);
            if (result != null)
            {
                return result;
            }
        }

        EntityMetadata entityMetadata = extractFromType(repositoryClass.getGenericSuperclass());
        if (entityMetadata != null)
        {
            return entityMetadata;
        }

        for (Type intf : repositoryClass.getGenericInterfaces())
        {
            if (intf instanceof Class<?>)
            {
                entityMetadata = extract((Class<?>) intf);
                if (entityMetadata != null)
                {
                    return entityMetadata;
                }
            }
        }

        if (repositoryClass.getSuperclass() != null)
        {
            return extract(repositoryClass.getSuperclass());
        }

        return null;
    }