Reintroduce SP 1.6 models in API module
[transportpce.git] / olm / src / main / java / org / opendaylight / transportpce / olm / service / OlmPowerServiceImpl.java
index 700409635aac0fb13be7e34b2dbd6917a065b869..c76401a8ee37d066034a2af2d04810b8511b6d13 100644 (file)
@@ -37,6 +37,28 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.olm.power.PowerMgmt;
 import org.opendaylight.transportpce.olm.util.OlmUtils;
 import org.opendaylight.transportpce.olm.util.OtsPmHolder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerResetInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerResetOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.calculate.spanloss.base.output.Spans;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.calculate.spanloss.base.output.SpansBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.get.pm.output.Measurements;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
 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;
@@ -61,28 +83,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerResetInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerResetOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.calculate.spanloss.base.output.Spans;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.calculate.spanloss.base.output.SpansBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.Measurements;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.slf4j.Logger;
@@ -98,7 +98,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
     private final PortMapping portMapping;
 
     public OlmPowerServiceImpl(DataBroker dataBroker, PowerMgmt powerMgmt,
-        DeviceTransactionManager deviceTransactionManager, PortMapping portMapping) {
+            DeviceTransactionManager deviceTransactionManager, PortMapping portMapping) {
         this.dataBroker = dataBroker;
         this.powerMgmt = powerMgmt;
         this.portMapping = portMapping;
@@ -113,6 +113,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
         LOG.info("close ...");
     }
 
