Manage ODU4 services over multiple OTU4
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / util / OpenRoadmOtnTopology.java
index 2de3b4a6501e8da9b51b888d775343c542c8f864..fa02061f1d0de0215bc455d6b7ebabb2ac3a343d 100644 (file)
@@ -130,6 +130,47 @@ public final class OpenRoadmOtnTopology {
         return new TopologyShard(null, links);
     }
 
+    public static TopologyShard createOtnLinks(
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp
+                .Link notifLink,
+            OtnLinkType linkType) {
+
+        return new TopologyShard(null, initialiseOtnLinks(notifLink.getATermination().getNodeId(),
+            notifLink.getATermination().getTpId(), notifLink.getZTermination().getNodeId(),
+            notifLink.getZTermination().getTpId(), linkType));
+    }
+
+    public static TopologyShard createOtnLinks(
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp
+                .Link notifLink,
+            List<Link> supportedOtu4links,
+            List<TerminationPoint> supportedTPs,
+            OtnLinkType linkType) {
+
+        List<Link> links;
+        switch (linkType) {
+            case OTU4:
+            case OTUC4:
+                links = initialiseOtnLinks(
+                        notifLink.getATermination().getNodeId(), notifLink.getATermination().getTpId(),
+                        notifLink.getZTermination().getNodeId(), notifLink.getZTermination().getTpId(), linkType);
+                return new TopologyShard(null, links);
+            case ODTU4:
+            case ODUC4:
+                links = initialiseOtnLinks(
+                    notifLink.getATermination().getNodeId(), notifLink.getATermination().getTpId(),
+                    notifLink.getZTermination().getNodeId(), notifLink.getZTermination().getTpId(), linkType);
+                links.addAll(updateOtnLinkBwParameters(supportedOtu4links, linkType));
+                List<TerminationPoint> updatedTPs = new ArrayList<>();
+                for (TerminationPoint tp : supportedTPs) {
+                    updatedTPs.add(updateTp(tp, true, linkType));
+                }
+                return new TopologyShard(null, links, updatedTPs);
+            default:
+                return null;
+        }
+    }
+
     public static TopologyShard createOtnLinks(List<Link> suppOtuLinks, List<TerminationPoint> oldTps,
             OtnLinkType linkType) {
         List<Link> links = new ArrayList<>();
@@ -261,7 +302,7 @@ public final class OpenRoadmOtnTopology {
         for (TerminationPoint tp : oldTps) {
             tps.add(updateTp(tp, false, linkType));
         }
-        if (links.size() == 2 && tps.size() == 2) {
+        if (!links.isEmpty() && !tps.isEmpty()) {
             return new TopologyShard(null, links, tps);
         } else {
             return new TopologyShard(null, null, null);
@@ -332,6 +373,32 @@ public final class OpenRoadmOtnTopology {
         return updatedLinkBldr.build();
     }
 
+    private static List<Link> updateOtnLinkBwParameters(List<Link> supportedLinks, OtnLinkType linkType) {
+        LOG.debug("in updateOtnLinkBwParameters with supportedLinks = {}, linkType = {}", supportedLinks, linkType);
+        Uint32 usedBw;
+        switch (linkType) {
+            case ODTU4:
+                usedBw = Uint32.valueOf(100000);
+                break;
+            case ODUC4:
+                usedBw = Uint32.valueOf(400000);
+                break;
+            default:
+                usedBw = Uint32.valueOf(0);
+                break;
+        }
+        List<Link> updatedlinks = new ArrayList<>();
+        for (Link link : supportedLinks) {
+            LinkBuilder updatedLinkBldr = new LinkBuilder(link);
+            updatedLinkBldr.addAugmentation(new Link1Builder(link.augmentation(Link1.class))
+                .setAvailableBandwidth(Uint32.valueOf(0))
+                .setUsedBandwidth(usedBw)
+                .build());
+            updatedlinks.add(updatedLinkBldr.build());
+        }
+        return updatedlinks;
+    }
+
     private static TerminationPoint updateTp(TerminationPoint originalTp, boolean addingTsTpnPoolTermination,
             OtnLinkType linkType) {
         LOG.debug("in updateTp");