001 package org.crsh.spring;
002
003 import java.util.ArrayList;
004 import java.util.Collection;
005 import java.util.List;
006
007 import org.crsh.plugin.CRaSHPlugin;
008 import org.crsh.plugin.ServiceLoaderDiscovery;
009 import org.springframework.beans.factory.BeanFactory;
010 import org.springframework.beans.factory.ListableBeanFactory;
011
012 public class SpringPluginDiscovery extends ServiceLoaderDiscovery {
013
014 private BeanFactory factory;
015
016 public SpringPluginDiscovery(ClassLoader classLoader, BeanFactory factory)
017 throws NullPointerException {
018 super(classLoader);
019 this.factory = factory;
020 }
021
022 @SuppressWarnings("rawtypes")
023 @Override
024 public Iterable<CRaSHPlugin<?>> getPlugins() {
025 List<CRaSHPlugin<?>> serviceAndSpringPlugins = new ArrayList<CRaSHPlugin<?>>();
026
027 for (CRaSHPlugin<?> cRaSHPlugin : super.getPlugins()) {
028 serviceAndSpringPlugins.add(cRaSHPlugin);
029 }
030
031 if (factory instanceof ListableBeanFactory) {
032 Collection<CRaSHPlugin> springPlugins = ((ListableBeanFactory)factory)
033 .getBeansOfType(CRaSHPlugin.class).values();
034
035 for (CRaSHPlugin cRaSHPlugin : springPlugins) {
036 serviceAndSpringPlugins.add(cRaSHPlugin);
037 }
038 }
039
040 return serviceAndSpringPlugins;
041 }
042
043 }