X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FBundleContextBackedModuleFactoriesResolver.java;h=e9af46819f9147323acaff3bd9ddd14cda8a756e;hb=493c4f70a0a315d77927e4c0d90a90acbbcb2897;hp=e8639d588197c146483b434fd83b4fb653a32c49;hpb=ebb4158697741bc88fde22ac5f75edf65869506f;p=controller.git diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/BundleContextBackedModuleFactoriesResolver.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/BundleContextBackedModuleFactoriesResolver.java index e8639d5881..e9af46819f 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/BundleContextBackedModuleFactoriesResolver.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/BundleContextBackedModuleFactoriesResolver.java @@ -8,14 +8,12 @@ package org.opendaylight.controller.config.manager.impl.osgi; import java.util.AbstractMap; -import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import org.opendaylight.controller.config.manager.impl.factoriesresolver.ModuleFactoriesResolver; import org.opendaylight.controller.config.spi.ModuleFactory; import org.osgi.framework.BundleContext; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,42 +24,27 @@ public class BundleContextBackedModuleFactoriesResolver implements ModuleFactoriesResolver { private static final Logger LOG = LoggerFactory .getLogger(BundleContextBackedModuleFactoriesResolver.class); - private final BundleContext bundleContext; + private ModuleFactoryBundleTracker moduleFactoryBundleTracker; - public BundleContextBackedModuleFactoriesResolver( - BundleContext bundleContext) { - this.bundleContext = bundleContext; + public BundleContextBackedModuleFactoriesResolver() { + } + + public void setModuleFactoryBundleTracker(ModuleFactoryBundleTracker moduleFactoryBundleTracker) { + this.moduleFactoryBundleTracker = moduleFactoryBundleTracker; } @Override public Map> getAllFactories() { - Collection> serviceReferences; - try { - serviceReferences = bundleContext.getServiceReferences( - ModuleFactory.class, null); - } catch (InvalidSyntaxException e) { - throw new IllegalStateException(e); - } - Map> result = new HashMap<>(serviceReferences.size()); - for (ServiceReference serviceReference : serviceReferences) { - ModuleFactory factory = bundleContext.getService(serviceReference); - // null if the service is not registered, the service object - // returned by a ServiceFactory does not - // implement the classes under which it was registered or the - // ServiceFactory threw an exception. - if(factory == null) { - throw new NullPointerException("ServiceReference of class" + serviceReference.getClass() + "not found."); - } - - String moduleName = factory.getImplementationName(); + Map> result = new HashMap<>(); + for(Entry entry: moduleFactoryBundleTracker.getModuleFactoryEntries()) { + ModuleFactory factory = entry.getKey(); + BundleContext bundleContext = entry.getValue(); + String moduleName = factory .getImplementationName(); if (moduleName == null || moduleName.isEmpty()) { - throw new IllegalStateException( - "Invalid implementation name for " + factory); - } - if (serviceReference.getBundle() == null || serviceReference.getBundle().getBundleContext() == null) { - throw new NullPointerException("Bundle context of " + factory + " ModuleFactory not found."); + throw new IllegalStateException("Invalid implementation name for " + factory); } - LOG.debug("Reading factory {} {}", moduleName, factory); + + LOG.debug("Processing factory {} {}", moduleName, factory); Map.Entry conflicting = result.get(moduleName); if (conflicting != null) { @@ -71,10 +54,10 @@ public class BundleContextBackedModuleFactoriesResolver implements LOG.error(error); throw new IllegalArgumentException(error); } else { - result.put(moduleName, new AbstractMap.SimpleImmutableEntry<>(factory, - serviceReference.getBundle().getBundleContext())); + result.put(moduleName, new AbstractMap.SimpleImmutableEntry<>(factory, bundleContext)); } } + return result; } }