Refactor AbstractBrokerAwareActivator
[controller.git] / opendaylight / md-sal / sal-binding-api / src / main / java / org / opendaylight / controller / sal / binding / api / AbstractBrokerAwareActivator.java
index b62e4529f341f76a53d522f49dd4f935e781887d..1bfd67671a06036fb8565a64281d4222527c18f8 100644 (file)
@@ -7,72 +7,70 @@
  */
 package org.opendaylight.controller.sal.binding.api;
 
+import static java.util.Objects.requireNonNull;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
+@Deprecated
 public abstract class AbstractBrokerAwareActivator implements BundleActivator {
+    private final class Customizer implements ServiceTrackerCustomizer<BindingAwareBroker, BindingAwareBroker> {
+        private final BundleContext context;
 
-    private static final ExecutorService mdActivationPool = Executors.newCachedThreadPool();
-    private BundleContext context;
-    private ServiceTracker<BindingAwareBroker, BindingAwareBroker> tracker;
-    private BindingAwareBroker broker;
-    private ServiceTrackerCustomizer<BindingAwareBroker, BindingAwareBroker> customizer = new ServiceTrackerCustomizer<BindingAwareBroker, BindingAwareBroker>() {
+        Customizer(final BundleContext context) {
+            this.context = requireNonNull(context);
+        }
 
         @Override
-        public BindingAwareBroker addingService(ServiceReference<BindingAwareBroker> reference) {
-            broker = context.getService(reference);
-            mdActivationPool.execute(new Runnable() {
-
-                @Override
-                public void run() {
-                    onBrokerAvailable(broker, context);
-                }
-            });
+        public BindingAwareBroker addingService(final ServiceReference<BindingAwareBroker> reference) {
+            final BindingAwareBroker broker = context.getService(reference);
+            MD_ACTIVATION_POOL.execute(() -> onBrokerAvailable(broker, context));
             return broker;
         }
 
         @Override
-        public void modifiedService(ServiceReference<BindingAwareBroker> reference, BindingAwareBroker service) {
-            // TODO Auto-generated method stub
-
+        public void modifiedService(final ServiceReference<BindingAwareBroker> reference,
+                final BindingAwareBroker service) {
+            removedService(reference, service);
+            addingService(reference);
         }
 
         @Override
-        public void removedService(ServiceReference<BindingAwareBroker> reference, BindingAwareBroker service) {
-            // TODO Auto-generated method stub
-
+        public void removedService(final ServiceReference<BindingAwareBroker> reference,
+                final BindingAwareBroker service) {
+            final BindingAwareBroker broker = context.getService(reference);
+            MD_ACTIVATION_POOL.execute(() -> onBrokerRemoved(broker, context));
         }
+    }
 
-    };
+    private static final ExecutorService MD_ACTIVATION_POOL = Executors.newCachedThreadPool();
 
+    private ServiceTracker<BindingAwareBroker, BindingAwareBroker> tracker;
 
     @Override
-    public final void start(BundleContext context) throws Exception {
-        this.context = context;
-        startImpl(context);
-        tracker = new ServiceTracker<>(context, BindingAwareBroker.class, customizer);
+    public final void start(final BundleContext bundleContext) {
+        startImpl(bundleContext);
+        tracker = new ServiceTracker<>(bundleContext, BindingAwareBroker.class, new Customizer(bundleContext));
         tracker.open();
-
     }
 
-
-
     @Override
-    public final  void stop(BundleContext context) throws Exception {
-        tracker.close();
-        stopImpl(context);
+    public final void stop(final BundleContext bundleContext) {
+        if (tracker != null) {
+            tracker.close();
+        }
+        stopImpl(bundleContext);
     }
 
-
     /**
      * Called when this bundle is started (before
-     * {@link #onSessionInitiated(ProviderContext)} so the Framework can perform
+     * {@link BindingAwareProvider#onSessionInitiated(ProviderContext)} so the Framework can perform
      * the bundle-specific activities necessary to start this bundle. This
      * method can be used to register services or to allocate any resources that
      * this bundle needs.
@@ -80,15 +78,15 @@ public abstract class AbstractBrokerAwareActivator implements BundleActivator {
      * <p>
      * This method must complete and return to its caller in a timely manner.
      *
-     * @param context
+     * @param bundleContext
      *            The execution context of the bundle being started.
-     * @throws Exception
+     * @throws RuntimeException
      *             If this method throws an exception, this bundle is marked as
      *             stopped and the Framework will remove this bundle's
      *             listeners, unregister all services registered by this bundle,
      *             and release all services used by this bundle.
      */
-    protected void startImpl(BundleContext context) {
+    protected void startImpl(final BundleContext bundleContext) {
         // NOOP
     }
 
@@ -103,20 +101,19 @@ public abstract class AbstractBrokerAwareActivator implements BundleActivator {
      * <p>
      * This method must complete and return to its caller in a timely manner.
      *
-     * @param context The execution context of the bundle being stopped.
-     * @throws Exception If this method throws an exception, the bundle is still
+     * @param bundleContext The execution context of the bundle being stopped.
+     * @throws RuntimeException If this method throws an exception, the bundle is still
      *         marked as stopped, and the Framework will remove the bundle's
      *         listeners, unregister all services registered by the bundle, and
      *         release all services used by the bundle.
      */
-    protected void stopImpl(BundleContext context) {
+    protected void stopImpl(final BundleContext bundleContext) {
         // NOOP
     }
 
+    protected abstract void onBrokerAvailable(BindingAwareBroker bindingBroker, BundleContext bundleContext);
 
-    protected abstract void onBrokerAvailable(BindingAwareBroker broker, BundleContext context);
-
-    protected void onBrokerRemoved(BindingAwareBroker broker, BundleContext context) {
-
+    protected void onBrokerRemoved(final BindingAwareBroker bindingBroker, final BundleContext bundleContext) {
+        stopImpl(bundleContext);
     }
 }