- if (port.augmentation(Ports1.class) != null && port.augmentation(Ports1.class).getPortCapabilities() != null) {
- List<Class<? extends org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327
- .SupportedIfCapability>> supportedIntf = new ArrayList<>();
- SupportedInterfaceCapability sic1 = null;
- for (SupportedInterfaceCapability sic : port.augmentation(Ports1.class).getPortCapabilities()
- .nonnullSupportedInterfaceCapability().values()) {
- supportedIntf.add(sic.getIfCapType());
- sic1 = sic;
- }
- mpBldr.setSupportedInterfaceCapability(supportedIntf);
- if (port.getPortQual() == PortQual.SwitchClient
- && !sic1.getOtnCapability().getMpdrClientRestriction().isEmpty()) {
- // Here we assume all the supported-interfaces has the support same rates, and the
- // trib-slot numbers are assumed to be the same
- String mxpProfileName =
- sic1.getOtnCapability().getMpdrClientRestriction().get(0).getMuxpProfileName().get(0);
- // From this muxponder-profile get the min-trib-slot and the max-trib-slot
- LOG.info("{}: Muxp-profile used for trib information {}", nodeId, mxpProfileName);
- // This provides the tribSlot information from muxProfile
- List<OpucnTribSlotDef> minMaxOpucnTribSlots = getOpucnTribSlots(nodeId, mxpProfileName);
- mpBldr.setMpdrRestrictions(
- new MpdrRestrictionsBuilder()
- .setMinTribSlot(minMaxOpucnTribSlots.get(0))
- .setMaxTribSlot(minMaxOpucnTribSlots.get(1))
- .build());
+ Collection<SupportedInterfaceCapability> supIntfCapaList = getSupIntfCapaList(port);
+ if (supIntfCapaList != null) {
+ Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability>
+ supportedIntf = new HashSet<>();
+ Set<String> regenProfiles = new HashSet<>();
+ for (SupportedInterfaceCapability sic : supIntfCapaList) {
+ // Here it could add null values and cause a null pointer exception
+ // Especially when the MappingUtilsImpl does not contain required supported-if-cap
+ if (MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()) != null) {
+ supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()));
+ }
+ LOG.debug("This the xpdr-type {}", xpdrNodeType.getName());
+ // Here we use both types of Regen (bi/uni). Though initial support is only for bi-directional regen
+ if (xpdrNodeType == XpdrNodeTypes.Regen || xpdrNodeType == XpdrNodeTypes.RegenUni) {
+ if (sic.getOtsigroupCapabilityProfileName().isEmpty()) {
+ LOG.error("Otsigroup-capability-profile-name is not found for regen port {}",
+ port.getPortName());
+ }
+ LOG.info("Regen-profiles {}", sic.getOtsigroupCapabilityProfileName());
+ regenProfiles.addAll(sic.getOtsigroupCapabilityProfileName());
+ }
+ if (port.getPortQual() == PortQual.SwitchClient
+ && sic.getOtnCapability() != null) {
+ // Here we assume all the supported-interfaces has the support same rates, and the
+ // trib-slot numbers are assumed to be the same
+ String mxpProfileName = sic.getOtnCapability().getMpdrClientRestriction().get(0)
+ .getMuxpProfileName().stream().findFirst().orElseThrow();
+ // From this muxponder-profile get the min-trib-slot and the max-trib-slot
+ LOG.info("{}: Muxp-profile used for trib information {}", nodeId, mxpProfileName);
+ // This provides the tribSlot information from muxProfile
+ List<OpucnTribSlotDef> minMaxOpucnTribSlots = getOpucnTribSlots(nodeId, mxpProfileName);
+ mpBldr.setMpdrRestrictions(
+ new MpdrRestrictionsBuilder()
+ .setMinTribSlot(minMaxOpucnTribSlots.get(0))
+ .setMaxTribSlot(minMaxOpucnTribSlots.get(1))
+ .build());
+ }