This is an automated email from the ASF dual-hosted git repository.

amichair pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git

commit 61ea7c40836dbeeeb32ecb6977a8ecfee32c1d6d
Author: Amichai Rothman <[email protected]>
AuthorDate: Thu Jun 4 22:45:14 2026 +0300

    ARIES-2233 Extract duplicate getChangedKeys utility method
---
 .../client/ZookeeperEndpointListener.java          | 22 +++----------------
 .../org/apache/aries/rsa/util/CollectionUtils.java | 25 ++++++++++++++++++++++
 .../importer/TopologyManagerImport.java            | 19 +++-------------
 3 files changed, 31 insertions(+), 35 deletions(-)

diff --git 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java
 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java
index f137112d..81aedf0a 100644
--- 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java
+++ 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java
@@ -21,11 +21,8 @@ package org.apache.aries.rsa.discovery.zookeeper.client;
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.util.Collection;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 
@@ -42,6 +39,8 @@ import org.osgi.service.remoteserviceadmin.EndpointEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.aries.rsa.util.CollectionUtils.getChangedKeys;
+
 /**
  * Listens to endpoint changes in Zookeeper and forwards changes in Endpoints 
to InterestManager.
  */
@@ -116,7 +115,7 @@ public class ZookeeperEndpointListener implements Closeable 
{
 
     private void onChanged(String path, EndpointDescription endpoint) {
         EndpointDescription old = endpoints.put(path, endpoint);
-        if (old != null && getChangedProps(old.getProperties(), 
endpoint.getProperties()).isEmpty()) {
+        if (old != null && getChangedKeys(old.getProperties(), 
endpoint.getProperties()).isEmpty()) {
             LOG.trace("ignoring endpoint that hasn't changed: {}", endpoint);
             return;
         }
@@ -142,19 +141,4 @@ public class ZookeeperEndpointListener implements 
Closeable {
             return parser.readEndpoint(new ByteArrayInputStream(data));
         }
     }
-
-    private static Set<String> getChangedProps(Map<String, Object> p1, 
Map<String, Object> p2) {
-        Set<String> changed = new LinkedHashSet<>();
-        for (Map.Entry<String, Object> entry : p1.entrySet()) {
-            Object v = p2.get(entry.getKey());
-            if (!Objects.deepEquals(entry.getValue(), v) || v == null && 
!p2.containsKey(entry.getKey()))
-                changed.add(entry.getKey());
-        }
-        for (String k : p2.keySet()) {
-            if (!p1.containsKey(k))
-                changed.add(k);
-        }
-        return changed;
-    }
-
 }
diff --git a/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java 
b/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java
index 91e43cb6..28645a1d 100644
--- a/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java
+++ b/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java
@@ -20,6 +20,9 @@ package org.apache.aries.rsa.util;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -45,4 +48,26 @@ public class CollectionUtils {
                 union.addAll(c);
         return union;
     }
+
+    /**
+     * Returns the set of keys whose entries have changed between two maps
+     * (added, removed, or changed value).
+     *
+     * @param p1 the first map
+     * @param p2 the second map
+     * @return the set of changed keys
+     */
+    public static Set<String> getChangedKeys(Map<String, Object> p1, 
Map<String, Object> p2) {
+        Set<String> changed = new LinkedHashSet<>();
+        for (Map.Entry<String, Object> entry : p1.entrySet()) {
+            Object v = p2.get(entry.getKey());
+            if (!Objects.deepEquals(entry.getValue(), v) || v == null && 
!p2.containsKey(entry.getKey()))
+                changed.add(entry.getKey());
+        }
+        for (String k : p2.keySet()) {
+            if (!p1.containsKey(k))
+                changed.add(k);
+        }
+        return changed;
+    }
 }
diff --git 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
index 42b6523f..678241dc 100644
--- 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
+++ 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
@@ -23,7 +23,6 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.Executors;
@@ -44,6 +43,8 @@ import 
org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.aries.rsa.util.CollectionUtils.getChangedKeys;
+
 /**
  * Listens for remote endpoints using the EndpointListener. The scope of this 
listener is managed by
  * the EndpointListenerManager.
@@ -158,7 +159,7 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
                 // check if the currently imported endpoint is still valid and 
possible
                 EndpointDescription pe = possible.get(endpoint); // get the 
new (maybe modified) possible endpoint
                 if (pe != null) {
-                    if (getChangedProps(endpoint.getProperties(), 
pe.getProperties()).isEmpty())
+                    if (getChangedKeys(endpoint.getProperties(), 
pe.getProperties()).isEmpty())
                         valid.add(endpoint); // valid and possible
                     else
                         updated.put(reg, pe); // valid and possible and 
changed properties
@@ -213,20 +214,6 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
         reg.close();
     }
 
-    private static Set<String> getChangedProps(Map<String, Object> p1, 
Map<String, Object> p2) {
-        Set<String> changed = new LinkedHashSet<>();
-        for (Map.Entry<String, Object> entry : p1.entrySet()) {
-            Object v = p2.get(entry.getKey());
-            if (!Objects.deepEquals(entry.getValue(), v) || v == null && 
!p2.containsKey(entry.getKey()))
-                changed.add(entry.getKey());
-        }
-        for (String k : p2.keySet()) {
-            if (!p1.containsKey(k))
-                changed.add(k);
-        }
-        return changed;
-    }
-
     @Override
     public void endpointChanged(EndpointEvent event, String filter) {
         if (stopped) {

Reply via email to