Author: jwross
Date: Mon Jul  1 19:36:14 2013
New Revision: 1498639

URL: http://svn.apache.org/r1498639
Log:
[aries-1062] org.apache.aries.subsystem.core.internal.Activator needs to be 
improved

Refactor the Activator.addingService method. Start with patch
https://issues.apache.org/jira/secure/attachment/12581693/Activator.java.patch. 
Remove early returns
and simply always call activate(). Remove nested ifs.

Modified:
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java?rev=1498639&r1=1498638&r2=1498639&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 Mon Jul  1 19:36:14 2013
@@ -240,34 +240,24 @@ public class Activator implements Bundle
        @Override
        public synchronized Object addingService(ServiceReference<Object> 
reference) {
                Object service = bundleContext.getService(reference);
-               if (service instanceof Coordinator) {
-                       if (coordinator == null) {
-                               coordinator = (Coordinator)service;
-                               activate();
-                       }
-               }
-               else if (service instanceof RegionDigraph) {
-                       if (regionDigraph == null) {
-                               regionDigraph = (RegionDigraph)service;
-                               activate();
-                       }
-               }
-               else if (service instanceof Resolver) {
-                       if (resolver == null) {
-                               resolver = (Resolver)service;
-                               activate();
-                       }
-               }
-               else if (service instanceof ModelledResourceManager) {
-                       if (modelledResourceManager == null) {
-                               modelledResourceManager = 
(ModelledResourceManager)service;
-                               activate();
-                       }
-               }
-               else if (service instanceof IDirectoryFinder)
-                       finders.add((IDirectoryFinder)service);
-               else
-                       repositories.add((Repository)service);
+               // Use all of each type of the following services.
+               if (service instanceof IDirectoryFinder)
+                       finders.add((IDirectoryFinder) service);
+               else if (service instanceof Repository)
+                       repositories.add((Repository) service);
+               // Use only one of each type of the following services.
+               else if (service instanceof Coordinator && coordinator == null)
+                       coordinator = (Coordinator) service;
+               else if (service instanceof RegionDigraph && regionDigraph == 
null)
+                       regionDigraph = (RegionDigraph) service;
+               else if (service instanceof Resolver && resolver == null)
+                       resolver = (Resolver) service;
+               else if (service instanceof ModelledResourceManager && 
modelledResourceManager == null)
+                       modelledResourceManager = (ModelledResourceManager) 
service;
+               // Activation is harmless if already active or all required 
services
+               // have not yet been found.
+               activate();
+               // Filter guarantees we want to track all services received.
                return service;
        }
 


Reply via email to