mirror of
https://github.com/DanilaFe/abacus
synced 2026-01-28 01:25:19 +00:00
Rename ExternalFunction --> Plugin, and implement plugin loading.
This commit is contained in:
51
src/org/nwapw/abacus/plugin/PluginManager.java
Normal file
51
src/org/nwapw/abacus/plugin/PluginManager.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package org.nwapw.abacus.plugin;
|
||||
|
||||
import org.nwapw.abacus.number.Function;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class PluginManager {
|
||||
|
||||
private ArrayList<Plugin> plugins;
|
||||
private HashMap<String, Plugin> pluginsForFunctions;
|
||||
|
||||
public PluginManager(){
|
||||
plugins = new ArrayList<>();
|
||||
pluginsForFunctions = new HashMap<>();
|
||||
}
|
||||
|
||||
public Plugin pluginForFunction(String name){
|
||||
if(pluginsForFunctions.containsKey(name)) {
|
||||
return pluginsForFunctions.get(name);
|
||||
}
|
||||
|
||||
Plugin foundPlugin = null;
|
||||
for(Plugin plugin : plugins){
|
||||
if(plugin.hasFunction(name)) {
|
||||
foundPlugin = plugin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pluginsForFunctions.put(name, foundPlugin);
|
||||
|
||||
return foundPlugin;
|
||||
}
|
||||
|
||||
public void addInstantiated(Plugin plugin){
|
||||
plugin.load();
|
||||
pluginsForFunctions.clear();
|
||||
plugins.add(plugin);
|
||||
}
|
||||
|
||||
public void addClass(Class<?> newClass){
|
||||
if(!Plugin.class.isAssignableFrom(newClass)) return;
|
||||
try {
|
||||
addInstantiated((Plugin) newClass.getConstructor(PluginManager.class).newInstance(this));
|
||||
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user