package org.signalml.plugin.tool;
import java.util.HashMap;
import java.util.Map;
import org.signalml.plugin.exception.PluginException;
import org.signalml.plugin.export.Plugin;
public class PluginContextHelper {
private static Map<String, Class<? extends Plugin>> PluginPackages = new HashMap<String, Class<? extends Plugin>>();
protected static Class<? extends Plugin> FindContextPluginClass() {
try {
StackTraceElement stackTrace[] = Thread.currentThread()
.getStackTrace();
for (int i = 1; i < stackTrace.length; ++i) {
StackTraceElement e = stackTrace[i];
String klassName = e.getClassName();
if (klassName != null) {
for (int pos = klassName.length(); (pos = klassName
.lastIndexOf(".", pos - 1)) != -1;) {
String packageName = klassName.substring(0, pos);
Class<? extends Plugin> klass = PluginPackages
.get(packageName);
if (klass != null) {
return klass;
}
}
}
}
} catch (SecurityException e) {
// do nothing; can't actually happen
}
return null;
}
protected static void AddPluginContext(Plugin plugin)
throws PluginException {
Class<? extends Plugin> klass = plugin.getClass();
if (klass.isAnonymousClass()) {
throw new PluginException("Anonymous plugin classes not supported");
}
Package _package = klass.getPackage();
if (_package == null) {
throw new PluginException("Cannot get plugin package");
}
String packageName = _package.getName();
if (packageName == null) {
throw new PluginException("Cannot get plugin package name");
}
if (PluginPackages.containsKey(packageName)) {
throw new PluginException("Plugin class " + packageName
+ " already registered");
}
PluginPackages.put(packageName, klass);
}
}