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 084ab478aa52f71f970b18945b6690190feb9f04
Author: Amichai Rothman <[email protected]>
AuthorDate: Thu Mar 19 00:40:47 2026 +0200

    Simplify zookeeper Interest/InterestManager
---
 .../aries/rsa/discovery/zookeeper/Interest.java    | 59 ++++------------------
 .../rsa/discovery/zookeeper/InterestManager.java   | 50 ++++++++----------
 .../discovery/zookeeper/InterestManagerTest.java   |  2 +-
 3 files changed, 31 insertions(+), 80 deletions(-)

diff --git 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
index 4f539f9d..da659d59 100644
--- 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
+++ 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
@@ -21,8 +21,6 @@ package org.apache.aries.rsa.discovery.zookeeper;
 import static 
org.osgi.service.remoteserviceadmin.EndpointEventListener.ENDPOINT_LISTENER_SCOPE;
 
 import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
 
 import org.apache.aries.rsa.util.StringPlus;
 import org.osgi.framework.ServiceReference;
@@ -32,67 +30,28 @@ import 
org.osgi.service.remoteserviceadmin.EndpointEventListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings("deprecation")
 public class Interest {
     private static final Logger LOG = LoggerFactory.getLogger(Interest.class);
 
-    private final ServiceReference<?> sref;
     private final List<String> scopes;
-    private final EndpointEventListener epListener;
+    private final EndpointEventListener listener;
 
-    public Interest(ServiceReference<?> sref) {
-        this(sref, null);
-    }
-
-    public Interest(ServiceReference<?> sref, EndpointEventListener 
epListener) {
-        this.sref = sref;
+    public Interest(ServiceReference<?> sref, EndpointEventListener listener) {
         this.scopes = 
StringPlus.normalize(sref.getProperty(ENDPOINT_LISTENER_SCOPE));
-        this.epListener = epListener;
-    }
-
-    public List<String> getScopes() {
-        return scopes;
+        this.listener = listener;
     }
 
     public void notifyListener(EndpointEvent event) {
         EndpointDescription endpoint = event.getEndpoint();
-        Optional<String> currentScope = getFirstMatch(endpoint);
-        if (currentScope.isPresent()) {
-            LOG.debug("Matched {} against {}", endpoint, currentScope);
-            String scope = currentScope.get();
-            LOG.info("Calling endpointchanged on class {} for filter {}, type 
{}, endpoint {} ",
-                epListener, scope, event.getType(), endpoint);
-            epListener.endpointChanged(event, scope);
-        }
-    }
-
-    private Optional<String> getFirstMatch(EndpointDescription endpoint) {
-        return scopes.stream().filter(endpoint::matches).findFirst();
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((sref == null) ? 0 : sref.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        Interest other = (Interest) obj;
-        return Objects.equals(sref, other.sref);
+        scopes.stream().filter(endpoint::matches).findFirst().ifPresent(scope 
-> { // notify with first scope
+            LOG.info("Calling endpointChanged on {} for filter {}, type {}, 
endpoint {}",
+                listener, scope, event.getType(), endpoint);
+            listener.endpointChanged(event, scope);
+        });
     }
 
     @Override
     public String toString() {
-        return "Interest [scopes=" + scopes + ", epListener=" + 
epListener.getClass() + "]";
+        return "Interest [scopes=" + scopes + ", listener=" + 
listener.getClass() + "]";
     }
-
 }
diff --git 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
index d223782f..f8812612 100644
--- 
a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
+++ 
b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
@@ -18,7 +18,7 @@
  */
 package org.apache.aries.rsa.discovery.zookeeper;
 
-import java.util.Set;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.aries.rsa.discovery.zookeeper.client.ClientManager;
@@ -40,14 +40,13 @@ import org.slf4j.LoggerFactory;
  * Establishes a listener with the {@link ZookeeperEndpointRepository} to be 
called back on all changes in the repository.
  * Events from repository are then forwarded to all interested {@link 
EndpointEventListener}s.
  */
-@SuppressWarnings("deprecation")
 @Component(immediate = true)
 public class InterestManager {
     private static final Logger LOG = 
LoggerFactory.getLogger(InterestManager.class);
 
-    private Set<Interest> interests = ConcurrentHashMap.newKeySet();
+    private final Map<ServiceReference<EndpointEventListener>, Interest> 
interests = new ConcurrentHashMap<>();
 
-    private ZookeeperEndpointListener listener;
+    private ZookeeperEndpointListener zkListener;
 
     public InterestManager() {
     }
@@ -55,59 +54,52 @@ public class InterestManager {
     // Using ARepository name to make sure it is injected first
     @Reference
     public void bindARepository(ZookeeperEndpointRepository repository) {
-        this.listener = repository.createListener(this::onEndpointEvent);
+        zkListener = repository.createListener(this::onEndpointEvent);
     }
 
     @Deactivate
     public void deactivate() {
-        this.listener.close();
+        zkListener.close();
         interests.clear();
     }
 
     private void onEndpointEvent(EndpointEvent event) {
-        interests.forEach(interest -> interest.notifyListener(event));
+        interests.values().forEach(interest -> interest.notifyListener(event));
     }
 
     @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = 
ReferencePolicy.DYNAMIC)
-    public void 
bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, 
EndpointEventListener epListener) {
-        addInterest(sref, epListener);
+    public void 
bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, 
EndpointEventListener listener) {
+        addInterest(sref, listener);
     }
 
-    public void 
updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, 
EndpointEventListener epListener) {
-        addInterest(sref, epListener);
+    public void 
updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, 
EndpointEventListener listener) {
+        addInterest(sref, listener);
     }
 
     public void 
unbindEndpointEventListener(ServiceReference<EndpointEventListener> sref) {
-        interests.remove(new Interest(sref));
+        interests.remove(sref);
     }
 
-    private void addInterest(ServiceReference<?> sref, EndpointEventListener 
epListener) {
+    private void addInterest(ServiceReference<EndpointEventListener> sref, 
EndpointEventListener listener) {
         if (isOurOwnEndpointEventListener(sref)) {
             LOG.debug("Skipping our own EndpointEventListener");
             return;
         }
-        Interest interest = new Interest(sref, epListener);
-        update(interest);
-        if (listener != null) {
-            listener.getEndpoints().stream()
+        Interest interest = new Interest(sref, listener);
+        boolean exists = interests.put(sref, interest) != null;
+        LOG.debug("{} Interest: {}", exists ? "Updating" : "Adding", interest);
+        if (zkListener != null) {
+            zkListener.getEndpoints().stream()
                 .map(endpoint -> new EndpointEvent(EndpointEvent.ADDED, 
endpoint))
                 .forEach(interest::notifyListener);
         }
     }
 
-    private void update(Interest interest) {
-        boolean present = interests.remove(interest);
-        LOG.debug("{} Interest: {}", present ? "Adding" : "Updating", 
interest);
-        interests.add(interest);
+    private static boolean 
isOurOwnEndpointEventListener(ServiceReference<EndpointEventListener> sref) {
+        return 
Boolean.parseBoolean(String.valueOf(sref.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID)));
     }
 
-    private static boolean isOurOwnEndpointEventListener(ServiceReference<?> 
endpointEventListener) {
-        return Boolean.parseBoolean(String.valueOf(
-            
endpointEventListener.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID)));
+    int size() {
+        return interests.size();
     }
-
-    Set<Interest> getInterests() {
-        return interests;
-    }
-
 }
diff --git 
a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
 
b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
index 63fddbd4..793bb35d 100644
--- 
a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
+++ 
b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
@@ -81,7 +81,7 @@ public class InterestManagerTest {
     }
 
     private void assertNumInterests(int expectedNum) {
-        assertEquals(expectedNum, im.getInterests().size());
+        assertEquals(expectedNum, im.size());
     }
 
     @SuppressWarnings("unchecked")

Reply via email to