gcube-cms-suite/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/PluginsReflections.java

47 lines
1.7 KiB
Java
Raw Normal View History

2022-02-24 18:09:30 +01:00
package org.gcube.application.cms.plugins;
import lombok.extern.slf4j.Slf4j;
import org.reflections.Reflections;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class PluginsReflections {
/** Loads Plugin implementation classes. It should only be accessed once by Plugin Manager
2022-03-16 12:14:15 +01:00
* Plugins shouldn't access this class unless for testing purposes.
2022-02-24 18:09:30 +01:00
* @return
*/
public static Map<String,Plugin> load(){
Map<String,Plugin> toReturn=new HashMap<>();
2022-03-16 12:14:15 +01:00
log.warn("WARNING!! LOADING PLUGIN CLASSES : THIS SHOULD HAPPEN ONLY ONCE");
2022-02-24 18:09:30 +01:00
Reflections reflections = new Reflections(
new ConfigurationBuilder()
.forPackage("org.gcube.application.cms")
.filterInputsBy(new FilterBuilder().includePackage("org.gcube.application.cms")));
reflections.getSubTypesOf(Plugin.class).iterator().forEachRemaining(pluginClass->{
2022-03-16 12:14:15 +01:00
log.trace("Evaluating class {}",pluginClass);
if(!pluginClass.isInterface() && !Modifier.isAbstract(pluginClass.getModifiers())){
2022-02-24 18:09:30 +01:00
try {
2022-03-16 12:14:15 +01:00
log.debug("Found implementation {} ",pluginClass);
2022-02-24 18:09:30 +01:00
Plugin plugin = pluginClass.newInstance();
log.debug("Loading {} description : {}", plugin, plugin.getDescriptor());
toReturn.put(plugin.getDescriptor().getId(), plugin);
}catch (Throwable t){
log.warn("Unable to instantiate Plugin "+pluginClass,t);
}
}
});
return toReturn;
}
}