Merge branch 'topic/master/neutron-yang-migration' to branch 'master'
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / impl / OvsdbInventoryServiceImpl.java
index 509b221e1abba7f249cf07fdb0c67dfbd229b3af..60388974f223e4af40a731c5a9f140e4b09eca8f 100644 (file)
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
 import com.google.common.collect.Sets;
-import java.net.InetAddress;
-import java.util.List;
+
 import java.util.Set;
-import org.apache.felix.dm.Component;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronFloatingIPChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronNetworkChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronPortChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronRouterChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolMemberChangeListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
- * MdsalConsumerImpl is the implementation for {@link OvsdbInventoryService}
+ * OvsdbInventoryServiceImpl is the implementation for {@link OvsdbInventoryService}
  *
  * @author Sam Hague (shague@redhat.com)
  */
-public class OvsdbInventoryServiceImpl implements BindingAwareConsumer, OvsdbInventoryService {
+public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventoryService {
     private static final Logger LOG = LoggerFactory.getLogger(OvsdbInventoryServiceImpl.class);
     private static DataBroker dataBroker = null;
-
-    private static Set<OvsdbInventoryListener> mdsalConsumerListeners = Sets.newCopyOnWriteArraySet();
+    private static Set<OvsdbInventoryListener> ovsdbInventoryListeners = Sets.newCopyOnWriteArraySet();
     private OvsdbDataChangeListener ovsdbDataChangeListener = null;
     private static MdsalUtils mdsalUtils = null;
-    private volatile BindingAwareBroker broker; // dependency injection
-    private ConsumerContext consumerContext = null;
-
-    void init(Component c) {
-        LOG.info(">>>>> init OvsdbInventoryServiceImpl");
-        LOG.info(">>>>> Netvirt Provider Registered with MD-SAL");
-        broker.registerConsumer(this, c.getDependencyManager().getBundleContext());
-    }
 
-    void start() {
-        LOG.info(">>>>> start OvsdbInventoryServiceImpl");
-    }
-
-    void destroy() {
-        // Now lets close MDSAL session
-        if (this.consumerContext != null) {
-            //this.consumerContext.close();
-            this.dataBroker = null;
-            this.consumerContext = null;
-        }
-    }
-    @Override
-    public void onSessionInitialized (ConsumerContext consumerContext) {
-        this.consumerContext = consumerContext;
-        dataBroker = consumerContext.getSALService(DataBroker.class);
-        LOG.info("netvirt MdsalConsumer initialized");
+    public OvsdbInventoryServiceImpl(ProviderContext providerContext) {
+        dataBroker = providerContext.getSALService(DataBroker.class);
+        LOG.info("OvsdbInventoryServiceImpl initialized");
         ovsdbDataChangeListener = new OvsdbDataChangeListener(dataBroker);
         mdsalUtils = new MdsalUtils(dataBroker);
     }
 
-    //@Override
-    public static DataBroker getDataBroker () {
-        return dataBroker;
-    }
-
-    private void listenerAdded(OvsdbInventoryListener listener) {
-        mdsalConsumerListeners.add(listener);
+    @Override
+    public void listenerAdded(OvsdbInventoryListener listener) {
+        ovsdbInventoryListeners.add(listener);
         LOG.info("listenerAdded: {}", listener);
     }
 
-    private void listenerRemoved(OvsdbInventoryListener listener) {
-        mdsalConsumerListeners.remove(listener);
+    @Override
+    public void listenerRemoved(OvsdbInventoryListener listener) {
+        ovsdbInventoryListeners.remove(listener);
         LOG.info("listenerRemoved: {}", listener);
     }
 
-    public InetAddress getTunnelEndPoint(Node node) {
-        return null;
+    @Override
+    public void providersReady() {
+        ovsdbDataChangeListener.start();
+        initializeNeutronModelsDataChangeListeners(dataBroker);
+        initializeNetvirtTopology();
     }
 
-    public String getNodeUUID(Node node) {
-        return null;
+    public static Set<OvsdbInventoryListener> getOvsdbInventoryListeners() {
+        return ovsdbInventoryListeners;
     }
 
     @Override
-    public String getBridgeUUID(String bridgeName) {
-        return null;
+    public void setDependencies(ServiceReference serviceReference) {}
+
+    @Override
+    public void setDependencies(Object impl) {}
+
+    private void initializeNetvirtTopology() {
+        final TopologyId topologyId = new TopologyId(new Uri(Constants.NETVIRT_TOPOLOGY_ID));
+        InstanceIdentifier<Topology> path =
+                InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(topologyId));
+        TopologyBuilder tpb = new TopologyBuilder();
+        tpb.setTopologyId(topologyId);
+        if (! mdsalUtils.put(LogicalDatastoreType.OPERATIONAL, path, tpb.build())) {
+            LOG.error("Error initializing netvirt topology");
+        }
     }
 
-    public static Set<OvsdbInventoryListener> getMdsalConsumerListeners () {
-        return mdsalConsumerListeners;
+    private void initializeNeutronModelsDataChangeListeners(
+            DataBroker db) {
+        new NeutronNetworkChangeListener(db);
+        new NeutronSubnetChangeListener(db);
+        new NeutronPortChangeListener(db);
+        new NeutronRouterChangeListener(db);
+        new NeutronFloatingIPChangeListener(db);
+        new NeutronLoadBalancerPoolChangeListener(db);
+        new NeutronLoadBalancerPoolMemberChangeListener(db);
     }
+
 }