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 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue