Cleanup RequestContextStack
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / rpc / RpcManagerImpl.java
index e9d99366d4c2f08b2de685306d7d31ef39208ad2..a619261a1ab4f8448bf6811c0d10f6b8ce1d7bbb 100644 (file)
@@ -7,32 +7,36 @@
  */
 package org.opendaylight.openflowplugin.impl.rpc;
 
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
-import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
+import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcManager;
 import org.opendaylight.openflowplugin.impl.util.MdSalRegistratorUtils;
 
 public class RpcManagerImpl implements RpcManager {
 
-    private DeviceContext deviceContext;
+    private final RpcProviderRegistry rpcProviderRegistry;
+    private DeviceInitializationPhaseHandler deviceInitPhaseHandler;
+    private final Long maxRequestsQuota;
 
+    public RpcManagerImpl(final RpcProviderRegistry rpcProviderRegistry,
+                          final Long quotaValue) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+        maxRequestsQuota = quotaValue;
+    }
 
-    private final ProviderContext providerContext;
-
-    public RpcManagerImpl(final ProviderContext providerContext) {
-        this.providerContext = providerContext;
+    @Override
+    public void setDeviceInitializationPhaseHandler(final DeviceInitializationPhaseHandler handler) {
+        deviceInitPhaseHandler = handler;
     }
 
-    /**
-     * (non-Javadoc)
-     *
-     * @see org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceContextReadyHandler#deviceConnected(org.opendaylight.openflowplugin.api.openflow.device.DeviceContext, org.opendaylight.openflowplugin.api.openflow.device.RequestContext)
-     */
     @Override
-    public void deviceConnected(final DeviceContext deviceContext, final RequestContext requestContext) {
-        final RpcContext rpcContext = new RpcContextImpl(providerContext, deviceContext);
+    public void onDeviceContextLevelUp(final DeviceContext deviceContext) {
+        final RpcContext rpcContext = new RpcContextImpl(deviceContext.getMessageSpy(), rpcProviderRegistry, deviceContext.getDeviceState().getNodeInstanceIdentifier(), maxRequestsQuota.intValue());
+        deviceContext.setDeviceDisconnectedHandler(rpcContext);
         MdSalRegistratorUtils.registerServices(rpcContext, deviceContext);
+        // finish device initialization cycle back to DeviceManager
+        deviceInitPhaseHandler.onDeviceContextLevelUp(deviceContext);
     }
 }