You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2015/05/27 15:25:49 UTC
svn commit: r1682014 -
/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
Author: rombert
Date: Wed May 27 13:25:49 2015
New Revision: 1682014
URL: http://svn.apache.org/r1682014
Log:
SLING-4756 - ServiceListener notifications are not filtered
Filter ServiceListener notifications based on the registered filters.
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
Modified: sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java?rev=1682014&r1=1682013&r2=1682014&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java Wed May 27 13:25:49 2015
@@ -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 Bundl
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 Bundl
}
@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 Bundl
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);
+ }
}
}