package org.nutz.plugin;
import java.util.ArrayList;
import java.util.List;
import org.nutz.lang.Lang;
/**
*
* @author Wendal(wendal1985@gmail.com)
* @author zozoh(zozohtnt@gmail.com)
*/
public class SimplePluginManager<T> implements PluginManager<T> {
private List<Plugin> list = new ArrayList<Plugin>();
public SimplePluginManager(String... classNames) throws PluginException {
if (classNames != null)
for (String className : classNames)
loadPlugin(className);
}
public SimplePluginManager(Class<? extends T>... classNames) throws PluginException {
if (classNames != null)
for (Class<? extends T> pluginClass : classNames)
loadPlugin(pluginClass);
}
@SuppressWarnings("unchecked")
public T get() throws NoPluginCanWorkException {
for (Plugin plugin : list)
if (plugin.canWork())
return (T) plugin;
throw new NoPluginCanWorkException();
}
@SuppressWarnings("unchecked")
public List<T> gets() {
List<T> aList = new ArrayList<T>(list.size());
for (Plugin plugin : list)
if (plugin.canWork())
aList.add((T)plugin);
return aList;
}
protected void loadPlugin(Class<? extends T> pluginClass) throws PluginException {
if (pluginClass != null)
try {
list.add((Plugin) pluginClass.newInstance());
}
catch (Throwable e) {}
}
@SuppressWarnings("unchecked")
private void loadPlugin(String pluginClassName) throws PluginException {
if (pluginClassName != null)
try {
loadPlugin((Class<? extends T>) Lang.loadClass(pluginClassName));
}
catch (Throwable e) {}
}
}