[ImageJ-devel] Simple plugin discovery logic

Curtis Rueden ctrueden at wisc.edu
Tue Nov 23 22:04:28 CST 2010


Hi Lee,

Looks like a good start. Is NetBeans going to be required for IJ2? It would
> be nice, esp. for CellProfiler, to have some static method that would find
> the plugin finders, but if NetBeans is in, the code to do so ourselves does
> not look too complex.
>

"NetBeans" is actually a collection of quite a few different modules. We
will be using them piecemeal in places where it makes sense. For the ImageJ2
GUI, we will likely use the NetBeans RCP as a whole, but it will not be
required to use ImageJ as a library.

In the case of plugin discovery, we are using the NetBeans Lookup module to
access all plugin finders. This takes the form of a simple method call:
  Lookup.getDefault().lookupAll(PluginFinder.class).

Alternately, you can instantiate specific PluginFinder implementations and
ask them to discover plugins with something like:
  List<PluginEntry> plugins = new ArrayList<PluginEntry>();
  new Ij1PluginFinder().findPlugins(plugins);

But ultimately there will indeed be a simple static method that returns all
the plugins found by all registered plugin finders. This will likely be the
easiest method for external applications like CellProfiler to use.

-Curtis

On Tue, Nov 23, 2010 at 7:22 AM, Lee Kamentsky <leek at broadinstitute.org>wrote:

>  Hi Curtis,
>
> Looks like a good start. Is NetBeans going to be required for IJ2? It would
> be nice, esp. for CellProfiler, to have some static method that would find
> the plugin finders, but if NetBeans is in, the code to do so ourselves does
> not look too complex.
>
> --Lee
>
>
> On 11/22/2010 6:52 PM, Curtis Rueden wrote:
>
> Hi Grant et. al,
>
> Today Rick & I added a simple plugin discovery mechanism to the ImageJ2
> codebase. This is a work in progress. The idea is to have an interface,
> PluginFinder, that provides a method, findPlugins(List<PluginEntry>
> plugins), for populating a list with discovered plugins. The IJ1
> compatibility layer can have an Ij1PluginFinder that discovers IJ1 plugins,
> and the ImageJ2 code can have an Ij2PluginFinder (or whatever) for
> discovering any additional plugins of various types.
>
> Here is what we have so far:
>
> In ij2-common:
>   + imagej.plugin.PluginEntry -- very simple data structure for a single
> plugin entry, including plugin class name, and associated menu entry
>   + imagej.plugin.PluginFinder -- interface for anything capable of
> discovering ImageJ plugins -- has one method: findPlugins(List<PluginEntry>
> plugins)
>
> In ij1-bridge:
>   + imagej.ij1bridge.plugin.Ij1PluginFinder -- implementation for
> discovering ImageJ 1.x plugins -- delegates to ij.Menus where possible
>
> In ijx:
>   + ijx.plugin.IjxPluginFinder -- currently a dummy implementation that
> just populates a single fake plugin entry -- eventually will discover ImageJ
> 2.x plugins
>
> Tester class (in ijx):
>   + ijx.plugin.PluginDiscovery -- obtains all implementations of
> PluginFinder interface (using NB Lookup), discovers all available plugins
> and prints out the list
>
> Again, this is a work in progress. The goal is have a very simple,
> encapsulated way of querying for plugins without any assumptions about GUIs,
> etc. The PluginEntry in particular will need to be fleshed out with more
> details—e.g., there is no way to express the arg string needed by many IJ1
> plugins/commands, no way to link an image icon for use with a toolbar, and
> no way to express order for menus or toolbars.
>
> More later; comments welcome any time.
>
> -Curtis
>
>
> _______________________________________________
> ImageJ-devel mailing listImageJ-devel at imagejdev.orghttp://imagejdev.org/mailman/listinfo/imagej-devel
>
>
>
> _______________________________________________
> ImageJ-devel mailing list
> ImageJ-devel at imagejdev.org
> http://imagejdev.org/mailman/listinfo/imagej-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20101123/58d80f6a/attachment.html>


More information about the ImageJ-devel mailing list