Add config service for loading cfg file
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / controller / config / yang / config / vpp_provider / impl / GbpVppProviderInstance.java
index 1124a1d9cf52a68202e0530c0f4bfdfa3a35cdba..32e428a8fa825077631441cc6fc3e63bd9f79565 100644 (file)
@@ -8,31 +8,34 @@
 
 package org.opendaylight.controller.config.yang.config.vpp_provider.impl;
 
-import java.util.concurrent.Future;
-
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-
 import org.opendaylight.controller.config.yang.config.groupbasedpolicy.GroupbasedpolicyInstance;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.adapter.VppRpcServiceImpl;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.config.ConfigurationService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.AddInterfaceToBridgeDomainInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CloneVirtualBridgeDomainOnNodesInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateInterfaceOnNodeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateVirtualBridgeDomainOnNodesInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DelInterfaceFromBridgeDomainInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteInterfaceFromNodeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteVirtualBridgeDomainFromNodesInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CloneVirtualBridgeDomainOnNodesInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.VppAdapterService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.Nonnull;
+import java.util.concurrent.Future;
+
 public class GbpVppProviderInstance implements ClusterSingletonService, VppAdapterService, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(GbpVppProviderInstance.class);
@@ -42,15 +45,24 @@ public class GbpVppProviderInstance implements ClusterSingletonService, VppAdapt
     private final DataBroker dataBroker;
     private final BindingAwareBroker bindingAwareBroker;
     private final ClusterSingletonServiceProvider clusterSingletonService;
+    private final RpcProviderRegistry rpcProviderRegistry;
+    private final String publicInterfaces;
     private ClusterSingletonServiceRegistration singletonServiceRegistration;
+    private VppRpcServiceImpl vppRpcService;
     private VppRenderer renderer;
+    private BindingAwareBroker.RpcRegistration<VppAdapterService> vppRpcServiceRegistration;
+    private ConfigurationService configurationService;
 
     public GbpVppProviderInstance(final DataBroker dataBroker,
                                   final BindingAwareBroker bindingAwareBroker,
-                                  final ClusterSingletonServiceProvider clusterSingletonService) {
+                                  final ClusterSingletonServiceProvider clusterSingletonService,
+                                  final String publicInterfaces, final RpcProviderRegistry rpcProviderRegistry) {
         this.dataBroker = Preconditions.checkNotNull(dataBroker);
         this.bindingAwareBroker = Preconditions.checkNotNull(bindingAwareBroker);
         this.clusterSingletonService = Preconditions.checkNotNull(clusterSingletonService);
+        this.publicInterfaces = publicInterfaces;
+        this.rpcProviderRegistry = Preconditions.checkNotNull(rpcProviderRegistry);
+        configurationService = new ConfigurationService();
     }
 
     public void initialize() {
@@ -61,13 +73,17 @@ public class GbpVppProviderInstance implements ClusterSingletonService, VppAdapt
     @Override
     public void instantiateServiceInstance() {
         LOG.info("Instantiating {}", this.getClass().getSimpleName());
-        renderer = new VppRenderer(dataBroker, bindingAwareBroker);
+        renderer = new VppRenderer(dataBroker, bindingAwareBroker, publicInterfaces);
+        vppRpcService = new VppRpcServiceImpl(dataBroker, renderer);
+        vppRpcServiceRegistration = rpcProviderRegistry.addRpcImplementation(VppAdapterService.class, this);
     }
 
     @Override
     public ListenableFuture<Void> closeServiceInstance() {
         LOG.info("Instance {} closed", this.getClass().getSimpleName());
         try {
+            vppRpcServiceRegistration.close();
+            vppRpcService.close();
             renderer.close();
         } catch (Exception e) {
             LOG.warn("Exception while closing ... {}", e.getMessage());
@@ -89,6 +105,7 @@ public class GbpVppProviderInstance implements ClusterSingletonService, VppAdapt
         }
     }
 
+    @Nonnull
     @Override
     public ServiceGroupIdentifier getIdentifier() {
         return IDENTIFIER;
@@ -96,36 +113,36 @@ public class GbpVppProviderInstance implements ClusterSingletonService, VppAdapt
 
     @Override
     public Future<RpcResult<Void>> deleteVirtualBridgeDomainFromNodes(DeleteVirtualBridgeDomainFromNodesInput input) {
-        return renderer.getVppRpcServiceImpl().deleteVirtualBridgeDomain(input);
+        return vppRpcService.deleteVirtualBridgeDomainFromNodes(input);
     }
 
     @Override
     public Future<RpcResult<Void>> createVirtualBridgeDomainOnNodes(CreateVirtualBridgeDomainOnNodesInput input) {
-        return renderer.getVppRpcServiceImpl().createVirtualBridgeDomain(input);
+        return vppRpcService.createVirtualBridgeDomainOnNodes(input);
     }
 
     @Override
     public Future<RpcResult<Void>> createInterfaceOnNode(CreateInterfaceOnNodeInput input) {
-        return renderer.getVppRpcServiceImpl().createInterfaceOnNodes(input);
+        return vppRpcService.createInterfaceOnNode(input);
     }
 
     @Override
     public Future<RpcResult<Void>> addInterfaceToBridgeDomain(AddInterfaceToBridgeDomainInput input) {
-        return renderer.getVppRpcServiceImpl().addInterfaceToBridgeDomain(input);
+        return vppRpcService.addInterfaceToBridgeDomain(input);
     }
 
     @Override
     public Future<RpcResult<Void>> delInterfaceFromBridgeDomain(DelInterfaceFromBridgeDomainInput input) {
-        return renderer.getVppRpcServiceImpl().delInterfaceFromBridgeDomain(input);
+        return vppRpcService.delInterfaceFromBridgeDomain(input);
     }
 
     @Override
     public Future<RpcResult<Void>> cloneVirtualBridgeDomainOnNodes(CloneVirtualBridgeDomainOnNodesInput input) {
-        return renderer.getVppRpcServiceImpl().cloneVirtualBridgeDomainOnNode(input);
+        return vppRpcService.cloneVirtualBridgeDomainOnNodes(input);
     }
 
     @Override
     public Future<RpcResult<Void>> deleteInterfaceFromNode(DeleteInterfaceFromNodeInput input) {
-        return renderer.getVppRpcServiceImpl().deleteInterfaceFromNodes(input);
+        return vppRpcService.deleteInterfaceFromNode(input);
     }
 }