package org.crsh.spring;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.crsh.plugin.CRaSHPlugin;
import org.crsh.plugin.ServiceLoaderDiscovery;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
public class SpringPluginDiscovery extends ServiceLoaderDiscovery {
private BeanFactory factory;
public SpringPluginDiscovery(ClassLoader classLoader, BeanFactory factory)
throws NullPointerException {
super(classLoader);
this.factory = factory;
}
@SuppressWarnings("rawtypes")
@Override
public Iterable<CRaSHPlugin<?>> getPlugins() {
List<CRaSHPlugin<?>> serviceAndSpringPlugins = new ArrayList<CRaSHPlugin<?>>();
for (CRaSHPlugin<?> cRaSHPlugin : super.getPlugins()) {
serviceAndSpringPlugins.add(cRaSHPlugin);
}
if (factory instanceof ListableBeanFactory) {
Collection<CRaSHPlugin> springPlugins = ((ListableBeanFactory)factory)
.getBeansOfType(CRaSHPlugin.class).values();
for (CRaSHPlugin cRaSHPlugin : springPlugins) {
serviceAndSpringPlugins.add(cRaSHPlugin);
}
}
return serviceAndSpringPlugins;
}
}