package org.signalml.plugin.tool; import java.util.HashMap; import java.util.Map; import org.signalml.plugin.exception.PluginException; import org.signalml.plugin.export.Plugin; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class PluginResourceRepository { private static Map<Class<? extends Plugin>, BeanFactory> beanFactoryMap = new HashMap<Class<? extends Plugin>, BeanFactory>(); public static void RegisterPlugin(Class<? extends Plugin> pluginClass, String configResourceName) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] { configResourceName }, false, null); ctx.setClassLoader(pluginClass.getClassLoader()); ctx.refresh(); beanFactoryMap.put(pluginClass, ctx); } public static Object GetResource(String resourceName, Class<? extends Plugin> pluginClass) throws PluginException { BeanFactory factory = beanFactoryMap.get(pluginClass); if (factory == null) { throw new PluginException("No enclosing bean factory found"); } try { return factory.getBean(resourceName); } catch (BeansException e) { throw new PluginException(e); } } public static Object GetResource(String resourceName) throws PluginException { Class<? extends Plugin> pluginClass = PluginContextHelper.FindContextPluginClass(); if (pluginClass == null) throw new PluginException("No enclosing plugin class found"); return GetResource(resourceName, pluginClass); } }