package org.nutz.plugin;
import java.util.ArrayList;
import java.util.List;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.IocException;
/**
* 从 Ioc 容器中选取可用插件
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class IocPluginManager<T> implements PluginManager<T> {
private Ioc ioc;
private String[] names;
public IocPluginManager(Ioc ioc, String... names) {
this.ioc = ioc;
this.names = names;
}
@SuppressWarnings("unchecked")
public T get() throws NoPluginCanWorkException {
for (String name : names) {
try {
Plugin plugin = ioc.get(Plugin.class, name);
if (plugin.canWork())
return (T) plugin;
}
catch (IocException e) {}
}
throw new NoPluginCanWorkException();
}
@SuppressWarnings("unchecked")
public List<T> gets() {
List<T> aList = new ArrayList<T>(names.length);
for (String name : names) {
try {
Plugin plugin = ioc.get(Plugin.class, name);
if (plugin.canWork())
aList.add((T)plugin);
}
catch (IocException e) {}
}
return aList;
}
}