Use version 13.1.0 of openroadm-network models
[transportpce.git] / olm / src / main / java / org / opendaylight / transportpce / olm / service / OlmPowerServiceImpl.java
index 4db9a6102b6e396fd41c6941b566dc57e040b5d1..d5e10b33c3ff0842c95fb5c09c0a6248dda9fcce 100644 (file)
@@ -62,21 +62,21 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev21
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.calculate.spanloss.base.output.Spans;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.calculate.spanloss.base.output.SpansBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1;
+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.openroadm.common.network.rev230526.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.Ots;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.OtsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmGranularity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.PmNamesEnum;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.olm.get.pm.input.ResourceIdentifierBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmGranularity;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmNamesEnum;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
@@ -91,9 +91,14 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Decimal64;
+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 OlmPowerServiceImpl implements OlmPowerService {
     private static final Logger LOG = LoggerFactory.getLogger(OlmPowerServiceImpl.class);
     private final MappingUtils mappingUtils;
@@ -103,39 +108,38 @@ public class OlmPowerServiceImpl implements OlmPowerService {
     private final DeviceTransactionManager deviceTransactionManager;
     private final PortMapping portMapping;
 
-    public OlmPowerServiceImpl(DataBroker dataBroker, PowerMgmt powerMgmt,
-                               DeviceTransactionManager deviceTransactionManager, PortMapping portMapping,
-                               MappingUtils mappingUtils, OpenRoadmInterfaces openRoadmInterfaces) {
+    @Activate
+    public OlmPowerServiceImpl(@Reference DataBroker dataBroker,
+            @Reference PowerMgmt powerMgmt,
+            @Reference DeviceTransactionManager deviceTransactionManager,
+            @Reference PortMapping portMapping,
+            @Reference MappingUtils mappingUtils,
+            @Reference OpenRoadmInterfaces openRoadmInterfaces) {
         this.dataBroker = dataBroker;
         this.powerMgmt = powerMgmt;
         this.portMapping = portMapping;
         this.deviceTransactionManager = deviceTransactionManager;
         this.mappingUtils = mappingUtils;
         this.openRoadmInterfaces = openRoadmInterfaces;
+        LOG.debug("OlmPowerServiceImpl Instantiated");
     }
 
-    public void init() {
-        LOG.info("init ...");
-    }
-
-    public void close() {
-        LOG.info("close ...");
-    }
-
-
     @Override
     public GetPmOutput getPm(GetPmInput pmInput) {
-        OpenroadmNodeVersion openroadmVersion;
         GetPmOutputBuilder pmOutputBuilder = new GetPmOutputBuilder();
+        if (mappingUtils.getOpenRoadmVersion(pmInput.getNodeId()) == null) {
+            return pmOutputBuilder.build();
+        }
+        OpenroadmNodeVersion nodeVersion;
         switch (mappingUtils.getOpenRoadmVersion(pmInput.getNodeId())) {
             case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
-                openroadmVersion = OpenroadmNodeVersion._121;
+                nodeVersion = OpenroadmNodeVersion._121;
                 break;
             case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                openroadmVersion = OpenroadmNodeVersion._221;
+                nodeVersion = OpenroadmNodeVersion._221;
                 break;
             case StringConstants.OPENROADM_DEVICE_VERSION_7_1:
-                openroadmVersion = OpenroadmNodeVersion._71;
+                nodeVersion = OpenroadmNodeVersion._71;
                 break;
             default:
                 LOG.error("Unknown device version");
@@ -143,7 +147,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
         }
         LOG.info("Now calling get pm data");
         pmOutputBuilder = OlmUtils.pmFetch(pmInput, deviceTransactionManager,
-            openroadmVersion);
+            nodeVersion);
         return pmOutputBuilder.build();
     }
 
@@ -326,7 +330,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             return Collections.emptyList();
         }
 
-        @Nullable Map<LinkKey, Link> networkLinks = networkOptional.get().getLink();
+        @Nullable Map<LinkKey, Link> networkLinks = networkOptional.orElseThrow().getLink();
         if ((networkLinks == null) || networkLinks.isEmpty()) {
             LOG.warn("Links are not present in {} topology.", NetworkUtils.OVERLAY_NETWORK_ID);
             return Collections.emptyList();
@@ -406,9 +410,9 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                 Optional<Interface> interfaceObject;
                 interfaceObject = openRoadmInterfaces.getInterface(realNodeId, interfaceName);
                 if (interfaceObject.isPresent()) {
-                    InterfaceBuilder interfaceBuilder = new InterfaceBuilder(interfaceObject.get());
+                    InterfaceBuilder interfaceBuilder = new InterfaceBuilder(interfaceObject.orElseThrow());
                     OtsBuilder otsBuilder = new OtsBuilder();
-                    Interface intf = interfaceObject.get();
+                    Interface intf = interfaceObject.orElseThrow();
                     if (intf.augmentation(Interface1.class) != null
                         && intf.augmentation(Interface1.class).getOts() != null) {
                         Ots ots = intf.augmentation(Interface1.class).getOts();
@@ -416,15 +420,17 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                         spanLossRx = ots.getSpanLossReceive();
                         spanLossTx = ots.getSpanLossTransmit();
                     } else {
-                        spanLossRx = new RatioDB(spanLoss);
-                        spanLossTx = new RatioDB(spanLoss);
+                        spanLossRx = new RatioDB(Decimal64.valueOf(spanLoss));
+                        spanLossTx = new RatioDB(Decimal64.valueOf(spanLoss));
                     }
                     Interface1Builder intf1Builder = new Interface1Builder();
                     if (direction.equals("TX")) {
-                        otsBuilder.setSpanLossTransmit(new RatioDB(spanLoss));
+                        otsBuilder.setSpanLossTransmit(new RatioDB(Decimal64.valueOf(spanLoss)));
                         otsBuilder.setSpanLossReceive(spanLossRx);
                     } else {
-                        otsBuilder.setSpanLossTransmit(spanLossTx).setSpanLossReceive(new RatioDB(spanLoss));
+                        otsBuilder
+                            .setSpanLossTransmit(spanLossTx)
+                            .setSpanLossReceive(new RatioDB(Decimal64.valueOf(spanLoss)));
                     }
                     interfaceBuilder.addAugmentation(intf1Builder.setOts(otsBuilder.build()).build());
                     openRoadmInterfaces.postInterface(realNodeId,interfaceBuilder);
@@ -447,13 +453,13 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                     org.opendaylight.yang.gen.v1.http.org.openroadm.device
                         .rev181019.interfaces.grp.InterfaceBuilder interfaceBuilder =
                         new org.opendaylight.yang.gen.v1.http.org.openroadm.device
-                            .rev181019.interfaces.grp.InterfaceBuilder(interfaceObject.get());
+                            .rev181019.interfaces.grp.InterfaceBuilder(interfaceObject.orElseThrow());
                     org.opendaylight.yang.gen.v1.http.org.openroadm.optical
                         .transport.interfaces.rev181019.ots.container.OtsBuilder otsBuilder =
                         new org.opendaylight.yang.gen.v1.http.org.openroadm
                             .optical.transport.interfaces.rev181019.ots.container.OtsBuilder();
                     org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface intf =
-                        interfaceObject.get();
+                        interfaceObject.orElseThrow();
                     if (intf.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.optical
                         .transport.interfaces.rev181019.Interface1.class) != null
                             && intf.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport
@@ -468,9 +474,9 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                         spanLossTx = ots.getSpanLossTransmit();
                     } else {
                         spanLossRx = new org.opendaylight.yang.gen.v1.http.org
-                            .openroadm.common.types.rev181019.RatioDB(spanLoss);
+                            .openroadm.common.types.rev181019.RatioDB(Decimal64.valueOf(spanLoss));
                         spanLossTx = new org.opendaylight.yang.gen.v1.http.org
-                            .openroadm.common.types.rev181019.RatioDB(spanLoss);
+                            .openroadm.common.types.rev181019.RatioDB(Decimal64.valueOf(spanLoss));
                     }
                     org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces
                         .rev181019.Interface1Builder intf1Builder =
@@ -478,12 +484,14 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                             .transport.interfaces.rev181019.Interface1Builder();
                     if (direction.equals("TX")) {
                         otsBuilder.setSpanLossTransmit(new org.opendaylight.yang.gen.v1.http.org
-                            .openroadm.common.types.rev181019.RatioDB(spanLoss));
+                            .openroadm.common.types.rev181019.RatioDB(Decimal64.valueOf(spanLoss)));
                         otsBuilder.setSpanLossReceive(spanLossRx);
                     } else {
-                        otsBuilder.setSpanLossTransmit(spanLossTx).setSpanLossReceive(
-                            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.RatioDB(spanLoss)
-                        );
+                        otsBuilder
+                            .setSpanLossTransmit(spanLossTx)
+                            .setSpanLossReceive(
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.RatioDB(
+                                    Decimal64.valueOf(spanLoss)));
                     }
                     interfaceBuilder.addAugmentation(intf1Builder.setOts(otsBuilder.build()).build());
                     openRoadmInterfaces.postInterface(realNodeId,interfaceBuilder);
@@ -527,34 +535,37 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             String sourceTpId = link.getSrcTpId();
             String destNodeId = link.getDestNodeId();
             String destTpId = link.getDestTpid();
-            OtsPmHolder srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutput");
-            if (srcOtsPmHoler == null) {
-                srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutputOSC");
-            }
-            OtsPmHolder destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInput");
-            if (destOtsPmHoler == null) {
-                destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInputOSC");
+            OtsPmHolder srcOtsPmHolder = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutput");
+            if (srcOtsPmHolder == null) {
+                srcOtsPmHolder = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutputOSC");
+                if (srcOtsPmHolder == null) {
+                    LOG.warn("OTS configuration issue at {} - {}", sourceNodeId, sourceTpId);
+                    continue;
+                }
             }
-
-            if (srcOtsPmHoler.getOtsInterfaceName() == null || destOtsPmHoler.getOtsInterfaceName() == null) {
-                LOG.warn("OTS is not present for the link {}", link);
-                continue;
+            OtsPmHolder destOtsPmHolder = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInput");
+            if (destOtsPmHolder == null) {
+                destOtsPmHolder = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInputOSC");
+                if (destOtsPmHolder == null) {
+                    LOG.warn("OTS configuration issue at {} - {}", destNodeId, destTpId);
+                    continue;
+                }
             }
-            spanLoss = BigDecimal.valueOf(srcOtsPmHoler.getOtsParameterVal() - destOtsPmHoler.getOtsParameterVal())
+            spanLoss = BigDecimal.valueOf(srcOtsPmHolder.getOtsParameterVal() - destOtsPmHolder.getOtsParameterVal())
                 .setScale(1, RoundingMode.HALF_UP);
             LOG.info("Spanloss Calculated as :{}={}-{}",
-                spanLoss, srcOtsPmHoler.getOtsParameterVal(), destOtsPmHoler.getOtsParameterVal());
+                spanLoss, srcOtsPmHolder.getOtsParameterVal(), destOtsPmHolder.getOtsParameterVal());
             if (spanLoss.doubleValue() > 28) {
                 LOG.warn("Span Loss is out of range of OpenROADM specifications");
             }
             if (spanLoss.intValue() <= 0) {
                 spanLoss = BigDecimal.valueOf(0);
             }
-            if (!setSpanLoss(sourceNodeId, srcOtsPmHoler.getOtsInterfaceName(), spanLoss, "TX")) {
+            if (!setSpanLoss(sourceNodeId, srcOtsPmHolder.getOtsInterfaceName(), spanLoss, "TX")) {
                 LOG.info("Setting spanLoss failed for {}", sourceNodeId);
                 return null;
             }
-            if (!setSpanLoss(destNodeId, destOtsPmHoler.getOtsInterfaceName(), spanLoss, "RX")) {
+            if (!setSpanLoss(destNodeId, destOtsPmHolder.getOtsInterfaceName(), spanLoss, "RX")) {
                 LOG.info("Setting spanLoss failed for {}", destNodeId);
                 return null;
             }
@@ -573,12 +584,12 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             LOG.error("Error on getRealNodeId {} :", mappedNodeId, e);
             throw new IllegalStateException(e);
         }
-        if (!realNode.isPresent() || (realNode.get().getSupportingNode() == null)) {
+        if (!realNode.isPresent() || (realNode.orElseThrow().getSupportingNode() == null)) {
             LOG.error("supporting node is null");
             throw new IllegalArgumentException(
                 String.format("Could not find node %s, or supporting node is not present", mappedNodeId));
         }
-        List<SupportingNode> collect = realNode.get().nonnullSupportingNode().values().stream()
+        List<SupportingNode> collect = realNode.orElseThrow().nonnullSupportingNode().values().stream()
             .filter(node -> (node.getNetworkRef() != null)
                 && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue())
                 && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue()))
@@ -603,7 +614,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             //TODO change to constant from Timeouts class when it will be merged.
             linkOptional = rtx.read(LogicalDatastoreType.CONFIGURATION, linkIID).get(Timeouts.DATASTORE_READ,
                 TimeUnit.MILLISECONDS);
-            return linkOptional.get();
+            return linkOptional.orElseThrow();
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Read of {} topology failed", NetworkUtils.OVERLAY_NETWORK_ID);
             return null;