From 5576520a56ee690ee5510c4ef05487196b41f467 Mon Sep 17 00:00:00 2001 From: Stephane Dallongeville <stephane.dallongeville@pasteur.fr> Date: Tue, 31 Aug 2021 18:18:56 +0200 Subject: [PATCH] Added new Output type block for easier interface with external processes --- .../blocks/tools/output/BooleanOutput.java | 26 ++++++++++++++ .../blocks/tools/output/DecimalOutput.java | 29 +++++++++++++++ .../blocks/tools/output/DecimalsOutput.java | 29 +++++++++++++++ .../blocks/tools/output/FileOutput.java | 34 ++++++++++++++++++ .../blocks/tools/output/FilesOutput.java | 34 ++++++++++++++++++ .../blocks/tools/output/FolderOutput.java | 34 ++++++++++++++++++ .../blocks/tools/output/FoldersOutput.java | 34 ++++++++++++++++++ .../blocks/tools/output/IntegerOutput.java | 30 ++++++++++++++++ .../blocks/tools/output/IntegersOutput.java | 29 +++++++++++++++ .../blocks/tools/output/OutputBlock.java | 13 +++++++ .../blocks/tools/output/SequenceOutput.java | 36 +++++++++++++++++++ .../blocks/tools/output/SequencesOutput.java | 30 ++++++++++++++++ .../blocks/tools/output/TextOutput.java | 31 ++++++++++++++++ .../adufour/blocks/util/BlocksFinder.java | 10 ++++++ .../plugins/adufour/blocks/util/BlocksML.java | 5 +-- .../protocols/gui/block/BlockPanel.java | 5 +-- 16 files changed, 405 insertions(+), 4 deletions(-) create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java create mode 100644 src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java diff --git a/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java new file mode 100644 index 0000000..a268cac --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java @@ -0,0 +1,26 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarBoolean; + +public class BooleanOutput extends Plugin implements OutputBlock +{ + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("boolean", new VarBoolean("Boolean", false)); + } + + @Override + public void declareOutput(VarList outputMap) + { + // + } + + @Override + public void run() + { + // + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java new file mode 100644 index 0000000..eb469a2 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java @@ -0,0 +1,29 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarDouble; + +/** + * Input block reading a 64-bit double-precision floating-point value + * + * @author Alexandre Dufour + */ +public class DecimalOutput extends Plugin implements OutputBlock +{ + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("decimal", new VarDouble("decimal", 0.0)); + } + + @Override + public void run() + { + } + + @Override + public void declareOutput(VarList outputMap) + { + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java new file mode 100644 index 0000000..5014b21 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java @@ -0,0 +1,29 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarDoubleArrayNative; + +/** + * Utility block reading an array of double-precision floating-point values + * + * @author Alexandre Dufour + */ +public class DecimalsOutput extends Plugin implements OutputBlock +{ + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("decimals", new VarDoubleArrayNative("decimals", new double[0])); + } + + @Override + public void run() + { + } + + @Override + public void declareOutput(VarList outputMap) + { + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java new file mode 100644 index 0000000..c57803e --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java @@ -0,0 +1,34 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.gui.FileMode; +import plugins.adufour.vars.gui.model.FileTypeModel; +import plugins.adufour.vars.lang.VarFile; + +/** + * Input block reading a file + * + * @author Alexandre Dufour + */ +public class FileOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + VarFile vf = new VarFile("file", null); + vf.setDefaultEditorModel(new FileTypeModel("", FileMode.FILES, null, false)); + inputMap.add("file", vf); + } + + @Override + public void declareOutput(VarList outputMap) + { + } + +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java new file mode 100644 index 0000000..16eec7c --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java @@ -0,0 +1,34 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.gui.FileMode; +import plugins.adufour.vars.gui.model.FileTypeListModel; +import plugins.adufour.vars.lang.VarFileArray; + +/** + * Input block reading a list of files + * + * @author Alexandre Dufour + */ +public class FilesOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + VarFileArray vf = new VarFileArray("files", new java.io.File[0]); + vf.setDefaultEditorModel(new FileTypeListModel("", FileMode.FILES, null, false)); + inputMap.add("files", vf); + } + + @Override + public void declareOutput(VarList outputMap) + { + } + +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java new file mode 100644 index 0000000..acdd8dd --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java @@ -0,0 +1,34 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.gui.FileMode; +import plugins.adufour.vars.gui.model.FileTypeModel; +import plugins.adufour.vars.lang.VarFile; + +/** + * Input block reading a folder + * + * @author Alexandre Dufour + */ +public class FolderOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + VarFile vf = new VarFile("folder", null); + vf.setDefaultEditorModel(new FileTypeModel("", FileMode.FOLDERS, null, false)); + inputMap.add("folder", vf); + } + + @Override + public void declareOutput(VarList outputMap) + { + } + +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java new file mode 100644 index 0000000..7097d7d --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java @@ -0,0 +1,34 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.gui.FileMode; +import plugins.adufour.vars.gui.model.FileTypeListModel; +import plugins.adufour.vars.lang.VarFileArray; + +/** + * Input block reading a list of folders + * + * @author Alexandre Dufour + */ +public class FoldersOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + VarFileArray vf = new VarFileArray("folders", new java.io.File[0]); + vf.setDefaultEditorModel(new FileTypeListModel("", FileMode.FOLDERS, null, false)); + inputMap.add("folders", vf); + } + + @Override + public void declareOutput(VarList outputMap) + { + } + +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java new file mode 100644 index 0000000..ea444dc --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java @@ -0,0 +1,30 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarInteger; + +/** + * Utility block reading a 32-bit integer value + * + * @author Alexandre Dufour + */ +public class IntegerOutput extends Plugin implements OutputBlock +{ + @Override + public void declareInput(VarList inputMap) + { + VarInteger vi = new VarInteger("integer", 0); + inputMap.add("integer", vi); + } + + @Override + public void run() + { + } + + @Override + public void declareOutput(VarList outputMap) + { + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java new file mode 100644 index 0000000..24f3b63 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java @@ -0,0 +1,29 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarIntegerArrayNative; + +/** + * Utility block reading an array of 32-bit integer values + * + * @author Alexandre Dufour + */ +public class IntegersOutput extends Plugin implements OutputBlock +{ + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("integers", new VarIntegerArrayNative("integers", new int[0])); + } + + @Override + public void run() + { + } + + @Override + public void declareOutput(VarList outputMap) + { + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java b/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java new file mode 100644 index 0000000..f412710 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java @@ -0,0 +1,13 @@ +package plugins.adufour.blocks.tools.output; + +import plugins.adufour.blocks.lang.Block; + +/** + * Interface used to flag pure output blocks + * + * @author Stephane Dallongeville + * + */ +public interface OutputBlock extends Block +{ +} \ No newline at end of file diff --git a/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java new file mode 100644 index 0000000..607badb --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java @@ -0,0 +1,36 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarSequence; + +/** + * Utility block reading a {@link icy.sequence.Sequence} object + * + * @author Alexandre Dufour + */ +public class SequenceOutput extends Plugin implements OutputBlock +{ + private final VarSequence vs = new VarSequence("sequence", null); + + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("input sequence", vs); + } + + @Override + public void declareOutput(VarList outputMap) + { + } + + public VarSequence getVariable() + { + return vs; + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java new file mode 100644 index 0000000..f185d08 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java @@ -0,0 +1,30 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarSequenceArray; + +/** + * Utility block reading a list of {@link icy.sequence.Sequence} objects + * + * @author Alexandre Dufour + */ +public class SequencesOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + } + + @Override + public void declareInput(VarList inputMap) + { + VarSequenceArray vsa = new VarSequenceArray("sequence"); + inputMap.add("input sequence", vsa); + } + + @Override + public void declareOutput(VarList outputMap) + { + } +} diff --git a/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java new file mode 100644 index 0000000..d5c3ec0 --- /dev/null +++ b/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java @@ -0,0 +1,31 @@ +package plugins.adufour.blocks.tools.output; + +import icy.plugin.abstract_.Plugin; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarString; + +/** + * Text input + * + * @author Alexandre Dufour + */ +public class TextOutput extends Plugin implements OutputBlock +{ + @Override + public void run() + { + + } + + @Override + public void declareInput(VarList inputMap) + { + inputMap.add("text", new VarString("text", "")); + } + + @Override + public void declareOutput(VarList outputMap) + { + + } +} diff --git a/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java b/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java index 73c13ac..99cf451 100644 --- a/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java +++ b/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java @@ -51,6 +51,7 @@ import plugins.adufour.blocks.tools.ToolsBlock; import plugins.adufour.blocks.tools.ij.IJBlock; import plugins.adufour.blocks.tools.input.InputBlock; import plugins.adufour.blocks.tools.io.IOBlock; +import plugins.adufour.blocks.tools.output.OutputBlock; import plugins.adufour.blocks.tools.roi.ROIBlock; import plugins.adufour.blocks.tools.sequence.SequenceBlock; import plugins.adufour.protocols.gui.BlockSearchPanel; @@ -311,6 +312,9 @@ public class BlocksFinder JMenu mnInput = new JMenu("Read..."); mnInput.setIcon(new IcyIcon(ResourceUtil.ICON_REDO, 22)); + JMenu mnOutput = new JMenu("Out..."); + mnOutput.setIcon(new IcyIcon(ResourceUtil.ICON_UNDO, 22)); + JMenu mnIO = new JMenu("I/O..."); mnIO.setIcon(new IcyIcon(ResourceUtil.ICON_SAVE, 22)); @@ -432,6 +436,10 @@ public class BlocksFinder { mnInput.add(menuItem); } + else if (OutputBlock.class.isAssignableFrom(blockClass)) + { + mnOutput.add(menuItem); + } else if (SequenceBlock.class.isAssignableFrom(blockClass)) { mnSeq.add(menuItem); @@ -489,6 +497,7 @@ public class BlocksFinder splitLongMenus(mnBlocks, 15); splitLongMenus(mnInput, 15); + splitLongMenus(mnOutput, 15); splitLongMenus(mnSeq, 15); splitLongMenus(mnROI, 15); splitLongMenus(mnIO, 15); @@ -498,6 +507,7 @@ public class BlocksFinder menuContainer.add(mnBlocks); menuContainer.add(mnInput); + menuContainer.add(mnOutput); menuContainer.add(mnSeq); menuContainer.add(mnROI); menuContainer.add(mnIO); diff --git a/src/main/java/plugins/adufour/blocks/util/BlocksML.java b/src/main/java/plugins/adufour/blocks/util/BlocksML.java index e8c3e33..5fbb6a6 100644 --- a/src/main/java/plugins/adufour/blocks/util/BlocksML.java +++ b/src/main/java/plugins/adufour/blocks/util/BlocksML.java @@ -43,6 +43,7 @@ import plugins.adufour.blocks.lang.BlockDescriptor; import plugins.adufour.blocks.lang.Link; import plugins.adufour.blocks.lang.WorkFlow; import plugins.adufour.blocks.tools.input.InputBlock; +import plugins.adufour.blocks.tools.output.OutputBlock; import plugins.adufour.protocols.Protocols; import plugins.adufour.vars.gui.model.TypeSelectionModel; import plugins.adufour.vars.lang.Var; @@ -598,7 +599,7 @@ public class BlocksML XMLUtil.setAttributeValue(blockNode, "definedName", blockData.getDefinedName()); XMLUtil.setAttributeBooleanValue(blockNode, "keepsResults", blockData.keepsResults()); - if (block instanceof InputBlock) + if ((block instanceof InputBlock) || (block instanceof OutputBlock)) XMLUtil.setAttributeValue(blockNode, "CommandLineID", blockData.getCommandLineID()); if (blockData.isWorkFlow()) @@ -1360,7 +1361,7 @@ public class BlocksML blockDescriptor.keepResults(XMLUtil.getAttributeBooleanValue(blockNode, "keepsResults", true)); - if (block instanceof InputBlock) + if ((block instanceof InputBlock) || (block instanceof OutputBlock)) blockDescriptor.setCommandLineID(XMLUtil.getAttributeValue(blockNode, "CommandLineID", "")); workFlow.addBlock(blockDescriptor); diff --git a/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java b/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java index 5dfcf70..11a1704 100644 --- a/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java +++ b/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java @@ -53,6 +53,7 @@ import plugins.adufour.blocks.lang.BlockDescriptor; import plugins.adufour.blocks.lang.BlockDescriptor.BlockStatus; import plugins.adufour.blocks.lang.WorkFlow; import plugins.adufour.blocks.tools.input.InputBlock; +import plugins.adufour.blocks.tools.output.OutputBlock; import plugins.adufour.blocks.util.BlockListener; import plugins.adufour.blocks.util.VarList; import plugins.adufour.protocols.Protocols; @@ -90,7 +91,7 @@ public class BlockPanel extends JPanel implements ActionListener, BlockListener if (dragging) { WorkFlow wf = workFlowPane.getWorkFlow(); - + if (wf.isBlockSelected(blockDesc)) { for (BlockDescriptor bd : wf.getBlockSelection()) @@ -846,7 +847,7 @@ public class BlockPanel extends JPanel implements ActionListener, BlockListener menu.addSeparator(); - if (blockDesc.getBlock() instanceof InputBlock) + if ((blockDesc.getBlock() instanceof InputBlock) || (blockDesc.getBlock() instanceof OutputBlock)) { // option to retrieve parameter from command line String tooltip = "<html><h4>Identifier used to set the value from the command line</h4></html>"; -- GitLab