From a5843853f2dc42b38a1baee3de80e84c7f084b46 Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Thu, 4 Jul 2024 18:23:36 +0200
Subject: [PATCH] updated pom to v4.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  42 +++++++++++++++--
 pom.xml                                       |  19 +++-----
 .../adufour/distancetransforms/Chamfer3.java  |  12 +++--
 .../adufour/distancetransforms/Chamfer5.java  |  13 ++++--
 .../ChamferDistanceTransform.java             |  43 ++++++++----------
 .../distancetransforms/DistanceTransform.java |   9 ++--
 .../distancetransforms/ROIToDistanceMap.java  |  12 +++--
 src/main/resources/distance-transforms.png    | Bin 0 -> 10964 bytes
 8 files changed, 96 insertions(+), 54 deletions(-)
 create mode 100644 src/main/resources/distance-transforms.png

diff --git a/.gitignore b/.gitignore
index 5fe16eb..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,41 @@
-/ROIToDistanceMap/bin/
-*.jar
+/build*
+/workspace
+setting.xml
+release/
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
 .idea/
+*.iws
 *.iml
-.settings/
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-target/
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
 **/.DS_Store
+Icon?
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fb3ae4d..5cea329 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,12 +8,12 @@
     <parent>
         <artifactId>pom-icy</artifactId>
         <groupId>org.bioimageanalysis.icy</groupId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <!-- Project Information -->
     <artifactId>roi-to-distance-map</artifactId>
-    <version>4.0.0</version>
+    <version>4.0.0-a.1</version>
 
     <name>ROI to Distance Map</name>
     <description>Convert ROI to a Distance Map</description>
@@ -62,23 +62,19 @@
     <dependencies>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>protocols</artifactId>
+            <artifactId>ezplug</artifactId>
         </dependency>
-
-        <!-- The EzPlug library, simplifies writing UI for Icy plugins. -->
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>ezplug</artifactId>
+            <artifactId>protocols</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>3d-mesh-roi</artifactId>
+            <artifactId>kernel-extensions</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>icy-bioformats</artifactId>
+            <artifactId>3d-mesh-roi</artifactId>
         </dependency>
     </dependencies>
 
@@ -86,8 +82,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <name>Icy's Nexus</name>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
diff --git a/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java b/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java
index 0ca266a..4087f44 100644
--- a/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java
+++ b/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,10 @@
 
 package plugins.adufour.distancetransforms;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
+
 /**
  * Pseudo-Euclidean distance transform based on a two-pass sweeping algorithm using a 3x3 (in 2D) or
  * 3x3x3 (in 3D) chamfer mask. <br>
@@ -35,9 +39,11 @@ package plugins.adufour.distancetransforms;
  *
  * @author Alexandre Dufour
  */
