Fix TAPI Sonar issues
[transportpce.git] / tapi / src / main / java / org / opendaylight / transportpce / tapi / topology / ConvertORTopoObjectToTapiTopoObject.java
1 /*
2  * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.tapi.topology;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.UUID;
16 import java.util.stream.Collectors;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPools;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
20 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Link1;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
27 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
28 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
29 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
30 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LAYERPROTOCOLQUALIFIER;
31 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
32 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
33 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
34 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
35 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
36 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationDirection;
37 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationState;
38 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
39 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
40 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder;
41 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE100GigE;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE10GigELAN;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2E;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU4;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROMS;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROTSi;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ForwardingRule;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RuleType;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePoint;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroup;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupBuilder;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointBuilder;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePoint;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointBuilder;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.Rule;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.RuleBuilder;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkBuilder;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder;
64 import org.opendaylight.yangtools.yang.common.Uint64;
65 import org.slf4j.Logger;
66 import org.slf4j.LoggerFactory;
67
68 public class ConvertORTopoObjectToTapiTopoObject {
69
70     private static final String DSR_PLUS = "DSR+";
71     private static final String PLUS_DSR = "+DSR";
72     private static final String OT_SI = "+OTSi";
73     private static final String E_OT_SI = "eOTSi+";
74     private static final String I_OT_SI = "iOTSi+";
75     private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoObjectToTapiTopoObject.class);
76     private String ietfNodeId;
77     private List<TerminationPoint> oorClientPortList;
78     private List<TerminationPoint> oorNetworkPortList;
79     private OduSwitchingPools oorOduSwitchingPool;
80     private Uuid tapiTopoUuid;
81     private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes;
82     private List<Link> tapiLinks;
83     private Map<String, Uuid> uuidMap;
84
85     public ConvertORTopoObjectToTapiTopoObject(Node ietfNode, Link1 otnLink, Uuid tapiTopoUuid) {
86         this.ietfNodeId = ietfNode.getNodeId().getValue();
87         this.oorClientPortList = ietfNode.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
88             .network.topology.rev180226.Node1.class).getTerminationPoint().stream()
89             .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
90             == OpenroadmTpType.XPONDERCLIENT.getIntValue())
91             .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
92             .collect(Collectors.toList());
93         this.oorNetworkPortList = ietfNode.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
94             .network.topology.rev180226.Node1.class).getTerminationPoint().stream()
95             .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
96             == OpenroadmTpType.XPONDERNETWORK.getIntValue())
97             .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
98             .collect(Collectors.toList());
99         this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools().get(0);
100         this.tapiTopoUuid = tapiTopoUuid;
101         this.tapiNodes = new ArrayList<>();
102         this.tapiLinks = new ArrayList<>();
103         this.uuidMap = new HashMap<>();
104     }
105
106     public void convertNode() {
107         // node creation [DSR/ODU]
108         LOG.info("creation of a DSR/ODU node");
109         Uuid nodeUuid = new Uuid(UUID.randomUUID().toString());
110         this.uuidMap.put(this.ietfNodeId + PLUS_DSR, nodeUuid);
111         List<Name> dsrNodeNames = Arrays.asList(
112             new NameBuilder()
113                 .setValueName("dsr/odu node name")
114                 .setValue(this.ietfNodeId)
115                 .build());
116
117         List<LayerProtocolName> dsrLayerProtocols = Arrays.asList(LayerProtocolName.DSR, LayerProtocolName.ODU);
118         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
119             .Node dsrNode = createTapiNode(dsrNodeNames, dsrLayerProtocols);
120         tapiNodes.add(dsrNode);
121
122         // node creation [otsi]
123         LOG.info("creation of an OTSi node");
124         nodeUuid = new Uuid(UUID.randomUUID().toString());
125         this.uuidMap.put(this.ietfNodeId + OT_SI, nodeUuid);
126         List<Name> otsiNodeNames = Arrays.asList(
127             new NameBuilder()
128                 .setValueName("otsi node name")
129                 .setValue(this.ietfNodeId)
130                 .build());
131         List<LayerProtocolName> otsiLayerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
132         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
133             .Node otsiNode = createTapiNode(otsiNodeNames, otsiLayerProtocols);
134         tapiNodes.add(otsiNode);
135
136         // transitional link cration between network nep of DSR/ODU node and iNep of otsi node
137         LOG.info("creation of transitional links between DSR/ODU and OTSi nodes");
138         createTapiTransitionalLinks();
139     }
140
141     private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
142         .Node createTapiNode(List<Name> nodeNames, List<LayerProtocolName> layerProtocols) {
143         Uuid nodeUuid = null;
144         List<OwnedNodeEdgePoint> onepl = new ArrayList<>();
145         List<NodeRuleGroup> nodeRuleGroupList = new ArrayList<>();
146         List<Rule> ruleList = new ArrayList<>();
147         Rule rule = new RuleBuilder()
148             .setLocalId("forward")
149             .setForwardingRule(ForwardingRule.MAYFORWARDACROSSGROUP)
150             .setRuleType(RuleType.FORWARDING)
151             .build();
152         ruleList.add(rule);
153         if (layerProtocols.contains(LayerProtocolName.DSR)) {
154             nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList);
155         } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
156             nodeUuid = getNodeUuid4Phonic(onepl, nodeRuleGroupList, ruleList);
157         } else {
158             LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(0).getValueName(),
159                     nodeNames.get(0).getValue());
160         }
161
162         // create tapi node
163
164         return new NodeBuilder()
165                 .setUuid(nodeUuid)
166                 .setName(nodeNames)
167                 .setLayerProtocolName(layerProtocols)
168                 .setAdministrativeState(AdministrativeState.UNLOCKED)
169                 .setOperationalState(OperationalState.ENABLED)
170                 .setLifecycleState(LifecycleState.INSTALLED)
171                 .setOwnedNodeEdgePoint(onepl)
172                 .setNodeRuleGroup(nodeRuleGroupList)
173                 .build();
174     }
175
176     private Uuid getNodeUuid4Phonic(List<OwnedNodeEdgePoint> onepl, List<NodeRuleGroup> nodeRuleGroupList,
177             List<Rule> ruleList) {
178         Uuid nodeUuid;
179         nodeUuid = this.uuidMap.get(this.ietfNodeId + OT_SI);
180         // iNep creation on otsi node
181         for (int i = 0; i < oorNetworkPortList.size(); i++) {
182             Uuid nepUuid1 = new Uuid(UUID.randomUUID().toString());
183             this.uuidMap.put(I_OT_SI + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid1);
184             List<Name> onedNames = Arrays.asList(
185                     new NameBuilder()
186                     .setValueName(new StringBuilder("iNodeEdgePoint_").append(i + 1).toString())
187                     .setValue(oorNetworkPortList.get(i).getTpId().getValue())
188                     .build());
189
190             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), onedNames,
191                 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, I_OT_SI);
192             onepl.add(onep);
193         }
194         // eNep creation on otsi node
195         for (int i = 0; i < oorNetworkPortList.size(); i++) {
196             Uuid nepUuid2 = new Uuid(UUID.randomUUID().toString());
197             this.uuidMap.put(E_OT_SI + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid2);
198             List<Name> onedNames = Arrays.asList(
199                     new NameBuilder()
200                     .setValueName(new StringBuilder("eNodeEdgePoint_").append(i + 1).toString())
201                     .setValue(oorNetworkPortList.get(i).getTpId().getValue())
202                     .build());
203
204             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), onedNames,
205                 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, E_OT_SI);
206             onepl.add(onep);
207         }
208         // create NodeRuleGroup
209         for (TerminationPoint tp : this.oorNetworkPortList) {
210             List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
211                 .NodeEdgePoint> nepList = new ArrayList<>();
212             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
213                 .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
214                 .node.rule.group.NodeEdgePointBuilder()
215                 .setTopologyUuid(tapiTopoUuid)
216                 .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
217                 .setNodeEdgePointUuid(this.uuidMap.get(I_OT_SI + tp.getTpId().getValue()))
218                 .build();
219             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
220                 .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
221                 .node.rule.group.NodeEdgePointBuilder()
222                 .setTopologyUuid(tapiTopoUuid)
223                 .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
224                 .setNodeEdgePointUuid(this.uuidMap.get(E_OT_SI + tp.getTpId().getValue()))
225                 .build();
226             nepList.add(inep);
227             nepList.add(enep);
228             NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
229                 .setUuid(new Uuid(UUID.randomUUID().toString()))
230                 .setRule(ruleList)
231                 .setNodeEdgePoint(nepList)
232                 .build();
233             nodeRuleGroupList.add(nodeRuleGroup);
234         }
235         return nodeUuid;
236     }
237
238     private Uuid getNodeUuid4Dsr(List<OwnedNodeEdgePoint> onepl, List<NodeRuleGroup> nodeRuleGroupList,
239             List<Rule> ruleList) {
240         Uuid nodeUuid;
241         nodeUuid = this.uuidMap.get(this.ietfNodeId + PLUS_DSR);
242         // client nep creation on DSR/ODU node
243         for (int i = 0; i < oorClientPortList.size(); i++) {
244             Uuid nepUuid = new Uuid(UUID.randomUUID().toString());
245             this.uuidMap.put(DSR_PLUS + oorClientPortList.get(i).getTpId().getValue(), nepUuid);
246             List<Name> onedNames = Arrays.asList(
247                     new NameBuilder()
248                     .setValueName(new StringBuilder("NodeEdgePoint_C").append(i + 1).toString())
249                     .setValue(oorClientPortList.get(i).getTpId().getValue())
250                     .build());
251
252             OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), onedNames, LayerProtocolName.ETH,
253                 LayerProtocolName.DSR, true, DSR_PLUS);
254             onepl.add(onep);
255         }
256         // network nep creation on DSR/ODU node
257         for (int i = 0; i < oorNetworkPortList.size(); i++) {
258             Uuid nepUuid = new Uuid(UUID.randomUUID().toString());
259             this.uuidMap.put(DSR_PLUS + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid);
260             List<Name> onedNames = Arrays.asList(
261                     new NameBuilder()
262                     .setValueName(new StringBuilder("NodeEdgePoint_N").append(i + 1).toString())
263                     .setValue(oorNetworkPortList.get(i).getTpId().getValue())
264                     .build());
265
266             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), onedNames, LayerProtocolName.ODU,
267                 LayerProtocolName.DSR, true, DSR_PLUS);
268             onepl.add(onep);
269         }
270         // create NodeRuleGroup
271         for (NonBlockingList nbl : this.oorOduSwitchingPool.getNonBlockingList()) {
272             List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
273                 .NodeEdgePoint> nepList = new ArrayList<>();
274             for (TpId tp : nbl.getTpList()) {
275                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
276                     .NodeEdgePoint nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
277                     .node.rule.group.NodeEdgePointBuilder()
278                     .setTopologyUuid(tapiTopoUuid)
279                     .setNodeUuid(this.uuidMap.get(this.ietfNodeId + PLUS_DSR))
280                     .setNodeEdgePointUuid(this.uuidMap.get(DSR_PLUS + tp.getValue()))
281                     .build();
282                 nepList.add(nep);
283             }
284             NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
285                 .setUuid(new Uuid(UUID.randomUUID().toString()))
286                 .setRule(ruleList)
287                 .setNodeEdgePoint(nepList)
288                 .build();
289             nodeRuleGroupList.add(nodeRuleGroup);
290         }
291         return nodeUuid;
292     }
293
294     private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, List<Name> nepNames, LayerProtocolName nepProtocol,
295         LayerProtocolName nodeProtocol, boolean withSip, String keyword) {
296         String key = keyword + oorTp.getTpId().getValue();
297         OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
298             .setUuid(this.uuidMap.get(key))
299             .setLayerProtocolName(nepProtocol)
300             .setName(nepNames);
301         if (withSip) {
302             onepBldr.setMappedServiceInterfacePoint(createSIP(1));
303         }
304         onepBldr.setSupportedCepLayerProtocolQualifier(createSupportedCepLayerProtocolQualifier(oorTp, nodeProtocol));
305         onepBldr.setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
306                 .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
307                 .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
308                 .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
309         return onepBldr.build();
310     }
311
312     private List<MappedServiceInterfacePoint> createSIP(int nb) {
313         List<MappedServiceInterfacePoint> msipl = new ArrayList<>();
314         for (int i = 0; i < nb; i++) {
315             MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
316                 .setServiceInterfacePointUuid(new Uuid(UUID.randomUUID().toString())).build();
317             msipl.add(msip);
318         }
319         return msipl;
320     }
321
322     private List<Class<? extends LAYERPROTOCOLQUALIFIER>> createSupportedCepLayerProtocolQualifier(TerminationPoint tp,
323         LayerProtocolName lpn) {
324         List<Class<? extends LAYERPROTOCOLQUALIFIER>> sclpqList = new ArrayList<>();
325         List<SupportedInterfaceCapability> sicList = tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
326             .otn.network.topology.rev181130.TerminationPoint1.class).getTpSupportedInterfaces()
327             .getSupportedInterfaceCapability();
328         for (SupportedInterfaceCapability sic : sicList) {
329             switch (lpn.getName()) {
330                 case "DSR":
331                     if (sic.getIfCapType().getSimpleName().equals("If10GEODU2e")) {
332                         sclpqList.add(DIGITALSIGNALTYPE10GigELAN.class);
333                         sclpqList.add(ODUTYPEODU2E.class);
334                     } else if (sic.getIfCapType().getSimpleName().equals("IfOCHOTU4ODU4")) {
335                         sclpqList.add(ODUTYPEODU4.class);
336                     } else if (sic.getIfCapType().getSimpleName().equals("If100GEODU4")) {
337                         sclpqList.add(DIGITALSIGNALTYPE100GigE.class);
338                         sclpqList.add(ODUTYPEODU4.class);
339                     }
340                     break;
341                 case "PHOTONIC_MEDIA":
342                     if (sic.getIfCapType().getSimpleName().equals("IfOCHOTU4ODU4")) {
343                         sclpqList.add(PHOTONICLAYERQUALIFIEROTSi.class);
344                         sclpqList.add(PHOTONICLAYERQUALIFIEROMS.class);
345                     }
346                     break;
347                 default:
348                     LOG.error("Layer Protocol Name is unknown");
349                     break;
350             }
351         }
352         return sclpqList;
353     }
354
355     private void createTapiTransitionalLinks() {
356         for (TerminationPoint tp : this.oorNetworkPortList) {
357             List<NodeEdgePoint> nepList = new ArrayList<>();
358             String sourceKey = DSR_PLUS + tp.getTpId().getValue();
359             Uuid sourceUuidTp = this.uuidMap.get(sourceKey);
360             String destKey = I_OT_SI + tp.getTpId().getValue();
361             Uuid destUuidTp = this.uuidMap.get(destKey);
362             NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
363                 .setTopologyUuid(this.tapiTopoUuid)
364                 .setNodeUuid(this.uuidMap.get(this.ietfNodeId + PLUS_DSR))
365                 .setNodeEdgePointUuid(sourceUuidTp)
366                 .build();
367             nepList.add(sourceNep);
368             NodeEdgePoint destNep = new NodeEdgePointBuilder()
369                 .setTopologyUuid(this.tapiTopoUuid)
370                 .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
371                 .setNodeEdgePointUuid(destUuidTp)
372                 .build();
373             nepList.add(destNep);
374             LinkBuilder transiLinkBldr = new LinkBuilder()
375                 .setUuid(new Uuid(UUID.randomUUID().toString()))
376                 .setTransitionedLayerProtocolName(Arrays.asList(LayerProtocolName.ODU.getName(),
377                     LayerProtocolName.PHOTONICMEDIA.getName()))
378                 .setNodeEdgePoint(nepList)
379                 .setDirection(ForwardingDirection.BIDIRECTIONAL)
380                 .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
381                     new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build()).build());
382             this.tapiLinks.add(transiLinkBldr.build());
383         }
384     }
385
386     public List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> getTapiNodes() {
387         return tapiNodes;
388     }
389
390     public List<Link> getTapiLinks() {
391         return tapiLinks;
392     }
393 }