Use config instead of Activator for netvirt and netvirt-providers
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / RouterHandler.java
index cd46ef8c2156577c9a28927f019f0555d2cd6d5f..0b50cfed4bc076bd3831dcde92df428f22da5ba2 100644 (file)
@@ -9,13 +9,16 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
-import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;
-import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
-
+import org.opendaylight.neutron.spi.INeutronRouterAware;
+import org.opendaylight.neutron.spi.NeutronRouter;
+import org.opendaylight.neutron.spi.NeutronRouter_Interface;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
+import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
+import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
+
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -24,17 +27,12 @@ import java.net.HttpURLConnection;
 /**
  * Handle requests for Neutron Router.
  */
-public class RouterHandler extends AbstractHandler
-        implements INeutronRouterAware {
-
-    /**
-     * Logger instance.
-     */
+public class RouterHandler extends AbstractHandler implements INeutronRouterAware, ConfigInterface {
     static final Logger logger = LoggerFactory.getLogger(RouterHandler.class);
 
-    private volatile OvsdbConfigurationService ovsdbConfigurationService;
-    private volatile OvsdbConnectionService connectionService;
-    private volatile OvsdbInventoryListener ovsdbInventoryListener;
+    // The implementation for each of these services is resolved by the OSGi Service Manager
+    private volatile NeutronL3Adapter neutronL3Adapter;
+    private volatile EventDispatcher eventDispatcher;
 
     /**
      * Services provide this interface method to indicate if the specified router can be created
@@ -59,7 +57,7 @@ public class RouterHandler extends AbstractHandler
      */
     @Override
     public void neutronRouterCreated(NeutronRouter router) {
-        logger.debug(" Router created {}, uuid {}", router.getName(), router.getRouterUUID());
+        enqueueEvent(new NorthboundEvent(router, Action.ADD));
     }
 
     /**
@@ -68,7 +66,7 @@ public class RouterHandler extends AbstractHandler
      *
      * @param delta
      *            updates to the router object using patch semantics
-     * @param router
+     * @param original
      *            instance of the Neutron Router object to be updated
      * @return integer
      *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
@@ -88,7 +86,7 @@ public class RouterHandler extends AbstractHandler
      */
     @Override
     public void neutronRouterUpdated(NeutronRouter router) {
-        logger.debug(" Router updated {}", router.getName());
+        enqueueEvent(new NorthboundEvent(router, Action.UPDATE));
     }
 
     /**
@@ -114,7 +112,7 @@ public class RouterHandler extends AbstractHandler
      */
     @Override
     public void neutronRouterDeleted(NeutronRouter router) {
-        logger.debug(" Router deleted {}, uuid {}", router.getName(), router.getRouterUUID());
+        enqueueEvent(new NorthboundEvent(router, Action.DELETE));
     }
 
     /**
@@ -149,8 +147,7 @@ public class RouterHandler extends AbstractHandler
      */
     @Override
     public void neutronRouterInterfaceAttached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        logger.debug(" Router {} interface {} attached. Subnet {}", router.getName(), routerInterface.getPortUUID(),
-                     routerInterface.getSubnetUUID());
+        enqueueEvent(new NorthboundEvent(router, routerInterface, Action.ADD));
     }
 
     /**
@@ -186,7 +183,53 @@ public class RouterHandler extends AbstractHandler
      */
     @Override
     public void neutronRouterInterfaceDetached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        logger.debug(" Router {} interface {} detached. Subnet {}", router.getName(), routerInterface.getPortUUID(),
-                     routerInterface.getSubnetUUID());
+        enqueueEvent(new NorthboundEvent(router, routerInterface, Action.DELETE));
+    }
+
+    /**
+     * Process the event.
+     *
+     * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
+     * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
+     */
+    @Override
+    public void processEvent(AbstractEvent abstractEvent) {
+        if (!(abstractEvent instanceof NorthboundEvent)) {
+            logger.error("Unable to process abstract event " + abstractEvent);
+            return;
+        }
+        NorthboundEvent ev = (NorthboundEvent) abstractEvent;
+        switch (ev.getAction()) {
+            case ADD:
+                // fall through
+            case DELETE:
+                // fall through
+            case UPDATE:
+                if (ev.getRouterInterface() == null) {
+                    neutronL3Adapter.handleNeutronRouterEvent(ev.getRouter(), ev.getAction());
+                } else {
+                    neutronL3Adapter.handleNeutronRouterInterfaceEvent(ev.getRouter(),
+                                                                      ev.getRouterInterface(),
+                                                                      ev.getAction());
+                }
+                break;
+            default:
+                logger.warn("Unable to process event action " + ev.getAction());
+                break;
+        }
     }
+
+    @Override
+    public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
+        neutronL3Adapter =
+                (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this);
+        eventDispatcher =
+                (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this);
+        eventDispatcher.eventHandlerAdded(
+                bundleContext.getServiceReference(INeutronRouterAware.class.getName()), this);
+        super.setDispatcher(eventDispatcher);
+    }
+
+    @Override
+    public void setDependencies(Object impl) {}
 }