From cbf2b73eb93e3449d6c5beb3c5627c0e0466e9ff Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Mon, 3 Jul 2023 12:41:06 +0200
Subject: [PATCH] Fix to send email notifications only when there are changes
 to notify about

---
 .../names/service/NotificationService.java    |  9 +++++++
 .../openepics/names/util/ValidateUtil.java    | 19 ++++++++++++++
 .../names/util/ValidateUtilTest.java          | 25 +++++++++++++++++++
 3 files changed, 53 insertions(+)

diff --git a/src/main/java/org/openepics/names/service/NotificationService.java b/src/main/java/org/openepics/names/service/NotificationService.java
index 75dcadee..a094c562 100644
--- a/src/main/java/org/openepics/names/service/NotificationService.java
+++ b/src/main/java/org/openepics/names/service/NotificationService.java
@@ -27,6 +27,7 @@ import java.util.logging.Logger;
 import org.apache.commons.lang3.StringUtils;
 import org.openepics.names.util.NameCommand;
 import org.openepics.names.util.StructureCommand;
+import org.openepics.names.util.ValidateUtil;
 import org.openepics.names.util.notification.NotificationName;
 import org.openepics.names.util.notification.NotificationStructure;
 import org.openepics.names.util.notification.NotificationUtil;
@@ -114,6 +115,10 @@ public class NotificationService {
                         numberUpdated,
                         numberDeleted));
 
+        if (ValidateUtil.areAllZero(numberCreated, numberUpdated, numberDeleted)) {
+            return;
+        }
+
         // email content
         final Context ctx = new Context();
         ctx.setVariable("numberCreated", numberCreated);
@@ -201,6 +206,10 @@ public class NotificationService {
                         numberCancelled,
                         numberRejected));
 
+        if (ValidateUtil.areAllZero(numberCreated, numberUpdated, numberDeleted, numberApproved, numberCancelled, numberRejected)) {
+            return;
+        }
+
         // email content
         final Context ctx = new Context();
         ctx.setVariable("numberCreated",   numberCreated);
diff --git a/src/main/java/org/openepics/names/util/ValidateUtil.java b/src/main/java/org/openepics/names/util/ValidateUtil.java
index a49d1c3f..85a746e7 100644
--- a/src/main/java/org/openepics/names/util/ValidateUtil.java
+++ b/src/main/java/org/openepics/names/util/ValidateUtil.java
@@ -336,4 +336,23 @@ public class ValidateUtil {
         return false;
     }
 
+    /**
+     * Validate given ints such that <tt>true</tt> is returned if all ints are zero (0).
+     * This may be used to validate that given ints are not zero.
+     *
+     * @param values values
+     * @return boolean if validation is ok
+     */
+    public static boolean areAllZero(int... values) {
+        if (values == null) {
+            return false;
+        }
+        for (int value : values) {
+            if (value != 0) {
+                return false;
+            }
+        }
+        return true;
+    }
+
 }
diff --git a/src/test/java/org/openepics/names/util/ValidateUtilTest.java b/src/test/java/org/openepics/names/util/ValidateUtilTest.java
index 5a4089cc..68a99527 100644
--- a/src/test/java/org/openepics/names/util/ValidateUtilTest.java
+++ b/src/test/java/org/openepics/names/util/ValidateUtilTest.java
@@ -661,6 +661,31 @@ class ValidateUtilTest {
         assertEquals(expected, ValidateUtil.isAnyTrue(b1, b2, b3));
     }
 
+    /**
+     * Test of validate an array if all ints in array are zero.
+     */
+    @Test
+    void areAllZero() {
+        assertFalse(ValidateUtil.areAllZero(null));
+
+        assertTrue (ValidateUtil.areAllZero(0));
+        assertFalse(ValidateUtil.areAllZero(1));
+
+        assertTrue (ValidateUtil.areAllZero(0, 0));
+        assertFalse(ValidateUtil.areAllZero(0, 1));
+        assertFalse(ValidateUtil.areAllZero(1, 0));
+        assertFalse(ValidateUtil.areAllZero(1, 1));
+
+        assertTrue (ValidateUtil.areAllZero(0, 0, 0));
+        assertFalse(ValidateUtil.areAllZero(0, 0, 1));
+        assertFalse(ValidateUtil.areAllZero(0, 1, 0));
+        assertFalse(ValidateUtil.areAllZero(0, 1, 1));
+        assertFalse(ValidateUtil.areAllZero(1, 0, 0));
+        assertFalse(ValidateUtil.areAllZero(1, 0, 1));
+        assertFalse(ValidateUtil.areAllZero(1, 1, 0));
+        assertFalse(ValidateUtil.areAllZero(1, 1, 1));
+    }
+
     // ----------------------------------------------------------------------------------------------------
 
     /**
-- 
GitLab