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);
+            }
         }
     }