From 34bdfc35c404eb7cc7121b74f85c580fac5598ea Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez <dgonzale@pasteur.fr> Date: Tue, 11 Aug 2020 16:16:41 +0200 Subject: [PATCH] Fix for sequence region batch: null pointer exception on declare input --- .../loop/SequenceRegionBatch.java | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java index dd539a3..23bbe64 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java +++ b/src/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; @@ -25,35 +26,51 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL // 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 VarROIArray getBatchSource() + { + if (rois == null) + rois = new VarROIArray("ROI(s)"); + + return rois; } @Override - public VarSequence getBatchSource() + public void declareInput(VarList inputMap) { - // initialize variable if needed + super.declareInput(inputMap); if (inputSequence == null) inputSequence = new VarSequence("Sequence", null); - return inputSequence; + inputMap.add(inputSequence.getName(), inputSequence); } @Override public VarSequence getBatchElement() { - // initialize element if needed if (element == null) element = new VarSequence("Channel Sequence", null); return element; } + @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 +87,9 @@ 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()])); + ROI roi = rois.getValue()[getIterationCounter().getValue().intValue()]; + element.setValue(SequenceUtil.getSubSequence(inputSequence.getValue(), roi)); + currentRoi.setValue(new ROI[] {roi}); } @Override @@ -80,20 +98,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 -- GitLab