Added class iterator to PluginData

This commit is contained in:
Ziver Koc 2015-12-23 00:33:26 +01:00
parent 3508b7fdaf
commit 606c3bb2df
3 changed files with 22 additions and 19 deletions

BIN
Zutil.jar

Binary file not shown.

17
src/zutil/plugin/PluginData.java Normal file → Executable file
View file

@ -43,12 +43,12 @@ public class PluginData {
private double pluginVersion; private double pluginVersion;
private String pluginName; private String pluginName;
private HashMap<Class, List<Class>> classMap; private HashMap<Class<?>, List<Class<?>>> classMap;
private HashMap<Class, Object> objectMap; private HashMap<Class, Object> objectMap;
protected PluginData(DataNode data) throws ClassNotFoundException, MalformedURLException { protected PluginData(DataNode data) throws ClassNotFoundException, MalformedURLException {
classMap = new HashMap<Class, List<Class>>(); classMap = new HashMap<>();
objectMap = new HashMap<Class, Object>(); objectMap = new HashMap<Class, Object>();
pluginVersion = data.getDouble("version"); pluginVersion = data.getDouble("version");
@ -80,7 +80,7 @@ public class PluginData {
continue; continue;
if(!classMap.containsKey(intfClass)) if(!classMap.containsKey(intfClass))
classMap.put(intfClass, new ArrayList<Class>()); classMap.put(intfClass, new ArrayList<Class<?>>());
classMap.get(intfClass).add(pluginClass); classMap.get(intfClass).add(pluginClass);
} }
} }
@ -102,11 +102,16 @@ public class PluginData {
} }
public <T> Iterator<T> getIterator(Class<T> intf){ public <T> Iterator<T> getObjectIterator(Class<T> intf){
if(!classMap.containsKey(intf)) if(!classMap.containsKey(intf))
return Collections.emptyIterator(); return Collections.emptyIterator();
return new PluginObjectIterator<T>(classMap.get(intf).iterator()); return new PluginObjectIterator<T>(classMap.get(intf).iterator());
} }
public Iterator<Class<?>> getClassIterator(Class<?> intf){
if(!classMap.containsKey(intf))
return Collections.emptyIterator();
return classMap.get(intf).iterator();
}
private <T> T getObject(Class<T> objClass) { private <T> T getObject(Class<T> objClass) {
try { try {
@ -131,10 +136,10 @@ public class PluginData {
private class PluginObjectIterator<T> implements Iterator<T>{ private class PluginObjectIterator<T> implements Iterator<T>{
private Iterator<Class> classIt; private Iterator<Class<?>> classIt;
private T currentObj; private T currentObj;
public PluginObjectIterator(Iterator<Class> it) { public PluginObjectIterator(Iterator<Class<?>> it) {
classIt = it; classIt = it;
} }

View file

@ -97,27 +97,25 @@ public class PluginManager<T> implements Iterable<PluginData>{
public Iterator<PluginData> iterator() { public Iterator<PluginData> iterator() {
return plugins.values().iterator(); return plugins.values().iterator();
} }
public <T> Iterator<T> iterator(Class<T> intf) { public <T> Iterator<T> getObjectIterator(Class<T> intf) {
return new PluginInterfaceIterator<T>(plugins.values().iterator(), intf); return new PluginInterfaceIterator<T>(plugins.values().iterator(), intf);
} }
public ArrayList<PluginData> toArray() { public ArrayList<PluginData> toArray() {
ArrayList<PluginData> list = new ArrayList<PluginData>(); return toGenericArray(iterator());
Iterator<PluginData> it = iterator();
while(it.hasNext())
list.add(it.next());
return list;
} }
public <T> ArrayList<T> toArray(Class<T> intf) { public <T> ArrayList<T> toArray(Class<T> intf) {
ArrayList<T> list = new ArrayList<T>(); return toGenericArray(getObjectIterator(intf));
Iterator<T> it = iterator(intf); }
private <T> ArrayList<T> toGenericArray(Iterator<T> it) {
ArrayList<T> list = new ArrayList<>();
while(it.hasNext()) while(it.hasNext())
list.add(it.next()); list.add(it.next());
return list; return list;
} }
public class PluginInterfaceIterator<T> implements Iterator<T> { public static class PluginInterfaceIterator<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;
@ -135,7 +133,7 @@ public class PluginManager<T> implements Iterable<PluginData>{
return true; return true;
while(pluginIt.hasNext()) { while(pluginIt.hasNext()) {
objectIt = pluginIt.next().getIterator(intf); objectIt = pluginIt.next().getObjectIterator(intf);
if(objectIt.hasNext()) if(objectIt.hasNext())
return true; return true;
} }