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]>.

Reply via email to