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 }