Bug-2827: role switch proposal
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / yang / gen / v1 / urn / opendaylight / params / xml / ns / yang / openflow / common / config / impl / rev140326 / ConfigurableOpenFlowProviderModule.java
index d518391baf761737ae82f6261bbef6f33883dcc9..fdd9470ba7b3d69d01a1117df17f70b2232d86b2 100644 (file)
@@ -11,6 +11,8 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflo
 
 import org.opendaylight.openflowplugin.openflow.md.core.sal.OpenflowPluginProvider;
 
+import com.google.common.base.Objects;
+
 /**
 *
 */
@@ -48,7 +50,27 @@ public final class ConfigurableOpenFlowProviderModule extends org.opendaylight.y
         pluginProvider =  new OpenflowPluginProvider();
         pluginProvider.setBroker(getBindingAwareBrokerDependency());
         pluginProvider.setSwitchConnectionProviders(getOpenflowSwitchConnectionProviderDependency());
+        pluginProvider.setRole(getRole());
         pluginProvider.initialization();
         return pluginProvider;
     }
+
+    @Override
+    public boolean canReuseInstance(
+            AbstractConfigurableOpenFlowProviderModule oldModule) {
+        // we can reuse if only the role field changed
+        boolean noChangeExceptRole = true;
+        noChangeExceptRole &= getBindingAwareBrokerDependency().equals(oldModule.getBindingAwareBrokerDependency());
+        noChangeExceptRole &= getOpenflowSwitchConnectionProviderDependency().equals(oldModule.getOpenflowSwitchConnectionProviderDependency());
+        return noChangeExceptRole;
+    }
+
+    @Override
+    public AutoCloseable reuseInstance(AutoCloseable oldInstance) {
+        OpenflowPluginProvider recycled = (OpenflowPluginProvider) super.reuseInstance(oldInstance);
+        // change role if different
+        recycled.fireRoleChange(Objects.firstNonNull(getRole(), getRole()));
+
+        return recycled;
+    }
 }