Add SfcClassifier to pipeline
[ovsdb.git] / openstack / net-virt-sfc / impl / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / sfc / NetvirtSfcProvider.java
index 144514f9df74da5b8b09c736613b2f3ab28cf374..b967b759aaab1906912be4df60cf904dd37d5a42 100644 (file)
@@ -8,37 +8,50 @@
 
 package org.opendaylight.ovsdb.openstack.netvirt.sfc;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.INetvirtSfcOF13Provider;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.NetvirtSfcOF13Provider;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.services.SfcClassifierService;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(NetvirtSfcProvider.class);
-    private DataBroker dataBroker = null;
-    private BundleContext bundleContext = null;
     private NetvirtSfcAclListener aclListener;
-
     private NetvirtSfcClassifierListener classfierListener;
-    private INetvirtSfcOF13Provider provider;
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+        LOG.info("bundleContext is: {}", bundleContext);
+    }
+
+    private BundleContext bundleContext;
 
     public NetvirtSfcProvider(BundleContext bundleContext) {
-        LOG.info("NetvirtProvider: bundleContext: {}", bundleContext);
+        LOG.info("NetvirtSfcProvider: bundleContext: {}", bundleContext);
         this.bundleContext = bundleContext;
     }
 
     @Override
     public void onSessionInitiated(ProviderContext session) {
         LOG.info("NetvirtSfcProvider Session Initiated");
-        dataBroker = session.getSALService(DataBroker.class);
+        DataBroker dataBroker = session.getSALService(DataBroker.class);
+
+        INetvirtSfcOF13Provider provider = new NetvirtSfcOF13Provider(dataBroker);
+        aclListener = new NetvirtSfcAclListener(provider, dataBroker);
+        classfierListener = new NetvirtSfcClassifierListener(provider, dataBroker);
 
-        provider = new NetvirtSfcOF13Provider(this.dataBroker);
-        aclListener = new NetvirtSfcAclListener(provider, this.dataBroker);
-        classfierListener = new NetvirtSfcClassifierListener(provider, this.dataBroker);
+        addToPipeline();
     }
 
     @Override
@@ -47,4 +60,27 @@ public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
         aclListener.close();
         classfierListener.close();
     }
+
+    private void addToPipeline() {
+        SfcClassifierService sfcClassifierService = new SfcClassifierService();
+        registerService(bundleContext, SfcClassifierService.class.getName(),
+                        sfcClassifierService, Service.SFC_CLASSIFIER);
+        sfcClassifierService.setDependencies(bundleContext, null);
+        }
+
+    private ServiceRegistration<?> registerService(BundleContext bundleContext, String[] interfaces,
+                                                   Dictionary<String, Object> properties, Object impl) {
+        ServiceRegistration<?> serviceRegistration = bundleContext.registerService(interfaces, impl, properties);
+        return serviceRegistration;
+    }
+
+    private ServiceRegistration<?> registerService(BundleContext bundleContext, String interfaceClassName,
+                                                       Object impl, Object serviceProperty) {
+        Dictionary<String, Object> properties = new Hashtable<>();
+        properties.put(AbstractServiceInstance.SERVICE_PROPERTY, serviceProperty);
+        properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+        return registerService(bundleContext,
+                new String[] {AbstractServiceInstance.class.getName(),
+                interfaceClassName}, properties, impl);
+    }
 }