Fix bug when creating SRG termination points
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / util / OpenRoadmTopology.java
index e8561c2f3125f10339b18b9ac5369149dc82cc3c..180ac0862c22fe33ce3f874b41d2307832b5a8b1 100644 (file)
@@ -22,8 +22,8 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.Mapping;
+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.network.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
@@ -76,6 +76,10 @@ public final class OpenRoadmTopology {
     }
 
     public static TopologyShard createTopologyShard(Nodes mappingNode) {
+        return createTopologyShard(mappingNode, true);
+    }
+
+    public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) {
         int numOfDegrees;
         int numOfSrgs;
         List<Node> nodes = new ArrayList<>();
@@ -98,8 +102,8 @@ public final class OpenRoadmTopology {
                 }
             }
             for (String str : nodeShardList) {
-                List<Mapping> interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint().contains(str))
-                    .collect(Collectors.toList());
+                List<Mapping> interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint()
+                    .split("-")[0].equals(str)).collect(Collectors.toList());
                 if (str.contains("DEG")) {
                     mapDeg.put(str, interList);
                 } else if (str.contains("SRG")) {
@@ -111,13 +115,13 @@ public final class OpenRoadmTopology {
             // create degree nodes
             for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
                 NodeBuilder ietfNode = createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
-                    mappingNode.getNodeInfo().getNodeClli());
+                    mappingNode.getNodeInfo().getNodeClli(), firstMount);
                 nodes.add(ietfNode.build());
             }
             // create srg nodes
             for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
                 NodeBuilder ietfNode = createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
-                    mappingNode.getNodeInfo().getNodeClli());
+                    mappingNode.getNodeInfo().getNodeClli(), firstMount);
                 nodes.add(ietfNode.build());
             }
 
@@ -196,12 +200,12 @@ public final class OpenRoadmTopology {
                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
                     ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
                         .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
-                        .setAdministrativeState(AdminStates.InService)
-                        .setOperationalState(State.InService);
+                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
                 if (m.getPortQual().equals("xpdr-network")) {
                     ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 =
-                        new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder()
+                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 =
+                        new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder()
                             .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build();
                     ietfTpBldr
                         .addAugmentation(ocnTp1Bldr.build())
@@ -210,8 +214,8 @@ public final class OpenRoadmTopology {
                     tpMap.put(ietfTp.key(),ietfTp);
                 } else if (m.getPortQual().equals("xpdr-client")) {
                     ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 =
-                        new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder()
+                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 =
+                        new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder()
                             .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build();
                     ietfTpBldr
                         .addAugmentation(ocnTp1Bldr.build())
@@ -226,8 +230,8 @@ public final class OpenRoadmTopology {
                         ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
                                 .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
                             .setTpType(OpenroadmTpType.XPONDERNETWORK)
-                            .setAdministrativeState(AdminStates.InService)
-                            .setOperationalState(State.InService);
+                            .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                            .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
                     ietfTpBldr
                         .addAugmentation(ocnTp1Bldr.build());
                     TerminationPoint ietfTp = ietfTpBldr.build();
@@ -243,7 +247,8 @@ public final class OpenRoadmTopology {
         return ietfNodeBldr;
     }
 
-    private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli) {
+    private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli,
+                                            boolean firstMount) {
         // Create tp-list
         Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
         TerminationPointBuilder ietfTpBldr;
@@ -253,8 +258,8 @@ public final class OpenRoadmTopology {
             org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
                 ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
                     .TerminationPoint1Builder()
-                        .setAdministrativeState(AdminStates.InService)
-                        .setOperationalState(State.InService);
+                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
 
             // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states
             switch (m.getPortDirection()) {
@@ -286,10 +291,12 @@ public final class OpenRoadmTopology {
         TerminationPoint ietfTp = ietfTpBldr.build();
         tpMap.put(ietfTp.key(),ietfTp);
         // set degree-attributes
-        DegreeAttributes degAtt = new DegreeAttributesBuilder()
-            .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1]))
-            .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available())
-            .build();
+        DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder()
+            .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1]));
+        if (firstMount) {
+            degAttBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available());
+        }
+        DegreeAttributes degAtt = degAttBldr.build();
         // Create ietf node augmentation to support ietf tp-list
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder
             ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
@@ -313,7 +320,8 @@ public final class OpenRoadmTopology {
             .addAugmentation(ietfNode1.build());
     }
 
-    private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli) {
+    private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli,
+                                         boolean firstMount) {
         // Create tp-list
         Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
         TerminationPointBuilder ietfTpBldr;
@@ -323,8 +331,8 @@ public final class OpenRoadmTopology {
             org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
                 .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
                 .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
-                    .setAdministrativeState(AdminStates.InService)
-                    .setOperationalState(State.InService);
+                    .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                    .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
             // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states
             switch (m.getPortDirection()) {
                 case "bidirectional":
@@ -363,8 +371,11 @@ public final class OpenRoadmTopology {
                     .setOperationalState(State.InService)
                     .build();
         // set srg-attributes
-        SrgAttributes srgAttr = new SrgAttributesBuilder()
-                .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()).build();
+        SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder();
+        if (firstMount) {
+            srgAttrBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available());
+        }
+        SrgAttributes srgAttr = srgAttrBldr.build();
         Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build();
         // Create ietf node augmentation to support ietf tp-list
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder
@@ -408,10 +419,11 @@ public final class OpenRoadmTopology {
 
     private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) {
         //create source link
-        SourceBuilder ietfSrcLinkBldr = new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp);
+        SourceBuilder ietfSrcLinkBldr = new SourceBuilder().setSourceNode(new NodeId(srcNode))
+            .setSourceTp(new TpId(srcTp));
         //create destination link
         DestinationBuilder ietfDestLinkBldr = new DestinationBuilder().setDestNode(new NodeId(destNode))
-            .setDestTp(destTp);
+            .setDestTp(new TpId(destTp));
         LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp);
         return new LinkBuilder()
             .setSource(ietfSrcLinkBldr.build())