Fix comparison of required and available capabilities 29/48829/1
authorMichal Rehak <mirehak@cisco.com>
Wed, 30 Nov 2016 14:14:53 +0000 (15:14 +0100)
committerMichal Rehak <mirehak@cisco.com>
Wed, 30 Nov 2016 14:18:27 +0000 (15:18 +0100)
    - upon netconf node capabilities are compared. But
      because of model change in netconf available
      capabilities are no longer plain list of strings.
      Currently netconf provides a AvailableCapability
      object with additional leaves and string names
      must be extracted first and then compared.

Change-Id: Ia4e17a55cc8ab04714fb5b53a882e148593089ad
Signed-off-by: Michal Rehak <mirehak@cisco.com>
sfc-renderers/sfc-ios-xe-renderer/src/main/java/org/opendaylight/sfc/sfc_ios_xe/provider/renderer/NodeManager.java
sfc-renderers/sfc-ios-xe-renderer/src/main/java/org/opendaylight/sfc/sfc_ios_xe/provider/utils/IosXeDataStoreAPI.java

index 6621009c6ef09bc9dd190e686966998b4979e44d..5f04a0534f657cad7e08843bd1830c1f580e54a2 100644 (file)
@@ -15,17 +15,19 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPoint;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.sfc.sfc_ios_xe.provider.listener.NodeListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
@@ -103,8 +105,11 @@ public class NodeManager implements BindingAwareProvider {
             return false;
         }
         AvailableCapabilities capabilities = netconfAugmentation.getAvailableCapabilities();
-        return capabilities != null && capabilities.getAvailableCapability()
-                .containsAll(requiredCapabilities);
+        return capabilities != null &&
+                capabilities.getAvailableCapability().stream()
+                        .map(AvailableCapability::getCapability)
+                        .collect(Collectors.toList())
+                        .containsAll(requiredCapabilities);
     }
 
     private DataBroker getNetconfNodeDataBroker(InstanceIdentifier mountPointIid) {
index 679934085d66d0b576d22b16e86476ddefa7a4ab..3259f3d98408107acd09a3730ef1fd0e834f6258 100644 (file)
@@ -235,7 +235,7 @@ public class IosXeDataStoreAPI implements Callable {
             try {
                 transaction = mountpoint.newWriteOnlyTransaction();
             } catch (RuntimeException e) {
-                if (e.getCause().getClass().equals(NetconfDocumentedException.class)) {
+                if (e.getCause() != null && e.getCause().getClass().equals(NetconfDocumentedException.class)) {
                     LOG.warn("NetconfDocumentedException thrown, retrying ({})...", attempt);
                     try {
                         Thread.sleep(timeout);