package org.gcube.data.access.storagehub.handlers; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.gcube.common.storagehub.model.annotations.RootNode; import org.gcube.common.storagehub.model.items.Item; import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ClassHandler { private static Logger log = LoggerFactory.getLogger(ClassHandler.class); private Reflections reflection = new Reflections(); private Map> classMap = new HashMap>(); private Map, String> typeMap = new HashMap, String>(); public ClassHandler() { Set> classesAnnotated = reflection.getTypesAnnotatedWith(RootNode.class); for (Class clazz: classesAnnotated ){ if (Item.class.isAssignableFrom(clazz)) for (String value: clazz.getAnnotation(RootNode.class).value()){ log.debug("loading class {} with value {} ", clazz, value ); classMap.put(value, (Class) clazz); typeMap.put((Class) clazz, value); } } } public Class get(String nodeType){ if (classMap.containsKey(nodeType)) return classMap.get(nodeType); throw new RuntimeException("mapping not found for nodetype "+ nodeType); } public String getNodeType(Class clazz){ if (typeMap.containsKey(clazz)) return typeMap.get(clazz); throw new RuntimeException("mapping not found for nodetype "+ clazz.getSimpleName()); } }