[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 <[email protected]> Authored: Thu Feb 1 18:00:06 2018 +0100 Committer: Christian Schneider <[email protected]> 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); } } }
