1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
public void loadPlugins() throws Exception {
this.pluginsDirectory = new File("plugins");
this._pluginFiles = new ArrayList<String>();
this.scanPluginsDirectory(this.pluginsDirectory);
this.pluginFiles = new String[this._pluginFiles.size()];
this._pluginFiles.toArray(this.pluginFiles);
if(this.pluginFiles == null || this.pluginFiles.length == 0){
return;
}
if(this.equipmentPlugins.size() != 0) return;
File[] tempFile = new File[this.pluginFiles.length];
Enumeration<?> jarEnumeration = null;
Class<?> tmpClass = null;
for(int i=0; i<tempFile.length; i++) {
tempFile[i] = new File(this.pluginFiles[i]);
if(!tempFile[i].exists()) {
break;
}
URL url = tempFile[i].toURI().toURL();
this.loadPluginInClassPath(url);
URLClassLoader loader = new URLClassLoader(new URL[] {url}, this.getClass().getClassLoader());
JarFile jarFile = new JarFile(tempFile[i].getAbsolutePath());
jarEnumeration = jarFile.entries();
while(jarEnumeration.hasMoreElements()) {
String tmpString = jarEnumeration.nextElement().toString();
if(tmpString.length() > 6 && tmpString.endsWith(".class")) {
tmpString = tmpString.substring(0, tmpString.length()-6);
tmpString = tmpString.replaceAll("/",".");
tmpClass = Class.forName(tmpString, true, loader);
if(!tmpClass.isInterface() && !tmpClass.isEnum() && !tmpClass.isAnnotation()) {
if(tmpClass.getSuperclass().getSimpleName().equals("Equipment")) {
Equipment tempEquipment = ((Equipment) tmpClass.newInstance()).getNewInstance(this.pluginsManager);
tempEquipment.setPluginName(this.addPluginName(this.pluginFiles[i]));
this.equipmentPlugins.add(tempEquipment);
}
}
}
}
loader = null;
jarFile = null;
}
} |