From c621eaad3849fb93731c4288e0ef8059b65ba41b Mon Sep 17 00:00:00 2001
From: Stephane Dallongeville <stephane@outlook.com>
Date: Mon, 14 Sep 2020 17:36:07 +0200
Subject: [PATCH] Fixed merging from mavenization (restored all lost changes
 hopefully) + minors changes.

---
 .classpath                                    | 38 ------------
 export.jardesc                                |  2 +-
 .../SequenceFileImporterGetImage.java         | 20 ++++---
 .../SequenceFileImporterLoadSequence.java     | 12 ++--
 .../sequenceblocks/infos/GetFileName.java     |  2 +-
 .../loop/SequenceChannelBatch.java            |  7 +--
 .../loop/SequenceFileImporterBatch.java       | 43 ++++++++++++-
 .../SequenceFileImporterChannelBatch.java     |  3 +-
 .../loop/SequenceFileImporterFrameBatch.java  |  3 +-
 .../loop/SequenceFileImporterRegionBatch.java |  8 ++-
 .../loop/SequenceFileImporterSeriesBatch.java | 41 +++++++++++--
 .../loop/SequenceFileImporterSliceBatch.java  |  5 +-
 .../loop/SequenceFileImporterTileBatch.java   | 51 ++++++++++++----
 .../loop/SequenceFrameBatch.java              |  2 +-
 .../loop/SequenceRegionBatch.java             | 60 ++++++++++++-------
 .../loop/SequenceSliceBatch.java              |  4 +-
 16 files changed, 190 insertions(+), 111 deletions(-)

diff --git a/.classpath b/.classpath
index f31c84e..396fa4f 100644
--- a/.classpath
+++ b/.classpath
@@ -2,47 +2,9 @@
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
 	<classpathentry kind="src" path="src/main/resources"/>
-	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="lib" path="/Icy-App/plugins/adufour/ezplug/EzPlug.jar"/>
 	<classpathentry kind="lib" path="/Icy-App/plugins/adufour/blocks/Blocks.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="var" path="ICY_JAR"/>
-	<classpathentry kind="lib" path="F:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
-	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
-	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
-	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
-	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
-	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-kernel:2.1.0"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sf.ehcache:ehcache:2.10.6"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.slf4j:slf4j-api:1.7.25"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-bioformats:6.3.1"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-insubstantial:7.3.7"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-vtk:6.3.0.1"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.imagej:ij:1.52q"/>
-	<classpathentry kind="lib" path="D:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-core:1.1.3"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-codec:1.1.3"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all:2.1.5-01"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-amd64:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-i586:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-macosx-universal:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-amd64:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-i586:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt:2.1.5-01"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-amd64:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-i586:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-macosx-universal:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-amd64:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-i586:2.1.5"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.javassist:javassist:3.22.0-GA"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sourceforge.jexcelapi:jxl:2.6.12"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: log4j:log4j:1.2.14"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.swinglabs.swingx:swingx-all:1.6.5-1"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-blocks:1.0.1"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-protocols:3.0.9"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-javadocparser:1.0.0"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.nativelibs4java:ochafik-util:0.12"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-ezplug:3.15.13"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/export.jardesc b/export.jardesc
index 718e9ce..690764f 100644
--- a/export.jardesc
+++ b/export.jardesc
@@ -11,6 +11,6 @@
         </sealing>
     </manifest>
     <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false">
-        <javaElement handleIdentifier="=SequenceBlocks/src"/>
+        <javaElement handleIdentifier="=SequenceBlocks/src\/main\/java"/>
     </selectedElements>
 </jardesc>
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
index 3720a15..20f07dc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
@@ -38,11 +38,11 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
         super();
 
         importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class);
-        series = new VarInteger("Series", 0);
+        series = new VarInteger("Series", -1);
         resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0);
         region = new VarROIArray("XY region (ROI)", null);
-        zIndex = new VarInteger("Z (slice) index", 0);
-        tIndex = new VarInteger("T (frame) index", 0);
+        zIndex = new VarInteger("Z (slice) index", -1);
+        tIndex = new VarInteger("T (frame) index", -1);
         cIndex = new VarInteger("C (channel) index", -1);
 
         image = new Var<IcyBufferedImage>("Image", IcyBufferedImage.class);
@@ -71,17 +71,21 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
         Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds()
                 : null;
 
