Refactoring of cisco-xr-driver and impl modules.
[unimgr.git] / cisco-xr-driver / src / main / java / org / opendaylight / unimgr / mef / nrp / cisco / xr / l2vpn / driver / L2vpnXconnectDriverBuilder.java
index ba15346f64b4391a7a7956ae8cb39d25525db525..bc1c2ae9687238ffb0fdb0d2d66616003ede14c4 100644 (file)
@@ -8,34 +8,49 @@
 
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
 
-import java.util.Optional;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
 import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
+import org.opendaylight.unimgr.utils.CapabilitiesService;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnXconnectActivator;
 import org.opendaylight.unimgr.mef.nrp.common.FixedServiceNaming;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 
+import java.util.Optional;
+
+import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF;
+import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
+import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_IFMGR;
+import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_L2VPN;
+
 /**
- * Xconnect builder (FIXME no decision logic yet)
+ * Xconnect builder
  * @author bartosz.michalik@amartus.com
  */
 public class L2vpnXconnectDriverBuilder implements ActivationDriverBuilder {
 
+    private final DataBroker dataBroker;
+
     private final FixedServiceNaming namingProvider;
+
     private L2vpnXconnectActivator xconnectActivator;
 
     public L2vpnXconnectDriverBuilder(DataBroker dataBroker, MountPointService mountPointService) {
+        this.dataBroker = dataBroker;
         xconnectActivator = new L2vpnXconnectActivator(dataBroker, mountPointService);
         namingProvider = new FixedServiceNaming();
     }
 
     @Override
-    public Optional<ActivationDriver> driverFor(FcPort port,BuilderContext _ctx) {
-        return Optional.of(getDriver());
+    public Optional<ActivationDriver> driverFor(FcPort port, BuilderContext _ctx) {
+        if (new CapabilitiesService(dataBroker).nodeByPort(port).isSupporting(AND, NETCONF, NETCONF_CISCO_IOX_IFMGR, NETCONF_CISCO_IOX_L2VPN)) {
+            return Optional.of(getDriver());
+        }
+
+        return Optional.empty();
     }
 
     @Override
@@ -67,7 +82,7 @@ public class L2vpnXconnectDriverBuilder implements ActivationDriverBuilder {
             }
 
             @Override
-            public void activate() {
+            public void activate() throws TransactionCommitFailedException {
                 String id = ctx.getUuid();
                 long mtu = 1500;
                 String outerName = namingProvider.getOuterName(id);
@@ -79,7 +94,7 @@ public class L2vpnXconnectDriverBuilder implements ActivationDriverBuilder {
             }
 
             @Override
-            public void deactivate() {
+            public void deactivate() throws TransactionCommitFailedException {
                 String id = ctx.getUuid();
                 long mtu = 1500;
                 String outerName = namingProvider.getOuterName(id);