Fix port-mapping bug for 7.1 device-models
[transportpce.git] / common / src / main / java / org / opendaylight / transportpce / common / mapping / PortMappingImpl.java
index 9780f62cd341c82672cdea7354bd300626c61bfa..85b3eeb6af7aa0ad440a1892d1adebfa3f8d64a4 100644 (file)
@@ -21,23 +21,27 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mc.capabilities.McCapabilitiesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.NodesKey;
+import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
+@Component
 public class PortMappingImpl implements PortMapping {
 
     private static final Logger LOG = LoggerFactory.getLogger(PortMappingImpl.class);
@@ -47,6 +51,15 @@ public class PortMappingImpl implements PortMapping {
     private final PortMappingVersion221 portMappingVersion22;
     private final PortMappingVersion121 portMappingVersion121;
 
+    @Activate
+    public PortMappingImpl(@Reference DataBroker dataBroker,
+            @Reference DeviceTransactionManager deviceTransactionManager) {
+        this(dataBroker,
+            new PortMappingVersion710(dataBroker, deviceTransactionManager),
+            new PortMappingVersion221(dataBroker, deviceTransactionManager),
+            new PortMappingVersion121(dataBroker, deviceTransactionManager));
+    }
+
     public PortMappingImpl(DataBroker dataBroker, PortMappingVersion710 portMappingVersion710,
         PortMappingVersion221 portMappingVersion22, PortMappingVersion121 portMappingVersion121) {
 
@@ -61,6 +74,11 @@ public class PortMappingImpl implements PortMapping {
         return portMappingVersion22;
     }
 
+    @Override
+    public PortMappingVersion710 getPortMappingVersion710() {
+        return portMappingVersion710;
+    }
+
     @Override
     public boolean createMappingData(String nodeId, String nodeVersion) {
         switch (nodeVersion) {
@@ -87,7 +105,7 @@ public class PortMappingImpl implements PortMapping {
         try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
             Optional<Mapping> mapObject = readTx.read(LogicalDatastoreType.CONFIGURATION, portMappingIID).get();
             if (mapObject.isPresent()) {
-                Mapping mapping = mapObject.get();
+                Mapping mapping = mapObject.orElseThrow();
                 LOG.info("Found mapping for {} - {}. Mapping: {}", nodeId, logicalConnPoint, mapping.toString());
                 return mapping;
             }
@@ -105,11 +123,11 @@ public class PortMappingImpl implements PortMapping {
             .child(Nodes.class, new NodesKey(nodeId));
         try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
             Optional<Nodes> portMapppingOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, portMappingIID).get();
-            if (!portMapppingOpt.isPresent()) {
+            if (portMapppingOpt.isEmpty()) {
                 LOG.warn("Could not get portMapping for node {}", nodeId);
                 return null;
             }
-            Map<MappingKey, Mapping> mappings = portMapppingOpt.get().getMapping();
+            Map<MappingKey, Mapping> mappings = portMapppingOpt.orElseThrow().getMapping();
             for (Mapping mapping : mappings.values()) {
                 if (circuitPackName.equals(mapping.getSupportingCircuitPackName())
                     && portName.equals(mapping.getSupportingPort())) {
@@ -149,7 +167,7 @@ public class PortMappingImpl implements PortMapping {
             Optional<McCapabilities> mcCapObject = readTx.read(LogicalDatastoreType.CONFIGURATION,
                 mcCapabilitiesIID).get();
             if (mcCapObject.isPresent()) {
-                McCapabilities mcCap = mcCapObject.get();
+                McCapabilities mcCap = mcCapObject.orElseThrow();
                 LOG.info("Found MC-cap for {} - {}. Mapping: {}", nodeId, mcLcp, mcCap.toString());
                 return mcCap;
             }
@@ -200,7 +218,7 @@ public class PortMappingImpl implements PortMapping {
             Optional<Nodes> nodePortMapObject =
                 readTx.read(LogicalDatastoreType.CONFIGURATION, nodePortMappingIID).get();
             if (nodePortMapObject.isPresent()) {
-                Nodes node = nodePortMapObject.get();
+                Nodes node = nodePortMapObject.orElseThrow();
                 LOG.info("Found node {} in portmapping.", nodeId);
                 return node;
             }
@@ -229,4 +247,28 @@ public class PortMappingImpl implements PortMapping {
     public boolean isNodeExist(String nodeId) {
         return this.getNode(nodeId) != null;
     }
+
+    @Override
+    public Mapping getMappingFromOtsInterface(String nodeId, String interfName) {
+        KeyedInstanceIdentifier<Nodes, NodesKey> nodePortmappingIID = InstanceIdentifier.create(Network.class)
+            .child(Nodes.class, new NodesKey(nodeId));
+        try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
+            Optional<Nodes> nodePortmapppingOpt
+                = readTx.read(LogicalDatastoreType.CONFIGURATION, nodePortmappingIID).get();
+            if (nodePortmapppingOpt.isEmpty()) {
+                LOG.warn("Could not get portMapping for node {}", nodeId);
+                return null;
+            }
+            Map<MappingKey, Mapping> mappings = nodePortmapppingOpt.orElseThrow().getMapping();
+            for (Mapping mapping : mappings.values()) {
+                if (interfName.equals(mapping.getSupportingOts())) {
+                    return mapping;
+                }
+            }
+        } catch (InterruptedException | ExecutionException ex) {
+            LOG.error("Unable to get mapping list for nodeId {}", nodeId, ex);
+        }
+        return null;
+    }
+
 }