-        // default values ? use internal position if any defined
-        if ((s == 0) && (pi.s != -1))
+        // undefined values ? use internal position if any defined
+        if ((s == -1) && (pi.s != -1))
             s = pi.s;
-        if ((z == 0) && (pi.z != -1))
+        if ((z == -1) && (pi.z != -1))
             z = pi.z;
-        if ((t == 0) && (pi.t != -1))
+        if ((t == -1) && (pi.t != -1))
             t = pi.t;
-        if ((c == 0) && (pi.c != -1))
+        if ((c == -1) && (pi.c != -1))
             c = pi.c;
         if ((rect == null) && (pi.xyRegion != null))
             rect = pi.xyRegion;
+        
+        // still undefined ? --> set default value for series
+        if (s == -1)
+            s = 0;        
 
         try
         {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
index 34c8ba2..666f65c 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
@@ -43,7 +43,7 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
 
         importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class);
 
-        series = new VarInteger("Series", 0);
+        series = new VarInteger("Series", -1);
         resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0);
         region = new VarROIArray("XY region (ROI)", null);
         minZIndex = new VarInteger("Z min (slice)", -1);
@@ -80,8 +80,8 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
         Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds()
                 : null;
 
-        // default values ? use internal position if any defined
-        if ((s == 0) && (pi.s != -1))
+        // undefined values ? use internal position if any defined
+        if ((s == -1) && (pi.s != -1))
             s = pi.s;
         if ((minZ == -1) && (maxZ == -1) && (pi.z != -1))
         {
@@ -93,10 +93,14 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
             minT = pi.t;
             maxT = pi.t;
         }
-        if ((c == 0) && (pi.c != -1))
+        if ((c == -1) && (pi.c != -1))
             c = pi.c;
         if ((rect == null) && (pi.xyRegion != null))
             rect = pi.xyRegion;
+        
+        // still undefined ? --> set default value for series
+        if (s == -1)
+            s = 0;
 
         try
         {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
index 477a915..2bf3699 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
@@ -42,7 +42,7 @@ public class GetFileName extends Plugin implements SequenceBlock, PluginBundled
             result = FileUtil.getFileName(result);
         // remove extension ?
         if (!withExtension.getValue().booleanValue())
-            FileUtil.setExtension(result, "");
+            result = FileUtil.setExtension(result, "");
 
         filename.setValue(result);
     }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
index f227dcd..763ccaa 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
@@ -17,15 +17,10 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceChannelBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize and create them in getBatchSource() and getBatchElement()
+    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
 
