+ } else {
+ LOG.info("{} configuration contains a list of xponders", nodeId);
+ for (Xponder xponder : deviceObject.get().nonnullXponder().values()) {
+ // Variables to keep track of number of line ports and client ports
+ int line = 1;
+ int client = 1;
+ Integer xponderNb = xponder.getXpdrNumber().toJava();
+ XpdrNodeTypes xponderType = xponder.getXpdrType();
+ for (XpdrPort xpdrPort : xponder.nonnullXpdrPort().values()) {
+ String circuitPackName = xpdrPort.getCircuitPackName();
+ String portName = xpdrPort.getPortName().toString();
+ // If there xponder-subtree has missing circuit-packs or ports,
+ // This gives a null-pointer expection,
+ if (device.nonnullCircuitPacks().values().stream()
+ .filter(cp -> cp.getCircuitPackName().equals(circuitPackName))
+ .findFirst().isEmpty()) {
+ LOG.warn("Circuit-pack {} is missing in the device - ignoring it in port-mapping",
+ circuitPackName);
+ continue;
+ }
+ if (device.nonnullCircuitPacks().values().stream()
+ .filter(cp -> cp.getCircuitPackName().equals(circuitPackName))
+ .findFirst().get().nonnullPorts().values().stream()
+ .filter(p -> p.getPortName().equals(portName))
+ .findFirst().isEmpty()) {
+ LOG.warn("Port {} associated with CP {} is missing in the device - ignoring it in port-mapping",
+ portName, circuitPackName);
+ continue;
+ }
+ Ports port = device.nonnullCircuitPacks().values().stream()
+ .filter(cp -> cp.getCircuitPackName().equals(circuitPackName))
+ .findFirst().get().nonnullPorts().values().stream()
+ .filter(p -> p.getPortName().equals(portName))
+ .findFirst().get();
+ if (port.getPortQual() == null) {
+ LOG.warn("PortQual was not found for port {} on circuit pack: {}",
+ port.getPortName(), circuitPackName);
+ continue;
+ }
+
+ switch (port.getPortQual()) {
+
+ case XpdrClient:
+ case SwitchClient:
+ String lcp0 = "XPDR" + xponderNb + "-" + StringConstants.CLIENT_TOKEN + client;
+ lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp0);
+ mappingMap.put(lcp0,
+ createXpdrMappingObject(nodeId, port, circuitPackName, lcp0, null, null, null, null));
+ client++;
+ //continue;
+ break;
+
+ case XpdrNetwork:
+ case SwitchNetwork:
+ if (port.getPortDirection().getIntValue() == Direction.Bidirectional.getIntValue()) {
+ String lcp = "XPDR" + xponderNb + "-" + StringConstants.NETWORK_TOKEN + line;
+ lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
+ mappingMap.put(lcp,
+ createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, null,
+ xponderType));
+ line++;
+ continue;
+ }
+ // TODO PortDirection treatment here is similar to the one in createPpPortMapping.
+ // Some code alignment must be considered.
+
+ if (!checkPartnerPortNotNull(port)) {
+ LOG.warn("Error in the configuration of port {} of {} for {}",
+ port.getPortName(), circuitPackName, nodeId);
+ continue;
+ }
+
+ if (lcpMap.containsKey(circuitPackName + '+' + port.getPortName())) {
+ continue;
+ }
+
+ Optional<CircuitPacks> cpOpt = circuitPackList.stream()
+ .filter(
+ cP -> cP.getCircuitPackName().equals(port.getPartnerPort().getCircuitPackName()))
+ .findFirst();
+ if (!cpOpt.isPresent()) {
+ LOG.error("Error fetching circuit-pack {} for {}",
+ port.getPartnerPort().getCircuitPackName(), nodeId);
+ continue;
+ }
+
+ Optional<Ports> poOpt = cpOpt.get().nonnullPorts().values().stream()
+ .filter(p -> p.getPortName().equals(port.getPartnerPort().getPortName().toString()))
+ .findFirst();
+ if (!poOpt.isPresent()) {
+ LOG.error("Error fetching port {} on {} for {}", port.getPartnerPort().getPortName(),
+ port.getPartnerPort().getCircuitPackName(), nodeId);
+ continue;
+ }
+ Ports port2 = poOpt.get();
+ if (!checkPartnerPort(circuitPackName, port, port2)) {
+ LOG.error("port {} on {} is not a correct partner port of {} on {}",
+ port2.getPortName(), cpOpt.get().getCircuitPackName(), port.getPortName(),
+ circuitPackName);
+ continue;
+ }
+ String lcp1 = "XPDR" + xponderNb + "-" + StringConstants.NETWORK_TOKEN + line;
+ String lcp2 = new StringBuilder("XPDR")
+ .append(xponderNb)
+ .append("-")
+ .append(StringConstants.NETWORK_TOKEN)
+ .append(line + 1)
+ .toString();
+ if (lcpMap.containsKey(lcp1) || lcpMap.containsKey(lcp2)) {
+ LOG.warn("mapping already exists for {} or {}", lcp1, lcp2);
+ line += 2;
+ continue;
+ }
+ lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp1);
+ lcpMap.put(cpOpt.get().getCircuitPackName() + '+' + port2.getPortName(), lcp2);
+ mappingMap.put(lcp1,
+ createXpdrMappingObject(nodeId, port, circuitPackName,
+ lcp1, lcp2, null, null, xponderType));
+ mappingMap.put(lcp2,
+ createXpdrMappingObject(nodeId, port2, cpOpt.get().getCircuitPackName(),
+ lcp2, lcp1, null, null, xponderType));
+ line += 2;
+ break;