You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/02/01 17:04:33 UTC

[4/5] aries-rsa git commit: [ARIES-1763] Change config discovery to EndpointEventListener

[ARIES-1763] Change config discovery to EndpointEventListener


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/c10f3821
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/c10f3821
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/c10f3821

Branch: refs/heads/master
Commit: c10f3821e53ca34bd4603d5c98aa4ea44c987764
Parents: 89ff16c
Author: Christian Schneider <cs...@adobe.com>
Authored: Thu Feb 1 18:00:06 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Thu Feb 1 18:00:06 2018 +0100

----------------------------------------------------------------------
 .../aries/rsa/discovery/config/Activator.java   | 26 ++++----
 .../rsa/discovery/config/ConfigDiscovery.java   | 63 +++++++++-----------
 2 files changed, 43 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c10f3821/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/Activator.java
----------------------------------------------------------------------
diff --git a/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/Activator.java b/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/Activator.java
index 9b0cf09..315baa8 100644
--- a/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/Activator.java
+++ b/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/Activator.java
@@ -19,17 +19,21 @@
 
 package org.apache.aries.rsa.discovery.config;
 
-import org.osgi.framework.*;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ManagedServiceFactory;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
 import org.osgi.util.tracker.ServiceTracker;
 
-import java.util.Hashtable;
-
 public class Activator implements BundleActivator {
     private static final String FACTORY_PID = "org.apache.aries.rsa.discovery.config";
 
-    private ServiceTracker<EndpointListener, EndpointListener> listenerTracker;
+    private ServiceTracker<EndpointEventListener, EndpointEventListener> listenerTracker;
     private ServiceRegistration<ManagedServiceFactory> registration;
 
     public void start(BundleContext context) {
@@ -46,23 +50,23 @@ public class Activator implements BundleActivator {
         listenerTracker.close();
     }
 
-    private final class EPListenerTracker extends ServiceTracker<EndpointListener, EndpointListener> {
+    private final class EPListenerTracker extends ServiceTracker<EndpointEventListener, EndpointEventListener> {
         private final ConfigDiscovery configDiscovery;
 
         private EPListenerTracker(BundleContext context, ConfigDiscovery configDiscovery) {
-            super(context, EndpointListener.class, null);
+            super(context, EndpointEventListener.class, null);
             this.configDiscovery = configDiscovery;
         }
 
         @Override
-        public EndpointListener addingService(ServiceReference<EndpointListener> reference) {
-            EndpointListener service = super.addingService(reference);
+        public EndpointEventListener addingService(ServiceReference<EndpointEventListener> reference) {
+            EndpointEventListener service = super.addingService(reference);
             configDiscovery.addListener(reference, service);
             return service;
         }
 
         @Override
-        public void modifiedService(ServiceReference<EndpointListener> reference, EndpointListener service) {
+        public void modifiedService(ServiceReference<EndpointEventListener> reference, EndpointEventListener service) {
             super.modifiedService(reference, service);
             configDiscovery.removeListener(service);
 
@@ -73,7 +77,7 @@ public class Activator implements BundleActivator {
         }
 
         @Override
-        public void removedService(ServiceReference<EndpointListener> reference, EndpointListener service) {
+        public void removedService(ServiceReference<EndpointEventListener> reference, EndpointEventListener service) {
             super.removedService(reference, service);
             configDiscovery.removeListener(service);
         }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c10f3821/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/ConfigDiscovery.java
----------------------------------------------------------------------
diff --git a/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/ConfigDiscovery.java b/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/ConfigDiscovery.java
index efdd06c..7da6eec 100644
--- a/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/ConfigDiscovery.java
+++ b/discovery/config/src/main/java/org/apache/aries/rsa/discovery/config/ConfigDiscovery.java
@@ -26,15 +26,16 @@ import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedServiceFactory;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
 
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
 class ConfigDiscovery implements ManagedServiceFactory {
     private final Map<EndpointDescription, String> endpointDescriptions = new ConcurrentHashMap<>();
-    private final Map<EndpointListener, Collection<String>> listenerToFilters = new HashMap<>();
-    private final Map<String, Collection<EndpointListener>> filterToListeners = new HashMap<>();
+    private final Map<EndpointEventListener, Collection<String>> listenerToFilters = new HashMap<>();
+    private final Map<String, Collection<EndpointEventListener>> filterToListeners = new HashMap<>();
 
     @Override
     public String getName() {
@@ -51,8 +52,8 @@ class ConfigDiscovery implements ManagedServiceFactory {
         removeServiceDeclaredInConfig(pid);
     }
 
-    void addListener(ServiceReference<EndpointListener> endpointListenerRef, EndpointListener endpointListener) {
-        List<String> filters = StringPlus.normalize(endpointListenerRef.getProperty(EndpointListener.ENDPOINT_LISTENER_SCOPE));
+    void addListener(ServiceReference<EndpointEventListener> endpointListenerRef, EndpointEventListener endpointListener) {
+        List<String> filters = StringPlus.normalize(endpointListenerRef.getProperty(EndpointEventListener.ENDPOINT_LISTENER_SCOPE));
         if (filters.isEmpty()) {
             return;
         }
@@ -60,7 +61,7 @@ class ConfigDiscovery implements ManagedServiceFactory {
         synchronized (listenerToFilters) {
             listenerToFilters.put(endpointListener, filters);
             for (String filter : filters) {
-                Collection<EndpointListener> listeners = filterToListeners.get(filter);
+                Collection<EndpointEventListener> listeners = filterToListeners.get(filter);
                 if (listeners == null) {
                     listeners = new ArrayList<>();
                     filterToListeners.put(filter, listeners);
@@ -72,7 +73,7 @@ class ConfigDiscovery implements ManagedServiceFactory {
         triggerCallbacks(filters, endpointListener);
     }
 
-    void removeListener(EndpointListener endpointListener) {
+    void removeListener(EndpointEventListener endpointListener) {
         synchronized (listenerToFilters) {
             Collection<String> filters = listenerToFilters.remove(endpointListener);
             if (filters == null) {
@@ -80,7 +81,7 @@ class ConfigDiscovery implements ManagedServiceFactory {
             }
 
             for (String filter : filters) {
-                Collection<EndpointListener> listeners = filterToListeners.get(filter);
+                Collection<EndpointEventListener> listeners = filterToListeners.get(filter);
                 if (listeners != null) {
                     listeners.remove(endpointListener);
                     if (listeners.isEmpty()) {
@@ -91,11 +92,11 @@ class ConfigDiscovery implements ManagedServiceFactory {
         }
     }
 
-    private Map<String, Collection<EndpointListener>> getMatchingListeners(EndpointDescription endpoint) {
+    private Map<String, Collection<EndpointEventListener>> getMatchingListeners(EndpointDescription endpoint) {
         // return a copy of matched filters/listeners so that caller doesn't need to hold locks while triggering events
-        Map<String, Collection<EndpointListener>> matched = new HashMap<>();
+        Map<String, Collection<EndpointEventListener>> matched = new HashMap<>();
         synchronized (listenerToFilters) {
-            for (Map.Entry<String, Collection<EndpointListener>> entry : filterToListeners.entrySet()) {
+            for (Map.Entry<String, Collection<EndpointEventListener>> entry : filterToListeners.entrySet()) {
                 String filter = entry.getKey();
                 if (matchFilter(filter, endpoint)) {
                     matched.put(filter, new ArrayList<>(entry.getValue()));
@@ -109,7 +110,8 @@ class ConfigDiscovery implements ManagedServiceFactory {
     private void addDeclaredRemoteService(String pid, Dictionary config) {
         EndpointDescription endpoint = new EndpointDescription(PropertyValidator.validate(config));
         endpointDescriptions.put(endpoint, pid);
-        addedEndpointDescription(endpoint);
+        EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+        triggerCallbacks(event);
     }
 
     private void removeServiceDeclaredInConfig(String pid) {
@@ -117,46 +119,37 @@ class ConfigDiscovery implements ManagedServiceFactory {
              i.hasNext(); ) {
             Map.Entry<EndpointDescription, String> entry = i.next();
             if (pid.equals(entry.getValue())) {
-                removedEndpointDescription(entry.getKey());
+                EndpointEvent event = new EndpointEvent(EndpointEvent.REMOVED, entry.getKey());
+                triggerCallbacks(event);
                 i.remove();
             }
         }
     }
 
-    private void addedEndpointDescription(EndpointDescription endpoint) {
-        triggerCallbacks(endpoint, true);
-    }
-
-    private void removedEndpointDescription(EndpointDescription endpoint) {
-        triggerCallbacks(endpoint, false);
-    }
-
-    private void triggerCallbacks(EndpointDescription endpoint, boolean added) {
-        for (Map.Entry<String, Collection<EndpointListener>> entry : getMatchingListeners(endpoint).entrySet()) {
+    private void triggerCallbacks(EndpointEvent event) {
+        EndpointDescription endpoint = event.getEndpoint();
+        for (Map.Entry<String, Collection<EndpointEventListener>> entry : getMatchingListeners(endpoint).entrySet()) {
             String filter = entry.getKey();
-            for (EndpointListener listener : entry.getValue()) {
-                triggerCallbacks(listener, filter, endpoint, added);
+            for (EndpointEventListener listener : entry.getValue()) {
+                triggerCallbacks(listener, filter, event);
             }
         }
     }
 
-    private void triggerCallbacks(EndpointListener endpointListener, String filter,
-                                  EndpointDescription endpoint, boolean added) {
-        if (!matchFilter(filter, endpoint)) {
+    private void triggerCallbacks(EndpointEventListener endpointListener, String filter,
+                                  EndpointEvent event) {
+        if (!matchFilter(filter, event.getEndpoint())) {
             return;
         }
 
-        if (added) {
-            endpointListener.endpointAdded(endpoint, filter);
-        } else {
-            endpointListener.endpointRemoved(endpoint, filter);
-        }
+        endpointListener.endpointChanged(event, filter);
     }
 
-    private void triggerCallbacks(Collection<String> filters, EndpointListener endpointListener) {
+    private void triggerCallbacks(Collection<String> filters, EndpointEventListener endpointListener) {
         for (String filter : filters) {
             for (EndpointDescription endpoint : endpointDescriptions.keySet()) {
-                triggerCallbacks(endpointListener, filter, endpoint, true);
+                EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+                triggerCallbacks(endpointListener, filter, event);
             }
         }
     }