net.imagej.patcher
Class LegacyEnvironment

java.lang.Object
  extended by net.imagej.patcher.LegacyEnvironment

public class LegacyEnvironment
extends Object

Encapsulates an ImageJ 1.x "instance".

This class is a partner to the LegacyClassLoader, intended to make sure that the ImageJ 1.x contained in a given class loader is patched and can be accessed conveniently.

Author:
"Johannes Schindelin"

Constructor Summary
LegacyEnvironment(ClassLoader loader, boolean headless)
          Constructs a new legacy environment.
 
Method Summary
 void addPluginClasspath(ClassLoader fromClassLoader)
          Adds the class path of a given ClassLoader to the plugin class loader.
 void addPluginClasspath(File... classpathEntries)
          Adds extra elements to the class path of ImageJ 1.x' plugin class loader.
 void disableIJ1PluginDirs()
           
 ClassLoader getClassLoader()
          Gets the class loader containing the ImageJ 1.x classes used in this legacy environment.
 Map<String,String> getMenuStructure()
          Gets the ImageJ 1.x menu structure as a map
static LegacyEnvironment getPatchedImageJ1()
          Launches a fully-patched, self-contained ImageJ 1.x.
 void main(String... args)
          Runs ImageJ.main(args) in the legacy environment.
 void run(String command, String options)
          Runs IJ.run(command, options) in the legacy environment.
 void runMacro(String macro, String arg)
          Runs IJ.runMacro(macro, arg) in the legacy environment.
 Object runPlugIn(String className, String arg)
          Runs IJ.runPlugIn(className, arg) in the legacy environment.
 void setMacroOptions(String options)
          Sets the macro options.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LegacyEnvironment

public LegacyEnvironment(ClassLoader loader,
                         boolean headless)
                  throws ClassNotFoundException
Constructs a new legacy environment.

Parameters:
loader - the ClassLoader to use for loading the (patched) ImageJ 1.x classes; if null, a LegacyClassLoader is constructed.
headless - whether to patch in support for headless operation (compatible only with "well-behaved" plugins, i.e. plugins that do not use graphical components directly)
Throws:
ClassNotFoundException
Method Detail

disableIJ1PluginDirs

public void disableIJ1PluginDirs()

addPluginClasspath

public void addPluginClasspath(ClassLoader fromClassLoader)
Adds the class path of a given ClassLoader to the plugin class loader.

This method is intended to be used in unit tests as well as interactive debugging from inside an Integrated Development Environment where the plugin's classes are not available inside a .jar file.

At the moment, the only supported parameters are URLClassLoaders.

Parameters:
fromClassLoader - the class path donor

addPluginClasspath

public void addPluginClasspath(File... classpathEntries)
Adds extra elements to the class path of ImageJ 1.x' plugin class loader.

The typical use case for a LegacyEnvironment is to run specific plugins in an encapsulated environment. However, in the case of multiple one wants to use multiple legacy environments with separate sets of plugins enabled, it becomes impractical to pass the location of the plugins' .jar files via the plugins.dir system property (because of threading issues).

In other cases, the plugins' .jar files are not located in a single directory, or worse: they might be contained in a directory among .jar files one might not want to add to the plugin class loader's class path.

This method addresses that need by allowing to add individual .jar files to the class path of the plugin class loader and ensuring that their plugins.config files are parsed.

Parameters:
classpathEntries - the class path entries containing ImageJ 1.x plugins

setMacroOptions

public void setMacroOptions(String options)
Sets the macro options.

Both run(String, String) and runMacro(String, String) take an argument that is typically recorded by the macro recorder. For runPlugIn(String, String), however, only the arg parameter that is to be passed to the plugins run() or setup() method can be specified. For those use cases where one wants to call a plugin class directly, but still provide macro options, this method is the solution.

Parameters:
options - the macro options to use for the next call to runPlugIn(String, String)

run

public void run(String command,
                String options)
Runs IJ.run(command, options) in the legacy environment.

Parameters:
command - the command to run
options - the options to pass to the command

runMacro

public void runMacro(String macro,
                     String arg)
Runs IJ.runMacro(macro, arg) in the legacy environment.

Parameters:
macro - the macro code to run
arg - an optional argument (which can be retrieved in the macro code via getArgument())

runPlugIn

public Object runPlugIn(String className,
                        String arg)
Runs IJ.runPlugIn(className, arg) in the legacy environment.

Parameters:
className - the plugin class to run
arg - an optional argument (which get passed to the run() or setup() method of the plugin)

main

public void main(String... args)
Runs ImageJ.main(args) in the legacy environment.

Parameters:
args - the arguments to pass to the main() method

getClassLoader

public ClassLoader getClassLoader()
Gets the class loader containing the ImageJ 1.x classes used in this legacy environment.

Returns:
the class loader

getMenuStructure

public Map<String,String> getMenuStructure()
Gets the ImageJ 1.x menu structure as a map


getPatchedImageJ1

public static LegacyEnvironment getPatchedImageJ1()
                                           throws ClassNotFoundException
Launches a fully-patched, self-contained ImageJ 1.x.

Throws:
ClassNotFoundException


Copyright © 2011–2014 SciJava. All rights reserved.