+
     @Override
     public GetPmOutput getPm(GetPmInput pmInput) {
         GetPmOutputBuilder pmOutputBuilder = OlmUtils.pmFetch(pmInput, this.deviceTransactionManager);
@@ -134,7 +135,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
 
     @Override
     public ServicePowerTurndownOutput servicePowerTurndown(
-        ServicePowerTurndownInput powerTurndownInput) {
+            ServicePowerTurndownInput powerTurndownInput) {
 
         ServicePowerTurndownOutputBuilder powerTurnDownOutput = new ServicePowerTurndownOutputBuilder();
         // TODO add flag or return failure instead of string
@@ -150,17 +151,16 @@ public class OlmPowerServiceImpl implements OlmPowerService {
     public CalculateSpanlossBaseOutput calculateSpanlossBase(CalculateSpanlossBaseInput spanlossBaseInput) {
 
         LOG.info("CalculateSpanlossBase Request received for source type {}", spanlossBaseInput.getSrcType());
-
         List<Link> networkLinks = getNetworkLinks();
         if (networkLinks.isEmpty()) {
             LOG.warn("Failed to get links form {} topology.", NetworkUtils.OVERLAY_NETWORK_ID);
             return new CalculateSpanlossBaseOutputBuilder().setResult(FAILED).build();
         }
 
-        if (!CalculateSpanlossBaseInput.SrcType.All.equals(spanlossBaseInput.getSrcType())) {
+        if (! CalculateSpanlossBaseInput.SrcType.All.equals(spanlossBaseInput.getSrcType())) {
             networkLinks = networkLinks.stream()
-                .filter(link -> link.getLinkId().equals(spanlossBaseInput.getLinkId()))
-                .collect(Collectors.toList());
+                    .filter(link -> link.getLinkId().equals(spanlossBaseInput.getLinkId()))
+                    .collect(Collectors.toList());
         }
 
         List<Link> roadmLinks = new ArrayList<>();
@@ -168,10 +168,11 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             Link1 roadmLinkAugmentation = link.augmentation(Link1.class);
             if (roadmLinkAugmentation == null) {
                 LOG.debug("Missing OpenRoadm link augmentation in link {} from {} topology.",
-                    link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID);
+                        link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID);
                 continue;
             }
             if (OpenroadmLinkType.ROADMTOROADM.equals(roadmLinkAugmentation.getLinkType())) {
+                // Only calculate spanloss for Roadm-to-Roadm links
                 roadmLinks.add(link);
             }
         }
@@ -216,7 +217,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             Link1 roadmLinkAugmentation = link.augmentation(Link1.class);
             if (roadmLinkAugmentation == null) {
                 LOG.debug("Missing OpenRoadm link augmentation in link {} from {} topology.",
-                    link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID);
+                        link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID);
                 continue;
             }
             if (OpenroadmLinkType.ROADMTOROADM.equals(roadmLinkAugmentation.getLinkType())) {
@@ -252,22 +253,21 @@ public class OlmPowerServiceImpl implements OlmPowerService {
         NetworkKey overlayTopologyKey = new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
 
         InstanceIdentifier<Network1> networkIID = InstanceIdentifier.builder(Network.class, overlayTopologyKey)
-            .augmentation(Network1.class)
-            .build();
+                .augmentation(Network1.class)
+                .build();
         Optional<Network1> networkOptional;
         try (ReadOnlyTransaction rtx = this.dataBroker.newReadOnlyTransaction()) {
-            // TODO change to constant from Timeouts class when it will be
-            // merged.
+            //TODO change to constant from Timeouts class when it will be merged.
             networkOptional = rtx.read(LogicalDatastoreType.CONFIGURATION, networkIID).get(Timeouts.DATASTORE_READ,
-                TimeUnit.MILLISECONDS).toJavaUtil();
+                    TimeUnit.MILLISECONDS).toJavaUtil();
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Read of {} topology failed", NetworkUtils.OVERLAY_NETWORK_ID);
             return Collections.emptyList();
         }
 
-        if (!networkOptional.isPresent()) {
+        if (! networkOptional.isPresent()) {
             LOG.warn("Network augmentation with links data is not present in {} topology.",
-                NetworkUtils.OVERLAY_NETWORK_ID);
+                    NetworkUtils.OVERLAY_NETWORK_ID);
             return Collections.emptyList();
         }
 
@@ -280,21 +280,16 @@ public class OlmPowerServiceImpl implements OlmPowerService {
     }
 
     /**
-     * This method retrieves OTS PM from current PM list by nodeId and TPId:
-     * Steps:
+     * This method retrieves OTS PM from current PM list by nodeId and TPId: Steps:
      *
      * <p>
-     * 1. Get OTS interface name from port mapping by TPId 2. Call getPm RPC to
-     * get OTS PM
+     * 1. Get OTS interface name from port mapping by TPId 2. Call getPm RPC to get OTS PM
      *
      * <p>
      *
-     * @param nodeId
-     *            Node-id of the NE.
-     * @param tpID
-     *            Termination point Name.
-     * @param pmName
-     *            PM name which need to be retrieved
+     * @param nodeId Node-id of the NE.
+     * @param tpID Termination point Name.
+     * @param pmName PM name which need to be retrieved
      * @return reference to OtsPmHolder
      */
     private OtsPmHolder getPmMeasurements(String nodeId, String tpID, String pmName) {
@@ -304,10 +299,10 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             return null;
         }
         GetPmInput getPmInput = new GetPmInputBuilder().setNodeId(realNodeId)
-            .setResourceType(ResourceTypeEnum.Interface).setGranularity(PmGranularity._15min)
-            .setResourceIdentifier(
-                new ResourceIdentifierBuilder().setResourceName(mapping.getSupportingOts()).build())
-            .build();
+                .setResourceType(ResourceTypeEnum.Interface).setGranularity(PmGranularity._15min)
+                .setResourceIdentifier(
+                        new ResourceIdentifierBuilder().setResourceName(mapping.getSupportingOts()).build())
+                .build();
         GetPmOutput otsPmOutput = getPm(getPmInput);
 
         if (otsPmOutput == null) {
@@ -318,7 +313,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             for (Measurements measurement : otsPmOutput.getMeasurements()) {
                 if (pmName.equals(measurement.getPmparameterName())) {
                     return new OtsPmHolder(pmName, Double.parseDouble(measurement.getPmparameterValue()),
-                        mapping.getSupportingOts());
+                            mapping.getSupportingOts());
                 }
             }
         } catch (NumberFormatException e) {
@@ -336,18 +331,15 @@ public class OlmPowerServiceImpl implements OlmPowerService {
      * <p>
      * 2. Set spanloss
      *
-     * @param nodeId
-     *            nodeId of NE on which spanloss need to be updated
-     * @param interfaceName
-     *            OTS interface for NE on which spanloss is cacluated
-     * @param spanLoss
-     *            calculated spanloss value
-     * @param direction
-     *            for which spanloss is calculated.It can be either Tx or Rx
+     * @param nodeId nodeId of NE on which spanloss need to be updated
+     * @param interfaceName OTS interface for NE on which spanloss is cacluated
+     * @param spanLoss calculated spanloss value
+     * @param direction for which spanloss is calculated.It can be either Tx or Rx
      * @return true/false
      */
     private boolean setSpanLoss(String nodeId, String interfaceName, BigDecimal spanLoss, String direction) {
         String realNodeId = getRealNodeId(nodeId);
+        LOG.info("Setting Spanloss in device for {}, InterfaceName: {}", realNodeId, interfaceName);
         switch (direction) {
             case "TX":
                 LOG.info("Setting 'span-loss-transmit' in device:  {}, Interface: {}", realNodeId, interfaceName);
@@ -360,11 +352,11 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                 break;
         }
         InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
-            .child(Interface.class, new InterfaceKey(interfaceName));
+                .child(Interface.class, new InterfaceKey(interfaceName));
         com.google.common.base.Optional<Interface> interfaceObject;
         try {
             Future<Optional<DeviceTransaction>> deviceTxFuture =
-                this.deviceTransactionManager.getDeviceTransaction(realNodeId);
+                    this.deviceTransactionManager.getDeviceTransaction(realNodeId);
             java.util.Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
             DeviceTransaction deviceTx;
             if (deviceTxOpt.isPresent()) {
@@ -401,7 +393,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
                 interfaceBuilder.addAugmentation(Interface1.class, intf1Builder.setOts(otsBuilder.build()).build());
                 deviceTx.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, interfaceBuilder.build());
                 ListenableFuture<Void> submit =
-                    deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
+                        deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
                 submit.get();
                 LOG.info("Spanloss Value update completed successfully");
                 return true;
@@ -457,7 +449,7 @@ public class OlmPowerServiceImpl implements OlmPowerService {
 
     private String getRealNodeId(String mappedNodeId) {
         KeyedInstanceIdentifier<Node, NodeKey> mappedNodeII =
-            InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId)));
+                InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId)));
         com.google.common.base.Optional<Node> realNode;
         try (ReadOnlyTransaction readOnlyTransaction = this.dataBroker.newReadOnlyTransaction()) {
             realNode = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, mappedNodeII).get();
@@ -467,16 +459,16 @@ public class OlmPowerServiceImpl implements OlmPowerService {
         }
         if (!realNode.isPresent() || (realNode.get().getSupportingNode() == null)) {
             throw new IllegalArgumentException(
-                String.format("Could not find node %s, or supporting node is not present", mappedNodeId));
+                    String.format("Could not find node %s, or supporting node is not present", mappedNodeId));
         }
         List<SupportingNode> collect = realNode.get().getSupportingNode().stream()
-            .filter(node -> (node.getNetworkRef() != null)
-                && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue())
-                && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue()))
-            .collect(Collectors.toList());
+                .filter(node -> (node.getNetworkRef() != null)
+                        && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue())
+                        && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue()))
+                .collect(Collectors.toList());
         if (collect.isEmpty() || (collect.size() > 1)) {
             throw new IllegalArgumentException(String.format("Invalid support node count [%d] was found for node %s",
-                collect.size(), mappedNodeId));
+                    collect.size(), mappedNodeId));
         }
         return collect.iterator().next().getNodeRef().getValue();
     }