This is an automated email from the ASF dual-hosted git repository.

amichai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git

commit 528fcfe02b4ec9be69dca6eb527f02fd504eb30f
Author: Amichai Rothman <[email protected]>
AuthorDate: Tue May 28 16:38:41 2024 +0300

    Clean up TopologyManagerExport
---
 .../exporter/TopologyManagerExport.java            | 98 ++++++++--------------
 1 file changed, 37 insertions(+), 61 deletions(-)

diff --git 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
index db91be41..66a81ce5 100644
--- 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
+++ 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
@@ -58,31 +58,28 @@ import org.slf4j.LoggerFactory;
 public class TopologyManagerExport implements ServiceListener {
     private static final Logger LOG = 
LoggerFactory.getLogger(TopologyManagerExport.class);
 
-    private final Executor execService;
-    private final Map<RemoteServiceAdmin, ServiceExportsRepository> 
endpointRepo;
-    private ExportPolicy policy;
-    private Map<Integer, String> typeNames;
     private final EndpointListenerNotifier notifier;
-    private Set<ServiceReference<?>> toBeExported;
+    private final Executor executor;
+    private final ExportPolicy policy;
+    private final Map<RemoteServiceAdmin, ServiceExportsRepository> 
endpointRepo;
+    private final Set<ServiceReference<?>> toBeExported;
 
-    public TopologyManagerExport(
-            EndpointListenerNotifier notifier,
-            Executor executor,
-            ExportPolicy policy) {
+    public TopologyManagerExport(EndpointListenerNotifier notifier, Executor 
executor, ExportPolicy policy) {
         this.notifier = notifier;
-        this.execService = executor;
+        this.executor = executor;
         this.policy = policy;
         this.endpointRepo = new HashMap<>();
         this.toBeExported = new HashSet<>();
-        createTypeNames();
     }
 
-    private void createTypeNames() {
-        this.typeNames = new HashMap<>();
-        this.typeNames.put(ServiceEvent.MODIFIED, "modified");
-        this.typeNames.put(ServiceEvent.MODIFIED_ENDMATCH, "modified 
endmatch");
-        this.typeNames.put(ServiceEvent.REGISTERED, "registered");
-        this.typeNames.put(ServiceEvent.UNREGISTERING, "unregistering");
+    private String getTypeName(ServiceEvent event) {
+        switch (event.getType()) {
+            case ServiceEvent.MODIFIED: return "modified";
+            case ServiceEvent.MODIFIED_ENDMATCH: return "modified endmatch";
+            case ServiceEvent.REGISTERED: return "registered";
+            case ServiceEvent.UNREGISTERING: return "unregistering";
+            default: return null;
+        }
     }
 
     // track all service registrations so we can export any services that are 
configured to be exported
@@ -114,28 +111,22 @@ public class TopologyManagerExport implements 
ServiceListener {
     }
 
     private void modified(ServiceReference<?> sref) {
-        for (RemoteServiceAdmin rsa : endpointRepo.keySet()) {
-            ServiceExportsRepository repo = endpointRepo.get(rsa);
+        for (ServiceExportsRepository repo : endpointRepo.values()) {
             repo.modifyService(sref);
         }
     }
 
     private void remove(ServiceReference<?> sref) {
         toBeExported.remove(sref);
-        for (RemoteServiceAdmin rsa : endpointRepo.keySet()) {
-            ServiceExportsRepository repo = endpointRepo.get(rsa);
+        for (ServiceExportsRepository repo : endpointRepo.values()) {
             repo.removeService(sref);
         }
     }
 
-    public String getTypeName(ServiceEvent event) {
-        return typeNames.get(event.getType());
-    }
-
     public void add(RemoteServiceAdmin rsa) {
-        endpointRepo.put(rsa,  new ServiceExportsRepository(rsa, notifier));
-        for (ServiceReference<?> serviceRef : toBeExported) {
-            exportInBackground(serviceRef);
+        endpointRepo.put(rsa, new ServiceExportsRepository(rsa, notifier));
+        for (ServiceReference<?> sref : toBeExported) {
+            exportInBackground(sref);
         }
     }
 
@@ -147,33 +138,27 @@ public class TopologyManagerExport implements 
ServiceListener {
     }
 
     private void exportInBackground(final ServiceReference<?> sref) {
-        execService.execute(new Runnable() {
-            public void run() {
-                doExport(sref);
-            }
-        });
+        executor.execute(() -> doExport(sref));
     }
 
     private void doExport(final ServiceReference<?> sref) {
         LOG.debug("Exporting service {}", sref);
         toBeExported.add(sref);
-        if (endpointRepo.size() == 0) {
+        if (endpointRepo.isEmpty()) {
+            Bundle bundle = sref.getBundle();
+            String bundleName = bundle == null ? null : 
bundle.getSymbolicName();
             LOG.error("Unable to export service from bundle {}, interfaces: {} 
as no RemoteServiceAdmin is available. Marked for later export.",
-                    getSymbolicName(sref.getBundle()),
-                    
sref.getProperty(org.osgi.framework.Constants.OBJECTCLASS));
+                bundleName, 
sref.getProperty(org.osgi.framework.Constants.OBJECTCLASS));
             return;
         }
 
-        for (RemoteServiceAdmin remoteServiceAdmin : endpointRepo.keySet()) {
-            ServiceExportsRepository repo = 
endpointRepo.get(remoteServiceAdmin);
-            Collection<ExportRegistration> regs = 
exportService(remoteServiceAdmin, sref);
-            repo.addService(sref, regs);
+        for (Map.Entry<RemoteServiceAdmin, ServiceExportsRepository> entry : 
endpointRepo.entrySet()) {
+            Collection<ExportRegistration> regs = 
exportService(entry.getKey(), sref);
+            entry.getValue().addService(sref, regs);
         }
     }
 
-    private Collection<ExportRegistration> exportService(
-            final RemoteServiceAdmin rsa,
-            final ServiceReference<?> sref) {
+    private Collection<ExportRegistration> exportService(final 
RemoteServiceAdmin rsa, final ServiceReference<?> sref) {
         // abort if the service was unregistered by the time we got here
         // (we check again at the end, but this optimization saves unnecessary 
heavy processing)
         if (sref.getBundle() == null) {
@@ -183,10 +168,10 @@ public class TopologyManagerExport implements 
ServiceListener {
 
         LOG.debug("exporting Service {} using RemoteServiceAdmin {}", sref, 
rsa.getClass().getName());
         Map<String, ?> addProps = policy.additionalParameters(sref);
-        Collection<ExportRegistration> exportRegs = rsa.exportService(sref, 
addProps);
+        Collection<ExportRegistration> regs = rsa.exportService(sref, 
addProps);
 
         // process successful/failed registrations
-        for (ExportRegistration reg : exportRegs) {
+        for (ExportRegistration reg : regs) {
             if (reg.getException() == null) {
                 EndpointDescription endpoint = 
reg.getExportReference().getExportedEndpoint();
                 LOG.info("TopologyManager: export succeeded for {}, endpoint 
{}, rsa {}", sref, endpoint, rsa.getClass().getName());
@@ -200,36 +185,27 @@ public class TopologyManagerExport implements 
ServiceListener {
         // with the unregister event which may have already been handled, so 
we'll miss it)
         if (sref.getBundle() == null) {
             LOG.info("TopologyManager: export reverted for {} since service 
was unregistered", sref);
-            for (ExportRegistration reg : exportRegs) {
+            for (ExportRegistration reg : regs) {
                 reg.close();
             }
         }
 
-        return exportRegs;
+        return regs;
     }
 
     private boolean shouldExport(ServiceReference<?> sref) {
         Map<String, ?> addProps = policy.additionalParameters(sref);
-        List<String> exported= 
StringPlus.normalize(sref.getProperty(RemoteConstants.SERVICE_EXPORTED_INTERFACES));
+        List<String> exported = 
StringPlus.normalize(sref.getProperty(RemoteConstants.SERVICE_EXPORTED_INTERFACES));
         List<String> addExported = 
StringPlus.normalize(addProps.get(RemoteConstants.SERVICE_EXPORTED_INTERFACES));
-        return sizeOf(exported) + sizeOf(addExported) > 0;
-    }
-
-    private int sizeOf(List<String> list) {
-        return list == null ? 0 : list.size();
-    }
-
-    private Object getSymbolicName(Bundle bundle) {
-        return bundle == null ? null : bundle.getSymbolicName();
+        return exported != null && !exported.isEmpty() || addExported != null 
&& !addExported.isEmpty();
     }
 
-    public void addEPListener(EndpointEventListener epListener, Set<Filter> 
filters) {
+    public void addEPListener(EndpointEventListener listener, Set<Filter> 
filters) {
         Collection<EndpointDescription> endpoints = new ArrayList<>();
-        for (RemoteServiceAdmin rsa : endpointRepo.keySet()) {
-            ServiceExportsRepository repo = endpointRepo.get(rsa);
+        for (ServiceExportsRepository repo : endpointRepo.values()) {
             endpoints.addAll(repo.getAllEndpoints());
         }
-        notifier.add(epListener, filters, endpoints);
+        notifier.add(listener, filters, endpoints);
     }
 
     public void removeEPListener(EndpointEventListener listener) {

Reply via email to