Refactor Activator

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

Branch: refs/heads/master
Commit: e80bfa7f671668cc83c59becd02d935af3861acd
Parents: 39440e8
Author: Christian Schneider <[email protected]>
Authored: Wed May 17 10:19:59 2017 +0200
Committer: Christian Schneider <[email protected]>
Committed: Thu May 18 11:37:09 2017 +0200

----------------------------------------------------------------------
 .../karaf/features/internal/osgi/Activator.java | 132 +++++++++++--------
 1 file changed, 76 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/e80bfa7f/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index 8abd82b..3280477 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -58,7 +58,6 @@ import 
org.eclipse.equinox.internal.region.StandardRegionDigraph;
 import 
org.eclipse.equinox.internal.region.management.StandardManageableRegionDigraph;
 import org.eclipse.equinox.region.RegionDigraph;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.hooks.bundle.CollisionHook;
 import org.osgi.framework.hooks.resolver.ResolverHookFactory;
@@ -120,6 +119,7 @@ public class Activator extends BaseActivator {
     }
 
     protected void doStart() throws Exception {
+        BundleContext systemBundleContext = 
bundleContext.getBundle(0).getBundleContext();
         ConfigurationAdmin configurationAdmin = 
getTrackedService(ConfigurationAdmin.class);
         Resolver resolver = new ResolverImpl(new 
Slf4jResolverLog(LoggerFactory.getLogger(ResolverImpl.class)));
         URLStreamHandlerService mvnUrlHandler = 
getTrackedService(URLStreamHandlerService.class);
@@ -128,24 +128,58 @@ public class Activator extends BaseActivator {
             return;
         }
 
-        // RegionDigraph
         StandardRegionDigraph dg = DigraphHelper.loadDigraph(bundleContext);
-        register(ResolverHookFactory.class, dg.getResolverHookFactory());
-        register(CollisionHook.class, 
CollisionHookHelper.getCollisionHook(dg));
-        register(org.osgi.framework.hooks.bundle.FindHook.class, 
dg.getBundleFindHook());
-        register(org.osgi.framework.hooks.bundle.EventHook.class, 
dg.getBundleEventHook());
-        register(org.osgi.framework.hooks.service.FindHook.class, 
dg.getServiceFindHook());
-        register(org.osgi.framework.hooks.service.EventHook.class, 
dg.getServiceEventHook());
-        register(RegionDigraph.class, dg);
-
-        if (getBoolean("digraphMBean", FeaturesService.DEFAULT_DIGRAPH_MBEAN)) 
{
-            StandardManageableRegionDigraph dgmb = digraphMBean = new 
StandardManageableRegionDigraph(dg, "org.apache.karaf", bundleContext);
-            dgmb.registerMBean();
-        }
+        registerRegionDiGraph(dg);
+        boolean configCfgStore = getBoolean("configCfgStore", 
FeaturesService.DEFAULT_CONFIG_CFG_STORE);
+        FeatureConfigInstaller configInstaller = configurationAdmin != null ? 
new FeatureConfigInstaller(configurationAdmin, configCfgStore) : null;
+        installSupport = new BundleInstallSupportImpl(
+                    bundleContext.getBundle(),
+                    bundleContext,
+                    systemBundleContext,
+                    configInstaller,
+                    dg);
+        register(RegionDigraphPersistence.class, () -> 
installSupport.saveState());
 
         FeatureRepoFinder featureFinder = new FeatureRepoFinder();
         register(ManagedService.class, featureFinder, 
FeatureRepoFinder.getServiceProperties());
 
+        Repository globalRepository = getGlobalRepository();
+        FeaturesServiceConfig cfg = getConfig();
+        StateStorage stateStorage = createStateStorage();
+        featuresService = new FeaturesServiceImpl(
+                stateStorage,
+                featureFinder,
+                configurationAdmin,
+                resolver,
+                installSupport,
+                globalRepository,
+                cfg);
+        try {
+            EventAdminListener eventAdminListener = new 
EventAdminListener(bundleContext);
+            featuresService.registerListener(eventAdminListener);
+        } catch (Throwable t) {
+            // No EventAdmin support in this case 
+        }
+        register(FeaturesService.class, featuresService);
+
+        featuresListenerTracker = createFeatureListenerTracker();
+        featuresListenerTracker.open();
+
+        FeaturesServiceMBeanImpl featuresServiceMBean = new 
FeaturesServiceMBeanImpl();
+        featuresServiceMBean.setBundleContext(bundleContext);
+        featuresServiceMBean.setFeaturesService(featuresService);
+        registerMBean(featuresServiceMBean, "type=feature");
+
+        String[] featuresRepositories = getStringArray("featuresRepositories", 
"");
+        String featuresBoot = getString("featuresBoot", "");
+        boolean featuresBootAsynchronous = 
getBoolean("featuresBootAsynchronous", false);
+        BootFeaturesInstaller bootFeaturesInstaller = new 
BootFeaturesInstaller(
+                bundleContext, featuresService,
+                featuresRepositories, featuresBoot, featuresBootAsynchronous);
+        bootFeaturesInstaller.start();
+    }
+
+    private Repository getGlobalRepository() {
         List<Repository> repositories = new ArrayList<>();
         String[] resourceRepositories = getStringArray("resourceRepositories", 
"");
         long repositoryExpiration = getLong("repositoryExpiration", 
FeaturesService.DEFAULT_REPOSITORY_EXPIRATION);
@@ -174,7 +208,10 @@ public class Activator extends BaseActivator {
             globalRepository = new AggregateRepository(repositories);
             break;
         }
+        return globalRepository;
+    }
 
