From c46c1b520af0201efa3cc4fb0ed0c235898ab656 Mon Sep 17 00:00:00 2001
From: Curtis Rueden <ctrueden@wisc.edu>
Date: Sat, 25 Feb 2017 14:11:49 -0600
Subject: [PATCH] Convert ImageJ 1.x plugins to SciJava commands

Among other benefits, this allows the plugins to be discovered
efficiently simply by being on the classpath, rather than needing a
plugins.dir system property pointing to a single location with all
the JAR files, which must then be scanned for plugins.config files.

This is a breaking API change, so bumps to major version 4.
---
 pom.xml                                       |  2 +-
 .../java/bdv/ij/BigDataBrowserPlugIn.java     | 11 ++++++----
 src/main/java/bdv/ij/BigDataViewerPlugIn.java |  9 +++++---
 .../java/bdv/ij/ExportCellVoyagerPlugIn.java  | 22 ++++++++++++++-----
 .../java/bdv/ij/ExportImagePlusPlugIn.java    | 12 ++++++----
 .../java/bdv/ij/ExportSpimFusionPlugIn.java   | 12 ++++++----
 .../java/bdv/ij/ExportSpimSequencePlugIn.java | 12 ++++++----
 src/main/java/bdv/ij/ImportPlugIn.java        | 11 ++++++----
 src/main/java/bdv/ij/OpenImagePlusPlugIn.java | 12 ++++++----
 src/main/java/bdv/ij/OpenImarisPlugIn.java    | 12 ++++++----
 src/main/resources/plugins.config             | 20 -----------------
 11 files changed, 78 insertions(+), 57 deletions(-)
 delete mode 100644 src/main/resources/plugins.config

diff --git a/pom.xml b/pom.xml
index 577ab6f..251c300 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
 
 	<groupId>sc.fiji</groupId>
 	<artifactId>bigdataviewer_fiji</artifactId>
-	<version>3.0.2-SNAPSHOT</version>
+	<version>4.0.0-SNAPSHOT</version>
 
 	<name>BigDataViewer Fiji</name>
 	<description>Fiji plugins for starting BigDataViewer and exporting data.</description>
diff --git a/src/main/java/bdv/ij/BigDataBrowserPlugIn.java b/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
index 98ce441..f2607f2 100644
--- a/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
+++ b/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
@@ -27,19 +27,22 @@ import javax.swing.JOptionPane;
 import javax.swing.JScrollPane;
 
 import org.apache.commons.lang.StringUtils;
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
 
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.viewer.ViewerOptions;
 import ij.IJ;
 import ij.ImageJ;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 
 /**
  * @author HongKee Moon &lt;moon@mpi-cbg.de&gt;
  */