+@IcyPluginName("Chamfer 3")
+@IcyPluginIcon(path = "/distance-transforms.png")
 public class Chamfer3 extends ChamferDistanceTransform {
     @Override
-    public void updateUnsignedChamferDistance2D(final float[] map, final int width, final float planarLateralDistance) {
+    public void updateUnsignedChamferDistance2D(final float @NotNull [] map, final int width, final float planarLateralDistance) {
         final double xy2 = planarLateralDistance * planarLateralDistance;
         final float planarDiagonalDistance = (float) Math.sqrt(xy2 + xy2);
 
@@ -95,7 +101,7 @@ public class Chamfer3 extends ChamferDistanceTransform {
     }
 
     @Override
-    public void updateUnsignedChamferDistance3D(final float[][] map, final int width, final float planoLateralDistance, final float axioLateralDistance) {
+    public void updateUnsignedChamferDistance3D(final float @NotNull [] @NotNull [] map, final int width, final float planoLateralDistance, final float axioLateralDistance) {
         final double xy2 = planoLateralDistance * planoLateralDistance;
         final double xz2 = axioLateralDistance * axioLateralDistance;
         final float planoDiagonalDistance = (float) Math.sqrt(xy2 + xy2);
diff --git a/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java b/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java
index 7682d74..0696d08 100644
--- a/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java
+++ b/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,10 @@
 
 package plugins.adufour.distancetransforms;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
+
 /**
  * Pseudo-Euclidean distance transform based on a two-pass sweeping algorithm using a 5x5 (in 2D) or
  * 5x5x5 (in 3D) chamfer mask. <br>
@@ -40,9 +44,11 @@ package plugins.adufour.distancetransforms;
  *
  * @author Alexandre Dufour
  */
+@IcyPluginName("Chamfer 5")
+@IcyPluginIcon(path = "/distance-transforms.png")
 public class Chamfer5 extends ChamferDistanceTransform {
     @Override
-    public void updateUnsignedChamferDistance2D(final float[] map, final int width, final float lateralDistance) {
+    public void updateUnsignedChamferDistance2D(final float @NotNull [] map, final int width, final float lateralDistance) {
         // pre-calculate distances
         final float a = lateralDistance;
         final float b = (float) Math.sqrt(a * a + a * a);
@@ -121,8 +127,9 @@ public class Chamfer5 extends ChamferDistanceTransform {
             }
     }
 
+    // TODO: Make this method more simple
     @Override
-    public void updateUnsignedChamferDistance3D(final float[][] map, final int width, final float planarLateralDistance, final float axialLateralDistance) {
+    public void updateUnsignedChamferDistance3D(final float @NotNull [] @NotNull [] map, final int width, final float planarLateralDistance, final float axialLateralDistance) {
         // 2D distances
         final float xySq = planarLateralDistance * planarLateralDistance;
         final float b = (float) Math.sqrt(xySq + xySq);
diff --git a/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java b/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java
index 1ee632d..bbe2ed7 100644
--- a/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java
+++ b/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,18 @@
 
 package plugins.adufour.distancetransforms;
 
-import icy.common.Version;
-import icy.image.IcyBufferedImage;
-import icy.main.Icy;
-import icy.roi.ROI;
-import icy.roi.ROI2D;
-import icy.roi.ROI3D;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceDataIterator;
-import icy.type.DataIteratorUtil;
-import icy.type.DataType;
-import icy.type.collection.array.Array1DUtil;
-import icy.util.OMEUtil;
+import org.bioimageanalysis.extension.kernel.roi.roi3d.ROI3DArea;
+import org.bioimageanalysis.icy.common.collection.array.Array1DUtil;
+import org.bioimageanalysis.icy.common.type.DataIteratorUtil;
+import org.bioimageanalysis.icy.common.type.DataType;
+import org.bioimageanalysis.icy.model.OMEUtil;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.roi.ROI3D;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.roi.mesh.ROI3DMesh;
-import plugins.kernel.roi.roi3d.ROI3DArea;
-import plugins.kernel.roi.roi3d.ROI3DStack;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,12 +38,12 @@ import java.util.concurrent.Future;
 
 public abstract class ChamferDistanceTransform extends DistanceTransform {
     @Override
-    public Sequence createDistanceMap(final Sequence input, final int channel, final double threshold, final boolean invertMap, final boolean useRealUnits) {
+    public Sequence createDistanceMap(final @NotNull Sequence input, final int channel, final double threshold, final boolean invertMap, final boolean useRealUnits) {
         final int width = input.getSizeX();
         final int height = input.getSizeY();
         final int depth = input.getSizeZ();
         final int time = input.getSizeT();
-        final DataType type = input.getDataType_();
+        final DataType type = input.getDataType();
 
         final int maxDistance = width * height * depth;
 
@@ -92,7 +89,7 @@ public abstract class ChamferDistanceTransform extends DistanceTransform {
      * @return sequence
      */
     @Override
-    public Sequence createDistanceMap(final Sequence sequence, final boolean mapOnlySelectedROI, final boolean invertMap, final boolean useRealUnits) throws InterruptedException {
+    public Sequence createDistanceMap(final @NotNull Sequence sequence, final boolean mapOnlySelectedROI, final boolean invertMap, final boolean useRealUnits) throws InterruptedException {
         final List<ROI> rois = mapOnlySelectedROI ? sequence.getSelectedROIs() : sequence.getROIs();
 
         String title = "Distance map ";
@@ -121,17 +118,17 @@ public abstract class ChamferDistanceTransform extends DistanceTransform {
 
         // Fill the ROI with the default distance
         // Warning: Icy <= 1.8.6 have an issue with the data iterator
-        final Version patch = new Version(1, 8, 6);
+        //final Version patch = new Version(1, 8, 6);
 
         for (final ROI r : rois) {
-            if (Icy.version.isLowerOrEqual(patch) && r instanceof ROI3DStack) {
-                final ROI3DStack<?> stack = (ROI3DStack<?>) r;
+            /*if (Icy.VERSION.isLowerOrEqual(patch) && r instanceof final ROI3DStack<?> stack) {
                 for (final ROI2D slice : stack) {
                     final SequenceDataIterator iterator = new SequenceDataIterator(output, slice, true);
                     DataIteratorUtil.set(iterator, maxDistance);
                 }
             }
-            else if (r instanceof ROI3DMesh) {
+            else*/
+            if (r instanceof ROI3DMesh) {
                 final ROI3D rea = new ROI3DArea(((ROI3D) r).getBooleanMask(true));
                 rea.setC(((ROI3D) r).getC());
                 rea.setT(((ROI3D) r).getT());
@@ -150,7 +147,7 @@ public abstract class ChamferDistanceTransform extends DistanceTransform {
         return output;
     }
 
-    private void updateUnsignedChamferDistance(final Sequence output, final boolean useRealUnits) {
+    private void updateUnsignedChamferDistance(final @NotNull Sequence output, final boolean useRealUnits) {
         final int width = output.getSizeX();
         final int length = output.getSizeT();
 
diff --git a/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java b/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java
index 8a7868d..1cb7080 100644
--- a/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java
+++ b/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,14 +18,13 @@
 
 package plugins.adufour.distancetransforms;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-public abstract class DistanceTransform extends Plugin implements PluginLibrary {
+public abstract class DistanceTransform extends Plugin {
     protected static ExecutorService multiThreadService = Executors.newCachedThreadPool();
 
     /**
diff --git a/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java b/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java
index 358fe29..172cf7b 100644
--- a/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java
+++ b/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java
@@ -18,7 +18,10 @@
 
 package plugins.adufour.distancetransforms;
 
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.lang.Block;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.ezplug.EzPlug;
@@ -27,6 +30,8 @@ import plugins.adufour.ezplug.EzVarPlugin;
 import plugins.adufour.ezplug.EzVarSequence;
 import plugins.adufour.vars.lang.VarSequence;
 
+@IcyPluginName("ROI to Distance Map")
+@IcyPluginIcon(path = "/distance-transforms.png")
 public class ROIToDistanceMap extends EzPlug implements Block {
     EzVarSequence sequence = new EzVarSequence("Sequence");
 
@@ -41,7 +46,7 @@ public class ROIToDistanceMap extends EzPlug implements Block {
     VarSequence map = new VarSequence("Distance map", null);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Use ROI from", sequence.getVariable());
         inputMap.add("Algorithm", transform.getVariable());
         inputMap.add("Invert map", invert.getVariable());
@@ -49,7 +54,7 @@ public class ROIToDistanceMap extends EzPlug implements Block {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Distance map", map);
     }
 
@@ -64,6 +69,7 @@ public class ROIToDistanceMap extends EzPlug implements Block {
         setTimeDisplay(true);
     }
 
+    @SuppressWarnings("resource")
     @Override
     protected void execute() {
         try {
diff --git a/src/main/resources/distance-transforms.png b/src/main/resources/distance-transforms.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a94830619320fe2524441b7180769d3196dc1c8
GIT binary patch
literal 10964
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
C%;^RI

literal 0
HcmV?d00001

-- 
GitLab