SeSimClassLoader almost complete
This commit is contained in:
parent
3f07b9e002
commit
90c2fbd386
@ -1,4 +1,4 @@
|
||||
#Mon, 20 Nov 2017 09:48:54 +0100
|
||||
#Mon, 20 Nov 2017 23:21:04 +0100
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.processors.list=
|
||||
|
@ -150,9 +150,9 @@ public class Globals {
|
||||
tloader = new AutoTraderLoader(default_pathlist);
|
||||
|
||||
|
||||
IndicatorLoader<Indicator> il = new IndicatorLoader<>(Indicator.class);
|
||||
SeSimClassLoader<Indicator> il = new SeSimClassLoader<>(Indicator.class);
|
||||
il.setDefaultPathList(default_pathlist);
|
||||
il.getInstalled();
|
||||
ArrayList<Class<Indicator>>ires = il.getInstalled();
|
||||
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ public class AutoTraderLoader extends SeSimClassLoader<AutoTraderInterface> {
|
||||
private ArrayList<Class<AutoTraderInterface>> traders_cache = null;
|
||||
|
||||
public AutoTraderLoader(ArrayList<String> pathlist) {
|
||||
super(pathlist);
|
||||
super(AutoTraderInterface.class, pathlist);
|
||||
}
|
||||
|
||||
private ClassLoader cl;
|
||||
@ -78,7 +78,7 @@ public class AutoTraderLoader extends SeSimClassLoader<AutoTraderInterface> {
|
||||
|
||||
ArrayList<Class<?>> trl;
|
||||
ArrayList<Class<AutoTraderInterface>> result = new ArrayList<>();
|
||||
trl = getInstalledClasses(new ArrayList(), AutoTraderInterface.class);
|
||||
trl = getInstalledClasses(new ArrayList());
|
||||
for (Class<?> c : trl) {
|
||||
result.add((Class<AutoTraderInterface>) c);
|
||||
}
|
||||
|
@ -33,37 +33,9 @@ import java.util.ArrayList;
|
||||
*/
|
||||
public class IndicatorLoader<T> extends SeSimClassLoader {
|
||||
|
||||
ArrayList<Class<T>> cache;
|
||||
final Class<T> class_type;
|
||||
|
||||
|
||||
public IndicatorLoader(Class<T> class_type){
|
||||
this.class_type=class_type;
|
||||
public IndicatorLoader(Class class_type) {
|
||||
super(class_type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all traders found in class path
|
||||
*
|
||||
* @return List of traders
|
||||
*/
|
||||
public ArrayList<Class<T>> getInstalled() {
|
||||
|
||||
if (cache != null) {
|
||||
return cache;
|
||||
}
|
||||
|
||||
Class<?> tube ;
|
||||
|
||||
ArrayList<Class<?>> trl;
|
||||
ArrayList<Class<T>> result = new ArrayList<>();
|
||||
trl = getInstalledClasses(new ArrayList(), class_type);
|
||||
for (Class<?> c : trl) {
|
||||
result.add((Class<T>) c);
|
||||
}
|
||||
|
||||
cache = result;
|
||||
return cache;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -41,9 +41,30 @@ import java.util.logging.Level;
|
||||
*
|
||||
* @author 7u83 <7u83@mail.ru>
|
||||
*/
|
||||
public class SeSimClassLoader <T> {
|
||||
public class SeSimClassLoader<T> {
|
||||
|
||||
protected ArrayList<String> default_pathlist;
|
||||
private ArrayList<Class<T>> cache;
|
||||
final Class<T> class_type;
|
||||
|
||||
/**
|
||||
* Create a SeSimClassLoader object with an empty default path
|
||||
* @param class_type
|
||||
*/
|
||||
public SeSimClassLoader(Class<T> class_type) {
|
||||
this(class_type, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a SeSimClassLoader object with fiven default path
|
||||
*
|
||||
* @param class_type
|
||||
* @param pathlist Default path to search classes for
|
||||
*/
|
||||
public SeSimClassLoader(Class<T> class_type, ArrayList<String> pathlist) {
|
||||
this.class_type = class_type;
|
||||
setDefaultPathList(pathlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the path list where to search for traders
|
||||
@ -55,22 +76,6 @@ public class SeSimClassLoader <T> {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a SeSimClassLoader object with an empty default path
|
||||
*/
|
||||
public SeSimClassLoader() {
|
||||
this(new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a SeSimClassLoader object with fiven default path
|
||||
*
|
||||
* @param pathlist Default path to search classes for
|
||||
*/
|
||||
public SeSimClassLoader(ArrayList<String> pathlist) {
|
||||
setDefaultPathList(pathlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all files in a given directory and its sub-directories.
|
||||
*
|
||||
@ -114,8 +119,8 @@ public class SeSimClassLoader <T> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a given class provides a certain interface and also if the
|
||||
* class is not abstract, so it could be instanciated.
|
||||
* Check if a given class provides a certain interface and also if the class
|
||||
* is not abstract, so it could be instanciated.
|
||||
*
|
||||
* @param cls Class to check
|
||||
* @param iface Interface which the class should provide
|
||||
@ -138,7 +143,7 @@ public class SeSimClassLoader <T> {
|
||||
return false;
|
||||
}
|
||||
|
||||
private Class<?> loadClass(String directory, String class_name, Class<?> iface) {
|
||||
private Class<T> loadClass(String directory, String class_name) {
|
||||
|
||||
if (class_name == null) {
|
||||
return null;
|
||||
@ -163,8 +168,8 @@ public class SeSimClassLoader <T> {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (iface != null) {
|
||||
if (!hasInterface(cls, iface)) {
|
||||
if (class_type != null) {
|
||||
if (!hasInterface(cls, class_type)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -173,7 +178,7 @@ public class SeSimClassLoader <T> {
|
||||
return null;
|
||||
}
|
||||
|
||||
return cls;
|
||||
return (Class<T>)cls;
|
||||
|
||||
} catch (ClassNotFoundException ex) {
|
||||
return null;
|
||||
@ -187,11 +192,16 @@ public class SeSimClassLoader <T> {
|
||||
* @param iface
|
||||
* @return
|
||||
*/
|
||||
public ArrayList<Class<?>> getInstalledClasses(ArrayList<String> additional_pathlist, Class<?> iface) {
|
||||
public ArrayList<Class<T>> getInstalledClasses(ArrayList<String> additional_pathlist){
|
||||
|
||||
ArrayList<Class<?>> result = new ArrayList<>();
|
||||
if (cache != null) {
|
||||
return cache;
|
||||
}
|
||||
|
||||
|
||||
ArrayList<Class<T>> result = new ArrayList<>();
|
||||
ArrayList<String> pathlist = new ArrayList<>();
|
||||
|
||||
pathlist.addAll(default_pathlist);
|
||||
pathlist.addAll(additional_pathlist);
|
||||
|
||||
@ -209,7 +219,7 @@ public class SeSimClassLoader <T> {
|
||||
class_name = fn.substring(path.length());
|
||||
class_name = class_name.substring(1, class_name.length() - 6).replace('/', '.');
|
||||
|
||||
Class<?> c = loadClass(path, class_name, iface);
|
||||
Class<T> c = loadClass(path, class_name);
|
||||
if (null == c) {
|
||||
continue;
|
||||
}
|
||||
@ -235,7 +245,7 @@ public class SeSimClassLoader <T> {
|
||||
|
||||
class_name = class_name.substring(0, class_name.length() - 6).replace('/', '.');
|
||||
|
||||
Class<?> c = loadClass(path, class_name, iface);
|
||||
Class<T> c = loadClass(path, class_name);
|
||||
if (null == c) {
|
||||
continue;
|
||||
}
|
||||
@ -248,8 +258,9 @@ public class SeSimClassLoader <T> {
|
||||
|
||||
} finally {
|
||||
try {
|
||||
if (jarstream != null)
|
||||
if (jarstream != null) {
|
||||
jarstream.close();
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
java.util.logging.Logger.getLogger(AutoTraderLoader.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
@ -263,4 +274,29 @@ public class SeSimClassLoader <T> {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all traders found in class path
|
||||
*
|
||||
* @return List of traders
|
||||
*/
|
||||
public ArrayList<Class<T>> getInstalled() {
|
||||
|
||||
if (cache != null) {
|
||||
return cache;
|
||||
}
|
||||
|
||||
Class<?> tube;
|
||||
|
||||
ArrayList<Class<?>> trl;
|
||||
ArrayList<Class<T>> result = new ArrayList<>();
|
||||
trl = getInstalledClasses(new ArrayList()); //, class_type);
|
||||
for (Class<?> c : trl) {
|
||||
result.add((Class<T>) c);
|
||||
}
|
||||
|
||||
cache = result;
|
||||
return cache;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user