-public class BigDataBrowserPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Browse BigDataServer")
+public class BigDataBrowserPlugIn implements Command
 {
 	private final Map< String, ImageIcon > imageMap = new HashMap<>();
 
@@ -48,7 +51,7 @@ public class BigDataBrowserPlugIn implements PlugIn
 	public static String serverUrl = "http://";
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		BufferedImage image = null;
 		try
@@ -198,6 +201,6 @@ public class BigDataBrowserPlugIn implements PlugIn
 	public static void main( final String[] args )
 	{
 		ImageJ.main( args );
-		new BigDataBrowserPlugIn().run( null );
+		new BigDataBrowserPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/BigDataViewerPlugIn.java b/src/main/java/bdv/ij/BigDataViewerPlugIn.java
index 0267908..f37c3de 100644
--- a/src/main/java/bdv/ij/BigDataViewerPlugIn.java
+++ b/src/main/java/bdv/ij/BigDataViewerPlugIn.java
@@ -10,18 +10,21 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.viewer.ViewerOptions;
 import ij.Prefs;
-import ij.plugin.PlugIn;
 
-public class BigDataViewerPlugIn implements PlugIn
+@Plugin(type = Command.class, menuPath = "Plugins>BigDataViewer>Open XML/HDF5")
+public class BigDataViewerPlugIn implements Command
 {
 	static String lastDatasetPath = "./export.xml";
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		File file = null;
 
diff --git a/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java b/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
index eaf88e1..0ff922b 100644
--- a/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
+++ b/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
@@ -14,6 +14,9 @@ import java.io.FilenameFilter;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ProgressWriter;
 import bdv.ij.export.tiles.CellVoyagerDataExporter;
 import bdv.ij.util.PluginHelper;
@@ -21,9 +24,10 @@ import bdv.ij.util.ProgressWriterIJ;
 import fiji.util.gui.GenericDialogPlus;
 import ij.IJ;
 import ij.ImageJ;
-import ij.plugin.PlugIn;
 
-public class ExportCellVoyagerPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export CellVoyager dataset as XML/HDF5")
+public class ExportCellVoyagerPlugIn implements Command
 {
 
 	protected static class Parameters
@@ -56,11 +60,18 @@ public class ExportCellVoyagerPlugIn implements PlugIn
 
 	static String sourceFolderStr;
 
+	private String sourcePath;
+
+	public void setSourcePath( final String sourcePath )
+	{
+		this.sourcePath = sourcePath;
+	}
+
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 
-		final Parameters params = getParameters( arg );
+		final Parameters params = getParameters( sourcePath );
 		if ( params == null )
 			return;
 
@@ -248,6 +259,7 @@ public class ExportCellVoyagerPlugIn implements PlugIn
 
 		final ExportCellVoyagerPlugIn plugin = new ExportCellVoyagerPlugIn();
 		final File file = new File( "/Users/tinevez/Desktop/Data/1_7_6_1_2/20130703T145244/" );
-		plugin.run( file.getAbsolutePath() );
+		plugin.setSourcePath( file.getAbsolutePath() );
+		plugin.run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
index 124579b..3297fbc 100644
--- a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
+++ b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
@@ -14,6 +14,9 @@ import net.imglib2.FinalDimensions;
 import net.imglib2.RandomAccessibleInterval;
 import net.imglib2.realtransform.AffineTransform3D;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -37,7 +40,6 @@ import ij.ImagePlus;
 import ij.WindowManager;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
 import mpicbg.spim.data.registration.ViewRegistration;
 import mpicbg.spim.data.registration.ViewRegistrations;
@@ -51,17 +53,19 @@ import mpicbg.spim.data.sequence.TimePoints;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class ExportImagePlusPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Current Image as XML/HDF5")
+public class ExportImagePlusPlugIn implements Command
 {
 	public static void main( final String[] args )
 	{
 		new ImageJ();
 		IJ.run("Confocal Series (2.2MB)");
-		new ExportImagePlusPlugIn().run( null );
+		new ExportImagePlusPlugIn().run();
 	}
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		// get the current image
 		final ImagePlus imp = WindowManager.getCurrentImage();
diff --git a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
index e313cde..6f37e87 100644
--- a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
+++ b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
@@ -23,6 +23,9 @@ import net.imglib2.realtransform.AffineTransform3D;
 import net.imglib2.util.Pair;
 import net.imglib2.util.ValuePair;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -47,7 +50,6 @@ import ij.IJ;
 import ij.ImagePlus;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicSetupImgLoader;
@@ -66,7 +68,9 @@ import mpicbg.spim.io.SPIMConfiguration;
 import mpicbg.spim.io.TextFileAccess;
 import spimopener.SPIMExperiment;
 
-public class ExportSpimFusionPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Fused Sequence as XML/HDF5")
+public class ExportSpimFusionPlugIn implements Command
 {
 	static double minValueStatic = 0;
 
@@ -91,7 +95,7 @@ public class ExportSpimFusionPlugIn implements PlugIn
 	static String autoChunkSizes = "{16,16,16}";
 
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final Parameters params = getParameters();
 
@@ -1057,6 +1061,6 @@ public class ExportSpimFusionPlugIn implements PlugIn
 
 	public static void main(final String[] args)
 	{
-		new ExportSpimFusionPlugIn().run( null );
+		new ExportSpimFusionPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
index 39b70b0..b3808ea 100644
--- a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
+++ b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
@@ -15,6 +15,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -34,7 +37,6 @@ import fiji.util.gui.GenericDialogPlus;
 import ij.IJ;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
 import mpicbg.spim.data.sequence.TimePoint;
 import mpicbg.spim.io.ConfigurationParserException;
@@ -43,10 +45,12 @@ import mpicbg.spim.io.SPIMConfiguration;
 import mpicbg.spim.io.TextFileAccess;
 import spimopener.SPIMExperiment;
 
-public class ExportSpimSequencePlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Spim Sequence as XML/HDF5")
+public class ExportSpimSequencePlugIn implements Command
 {
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final Parameters params = getParameters();
 
@@ -713,6 +717,6 @@ public class ExportSpimSequencePlugIn implements PlugIn
 		Bead_Registration.fileNamePattern = "spim_TL{tt}_Angle{a}.tif";
 		Bead_Registration.timepoints = "0";
 		Bead_Registration.angles = "0";
-		new ExportSpimSequencePlugIn().run( null );
+		new ExportSpimSequencePlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ImportPlugIn.java b/src/main/java/bdv/ij/ImportPlugIn.java
index d333896..2dbe3e3 100644
--- a/src/main/java/bdv/ij/ImportPlugIn.java
+++ b/src/main/java/bdv/ij/ImportPlugIn.java
@@ -13,6 +13,9 @@ import java.util.List;
 import net.imglib2.RandomAccessibleInterval;
 import net.imglib2.type.numeric.NumericType;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.ViewerImgLoader;
 import bdv.spimdata.SequenceDescriptionMinimal;
 import bdv.spimdata.SpimDataMinimal;
@@ -24,7 +27,6 @@ import ij.ImagePlus;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
 import ij.measure.Calibration;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicMultiResolutionImgLoader;
@@ -38,7 +40,8 @@ import mpicbg.spim.data.sequence.VoxelDimensions;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class ImportPlugIn implements PlugIn
+@Plugin(type = Command.class, menuPath = "File>Import>BigDataViewer...")
+public class ImportPlugIn implements Command
 {
 	public static String xmlFile = "";
 	public static int timepoint = 0;
@@ -59,7 +62,7 @@ public class ImportPlugIn implements PlugIn
 	}
 
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final GenericDialogPlus gd = new GenericDialogPlus( "Import from BigDataViewer file" );
 		gd.addFileField( "xml file", xmlFile );
@@ -219,6 +222,6 @@ public class ImportPlugIn implements PlugIn
 	public static void main( final String[] args )
 	{
 		new ImageJ();
-		new ImportPlugIn().run( null );
+		new ImportPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
index 402b6dc..ba26555 100644
--- a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
+++ b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
@@ -8,6 +8,9 @@ import net.imglib2.FinalDimensions;
 import net.imglib2.realtransform.AffineTransform3D;
 import net.imglib2.type.numeric.ARGBType;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.img.imagestack.ImageStackImageLoader;
@@ -25,7 +28,6 @@ import ij.IJ;
 import ij.ImageJ;
 import ij.ImagePlus;
 import ij.WindowManager;
-import ij.plugin.PlugIn;
 import ij.process.LUT;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
@@ -41,7 +43,9 @@ import mpicbg.spim.data.sequence.TimePoints;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class OpenImagePlusPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Open Current Image")
+public class OpenImagePlusPlugIn implements Command
 {
 	public static void main( final String[] args )
 	{
@@ -49,11 +53,11 @@ public class OpenImagePlusPlugIn implements PlugIn
 		new ImageJ();
 		IJ.run("Confocal Series (2.2MB)");
 //		IJ.run("Fly Brain (1MB)");
-		new OpenImagePlusPlugIn().run( null );
+		new OpenImagePlusPlugIn().run();
 	}
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		// get the current image
 		final ImagePlus imp = WindowManager.getCurrentImage();
diff --git a/src/main/java/bdv/ij/OpenImarisPlugIn.java b/src/main/java/bdv/ij/OpenImarisPlugIn.java
index 0e1d450..9db0ce1 100644
--- a/src/main/java/bdv/ij/OpenImarisPlugIn.java
+++ b/src/main/java/bdv/ij/OpenImarisPlugIn.java
@@ -10,6 +10,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.img.imaris.Imaris;
@@ -17,19 +20,20 @@ import bdv.spimdata.SpimDataMinimal;
 import bdv.viewer.ViewerOptions;
 import ij.ImageJ;
 import ij.Prefs;
-import ij.plugin.PlugIn;
 
-public class OpenImarisPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Open Imaris (experimental)")
+public class OpenImarisPlugIn implements Command
 {
 	static String lastDatasetPath = "";
 
 	public static void main( final String[] args )
 	{
 		ImageJ.main( args );
-		new OpenImarisPlugIn().run( null );
+		new OpenImarisPlugIn().run();
 	}
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		File file = null;
 
diff --git a/src/main/resources/plugins.config b/src/main/resources/plugins.config
deleted file mode 100644
index 2807a76..0000000
--- a/src/main/resources/plugins.config
+++ /dev/null
@@ -1,20 +0,0 @@
-# Name: BigDataViewer
-# Author: Tobias Pietzsch
-# Version: 1.0.0
-
-# A single .jar file can contain multiple plugins, specified in separate lines.
-#
-# The format is: <menu>, "<menu label>", <class name>
-#
-# If something like ("<arg>") is appended to the class name, the setup() method
-# will get that as arg parameter; otherwise arg is simply the empty string.
-
-Plugins>BigDataViewer, "Open XML/HDF5", bdv.ij.BigDataViewerPlugIn
-Plugins>BigDataViewer, "Open Current Image", bdv.ij.OpenImagePlusPlugIn
-Plugins>BigDataViewer, "Browse BigDataServer", bdv.ij.BigDataBrowserPlugIn
-Plugins>BigDataViewer, "Export Current Image as XML/HDF5", bdv.ij.ExportImagePlusPlugIn
-Plugins>BigDataViewer, "Export Spim Sequence as XML/HDF5", bdv.ij.ExportSpimSequencePlugIn
-Plugins>BigDataViewer, "Export Fused Sequence as XML/HDF5", bdv.ij.ExportSpimFusionPlugIn
-Plugins>BigDataViewer, "Export CellVoyager dataset as XML/HDF5", bdv.ij.ExportCellVoyagerPlugIn
-Plugins>BigDataViewer, "Open Imaris (experimental)", bdv.ij.OpenImarisPlugIn
-File>Import, "BigDataViewer...", bdv.ij.ImportPlugIn
\ No newline at end of file
-- 
GitLab