7510eca714d035dcb947a980cabd5d00df235538
[transportpce.git] / tapi / src / main / java / org / opendaylight / transportpce / tapi / topology / ConvertORToTapiTopology.java
1 /*
2  * Copyright © 2023 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.math.RoundingMode;
11 import java.nio.charset.Charset;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.HashMap;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Set;
19 import java.util.UUID;
20 import java.util.stream.Collectors;
21 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
22 import org.opendaylight.transportpce.tapi.TapiStringConstants;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributes;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
41 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.AvailableCapacityBuilder;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.TotalPotentialCapacityBuilder;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.payload.structure.CapacityBuilder;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointBuilder;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU0;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODUCN;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.OTUTYPEOTUCN;
64 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
65 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
66 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE;
67 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
68 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi;
69 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC;
70 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpec;
71 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpecBuilder;
72 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.photonic.media.node.edge.point.spec.SpectrumCapabilityPacBuilder;
73 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrum;
74 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumBuilder;
75 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumKey;
76 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrum;
77 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumBuilder;
78 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumKey;
79 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrum;
80 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumBuilder;
81 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumKey;
82 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP;
83 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
84 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
85 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
86 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
87 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
88 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
89 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
90 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac;
91 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder;
92 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructure;
93 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructureBuilder;
94 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint;
95 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder;
96 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
97 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
98 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
99 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructure;
100 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructureBuilder;
101 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule;
102 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder;
103 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey;
104 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristic;
105 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristicBuilder;
106 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link;
107 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey;
108 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeBuilder;
109 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey;
110 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristic;
111 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder;
112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
113 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
114 import org.opendaylight.yangtools.yang.common.Decimal64;
115 import org.opendaylight.yangtools.yang.common.Uint16;
116 import org.opendaylight.yangtools.yang.common.Uint64;
117 import org.slf4j.Logger;
118 import org.slf4j.LoggerFactory;
119
120
121 public class ConvertORToTapiTopology {
122
123     private static final Logger LOG = LoggerFactory.getLogger(ConvertORToTapiTopology.class);
124     private String ietfNodeId;
125     private OpenroadmNodeType ietfNodeType;
126     private AdminStates ietfNodeAdminState;
127     private State ietfNodeOperState;
128     private List<TerminationPoint> oorClientPortList;
129     private List<TerminationPoint> oorNetworkPortList;
130     private OduSwitchingPools oorOduSwitchingPool;
131     private Uuid tapiTopoUuid;
132     private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
133         tapiNodes;
134     private Map<LinkKey, Link> tapiLinks;
135     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
136     private Map<String, Uuid> uuidMap;
137
138
139     public ConvertORToTapiTopology(Uuid tapiTopoUuid) {
140         this.tapiTopoUuid = tapiTopoUuid;
141         this.tapiNodes = new HashMap<>();
142         this.tapiLinks = new HashMap<>();
143         this.uuidMap = new HashMap<>();
144         this.tapiSips = new HashMap<>();
145     }
146
147     public void convertNode(Node ietfNode, List<String> networkPorts) {
148         this.ietfNodeId = ietfNode.getNodeId().getValue();
149         if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
150                 == null) {
151             return;
152         }
153         this.ietfNodeType = ietfNode.augmentation(
154             org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class).getNodeType();
155         this.ietfNodeAdminState = ietfNode.augmentation(
156                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
157             .getAdministrativeState();
158         this.ietfNodeOperState = ietfNode.augmentation(
159                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
160             .getOperationalState();
161         this.oorNetworkPortList = ietfNode.augmentation(
162                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
163             .getTerminationPoint().values().stream()
164             .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
165                 == OpenroadmTpType.XPONDERNETWORK.getIntValue()
166                 && networkPorts.contains(tp.getTpId().getValue()))
167             .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
168             .collect(Collectors.toList());
169         if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
170             this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
171                 .values().stream().findFirst().orElseThrow();
172             this.oorClientPortList = ietfNode.augmentation(
173                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
174                 .getTerminationPoint().values().stream()
175                 .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
176                     == OpenroadmTpType.XPONDERCLIENT.getIntValue())
177                 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
178                 .collect(Collectors.toList());
179         } else {
180             this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G();
181             List<TpId> tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream()
182                 .flatMap(nbl -> nbl.getTpList().stream())
183                 .collect(Collectors.toList());
184             this.oorClientPortList = ietfNode.augmentation(
185                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
186                 .getTerminationPoint().values().stream()
187                 .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
188                     == OpenroadmTpType.XPONDERCLIENT.getIntValue() && tpList.contains(tp.getTpId()))
189                 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
190                 .collect(Collectors.toList());
191             this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId()));
192         }
193
194         // node creation [DSR/ODU] ([DSR/ODU] and OTSI merged in R 2.4.X)
195         LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId);
196         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
197             TapiStringConstants.XPDR)).getBytes(Charset.forName("UTF-8"))).toString());
198         this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR), nodeUuid);
199         Name nameDsr = new NameBuilder().setValueName("dsr/odu node name")
200             .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build();
201         Name namePhot = new NameBuilder().setValueName("otsi node name")
202             .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build();
203         Name nameNodeType = new NameBuilder().setValueName("Node Type")
204             .setValue(this.ietfNodeType.getName()).build();
205         Set<LayerProtocolName> dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU,
206             LayerProtocolName.DIGITALOTN,LayerProtocolName.PHOTONICMEDIA);
207         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology
208             .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, namePhot.key(), namePhot,nameNodeType.key(),
209                 nameNodeType), dsrLayerProtocols);
210         LOG.debug("XPDR Node {} should have {} NEPs and SIPs", this.ietfNodeId,
211             this.oorClientPortList.size() + this.oorNetworkPortList.size());
212         LOG.info("XPDR Node {} has {} NEPs and {} SIPs", this.ietfNodeId,
213             dsrNode.getOwnedNodeEdgePoint().values().size(), dsrNode.getOwnedNodeEdgePoint().values().stream()
214                 .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
215         tapiNodes.put(dsrNode.key(), dsrNode);
216     }
217
218     public Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(String topoType, Uuid nodeUuid,
219             String orNodeId, Collection<OwnedNodeEdgePoint> onepl) {
220         Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
221             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
222             nepMap = new HashMap<>();
223         for (OwnedNodeEdgePoint onep : onepl) {
224             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
225                 nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group
226                     .NodeEdgePointBuilder()
227                 .setTopologyUuid(tapiTopoUuid)
228                 .setNodeUuid(nodeUuid)
229                 .setNodeEdgePointUuid(onep.key().getUuid())
230                 .build();
231             nepMap.put(nep.key(), nep);
232         }
233         String rdmName =
234             topoType.equals("Abstracted")
235                 ? "rdm infra node rule group"
236                 : orNodeId + " node rule group";
237         Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
238         Set<RuleType> ruleTypes = new HashSet<>();
239         ruleTypes.add(RuleType.FORWARDING);
240         Map<RuleKey, Rule> ruleList = new HashMap<>();
241         Rule rule = new RuleBuilder()
242             .setLocalId("forward")
243             .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
244             .setRuleType(ruleTypes)
245             .build();
246         ruleList.put(rule.key(), rule);
247         NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
248             .setUuid(new Uuid(UUID.nameUUIDFromBytes((rdmName)
249                 .getBytes(Charset.forName("UTF-8"))).toString()))
250             .setRule(ruleList)
251             .setNodeEdgePoint(nepMap)
252             .build();
253         nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
254         return nodeRuleGroupMap;
255     }
256
257     public Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createMSIP(int nb,
258             LayerProtocolName layerProtocol, String tpId, String nodeid,
259             Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
260             OperationalState operState, AdministrativeState adminState) {
261         // add them to SIP context
262         Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
263         for (int i = 0; i < nb; i++) {
264             String sipName =
265                 nb == 1
266                     ? String.join("+", "SIP", nodeid, tpId)
267                     : String.join("+", "SIP", nodeid, tpId,"Nber", String.valueOf(i));
268             LOG.info("SIP = {}", sipName);
269             Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes(sipName.getBytes(Charset.forName("UTF-8"))).toString());
270             MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
271                 .setServiceInterfacePointUuid(sipUuid).build();
272             ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tpId, nodeid, supportedInterfaceCapability,
273                 operState, adminState);
274             this.tapiSips.put(sip.key(), sip);
275             msipl.put(msip.key(), msip);
276             LOG.debug("SIP created {}", sip.getUuid());
277             LOG.debug("This SIP corresponds to SIP+nodeId {} + TpId {}", nodeid, tpId);
278         }
279         return msipl;
280     }
281
282     public List<AvailablePayloadStructure> createAvailablePayloadStructureForPhtncMedia(Boolean otsiProvisioned,
283             Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
284         if (supportedOpModes == null || supportedOpModes.isEmpty()) {
285             return null;
286         }
287         Integer nepRate = 0;
288         Integer loopRate = 0;
289         for (OperationalModeKey operationalMode : supportedOpModes) {
290             if (operationalMode.toString().contains("800G")) {
291                 loopRate = 8;
292             } else if (operationalMode.toString().contains("600G")) {
293                 loopRate = 6;
294             } else if (operationalMode.toString().contains("400G")) {
295                 loopRate = 4;
296             } else if (operationalMode.toString().contains("300G")) {
297                 loopRate = 3;
298             } else if (operationalMode.toString().contains("200G")) {
299                 loopRate = 2;
300             } else if (operationalMode.toString().contains("100G")) {
301                 loopRate = 1;
302             }
303             if (loopRate >= nepRate) {
304                 nepRate = loopRate;
305             }
306         }
307         CapacityBuilder capBd = new CapacityBuilder()
308             .setUnit(CAPACITYUNITGBPS.VALUE);
309         List<AvailablePayloadStructure> aps = new ArrayList<>();
310         Integer cepInstanceNber = 1;
311         if (otsiProvisioned) {
312             cepInstanceNber = 0;
313         }
314         for (SupportedInterfaceCapability sic : sicList) {
315             String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
316             switch (ifCapType) {
317                 case "IfOCHOTU4ODU4":
318                 case "IfOCHOTU4ODU4Regen":
319                 case "IfOCHOTU4ODU4Uniregen":
320                     aps.add(new AvailablePayloadStructureBuilder()
321                         .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
322                         .setNumberOfCepInstances(Uint64.valueOf(cepInstanceNber))
323                         .setCapacity(capBd.setValue(Decimal64.valueOf(100.0 * cepInstanceNber, RoundingMode.DOWN))
324                             .build())
325                         .build());
326                     break;
327                 case "IfOCHOTUCnODUCn":
328                 case "IfOtsiOtucnOducn":
329                 case "IfOCHOTUCnODUCnRegen":
330                 case "IfOCHOTUCnODUCnUniregen":
331                     aps.add(new AvailablePayloadStructureBuilder()
332                         .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
333                             ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
334                         .setNumberOfCepInstances(Uint64.valueOf(nepRate * cepInstanceNber))
335                         .setCapacity(
336                             capBd.setValue(Decimal64.valueOf(nepRate * 100.0 * cepInstanceNber, RoundingMode.DOWN))
337                             .build())
338                         .build());
339                     break;
340                 default:
341                     break;
342             }
343         }
344         return aps.stream().distinct().toList();
345     }
346
347     public List<SupportedPayloadStructure> createSupportedPayloadStructureForPhtncMedia(
348             Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
349         if (supportedOpModes == null || supportedOpModes.isEmpty()) {
350             return null;
351         }
352         Integer nepRate = 0;
353         Integer loopRate = 0;
354         for (OperationalModeKey operationalMode : supportedOpModes) {
355             if (operationalMode.toString().contains("800G")) {
356                 loopRate = 8;
357             } else if (operationalMode.toString().contains("600G")) {
358                 loopRate = 6;
359             } else if (operationalMode.toString().contains("400G")) {
360                 loopRate = 4;
361             } else if (operationalMode.toString().contains("300G")) {
362                 loopRate = 3;
363             } else if (operationalMode.toString().contains("200G")) {
364                 loopRate = 2;
365             } else if (operationalMode.toString().contains("100G")) {
366                 loopRate = 1;
367             }
368             if (loopRate >= nepRate) {
369                 nepRate = loopRate;
370             }
371         }
372         CapacityBuilder capBd = new CapacityBuilder()
373             .setUnit(CAPACITYUNITGBPS.VALUE);
374         List<SupportedPayloadStructure> sps = new ArrayList<>();
375         for (SupportedInterfaceCapability sic : sicList) {
376             String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
377             switch (ifCapType) {
378                 case "IfOCHOTU4ODU4":
379                 case "IfOCHOTU4ODU4Regen":
380                 case "IfOCHOTU4ODU4Uniregen":
381                     sps.add(new SupportedPayloadStructureBuilder()
382                         .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
383                         .setNumberOfCepInstances(Uint64.valueOf(1))
384                         .setCapacity(capBd.setValue(Decimal64.valueOf(100.0, RoundingMode.DOWN)).build())
385                         .build());
386                     break;
387                 case "IfOCHOTUCnODUCn":
388                 case "IfOtsiOtucnOducn":
389                 case "IfOCHOTUCnODUCnRegen":
390                 case "IfOCHOTUCnODUCnUniregen":
391                     sps.add(new SupportedPayloadStructureBuilder()
392                         .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
393                             ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
394                         .setNumberOfCepInstances(Uint64.valueOf(nepRate))
395                         .setCapacity(capBd.setValue(Decimal64.valueOf(nepRate * 100.0, RoundingMode.DOWN)).build())
396                         .build());
397                     break;
398                 default:
399                     break;
400             }
401         }
402         return sps.stream().distinct().toList();
403     }
404
405     @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
406         justification = "Voluntarily No break in switchcase where comment is inserted in following method")
407     public List<SupportedCepLayerProtocolQualifierInstances> createSupportedCepLayerProtocolQualifier(
408             Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
409         List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
410         if (sicList == null) {
411             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
412                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
413                 .setNumberOfCepInstances(Uint64.valueOf(1))
414                 .build());
415             return sclpqiList;
416         }
417         LOG.debug("SIC list = {}", sicList);
418         for (SupportedInterfaceCapability sic : sicList) {
419             String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
420             switch (lpn.getName()) {
421                 case "ETH":
422                 case "DSR":
423                     switch (ifCapType) {
424                         case "If1GEODU0":
425                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
426                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
427                                 .setNumberOfCepInstances(Uint64.valueOf(1))
428                                 .build());
429                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
430                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
431                                 .setNumberOfCepInstances(Uint64.valueOf(1))
432                                 .build());
433                             break;
434                         case "If10GEODU2e":
435                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
436                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
437                                 .setNumberOfCepInstances(Uint64.valueOf(1))
438                                 .build());
439                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
440                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
441                                 .setNumberOfCepInstances(Uint64.valueOf(1))
442                                 .build());
443                             break;
444                         case "If10GEODU2":
445                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
446                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
447                                 .setNumberOfCepInstances(Uint64.valueOf(1))
448                                 .build());
449                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
450                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
451                                 .setNumberOfCepInstances(Uint64.valueOf(1))
452                                 .build());
453                             break;
454                         case "If10GE":
455                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
456                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
457                                 .setNumberOfCepInstances(Uint64.valueOf(1))
458                                 .build());
459                             break;
460                         case "If100GEODU4":
461                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
462                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
463                                 .setNumberOfCepInstances(Uint64.valueOf(1))
464                                 .build());
465                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
466                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
467                                 .setNumberOfCepInstances(Uint64.valueOf(1))
468                                 .build());
469                             break;
470                         case "If100GE":
471                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
472                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
473                                 .setNumberOfCepInstances(Uint64.valueOf(1))
474                                 .build());
475                             break;
476                         case "IfOCHOTU4ODU4":
477                         case "IfOCH":
478                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
479                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
480                                 .setNumberOfCepInstances(Uint64.valueOf(1))
481                                 .build());
482                             break;
483                         default:
484                             LOG.error("IfCapability type not managed");
485                             break;
486                     }
487                     break;
488                 case "ODU":
489                     switch (ifCapType) {
490                         case "If1GEODU0":
491                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
492                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
493                                 .setNumberOfCepInstances(Uint64.valueOf(1))
494                                 .build());
495                             break;
496                         case "If10GEODU2e":
497                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
498                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
499                                 .setNumberOfCepInstances(Uint64.valueOf(1))
500                                 .build());
501                             break;
502                         case "If10GEODU2":
503                         case "If10GE":
504                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
505                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
506                                 .setNumberOfCepInstances(Uint64.valueOf(1))
507                                 .build());
508                             break;
509                         case "If100GEODU4":
510                         case "If100GE":
511                         case "IfOCHOTU4ODU4":
512                         case "IfOCH":
513                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
514                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
515                                 .setNumberOfCepInstances(Uint64.valueOf(1))
516                                 .build());
517                             break;
518                         default:
519                             LOG.error("IfCapability type not managed");
520                             break;
521                     }
522                     break;
523                 case "PHOTONIC_MEDIA":
524                     switch (ifCapType) {
525                         case "IfOCHOTUCnODUCn":
526                         case "IfOtsiOtucnOducn":
527                         case "IfOCHOTUCnODUCnRegen":
528                         case "IfOCHOTUCnODUCnUniregen":
529                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
530                                 .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
531                                 .setNumberOfCepInstances(Uint64.valueOf(1))
532                                 .build());
533                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
534                                 .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
535                                 .setNumberOfCepInstances(Uint64.valueOf(1))
536                                 .build());
537                         //fallthrough
538                         case "IfOCH":
539                         case "IfOCHOTU4ODU4":
540                         case "IfOCHOTU4ODU4Regen":
541                         case "IfOCHOTU4ODU4Uniregen":
542                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
543                                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
544                                 .setNumberOfCepInstances(Uint64.valueOf(1))
545                                 .build());
546                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
547                                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
548                                 .setNumberOfCepInstances(Uint64.valueOf(1))
549                                 .build());
550                             break;
551                         default:
552                             break;
553                     }
554                     break;
555                 default:
556                     LOG.error("Layer Protocol Name is unknown {}", lpn.getName());
557                     break;
558             }
559         }
560         return sclpqiList.stream().distinct().toList();
561     }
562
563     public Map<Double, Double> getXpdrUsedWavelength(TerminationPoint tp) {
564         if (tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
565                     .TerminationPoint1.class) == null
566                 || tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
567                     .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
568                 == null) {
569             return null;
570         }
571         XpdrNetworkAttributes xnatt = tp.augmentation(
572             org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
573             .getXpdrNetworkAttributes();
574         Map<Double,Double> freqWidthMap = new HashMap<>();
575         if (xnatt.getWavelength() != null && xnatt.getWavelength().getFrequency() != null
576                 && xnatt.getWavelength().getWidth() != null) {
577             freqWidthMap.put(xnatt.getWavelength().getFrequency().getValue().doubleValue(),
578                 xnatt.getWavelength().getWidth().getValue().doubleValue());
579             return freqWidthMap;
580         }
581         return null;
582     }
583
584     public Map<Double, Double> getPPUsedWavelength(TerminationPoint tp) {
585         PpAttributes ppAtt = tp.augmentation(
586             org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
587             .getPpAttributes();
588         if (ppAtt == null) {
589             return null;
590         }
591         Map<Double,Double> freqWidthMap = new HashMap<>();
592         if (ppAtt.getUsedWavelength() != null && ppAtt.getUsedWavelength().entrySet().iterator().next() != null) {
593             freqWidthMap.put(ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency().getValue()
594                 .doubleValue(), ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency()
595                 .getValue().doubleValue());
596             return freqWidthMap;
597         }
598         return null;
599     }
600
601     public OwnedNodeEdgePointBuilder addPayloadStructureAndPhotSpecToOnep(String nodeId,
602             Map<Double, Double> freqWidthMap, List<OperationalModeKey> operModeList,
603             Collection<SupportedInterfaceCapability> sicColl, OwnedNodeEdgePointBuilder onepBldr, String keyword) {
604         if (String.join("+", nodeId, TapiStringConstants.OTSI_MC).equals(keyword)
605                 || String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)) {
606             //Creating OTS & OTSI_MC NEP specific attributes
607             onepBldr.setSupportedPayloadStructure(createSupportedPayloadStructureForPhtncMedia(
608                 sicColl,operModeList));
609             SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder();
610             OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder();
611             if (freqWidthMap == null || freqWidthMap.isEmpty()) {
612                 ospecBd
613                     .setUpperFrequency(Uint64.valueOf(0))
614                     .setLowerFrequency(Uint64.valueOf(0));
615                 onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
616                     false, sicColl,operModeList));
617                 double naz = 0.01;
618                 AvailableSpectrum  aspec = new AvailableSpectrumBuilder()
619                     .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
620                         + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz)))
621                     .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + naz)))
622                     .build();
623                 Map<AvailableSpectrumKey, AvailableSpectrum> aspecMap = new HashMap<>();
624                 aspecMap.put(new AvailableSpectrumKey(aspec.getLowerFrequency(),
625                     aspec.getUpperFrequency()), aspec);
626                 spectrumPac.setAvailableSpectrum(aspecMap);
627             } else {
628                 onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
629                     true, sicColl,operModeList));
630                 ospecBd
631                     .setUpperFrequency(Uint64.valueOf(Math.round(
632                         freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
633                         + (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)))
634                     .setLowerFrequency(Uint64.valueOf(Math.round(
635                         freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
636                         - (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)));
637             }
638             OccupiedSpectrum ospec = ospecBd.build();
639             Map<OccupiedSpectrumKey, OccupiedSpectrum> ospecMap = new HashMap<>();
640             ospecMap.put(new OccupiedSpectrumKey(ospec.getLowerFrequency(),
641                 ospec.getUpperFrequency()), ospec);
642             spectrumPac.setOccupiedSpectrum(ospecMap);
643             double nazz = 0.01;
644             SupportableSpectrum  sspec = new SupportableSpectrumBuilder()
645                 .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
646                     + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + nazz)))
647                 .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + nazz)))
648                 .build();
649             Map<SupportableSpectrumKey, SupportableSpectrum> sspecMap = new HashMap<>();
650             sspecMap.put(new SupportableSpectrumKey(sspec.getLowerFrequency(),
651                 sspec.getUpperFrequency()), sspec);
652             spectrumPac.setSupportableSpectrum(sspecMap);
653             PhotonicMediaNodeEdgePointSpec pnepSpec = new PhotonicMediaNodeEdgePointSpecBuilder()
654                 .setSpectrumCapabilityPac(spectrumPac.build())
655                 .build();
656             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.OwnedNodeEdgePoint1 onep1 =
657                     new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
658                     .OwnedNodeEdgePoint1Builder()
659                     .setPhotonicMediaNodeEdgePointSpec(pnepSpec)
660                     .build();
661             onepBldr.addAugmentation(onep1);
662         }
663         return onepBldr;
664     }
665
666     private OduSwitchingPools createOduSwitchingPoolForTp100G() {
667         Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
668         int count = 1;
669         for (TerminationPoint tp : this.oorNetworkPortList) {
670             TpId tpid1 = tp.getTpId();
671             TpId tpid2 = tp.augmentation(
672                     org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class)
673                 .getAssociatedConnectionMapTp().iterator().next();
674             Set<TpId> tpList = new HashSet<>();
675             tpList.add(tpid1);
676             tpList.add(tpid2);
677             NonBlockingList nbl = new NonBlockingListBuilder()
678                 .setNblNumber(Uint16.valueOf(count))
679                 .setTpList(tpList)
680                 .build();
681             nblMap.put(nbl.key(), nbl);
682             count++;
683         }
684         return new OduSwitchingPoolsBuilder()
685             .setNonBlockingList(nblMap)
686             .setSwitchingPoolNumber(Uint16.valueOf(1))
687             .build();
688     }
689
690     private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node
691             createTapiNode(Map<NameKey, Name> nodeNames, Set<LayerProtocolName> layerProtocols) {
692         Uuid nodeUuid = null;
693         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
694         Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = new HashMap<>();
695         Map<RuleKey, Rule> ruleList = new HashMap<>();
696         Set<RuleType> ruleTypes = new HashSet<>();
697         ruleTypes.add(RuleType.FORWARDING);
698         Rule rule = new RuleBuilder()
699             .setLocalId("forward")
700             .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
701             .setRuleType(ruleTypes)
702             .build();
703         ruleList.put(rule.key(), rule);
704         if (layerProtocols.contains(LayerProtocolName.DSR)
705                 || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
706             nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList);
707         } else {
708             LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next())
709                 .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue());
710         }
711      // Empty random creation of mandatory fields for avoiding errors....
712         CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
713             .setCostAlgorithm("Restricted Shortest Path - RSP")
714             .setCostName("HOP_COUNT")
715             .setCostValue(TapiStringConstants.COST_HOP_VALUE)
716             .build();
717         LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
718             .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
719             .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
720             .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
721             .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
722             .setTrafficPropertyName("FIXED_LATENCY")
723             .build();
724         RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
725             .setRiskCharacteristicName("risk characteristic")
726             .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
727             .build();
728         RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
729             .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
730             .build();
731         return new NodeBuilder()
732             .setUuid(nodeUuid)
733             .setName(nodeNames)
734             .setLayerProtocolName(layerProtocols)
735             .setAdministrativeState(transformAsToTapiAdminState(this.ietfNodeAdminState.getName()))
736             .setOperationalState(transformOsToTapiOperationalState(this.ietfNodeOperState.getName()))
737             .setLifecycleState(LifecycleState.INSTALLED)
738             .setOwnedNodeEdgePoint(onepl)
739             .setNodeRuleGroup(nodeRuleGroupList)
740             .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
741             .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
742             .setRiskParameterPac(riskParamPac)
743             .setErrorCharacteristic("error")
744             .setLossCharacteristic("loss")
745             .setRepeatDeliveryCharacteristic("repeat delivery")
746             .setDeliveryOrderCharacteristic("delivery order")
747             .setUnavailableTimeCharacteristic("unavailable time")
748             .setServerIntegrityProcessCharacteristic("server integrity process")
749             .build();
750     }
751
752     private Uuid getNodeUuid4Dsr(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
753                                  Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
754         Uuid nodeUuid;
755         nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR));
756         // client NEP DSR creation on DSR/ODU node
757         for (int i = 0; i < oorClientPortList.size(); i++) {
758             Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
759                 (String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
760                     oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
761             LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
762                 oorClientPortList.get(i).getTpId().getValue()), nepUuid);
763             this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
764                     oorClientPortList.get(i).getTpId().getValue()), nepUuid);
765             NameBuilder nameBldr = new NameBuilder().setValue(
766                 String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
767                     oorClientPortList.get(i).getTpId().getValue()));
768             Name name;
769             if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
770                 name = nameBldr.setValueName("100G-tpdr").build();
771             } else {
772                 name = nameBldr.setValueName("NodeEdgePoint_C").build();
773             }
774
775             OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name),
776                 LayerProtocolName.DSR, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
777                     TapiStringConstants.DSR));
778             onepl.put(onep.key(), onep);
779         }
780         // CLIENT NEP E_ODU creation on DSR/ODU node
781         for (int i = 0; i < oorClientPortList.size(); i++) {
782             Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
783                 (String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
784                     oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
785             LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
786                 oorClientPortList.get(i).getTpId().getValue()), nepUuid1);
787             this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
788                 oorClientPortList.get(i).getTpId().getValue()), nepUuid1);
789             Name onedName = new NameBuilder()
790                 .setValueName("eNodeEdgePoint_N")
791                 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
792                     oorClientPortList.get(i).getTpId().getValue()))
793                 .build();
794
795             OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(onedName.key(), onedName),
796                 LayerProtocolName.ODU, LayerProtocolName.DSR, false, String.join("+", this.ietfNodeId,
797                     TapiStringConstants.E_ODU));
798             onepl.put(onep.key(), onep);
799         }
800         // NETWORK NEPs I_ODU creation on DSR/ODU node
801         for (int i = 0; i < oorNetworkPortList.size(); i++) {
802             Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
803                 (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
804                     oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
805             LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
806                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
807             this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
808                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
809             Name onedName = new NameBuilder()
810                 .setValueName("iNodeEdgePoint_N")
811                 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
812                     oorNetworkPortList.get(i).getTpId().getValue()))
813                 .build();
814
815             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
816                 LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
817                     TapiStringConstants.I_ODU));
818             onepl.put(onep.key(), onep);
819         }
820         // NETWORK NEP OTS network on DSR/ODU node
821         for (int i = 0; i < oorNetworkPortList.size(); i++) {
822             Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
823                 (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
824                     oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
825                 .toString());
826             LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
827                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
828             this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
829                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
830             Name onedName = new NameBuilder()
831                 .setValueName("eNodeEdgePoint")
832                 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
833                     oorNetworkPortList.get(i).getTpId().getValue()))
834                 .build();
835
836             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
837                 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
838                 String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS));
839             onepl.put(onep.key(), onep);
840         }
841         for (int i = 0; i < oorNetworkPortList.size(); i++) {
842             Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
843                 (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
844                     oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
845                 .toString());
846             LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
847                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3);
848             this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
849                 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3);
850             Name onedName = new NameBuilder()
851                 .setValueName("PhotMedNodeEdgePoint")
852                 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
853                     oorNetworkPortList.get(i).getTpId().getValue()))
854                 .build();
855
856             OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
857                 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
858                 String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC));
859             onepl.put(onep.key(), onep);
860         }
861         // create NodeRuleGroup
862         int count = 1;
863         LOG.debug("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values());
864         for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) {
865             Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
866                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
867                 nepList = new HashMap<>();
868             Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
869                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
870                 oduNepList = new HashMap<>();
871             LOG.debug("UUidMap={}", this.uuidMap.keySet());
872             LOG.debug("TP list = {}", nbl.getTpList());
873             for (TpId tp : nbl.getTpList()) {
874                 LOG.debug("TP={}", tp.getValue());
875                 LOG.debug("UuidKey={}", String.join("+", this.ietfNodeId,
876                     TapiStringConstants.E_ODU, tp.getValue()));
877                 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
878                         tp.getValue())) || this.uuidMap.containsKey(String.join(
879                         "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) {
880                     String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR
881                         : TapiStringConstants.I_ODU;
882                     org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
883                             nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
884                             .node.rule.group.NodeEdgePointBuilder()
885                         .setTopologyUuid(tapiTopoUuid)
886                         .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
887                             TapiStringConstants.XPDR)))
888                         .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
889                             qual, tp.getValue())))
890                         .build();
891                     nepList.put(nep.key(), nep);
892                 }
893                 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
894                         TapiStringConstants.E_ODU, tp.getValue()))) {
895                     org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
896                             nep1 = new org.opendaylight.yang.gen.v1.urn
897                             .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder()
898                         .setTopologyUuid(tapiTopoUuid)
899                         .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
900                             TapiStringConstants.XPDR)))
901                         .setNodeEdgePointUuid(this.uuidMap.get(String.join(
902                             "+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue())))
903                         .build();
904                     oduNepList.put(nep1.key(), nep1);
905                 }
906                 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
907                         TapiStringConstants.I_ODU, tp.getValue()))) {
908                     org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
909                             nep2 = new org.opendaylight.yang.gen.v1.urn
910                             .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder()
911                         .setTopologyUuid(tapiTopoUuid)
912                         .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
913                             TapiStringConstants.XPDR)))
914                         .setNodeEdgePointUuid(this.uuidMap.get(String.join(
915                             "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue())))
916                         .build();
917                     oduNepList.put(nep2.key(), nep2);
918                 }
919             }
920             LOG.debug("NEPLIST (DSR/I_ODU) of [dsr node rule group] is {}", nepList.toString());
921             LOG.debug("NEPLIST (E_ODU/I_ODU) of [odu node rule group] is {}", nepList.toString());
922             // Empty random creation of mandatory fields for avoiding errors....
923             CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
924                 .setCostAlgorithm("Restricted Shortest Path - RSP")
925                 .setCostName("HOP_COUNT")
926                 .setCostValue(TapiStringConstants.COST_HOP_VALUE)
927                 .build();
928             LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
929                 .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
930                 .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
931                 .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
932                 .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
933                 .setTrafficPropertyName("FIXED_LATENCY")
934                 .build();
935             RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
936                 .setRiskCharacteristicName("risk characteristic")
937                 .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
938                 .build();
939             NodeRuleGroup nodeRuleGroup1 = new NodeRuleGroupBuilder()
940                 .setUuid(new Uuid(UUID.nameUUIDFromBytes(("dsr node rule group " + count)
941                     .getBytes(Charset.forName("UTF-8"))).toString()))
942                 .setRule(ruleList)
943                 .setNodeEdgePoint(nepList)
944                 .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
945                 .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
946                 .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
947                 .build();
948             nodeRuleGroupList.put(nodeRuleGroup1.key(), nodeRuleGroup1);
949             NodeRuleGroup nodeRuleGroup2 = new NodeRuleGroupBuilder()
950                 .setUuid(new Uuid(UUID.nameUUIDFromBytes(("odu node rule group " + count)
951                     .getBytes(Charset.forName("UTF-8"))).toString()))
952                 .setRule(ruleList)
953                 .setNodeEdgePoint(oduNepList)
954                 .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
955                 .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
956                 .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
957                 .build();
958             nodeRuleGroupList.put(nodeRuleGroup2.key(), nodeRuleGroup2);
959             count++;
960         }
961         return nodeUuid;
962     }
963
964     private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
965             LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip, String keyword) {
966         String key = String.join("+", keyword, oorTp.getTpId().getValue());
967         AdministrativeState adminState = (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null)
968             ? transformAsToTapiAdminState(oorTp.augmentation(TerminationPoint1.class).getAdministrativeState()
969                 .getName())
970             : null;
971         OperationalState operState = (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null)
972             ? transformOsToTapiOperationalState(oorTp.augmentation(TerminationPoint1.class).getOperationalState()
973                 .getName())
974             : null;
975         org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 =
976             oorTp.augmentation(org.opendaylight.yang.gen.v1.http
977                 .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class);
978         if (tp1.getTpSupportedInterfaces() == null) {
979             LOG.warn("Tp supported interface doesnt exist on TP {}", oorTp.getTpId().getValue());
980             return null;
981         }
982         Collection<SupportedInterfaceCapability> sicColl = tp1.getTpSupportedInterfaces()
983             .getSupportedInterfaceCapability().values();
984         OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
985             .setUuid(this.uuidMap.get(key))
986             .setLayerProtocolName(nepProtocol)
987             .setName(nepNames);
988         onepBldr.setSupportedCepLayerProtocolQualifierInstances(createSupportedCepLayerProtocolQualifier(sicColl,
989                 nepProtocol))
990             .setDirection(Direction.BIDIRECTIONAL)
991             .setLinkPortRole(PortRole.SYMMETRIC)
992             .setAdministrativeState(adminState)
993             .setOperationalState(operState)
994             .setLifecycleState(LifecycleState.INSTALLED);
995         if (withSip) {
996             onepBldr.setMappedServiceInterfacePoint(
997                 createMSIP(1, nepProtocol, oorTp.getTpId().getValue(), keyword, sicColl, operState, adminState));
998         }
999         List<OperationalModeKey> opModeList = new ArrayList<>();
1000         if (oorTp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
1001             if (oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
1002                         .TerminationPoint1.class) == null
1003                     || oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
1004                         .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
1005                     == null) {
1006                 for (SupportedInterfaceCapability sic : sicColl) {
1007                     String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
1008                     if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType)
1009                             || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) {
1010                         opModeList.add(new OperationalModeKey("400G"));
1011                         LOG.warn(TopologyUtils.NOOPMODEDECLARED + "400G rate available", oorTp.getTpId().toString());
1012                         break;
1013                     }
1014                 }
1015                 opModeList.add(new OperationalModeKey("100G"));
1016                 LOG.warn(TopologyUtils.NOOPMODEDECLARED + "100G rate available", oorTp.getTpId().toString());
1017             } else {
1018                 opModeList = oorTp.augmentation(
1019                     org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
1020                     .getXpdrNetworkAttributes().getSupportedOperationalModes().getOperationalMode().keySet().stream()
1021                     .toList();
1022             }
1023             Map<Double, Double> freqWidthMap = getXpdrUsedWavelength(oorTp);
1024             onepBldr = addPayloadStructureAndPhotSpecToOnep(this.ietfNodeId, freqWidthMap, opModeList, sicColl,
1025                 onepBldr, keyword);
1026         }
1027         return onepBldr.build();
1028     }
1029
1030     private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, String tpId,
1031         String nodeid, Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
1032         OperationalState operState, AdministrativeState adminState) {
1033     // TODO: what value should be set in total capacity and available capacity??
1034     // LOG.info("SIP name = {}", String.join("+", nodeid, tp.getTpId().getValue()));
1035         Name sipName = new NameBuilder()
1036             .setValueName("SIP name")
1037             .setValue(String.join("+", nodeid, tpId))
1038             .build();
1039
1040         return new ServiceInterfacePointBuilder()
1041             .setUuid(sipUuid)
1042             .setName(Map.of(sipName.key(), sipName))
1043             .setLayerProtocolName(layerProtocol)
1044             .setAdministrativeState(adminState)
1045             .setOperationalState(operState)
1046             .setLifecycleState(LifecycleState.INSTALLED)
1047             .setAvailableCapacity(new AvailableCapacityBuilder().build())
1048             .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().build())
1049             .setSupportedCepLayerProtocolQualifierInstances(createSipSupportedLayerProtocolQualifier(
1050                 supportedInterfaceCapability, layerProtocol))
1051             .build();
1052     }
1053
1054     @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
1055         justification = "Voluntarily No break in switchcase where comment is inserted in following method")
1056     private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1057             .service._interface.point.SupportedCepLayerProtocolQualifierInstances>
1058             createSipSupportedLayerProtocolQualifier(
1059             Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
1060             LayerProtocolName lpn) {
1061         List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1062             .service._interface.point.SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
1063         if (supportedInterfaceCapability == null) {
1064             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1065                 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1066                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
1067                 .setNumberOfCepInstances(Uint64.valueOf(1))
1068                 .build());
1069             return sclpqiList;
1070         }
1071         for (SupportedInterfaceCapability sic : supportedInterfaceCapability) {
1072             String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
1073             switch (lpn.getName()) {
1074                 case "ETH":
1075                 case "DSR":
1076                     switch (ifCapType) {
1077                         case "If1GEODU0":
1078                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1079                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1080                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
1081                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1082                                 .build());
1083                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1084                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1085                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
1086                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1087                                 .build());
1088                             break;
1089                         case "If10GEODU2e":
1090                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1091                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1092                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
1093                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1094                                 .build());
1095                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1096                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1097                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
1098                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1099                                 .build());
1100                             break;
1101                         case "If10GEODU2":
1102                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1103                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1104                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
1105                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1106                                 .build());
1107                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1108                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1109                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
1110                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1111                                 .build());
1112                             break;
1113                         case "If10GE":
1114                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1115                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1116                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
1117                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1118                                 .build());
1119                             break;
1120                         case "If100GEODU4":
1121                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1122                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1123                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
1124                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1125                                 .build());
1126                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1127                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1128                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
1129                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1130                                 .build());
1131                             break;
1132                         case "If100GE":
1133                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1134                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1135                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
1136                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1137                                 .build());
1138                             break;
1139                         case "IfOCHOTU4ODU4":
1140                         case "IfOCH":
1141                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1142                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1143                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
1144                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1145                                 .build());
1146                             break;
1147                         default:
1148                             LOG.error("IfCapability type not managed");
1149                             break;
1150                     }
1151                     break;
1152                 case "ODU":
1153                     switch (ifCapType) {
1154                         case "If1GEODU0":
1155                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1156                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1157                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
1158                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1159                                 .build());
1160                             break;
1161                         case "If10GEODU2e":
1162                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1163                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1164                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
1165                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1166                                 .build());
1167                             break;
1168                         case "If10GEODU2":
1169                         case "If10GE":
1170                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1171                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1172                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
1173                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1174                                 .build());
1175                             break;
1176                         case "If100GEODU4":
1177                         case "If100GE":
1178                         case "IfOCHOTU4ODU4":
1179                         case "IfOCH":
1180                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1181                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1182                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
1183                                 .setNumberOfCepInstances(Uint64.valueOf(0))
1184                                 .build());
1185                             break;
1186                         default:
1187                             LOG.error("IfCapability type not managed");
1188                             break;
1189                     }
1190                     break;
1191                 case "PHOTONIC_MEDIA":
1192                     switch (ifCapType) {
1193                         case "IfOCHOTUCnODUCn":
1194                         case "IfOtsiOtucnOducn":
1195                         case "IfOCHOTUCnODUCnRegen":
1196                         case "IfOCHOTUCnODUCnUniregen":
1197                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1198                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1199                                 .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
1200                                 .setNumberOfCepInstances(Uint64.valueOf(1))
1201                                 .build());
1202                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1203                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1204                                 .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
1205                                 .setNumberOfCepInstances(Uint64.valueOf(1))
1206                                 .build());
1207                          //fallthrough
1208                         case "IfOCH":
1209                         case "IfOCHOTU4ODU4":
1210                         case "IfOCHOTU4ODU4Regen":
1211                         case "IfOCHOTU4ODU4Uniregen":
1212                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1213                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1214                                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
1215                                 .setNumberOfCepInstances(Uint64.valueOf(1))
1216                                 .build());
1217                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
1218                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
1219                                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
1220                                 .setNumberOfCepInstances(Uint64.valueOf(1))
1221                                 .build());
1222                             break;
1223                         default:
1224                             break;
1225                     }
1226                     break;
1227                 default:
1228                     LOG.error("Layer Protocol Name is unknown");
1229                     break;
1230             }
1231         }
1232         return sclpqiList.stream().distinct().toList();
1233     }
1234
1235     public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
1236             getTapiNodes() {
1237         return tapiNodes;
1238     }
1239
1240     public Map<LinkKey, Link> getTapiLinks() {
1241         return tapiLinks;
1242     }
1243
1244     public AdministrativeState transformAsToTapiAdminState(String adminState) {
1245         if (adminState == null) {
1246             return null;
1247         }
1248         return adminState.equals(AdminStates.InService.getName())
1249             || adminState.equals(AdministrativeState.UNLOCKED.getName()) ? AdministrativeState.UNLOCKED
1250                 : AdministrativeState.LOCKED;
1251     }
1252
1253     public OperationalState transformOsToTapiOperationalState(String operState) {
1254         if (operState == null) {
1255             return null;
1256         }
1257         return operState.equals("inService") || operState.equals(OperationalState.ENABLED.getName())
1258             ? OperationalState.ENABLED : OperationalState.DISABLED;
1259     }
1260
1261     public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
1262         return tapiSips;
1263     }
1264
1265     public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
1266         this.tapiSips.putAll(tapiSip);
1267     }
1268
1269 }