package treeline; import ini.trakem2.display.Treeline; import ini.trakem2.plugin.TPlugIn; import ini.trakem2.utils.IJError; import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Method; public class TreelineGraphEditor implements TPlugIn { public TreelineGraphEditor() {} public boolean setup(Object... args) { System.out.println("No setup yet for TreelineGraphEditor"); return true; } public boolean applies(final Object ob) { return ob instanceof Treeline; } public Object invoke(Object... args) { if (null == args || args.length < 1 || null == args[0] || !(args[0] instanceof Treeline)) return null; try { Class RT = Class.forName("clojure.lang.RT"); Method var = RT.getDeclaredMethod("var", new Class[]{String.class, String.class}); Object fn = var.invoke(null, new Object[]{"treeline.graph_editor", "as-graph"}); return Class.forName("clojure.lang.Var") .getDeclaredMethod("invoke", new Class[]{Object.class}) .invoke(fn, new Object[]{args[0]}); } catch (Throwable e) { IJError.print(e); } return null; } static { try { Thread.currentThread().setContextClassLoader(ij.IJ.getClassLoader()); Class c = Class.forName("clojure.lang.Compiler"); Method load = c.getDeclaredMethod("load", new Class[]{Reader.class}); load.invoke(null, new Object[]{new InputStreamReader(TreelineGraphEditor.class.getResourceAsStream("/treeline/graph_editor.clj"))}); // As a side effect, inits clojure runtime } catch (Throwable t) { IJError.print(t); } } }