From 239b1d3e1b8a20844d19775323e8a22d09016179 Mon Sep 17 00:00:00 2001
From: Stephane Dallongeville <stephane.dallongeville@pasteur.fr>
Date: Thu, 22 Apr 2021 11:18:10 +0200
Subject: [PATCH] Added new Get/Set Property blocks

---
 pom.xml                                       | 10 ++-
 .../infos/GetSequenceProperty.java            | 68 ++++++++++++++++++
 .../infos/SetSequenceProperty.java            | 69 +++++++++++++++++++
 3 files changed, 145 insertions(+), 2 deletions(-)
 create mode 100644 src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
 create mode 100644 src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java

diff --git a/pom.xml b/pom.xml
index a45fa44..bf39fc7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,15 +7,21 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>parent-pom-plugin</artifactId>
-        <version>1.0.3</version>
+        <version>1.0.4</version>
     </parent>
 
     <artifactId>sequence-blocks</artifactId>
-    <version>2.0.16</version>
+    <version>2.1.0</version>
 
     <name>SequenceBlocks</name>
 
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-kernel</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>blocks</artifactId>
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
new file mode 100644
index 0000000..278ae20
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
@@ -0,0 +1,68 @@
+package plugins.tprovoost.sequenceblocks.infos;
+
+import icy.plugin.abstract_.Plugin;
+import icy.plugin.interface_.PluginBundled;
+import icy.plugin.interface_.PluginLibrary;
+import icy.sequence.Sequence;
+import plugins.adufour.blocks.tools.sequence.SequenceBlock;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarSequence;
+import plugins.adufour.vars.lang.VarString;
+import plugins.tprovoost.sequenceblocks.SequenceBlocks;
+
+/**
+ * Block to retrieve value (in String format) of a Sequence property (name, pixel size, custom...)<br>
+ * Default metadata information can be retrieved using specific property name:<br>
+ * <ul>
+ * <li><i>id</i> = sequence internal Id</li>
+ * <li><i>name</i> = sequence name</li>
+ * <li><i>positionX</i> = absolute position X of the image (in um)</li>
+ * <li><i>positionY</i> = absolute position Y of the image (in um)</li>
+ * <li><i>positionZ</i> = absolute position Z of the image (in um)</li>
+ * <li><i>positionT</i> = acquisition date time</li>
+ * <li><i>positionTOffset</i> = not available for property;</li>
+ * <li><i>pixelSizeX</i> = pixel size X (in um)</li>
+ * <li><i>pixelSizeY</i> = pixel size Y (in um)</li>
+ * <li><i>pixelSizeZ</i> = pixel size Z (in um)</li>
+ * <li><i>timeInterval</i> = time interval between each image (in second)</li>
+ * <li><i>channelName</i> = not available for property</li>
+ * <li><i>userName</i> = user who generated / acquired the dataset</li>
+ * <li><i>virtual</i> = virtual mode enabled on the dataset</li>
+ * </ul>
+ * 
+ * @author Stephane
+ */
+public class GetSequenceProperty extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled
+{
+    protected VarSequence sequence = new VarSequence("Sequence", null);
+    protected VarString propertyName = new VarString("Property", "name");
+    protected VarString value = new VarString("Value", "");
+
+    @Override
+    public void run()
+    {
+        final Sequence seq = sequence.getValue();
+
+        if (seq != null)
+            value.setValue(seq.getProperty(propertyName.getValue()));
+    }
+
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("sequence", sequence);
+        inputMap.add("property", propertyName);
+    }
+
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+        outputMap.add("value", value);
+    }
+
+    @Override
+    public String getMainPluginClassName()
+    {
+        return SequenceBlocks.class.getName();
+    }
+}
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java
new file mode 100644
index 0000000..21aa719
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java
@@ -0,0 +1,69 @@
+package plugins.tprovoost.sequenceblocks.infos;
+
+import icy.plugin.abstract_.Plugin;
+import icy.plugin.interface_.PluginBundled;
+import icy.plugin.interface_.PluginLibrary;
+import icy.sequence.Sequence;
+import plugins.adufour.blocks.tools.sequence.SequenceBlock;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarSequence;
+import plugins.adufour.vars.lang.VarString;
+import plugins.tprovoost.sequenceblocks.SequenceBlocks;
+
+/**
+ * Block to set value (in String format) of a Sequence property (name, pixel size, custom...)<br>
+ * Default metadata information can be set using specific property name:<br>
+ * <ul>
+ * <li><i>id</i> = sequence internal Id</li>
+ * <li><i>name</i> = sequence name</li>
+ * <li><i>positionX</i> = absolute position X of the image (in um)</li>
+ * <li><i>positionY</i> = absolute position Y of the image (in um)</li>
+ * <li><i>positionZ</i> = absolute position Z of the image (in um)</li>
+ * <li><i>positionT</i> = acquisition date time</li>
+ * <li><i>positionTOffset</i> = not available for property;</li>
+ * <li><i>pixelSizeX</i> = pixel size X (in um)</li>
+ * <li><i>pixelSizeY</i> = pixel size Y (in um)</li>
+ * <li><i>pixelSizeZ</i> = pixel size Z (in um)</li>
+ * <li><i>timeInterval</i> = time interval between each image (in second)</li>
+ * <li><i>channelName</i> = not available for property</li>
+ * <li><i>userName</i> = user who generated / acquired the dataset</li>
+ * <li><i>virtual</i> = virtual mode enabled on the dataset</li>
+ * </ul>
+ * 
+ * @author Stephane
+ */
+public class SetSequenceProperty extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled
+{
+    protected VarSequence sequence = new VarSequence("Sequence", null);
+    protected VarString propertyName = new VarString("Property", "name");
+    protected VarString value = new VarString("Value", "");
+
+    @Override
+    public void run()
+    {
+        final Sequence seq = sequence.getValue();
+
+        if (seq != null)
+            seq.setProperty(propertyName.getValue(), value.getValue());
+    }
+
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("sequence", sequence);
+        inputMap.add("property", propertyName);
+        inputMap.add("value", value);
+    }
+
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+        //
+    }
+
+    @Override
+    public String getMainPluginClassName()
+    {
+        return SequenceBlocks.class.getName();
+    }
+}
-- 
GitLab