ConfigurationUtils.java

31 lines | 1.219 kB Blame History Raw Download
package br.ufrgs.inf.prosoft.utils;

import br.ufrgs.inf.prosoft.adaptivecaching.exceptions.ConfigurationException;
import org.reflections.Reflections;
import org.reflections.scanners.ResourcesScanner;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.scanners.TypeAnnotationsScanner;
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;

import java.util.Set;

public final class ConfigurationUtils {

    public static Class<?> getAvailableConfigurationClass(Class annotation) {
        Reflections reflections = new Reflections(
                new ConfigurationBuilder()
                        .setUrls(ClasspathHelper.forClassLoader())
                        .setScanners(new SubTypesScanner(false), new ResourcesScanner(), new TypeAnnotationsScanner()));

        Set<Class<?>> configurations =
                reflections.getTypesAnnotatedWith(annotation);
        if (configurations.isEmpty())
            throw new ConfigurationException(annotation.getName() + " not found.");
        if (configurations.size() > 1)
            throw new ConfigurationException(annotation.getName() + " has too many definitions.");
        return configurations.iterator().next();
    }

}