-    public SequenceChannelBatch()
-    {
-        super();
-    }
-
     @Override
     public VarSequence getBatchSource()
     {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
index 782c76c..d487731 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
@@ -1,11 +1,15 @@
 package plugins.tprovoost.sequenceblocks.loop;
 
+import java.util.List;
+
 import icy.file.SequenceFileImporter;
 import icy.plugin.interface_.PluginBundled;
 import icy.plugin.interface_.PluginLibrary;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
+import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
+import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
@@ -20,6 +24,7 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc
     // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected Var<PositionedSequenceFileImporter> positionedImporter;
     protected Var<PositionedSequenceFileImporter> element;
+    protected VarInteger series;
 
     // internal
     protected int limit;
@@ -58,8 +63,42 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc
         if (imp.getOpened() == null)
             throw new VarException(positionedImporter, "Importer is not opened !");
 
-        // init element with a copy of current positioned importer
-        element.setValue(new PositionedSequenceFileImporter(value));
+        // create new positioned importer for element initialization
+        final PositionedSequenceFileImporter pi = new PositionedSequenceFileImporter(value);
+
+        final int s = series.getValue().intValue();
+
+        // defined series ? --> set series position
+        if (s != -1)
+            pi.s = s;
+
+        // init element with a copy of current positioned importer (and eventually set serie position)
+        element.setValue(pi);
+    }
+
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+
+        // lazy creation
+        if (series == null)
+            series = new VarInteger("Series", -1);
+
+        inputMap.add("series", series);
+    }
+
+    @Override
+    public void declareLoopVariables(List<Var<?>> loopVariables)
+    {
+        // need to be called after
+        super.declareLoopVariables(loopVariables);
+
+        // lazy creation
+        if (series == null)
+            series = new VarInteger("Series", -1);
+
+        loopVariables.add(series);
     }
 
     @Override
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
index 46640c5..afc3b04 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
@@ -17,7 +17,8 @@ public class SequenceFileImporterChannelBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
index e91d5f4..ba8bf10 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
@@ -17,7 +17,8 @@ public class SequenceFileImporterFrameBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
index 0bbd8bb..05f0518 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
@@ -24,6 +24,7 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
 {
+    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarROIArray rois;
     protected VarInteger inputRoisResolution;
     protected VarInteger inputRoisMargin;
@@ -34,7 +35,8 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         // can iterate over XY dimension ?
         if ((pi.xyRegion == null) && (rois.getValue() != null))
@@ -114,6 +116,8 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
     @Override
     public void declareLoopVariables(List<Var<?>> loopVariables)
     {
+        super.declareLoopVariables(loopVariables);
+
         // lazy creation
         if (rois == null)
             rois = new VarROIArray("XY regions (ROIs)");
@@ -125,8 +129,6 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
         loopVariables.add(rois);
         loopVariables.add(inputRoisResolution);
         loopVariables.add(inputRoisMargin);
-
-        super.declareLoopVariables(loopVariables);
     }
 
     @Override
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
index 255c14c..ffb8e57 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
@@ -1,7 +1,11 @@
 package plugins.tprovoost.sequenceblocks.loop;
 
+import java.util.List;
+
 import icy.file.SequenceFileImporter;
 import icy.sequence.MetaDataUtil;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 
@@ -17,12 +21,16 @@ public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
-            // force series iteration as by default series is set to 0
-            limit = MetaDataUtil.getNumSeries(pi.getMetadata());
+            // can iterate over S dimension ?
+            if (pi.s == -1)
+                limit = MetaDataUtil.getNumSeries(pi.getMetadata());
+            else
+                limit = 1;
         }
         catch (Exception e)
         {
@@ -31,13 +39,34 @@ public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
         }
     }
 
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+
+        // we don't want it here
+        inputMap.remove(series);
+    }
+
+    @Override
+    public void declareLoopVariables(List<Var<?>> loopVariables)
+    {
+        super.declareLoopVariables(loopVariables);
+
+        // we don't want it here
+        loopVariables.remove(series);
+    }
+
     @Override
     public void beforeIteration()
     {
         // set current position S
-        element.getValue().s = getIterationCounter().getValue().intValue();
-        // force element changed event so loop get correctly executed
-        element.valueChanged(element, element.getValue(), element.getValue());
+        if (positionedImporter.getValue().s == -1)
+        {
+            element.getValue().s = getIterationCounter().getValue().intValue();
+            // force element changed event so loop get correctly executed
+            element.valueChanged(element, element.getValue(), element.getValue());
+        }
     }
 
     @Override
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
index 061b76d..16f1dad 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
@@ -17,8 +17,9 @@ public class SequenceFileImporterSliceBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
-
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
+        
         try
         {
             // can iterate over Z dimension ?
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
index 5386fb6..4d6e434 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
@@ -6,6 +6,8 @@ import java.util.List;
 import icy.file.SequenceFileImporter;
 import icy.image.ImageUtil;
 import icy.sequence.MetaDataUtil;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
@@ -17,25 +19,19 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
 {
-    protected final VarInteger tileW;
-    protected final VarInteger tileH;
+    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    protected VarInteger tileW;
+    protected VarInteger tileH;
 
     protected List<Rectangle> tiles;
 
-    public SequenceFileImporterTileBatch()
-    {
-        super();
-
-        tileW = new VarInteger("Tile width (-1 = auto)", 0);
-        tileH = new VarInteger("Tile height (-1 = auto)", 0);
-    }
-
     @Override
     public void initializeLoop()
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         // can iterate over XY dimension ?
         if (pi.xyRegion == null)
@@ -63,7 +59,7 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
             }
             catch (Exception e)
             {
-                throw new VarException(positionedImporter,
+                throw new VarException(element,
                         "Error while initializing SequenceFileImporter tile batch: " + e.getMessage());
             }
 
@@ -89,6 +85,37 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
             limit = 1;
     }
 
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+        
+        // lazy creation
+        if (tileW == null)
+            tileW = new VarInteger("Tile width (-1 = auto)", -1);
+        if (tileH == null)
+            tileH = new VarInteger("Tile height (-1 = auto)", -1);
+
+        inputMap.add("tileWidht", tileW);
+        inputMap.add("tileHeight", tileH);
+    }
+
+    @Override
+    public void declareLoopVariables(List<Var<?>> loopVariables)
+    {
+        // need to be called after
+        super.declareLoopVariables(loopVariables);
+
+        // lazy creation
+        if (tileW == null)
+            tileW = new VarInteger("Tile width (-1 = auto)", -1);
+        if (tileH == null)
+            tileH = new VarInteger("Tile height (-1 = auto)", -1);
+
+        loopVariables.add(tileW);
+        loopVariables.add(tileH);
+    }
+
     @Override
     public void beforeIteration()
     {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
index d06b0a6..2a77e4f 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
@@ -40,7 +40,7 @@ public class SequenceFrameBatch extends Batch implements PluginLibrary, PluginBu
     {
         // initialize element if needed
         if (element == null)
-            element = new VarSequence("Channel Sequence", null);
+            element = new VarSequence("Frame Sequence", null);
 
         return element;
     }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
index 548ba91..8da2ca7 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
@@ -4,6 +4,7 @@ import java.util.List;
 
 import icy.plugin.interface_.PluginBundled;
 import icy.plugin.interface_.PluginLibrary;
+import icy.roi.ROI;
 import icy.sequence.Sequence;
 import icy.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
@@ -22,38 +23,57 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize and create them in getBatchSource() and getBatchElement()
+ // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
-    protected final VarROIArray rois;
+    protected VarROIArray rois;
+    protected VarROIArray currentRoi;
 
     public SequenceRegionBatch()
     {
         super();
-
-        rois = new VarROIArray("ROI(s)");
     }
 
     @Override
-    public VarSequence getBatchSource()
+    public VarROIArray getBatchSource()
     {
-        // initialize variable if needed
-        if (inputSequence == null)
-            inputSequence = new VarSequence("Sequence", null);
+        if (rois == null)
+            rois = new VarROIArray("ROI(s)");
 
-        return inputSequence;
+        return rois;
     }
 
     @Override
     public VarSequence getBatchElement()
     {
-        // initialize element if needed
         if (element == null)
-            element = new VarSequence("Channel Sequence", null);
+            element = new VarSequence("Region Sequence", null);
 
         return element;
     }
 
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+
+        if (inputSequence == null)
+            inputSequence = new VarSequence("Sequence", null);
+
+        inputMap.add(inputSequence.getName(), inputSequence);
+    }
+
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+        super.declareOutput(outputMap);
+
+        if (currentRoi == null)
+            currentRoi = new VarROIArray("Current ROI");
+
+        outputMap.add(currentRoi.getName(), currentRoi);
+    }
+
     @Override
     public void initializeLoop()
     {
@@ -70,8 +90,10 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL
     public void beforeIteration()
     {
         // set result in element
-        element.setValue(SequenceUtil.getSubSequence(inputSequence.getValue(),
-                rois.getValue()[getIterationCounter().getValue().intValue()]));
+        final ROI roi = rois.getValue()[getIterationCounter().getValue().intValue()];
+        
+        element.setValue(SequenceUtil.getSubSequence(inputSequence.getValue(), roi));
+        currentRoi.setValue(new ROI[] {roi});
     }
 
     @Override
@@ -80,20 +102,12 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL
         return getIterationCounter().getValue().intValue() >= rois.getValue().length;
     }
 
-    @Override
-    public void declareInput(VarList inputMap)
-    {
-        super.declareInput(inputMap);
-
-        inputMap.add("ROIs", rois);
-    }
-
     @Override
     public void declareLoopVariables(List<Var<?>> loopVariables)
     {
         super.declareLoopVariables(loopVariables);
-
-        loopVariables.add(rois);
+        loopVariables.add(inputSequence);
+        loopVariables.add(currentRoi);
     }
 
     @Override
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
index d1bc689..e8c2003 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
@@ -17,7 +17,7 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize and create them in getBatchSource() and getBatchElement()
+    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
 
@@ -36,7 +36,7 @@ public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLi
     {
         // initialize element if needed
         if (element == null)
-            element = new VarSequence("Channel Sequence", null);
+            element = new VarSequence("Slice Sequence", null);
 
         return element;
     }
-- 
GitLab