package nl.topicus.onderwijs.dashboard.datasources;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import nl.topicus.onderwijs.dashboard.modules.DataSource;
import nl.topicus.onderwijs.dashboard.modules.DataSourceSettings;
import nl.topicus.onderwijs.dashboard.modules.KeyProperty;
public final class DataSourceAnnotationReader {
private DataSourceAnnotationReader() {
}
public static DataSourceSettings getSettings(
Class<? extends DataSource<?>> dataSource) {
return findAnnotation(dataSource, DataSourceSettings.class);
}
public static KeyProperty getKeyProperty(
Class<? extends DataSource<?>> dataSource) {
return findAnnotation(dataSource, KeyProperty.class);
}
private static <T extends Annotation> T findAnnotation(
Class<? extends DataSource<?>> dataSource, Class<T> annotationClass) {
Set<Class<?>> todo = new HashSet<Class<?>>();
todo.add(dataSource);
while (!todo.isEmpty()) {
Class<?> curClass = todo.iterator().next();
todo.remove(curClass);
if (curClass.isAnnotationPresent(annotationClass))
return curClass.getAnnotation(annotationClass);
if (curClass.getSuperclass() != null)
todo.add(curClass.getSuperclass());
todo.addAll(Arrays.asList(curClass.getInterfaces()));
}
return null;
}
}