Implemented Class iterator for plugin manager
This commit is contained in:
parent
095109eb41
commit
5a328913ed
1 changed files with 46 additions and 3 deletions
|
|
@ -98,7 +98,10 @@ public class PluginManager<T> implements Iterable<PluginData>{
|
||||||
return plugins.values().iterator();
|
return plugins.values().iterator();
|
||||||
}
|
}
|
||||||
public <T> Iterator<T> getObjectIterator(Class<T> intf) {
|
public <T> Iterator<T> getObjectIterator(Class<T> intf) {
|
||||||
return new PluginInterfaceIterator<T>(plugins.values().iterator(), intf);
|
return new PluginObjectIterator<T>(plugins.values().iterator(), intf);
|
||||||
|
}
|
||||||
|
public <T> Iterator<Class<? extends T>> getClassIterator(Class<T> intf) {
|
||||||
|
return new PluginClassIterator<T>(plugins.values().iterator(), intf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<PluginData> toArray() {
|
public ArrayList<PluginData> toArray() {
|
||||||
|
|
@ -115,12 +118,52 @@ public class PluginManager<T> implements Iterable<PluginData>{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class PluginInterfaceIterator<T> implements Iterator<T> {
|
public static class PluginClassIterator<T> implements Iterator<Class<? extends T>> {
|
||||||
|
private Class<T> intf;
|
||||||
|
private Iterator<PluginData> pluginIt;
|
||||||
|
private Iterator<Class<?>> classIt;
|
||||||
|
|
||||||
|
PluginClassIterator(Iterator<PluginData> it, Class<T> intf){
|
||||||
|
this.intf = intf;
|
||||||
|
this.pluginIt = it;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
if(pluginIt == null)
|
||||||
|
return false;
|
||||||
|
if(classIt != null && classIt.hasNext())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
while(pluginIt.hasNext()) {
|
||||||
|
classIt = pluginIt.next().getClassIterator(intf);
|
||||||
|
if(classIt.hasNext())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
classIt = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends T> next() {
|
||||||
|
if(!hasNext())
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
return (Class<? extends T>) classIt.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
throw new RuntimeException("Iterator is ReadOnly");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class PluginObjectIterator<T> implements Iterator<T> {
|
||||||
private Class<T> intf;
|
private Class<T> intf;
|
||||||
private Iterator<PluginData> pluginIt;
|
private Iterator<PluginData> pluginIt;
|
||||||
private Iterator<T> objectIt;
|
private Iterator<T> objectIt;
|
||||||
|
|
||||||
PluginInterfaceIterator(Iterator<PluginData> it, Class<T> intf){
|
PluginObjectIterator(Iterator<PluginData> it, Class<T> intf){
|
||||||
this.intf = intf;
|
this.intf = intf;
|
||||||
this.pluginIt = it;
|
this.pluginIt = it;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue