Cleanup ConfigurationServiceFactoryOsgiImpl 57/94357/6
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 3 Jan 2021 10:36:26 +0000 (11:36 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 3 Jan 2021 12:32:02 +0000 (13:32 +0100)
Do not use Optional.ofNullable() for null checks and also properly
unget service after use.

Change-Id: I0360904dcec7ee25d6702a943f2d6782540a79c0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/configuration/ConfigurationServiceFactoryOsgiImpl.java

index 1d365b4dd1098e6d0edd8a5b27a70b6634902bd7..7f09eaba2e55a364761b190b4b8a01d390c73306 100644 (file)
@@ -8,14 +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 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;
@@ -23,45 +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;
 
-    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", OFConstants.CONFIG_FILE_ID);
+                configurationService.update(mapProperties);
             }
-        });
+        } finally {
+            bundleContext.ungetService(serviceReference);
+        }
     }
 }