+    private FeaturesServiceConfig getConfig() {
         FeaturesServiceConfig cfg = new FeaturesServiceConfig();
         cfg.overrides = getString("overrides", new 
File(System.getProperty("karaf.etc"), 
"overrides.properties").toURI().toString());
         cfg.featureResolutionRange = getString("featureResolutionRange", 
FeaturesService.DEFAULT_FEATURE_RESOLUTION_RANGE);
@@ -185,7 +222,10 @@ public class Activator extends BaseActivator {
         cfg.scheduleMaxRun = getInt("scheduleMaxRun", 
FeaturesService.DEFAULT_SCHEDULE_MAX_RUN);
         cfg.blacklisted = getString("blacklisted", new 
File(System.getProperty("karaf.etc"), 
"blacklisted.properties").toURI().toString());
         cfg.serviceRequirements = getString("serviceRequirements", 
FeaturesService.SERVICE_REQUIREMENTS_DEFAULT);
-        boolean configCfgStore = getBoolean("configCfgStore", 
FeaturesService.DEFAULT_CONFIG_CFG_STORE);
+        return cfg;
+    }
+
+    private StateStorage createStateStorage() {
         StateStorage stateStorage = new StateStorage() {
             @Override
             protected InputStream getInputStream() throws IOException {
@@ -196,40 +236,34 @@ public class Activator extends BaseActivator {
                     return null;
                 }
             }
-
+    
             @Override
             protected OutputStream getOutputStream() throws IOException {
                 File file = bundleContext.getDataFile(STATE_FILE);
                 return new FileOutputStream(file);
             }
         };
-        BundleContext systemBundleContext = 
bundleContext.getBundle(0).getBundleContext();
-        FeatureConfigInstaller configInstaller = configurationAdmin != null ? 
new FeatureConfigInstaller(configurationAdmin, configCfgStore) : null;
-        installSupport = new BundleInstallSupportImpl(
-                    bundleContext.getBundle(),
-                    bundleContext,
-                    systemBundleContext,
-                    configInstaller,
-                    dg);
-        register(RegionDigraphPersistence.class, () -> 
installSupport.saveState());
-        featuresService = new FeaturesServiceImpl(
-                stateStorage,
-                featureFinder,
-                configurationAdmin,
-                resolver,
-                installSupport,
-                globalRepository,
-                cfg);
+        return stateStorage;
+    }
+
+    @SuppressWarnings("deprecation")
+    private void registerRegionDiGraph(StandardRegionDigraph dg) {
+        register(ResolverHookFactory.class, dg.getResolverHookFactory());
+        register(CollisionHook.class, 
CollisionHookHelper.getCollisionHook(dg));
+        register(org.osgi.framework.hooks.bundle.FindHook.class, 
dg.getBundleFindHook());
+        register(org.osgi.framework.hooks.bundle.EventHook.class, 
dg.getBundleEventHook());
+        register(org.osgi.framework.hooks.service.FindHook.class, 
dg.getServiceFindHook());
+        register(org.osgi.framework.hooks.service.EventHook.class, 
dg.getServiceEventHook());
+        register(RegionDigraph.class, dg);
         
-        try {
-            EventAdminListener eventAdminListener = new 
EventAdminListener(bundleContext);
-            featuresService.registerListener(eventAdminListener);
-        } catch (Throwable t) {
-            // No EventAdmin support in this case 
+        if (getBoolean("digraphMBean", FeaturesService.DEFAULT_DIGRAPH_MBEAN)) 
{
+            StandardManageableRegionDigraph dgmb = digraphMBean = new 
StandardManageableRegionDigraph(dg, "org.apache.karaf", bundleContext);
+            dgmb.registerMBean();
         }
-        register(FeaturesService.class, featuresService);
+    }
 
-        featuresListenerTracker = new ServiceTracker<>(
+    private ServiceTracker<FeaturesListener, FeaturesListener> 
createFeatureListenerTracker() {
+        return new ServiceTracker<>(
                 bundleContext,
                 FeaturesListener.class,
                 new ServiceTrackerCustomizer<FeaturesListener, 
FeaturesListener>() {
@@ -239,11 +273,11 @@ public class Activator extends BaseActivator {
                         featuresService.registerListener(service);
                         return service;
                     }
-
+    
                     @Override
                     public void 
modifiedService(ServiceReference<FeaturesListener> reference, FeaturesListener 
service) {
                     }
-
+    
                     @Override
                     public void 
removedService(ServiceReference<FeaturesListener> reference, FeaturesListener 
service) {
                         featuresService.unregisterListener(service);
@@ -251,20 +285,6 @@ public class Activator extends BaseActivator {
                     }
                 }
         );
-        featuresListenerTracker.open();
-
-        FeaturesServiceMBeanImpl featuresServiceMBean = new 
FeaturesServiceMBeanImpl();
-        featuresServiceMBean.setBundleContext(bundleContext);
-        featuresServiceMBean.setFeaturesService(featuresService);
-        registerMBean(featuresServiceMBean, "type=feature");
-
-        String[] featuresRepositories = getStringArray("featuresRepositories", 
"");
-        String featuresBoot = getString("featuresBoot", "");
-        boolean featuresBootAsynchronous = 
getBoolean("featuresBootAsynchronous", false);
-        BootFeaturesInstaller bootFeaturesInstaller = new 
BootFeaturesInstaller(
-                bundleContext, featuresService,
-                featuresRepositories, featuresBoot, featuresBootAsynchronous);
-        bootFeaturesInstaller.start();
     }
 
     protected void doStop() {

Reply via email to