Update MRI upstreams for Phosphorus
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / configuration / ConfigurationServiceFactoryOsgiImpl.java
index bd9e1ae540d526911e3ac6b4734663661b27ed50..7f09eaba2e55a364761b190b4b8a01d390c73306 100644 (file)
@@ -8,15 +8,15 @@
 package org.opendaylight.openflowplugin.impl.configuration;
 
 import java.io.IOException;
+import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
-import javax.inject.Inject;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.slf4j.Logger;
@@ -24,46 +24,57 @@ import org.slf4j.LoggerFactory;
 
 // NOT @Singleton @Service - we do not want this OSGi specific implementation to be auto-discovered in a standalone env
 public class ConfigurationServiceFactoryOsgiImpl extends ConfigurationServiceFactoryImpl {
-
     private static final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceFactoryOsgiImpl.class);
 
     private final BundleContext bundleContext;
 
-    @Inject
-    public ConfigurationServiceFactoryOsgiImpl(BundleContext bundleContext) {
+    public ConfigurationServiceFactoryOsgiImpl(final BundleContext bundleContext) {
         this.bundleContext = bundleContext;
     }
 
     @Override
-    public ConfigurationService newInstance(OpenflowProviderConfig providerConfig) {
+    public ConfigurationService newInstance(final OpenflowProviderConfig providerConfig) {
         ConfigurationService cs = super.newInstance(providerConfig);
         update(cs);
         return cs;
     }
 
-    private void update(ConfigurationService configurationService) {
+    private void update(final ConfigurationService configurationService) {
         LOG.info("Loading configuration from '{}' configuration file", OFConstants.CONFIG_FILE_ID);
-        Optional.ofNullable(bundleContext.getServiceReference(ConfigurationAdmin.class)).ifPresent(serviceReference -> {
-            final ConfigurationAdmin configurationAdmin = bundleContext.getService(serviceReference);
+        final ServiceReference<ConfigurationAdmin> serviceReference =
+            bundleContext.getServiceReference(ConfigurationAdmin.class);
+        if (serviceReference == null) {
+            return;
+        }
+        final ConfigurationAdmin configurationAdmin = bundleContext.getService(serviceReference);
+        if (configurationAdmin == null) {
+            return;
+        }
 
+        try {
+            final Configuration configuration;
             try {
-                final Configuration configuration = configurationAdmin.getConfiguration(OFConstants.CONFIG_FILE_ID);
+                configuration = configurationAdmin.getConfiguration(OFConstants.CONFIG_FILE_ID);
+            } catch (IOException e) {
+                LOG.warn("Failed to load {} configuration file", OFConstants.CONFIG_FILE_ID, e);
+                return;
+            }
 
-                Optional.ofNullable(configuration.getProperties()).ifPresent(properties -> {
-                    final Enumeration<String> keys = properties.keys();
-                    final Map<String, String> mapProperties = new HashMap<>(properties.size());
+            final Dictionary<String, Object> properties = configuration.getProperties();
+            if (properties != null) {
+                final Enumeration<String> keys = properties.keys();
+                final Map<String, String> mapProperties = new HashMap<>(properties.size());
 
-                    while (keys.hasMoreElements()) {
-                        final String key = keys.nextElement();
-                        final String value = properties.get(key).toString();
-                        mapProperties.put(key, value);
-                    }
+                while (keys.hasMoreElements()) {
+                    final String key = keys.nextElement();
+                    final String value = properties.get(key).toString();
+                    mapProperties.put(key, value);
+                }
 
-                    configurationService.update(mapProperties);
-                });
-            } catch (IOException e) {
-                LOG.debug("Failed to load {} configuration file. Error {}", OFConstants.CONFIG_FILE_ID, e);
+                configurationService.update(mapProperties);
             }
-        });
+        } finally {
+            bundleContext.ungetService(serviceReference);
+        }
     }
 }