From 53d6e736a83a6e13fc08a0db147b8adac1c4bd8f Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Wed, 3 Jul 2024 15:15:09 +0200
Subject: [PATCH] updated pom to v3.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  44 +++++++++++++++---
 pom.xml                                       |  20 ++++++--
 .../java/plugins/adufour/roi/Convexify.java   |  42 ++++++++---------
 src/main/resources/convexify.png              | Bin 0 -> 7421 bytes
 4 files changed, 73 insertions(+), 33 deletions(-)
 create mode 100644 src/main/resources/convexify.png

diff --git a/.gitignore b/.gitignore
index b2f15ce..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,41 @@
-.idea/
-.settings/
-build/
+/build*
+/workspace
+setting.xml
+release/
 target/
-bin/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-*.jar
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
+.factorypath
 .project
-export.jardesc
-**/.DS_Store
\ No newline at end of file
+.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 3c8ae15..6f8278b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,13 +7,11 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <artifactId>convexify</artifactId>
-    <version>3.0.0</version>
-
-    <packaging>jar</packaging>
+    <version>3.0.0-a.1</version>
 
     <name>Convexify</name>
     <description>
@@ -21,6 +19,14 @@
     </description>
 
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>kernel-extensions</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>protocols</artifactId>
@@ -33,12 +39,16 @@
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>3d-mesh-roi</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>vecmath</artifactId>
+        </dependency>
     </dependencies>
 
     <repositories>
         <repository>
             <id>icy</id>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus-icy.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
\ No newline at end of file
diff --git a/src/main/java/plugins/adufour/roi/Convexify.java b/src/main/java/plugins/adufour/roi/Convexify.java
index ef15db7..aa48917 100644
--- a/src/main/java/plugins/adufour/roi/Convexify.java
+++ b/src/main/java/plugins/adufour/roi/Convexify.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,12 +18,19 @@
 
 package plugins.adufour.roi;
 
-import icy.roi.ROI;
-import icy.roi.ROI2D;
-import icy.roi.ROI3D;
-import icy.roi.ROIUtil;
-import icy.sequence.Sequence;
-import icy.type.point.Point3D;
+import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DArea;
+import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DPolygon;
+import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DShape;
+import org.bioimageanalysis.extension.kernel.roi.roi3d.ROI3DArea;
+import org.bioimageanalysis.icy.common.geom.point.Point3D;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.roi.ROI2D;
+import org.bioimageanalysis.icy.model.roi.ROI3D;
+import org.bioimageanalysis.icy.model.roi.ROIUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.roi.ROIBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.ezplug.EzPlug;
@@ -33,23 +40,18 @@ import plugins.adufour.quickhull.QuickHull2D;
 import plugins.adufour.quickhull.QuickHull3D;
 import plugins.adufour.roi.mesh.polygon.ROI3DPolygonalMesh;
 import plugins.adufour.vars.lang.VarROIArray;
-import plugins.kernel.roi.roi2d.ROI2DArea;
-import plugins.kernel.roi.roi2d.ROI2DPolygon;
-import plugins.kernel.roi.roi2d.ROI2DShape;
-import plugins.kernel.roi.roi3d.ROI3DArea;
 
 import javax.vecmath.Point3d;
 import java.awt.geom.Point2D;
 import java.util.Arrays;
 import java.util.List;
 
+@IcyPluginName("Convexify")
+@IcyPluginIcon(path = "/convexify.png")
 public class Convexify extends EzPlug implements ROIBlock {
     private final EzVarSequence input = new EzVarSequence("Input sequence");
-
     private final EzVarBoolean replace = new EzVarBoolean("Replace existing ROI", false);
-
     private final VarROIArray roiIN = new VarROIArray("List of ROI");
-
     private final VarROIArray roiOUT = new VarROIArray("List of ROI");
 
     @Override
@@ -96,11 +98,11 @@ public class Convexify extends EzPlug implements ROIBlock {
      * future.
      * @throws IllegalArgumentException if the specified ROI is not supported
      */
-    public static ROI createConvexROI(final ROI roi) throws IllegalArgumentException {
+    public static @NotNull ROI createConvexROI(final ROI roi) throws IllegalArgumentException {
         ROI output = null;
 
         try {
-            if (roi instanceof ROI2D) {
+            if (roi instanceof final ROI2D roi2d) {
                 final List<Point2D> envelope;
 
                 if (roi instanceof ROI2DShape) {
@@ -118,12 +120,11 @@ public class Convexify extends EzPlug implements ROIBlock {
                 output = new ROI2DPolygon(envelope);
 
                 // copy position info
-                final ROI2D roi2d = (ROI2D) roi;
                 ((ROI2D) output).setT(roi2d.getT());
                 ((ROI2D) output).setZ(roi2d.getZ());
                 ((ROI2D) output).setC(roi2d.getC());
             }
-            else if (roi instanceof ROI3D) {
+            else if (roi instanceof final ROI3D roi3d) {
                 final Point3D[] points = ((ROI3D) roi).getBooleanMask(true).getContourPoints();
 
                 // convert to vecmath's Point3d
@@ -140,7 +141,6 @@ public class Convexify extends EzPlug implements ROIBlock {
                 output = new ROI3DPolygonalMesh(qhull);
 
                 // copy position info
-                final ROI3D roi3d = (ROI3D) roi;
                 ((ROI3D) output).setT(roi3d.getT());
                 ((ROI3D) output).setC(roi3d.getC());
             }
@@ -162,12 +162,12 @@ public class Convexify extends EzPlug implements ROIBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Regions of interest", roiIN);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Regions of interest", roiOUT);
     }
 }
diff --git a/src/main/resources/convexify.png b/src/main/resources/convexify.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b534343c248ab246770930bde041725bc46e0ce
GIT binary patch
literal 7421
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

literal 0
HcmV?d00001

-- 
GitLab