Added class iterator to PluginData
This commit is contained in:
parent
3508b7fdaf
commit
606c3bb2df
3 changed files with 22 additions and 19 deletions
BIN
Zutil.jar
BIN
Zutil.jar
Binary file not shown.
17
src/zutil/plugin/PluginData.java
Normal file → Executable file
17
src/zutil/plugin/PluginData.java
Normal file → Executable file
|
|
@ -43,12 +43,12 @@ public class PluginData {
|
|||
|
||||
private double pluginVersion;
|
||||
private String pluginName;
|
||||
private HashMap<Class, List<Class>> classMap;
|
||||
private HashMap<Class<?>, List<Class<?>>> classMap;
|
||||
private HashMap<Class, Object> objectMap;
|
||||
|
||||
|
||||
protected PluginData(DataNode data) throws ClassNotFoundException, MalformedURLException {
|
||||
classMap = new HashMap<Class, List<Class>>();
|
||||
classMap = new HashMap<>();
|
||||
objectMap = new HashMap<Class, Object>();
|
||||
|
||||
pluginVersion = data.getDouble("version");
|
||||
|
|
@ -80,7 +80,7 @@ public class PluginData {
|
|||
continue;
|
||||
|
||||
if(!classMap.containsKey(intfClass))
|
||||
classMap.put(intfClass, new ArrayList<Class>());
|
||||
classMap.put(intfClass, new ArrayList<Class<?>>());
|
||||
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))
|
||||
return Collections.emptyIterator();
|
||||
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) {
|
||||
try {
|
||||
|
|
@ -131,10 +136,10 @@ public class PluginData {
|
|||
|
||||
|
||||
private class PluginObjectIterator<T> implements Iterator<T>{
|
||||
private Iterator<Class> classIt;
|
||||
private Iterator<Class<?>> classIt;
|
||||
private T currentObj;
|
||||
|
||||
public PluginObjectIterator(Iterator<Class> it) {
|
||||
public PluginObjectIterator(Iterator<Class<?>> it) {
|
||||
classIt = it;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,27 +97,25 @@ public class PluginManager<T> implements Iterable<PluginData>{
|
|||
public Iterator<PluginData> 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);
|
||||
}
|
||||
|
||||
public ArrayList<PluginData> toArray() {
|
||||
ArrayList<PluginData> list = new ArrayList<PluginData>();
|
||||
Iterator<PluginData> it = iterator();
|
||||
while(it.hasNext())
|
||||
list.add(it.next());
|
||||
return list;
|
||||
return toGenericArray(iterator());
|
||||
}
|
||||
public <T> ArrayList<T> toArray(Class<T> intf) {
|
||||
ArrayList<T> list = new ArrayList<T>();
|
||||
Iterator<T> it = iterator(intf);
|
||||
while(it.hasNext())
|
||||
list.add(it.next());
|
||||
return list;
|
||||
return toGenericArray(getObjectIterator(intf));
|
||||
}
|
||||
private <T> ArrayList<T> toGenericArray(Iterator<T> it) {
|
||||
ArrayList<T> list = new ArrayList<>();
|
||||
while(it.hasNext())
|
||||
list.add(it.next());
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
public class PluginInterfaceIterator<T> implements Iterator<T> {
|
||||
public static class PluginInterfaceIterator<T> implements Iterator<T> {
|
||||
private Class<T> intf;
|
||||
private Iterator<PluginData> pluginIt;
|
||||
private Iterator<T> objectIt;
|
||||
|
|
@ -135,7 +133,7 @@ public class PluginManager<T> implements Iterable<PluginData>{
|
|||
return true;
|
||||
|
||||
while(pluginIt.hasNext()) {
|
||||
objectIt = pluginIt.next().getIterator(intf);
|
||||
objectIt = pluginIt.next().getObjectIterator(intf);
|
||||
if(objectIt.hasNext())
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue