You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/01/30 11:36:01 UTC

aries-rsa git commit: [ARIES-1763] Support both EndpointListener and EndpointEventListener in TopologyManager import

Repository: aries-rsa
Updated Branches:
  refs/heads/master 0fea532a9 -> ee64f9f43


[ARIES-1763] Support both EndpointListener and EndpointEventListener in TopologyManager import


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/ee64f9f4
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/ee64f9f4
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/ee64f9f4

Branch: refs/heads/master
Commit: ee64f9f43c1839d6f55c86d7b10215b7d2e51784
Parents: 0fea532
Author: Christian Schneider <cs...@adobe.com>
Authored: Tue Jan 30 12:33:45 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Tue Jan 30 12:35:40 2018 +0100

----------------------------------------------------------------------
 .../importer/TopologyManagerImport.java         | 48 ++++++++++----------
 .../importer/local/EndpointListenerManager.java | 33 ++++++++++++--
 .../importer/TopologyManagerImportTest.java     | 10 ++--
 3 files changed, 60 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
index e6ab859..8e1a1b7 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
@@ -19,24 +19,18 @@
 package org.apache.aries.rsa.topologymanager.importer;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.hooks.service.FindHook;
-import org.osgi.framework.hooks.service.ListenerHook;
 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 org.osgi.service.remoteserviceadmin.ImportReference;
 import org.osgi.service.remoteserviceadmin.ImportRegistration;
 import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
@@ -50,7 +44,7 @@ import org.slf4j.LoggerFactory;
  * the EndpointListenerManager.
  * Manages local creation and destruction of service imports using the available RemoteServiceAdmin services.
  */
-public class TopologyManagerImport implements EndpointListener, RemoteServiceAdminListener {
+public class TopologyManagerImport implements EndpointEventListener, RemoteServiceAdminListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(TopologyManagerImport.class);
     private ExecutorService execService;
@@ -85,20 +79,6 @@ public class TopologyManagerImport implements EndpointListener, RemoteServiceAdm
         execService.shutdown();
     }
 
-    @Override
-    public void endpointAdded(EndpointDescription endpoint, String filter) {
-        LOG.debug("Endpoint added for filter {}, endpoint {}", filter, endpoint);
-        importPossibilities.put(filter, endpoint);
-        triggerSyncImports(filter);
-    }
-
-    @Override
-    public void endpointRemoved(EndpointDescription endpoint, String filter) {
-        LOG.debug("Endpoint removed for filter {}, endpoint {}", filter, endpoint);
-        importPossibilities.remove(filter, endpoint);
-        triggerSyncImports(filter);
-    }
-
     public void add(RemoteServiceAdmin rsa) {
         rsaSet.add(rsa);
         for (String filter : importPossibilities.keySet()) {
@@ -213,5 +193,27 @@ public class TopologyManagerImport implements EndpointListener, RemoteServiceAdm
             ir.close();
         }
     }
+
+    @Override
+    public void endpointChanged(EndpointEvent event, String filter) {
+        EndpointDescription endpoint = event.getEndpoint();
+        LOG.debug("Endpoint event received type {}, filter {}, endpoint {}", event.getType(), filter, endpoint);
+        switch (event.getType()) {
+            case EndpointEvent.ADDED :
+                importPossibilities.put(filter, endpoint);
+                break;
+            case EndpointEvent.REMOVED : 
+                importPossibilities.remove(filter, endpoint);
+                break;
+            case EndpointEvent.MODIFIED :
+                importPossibilities.remove(filter, endpoint);
+                importPossibilities.put(filter, endpoint);
+                break;
+            case EndpointEvent.MODIFIED_ENDMATCH :
+                importPossibilities.remove(filter, endpoint);
+                break;
+        }
+        triggerSyncImports(filter);
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
index 93208f4..0731aab 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
@@ -24,9 +24,13 @@ import java.util.Hashtable;
 import java.util.List;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.framework.hooks.service.FindHook;
 import org.osgi.framework.hooks.service.ListenerHook;
+import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
 import org.osgi.service.remoteserviceadmin.EndpointListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,12 +45,28 @@ import org.slf4j.LoggerFactory;
  */
 public class EndpointListenerManager implements ServiceInterestListener{
 
+    private final class EndpointListenerAdapter implements EndpointListener {
+        @Override
+        public void endpointRemoved(EndpointDescription endpoint, String matchedFilter) {
+            EndpointEvent event = new EndpointEvent(EndpointEvent.REMOVED, endpoint);
+            endpointListener.endpointChanged(event, matchedFilter);
+        }
+
+        @Override
+        public void endpointAdded(EndpointDescription endpoint, String matchedFilter) {
+            EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+            endpointListener.endpointChanged(event, matchedFilter);
+        }
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(EndpointListenerManager.class);
 
     private final BundleContext bctx;
     private volatile ServiceRegistration<EndpointListener> serviceRegistration;
+    private volatile ServiceRegistration<EndpointEventListener> serviceRegistration2;
+    
     private final List<String> filters = new ArrayList<String>();
-    private final EndpointListener endpointListener;
+    private final EndpointEventListener endpointListener;
     private final ListenerHookImpl listenerHook;
     private RSFindHook findHook;
     
@@ -55,7 +75,7 @@ public class EndpointListenerManager implements ServiceInterestListener{
      */
     private final ReferenceCounter<String> importInterestsCounter = new ReferenceCounter<String>();
 
-    public EndpointListenerManager(BundleContext bc, EndpointListener endpointListener) {
+    public EndpointListenerManager(BundleContext bc, EndpointEventListener endpointListener) {
         this.bctx = bc;
         this.endpointListener = endpointListener;
         this.listenerHook = new ListenerHookImpl(bc, this);
@@ -63,8 +83,12 @@ public class EndpointListenerManager implements ServiceInterestListener{
     }
 
     public void start() {
-        serviceRegistration = bctx.registerService(EndpointListener.class, endpointListener,
+        EndpointListener endpointListenerAdapter = new EndpointListenerAdapter();
+        serviceRegistration = bctx.registerService(EndpointListener.class, endpointListenerAdapter,
                                                    getRegistrationProperties());
+        serviceRegistration2 = bctx.registerService(EndpointEventListener.class, endpointListener,
+                getRegistrationProperties());
+
         bctx.registerService(ListenerHook.class, listenerHook, null);
         bctx.registerService(FindHook.class, findHook, null);
     }
@@ -73,6 +97,9 @@ public class EndpointListenerManager implements ServiceInterestListener{
         if (serviceRegistration != null) {
             serviceRegistration.unregister();
         }
+        if (serviceRegistration2 != null) {
+            serviceRegistration2.unregister();
+        }
     }
 
     protected void extendScope(String filter) {

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
index 8b8bbc2..32ba737 100644
--- a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
+++ b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
@@ -18,25 +18,24 @@
  */
 package org.apache.aries.rsa.topologymanager.importer;
 
+import static org.junit.Assert.assertTrue;
+
 import java.util.Dictionary;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.aries.rsa.topologymanager.importer.TopologyManagerImport;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
 import org.easymock.IMocksControl;
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
 import org.osgi.service.remoteserviceadmin.ImportReference;
 import org.osgi.service.remoteserviceadmin.ImportRegistration;
 import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
 
-import static org.junit.Assert.assertTrue;
-
 public class TopologyManagerImportTest {
 
     @Test
@@ -59,7 +58,8 @@ public class TopologyManagerImportTest {
 
         TopologyManagerImport tm = new TopologyManagerImport(bc);
         tm.start();
-        tm.endpointAdded(endpoint, "myFilter");
+        EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+        tm.endpointChanged(event, "myFilter");
         tm.add(rsa);
         assertTrue("rsa.ImportService should have been called",
                    sema.tryAcquire(100, TimeUnit.SECONDS));