This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.osgi-mock-1.4.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit 88790a8d28e96ff707226e0b6f01a476ca3817a2 Author: Robert Munteanu <[email protected]> AuthorDate: Wed May 27 13:25:49 2015 +0000 SLING-4756 - ServiceListener notifications are not filtered Filter ServiceListener notifications based on the registered filters. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/osgi-mock@1682014 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/testing/mock/osgi/MockBundleContext.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java index 66ec503..051a62f 100644 --- a/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java +++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java @@ -23,7 +23,9 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Dictionary; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -58,7 +60,7 @@ class MockBundleContext implements BundleContext { private final MockBundle bundle; private final SortedSet<MockServiceRegistration> registeredServices = new TreeSet<MockServiceRegistration>(); - private final List<ServiceListener> serviceListeners = new ArrayList<ServiceListener>(); + private final Map<ServiceListener, Filter> serviceListeners = new HashMap<ServiceListener, Filter>(); private final List<BundleListener> bundleListeners = new ArrayList<BundleListener>(); public MockBundleContext() { @@ -237,10 +239,8 @@ class MockBundleContext implements BundleContext { } @Override - public void addServiceListener(final ServiceListener serviceListener, final String s) { - if (!serviceListeners.contains(serviceListener)) { - serviceListeners.add(serviceListener); - } + public void addServiceListener(final ServiceListener serviceListener, final String filter) { + serviceListeners.put(serviceListener, filter != null ? createFilter(filter) : null ); } @Override @@ -250,8 +250,10 @@ class MockBundleContext implements BundleContext { private void notifyServiceListeners(int eventType, ServiceReference serviceReference) { final ServiceEvent event = new ServiceEvent(eventType, serviceReference); - for (ServiceListener serviceListener : serviceListeners) { - serviceListener.serviceChanged(event); + for ( Map.Entry<ServiceListener, Filter> entry : serviceListeners.entrySet()) { + if ( entry.getValue() == null || entry.getValue().match(serviceReference)) { + entry.getKey().serviceChanged(event); + } } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
