From: manuedelf Date: Tue, 18 Aug 2020 07:02:45 +0000 (+0200) Subject: Migrate inventory module to Aluminium X-Git-Tag: 2.0.0~12 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=a13c342256ab5d40f20b28b2ba2bde1e9dcccc6c Migrate inventory module to Aluminium JIRA: TRNSPRTPCE-292 TRNSPRTPCE-300 Signed-off-by: guillaume.lambert Change-Id: If4314c58461a1d6cc6f38475dbdf743cd674495e --- diff --git a/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode121.java b/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode121.java index 04e408cf4..456342af2 100644 --- a/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode121.java +++ b/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode121.java @@ -17,43 +17,67 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import javax.sql.DataSource; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.inventory.query.Queries; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.CpSlots; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.CpSlotsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.external.links.ExternalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.external.links.ExternalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.internal.links.InternalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.internal.links.InternalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMap; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMapKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.physical.links.PhysicalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.physical.links.PhysicalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelf.Slots; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelf.SlotsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelves.Shelves; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelves.ShelvesKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.Interface1; import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.ethernet.container.EthernetBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfig; +import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfigKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfName; +import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfNameKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.OtsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.attributes.Tcm; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.attributes.TcmKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.container.OduBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.ExpMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.ExpMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.RxMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.RxMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.TxMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.TxMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.otu.container.OtuBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev161014.wavelength.map.g.Wavelengths; +import org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev161014.wavelength.map.g.WavelengthsKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -179,25 +203,26 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (deviceObject.isPresent()) { + Map shelvesMap = deviceObject.get().nonnullShelves(); + LOG.info("Shelves size {}", shelvesMap.size()); + try (Connection connection = requireNonNull(dataSource.getConnection())) { + for (Map.Entry shelveEntry : shelvesMap.entrySet()) { + Shelves shelve = shelveEntry.getValue(); + String shelfName = shelve.getShelfName(); + LOG.info("Getting Shelve Details of {}", shelfName); + if (shelve.getSlots() != null) { + LOG.info("Slot Size {} ", shelve.getSlots().size()); + persistShelveSlots(nodeId, shelve, connection); + } else { + LOG.info("No Slots for shelf {}", shelfName); + } - LOG.info("Shelves size {}", deviceObject.get().getShelves().size()); - try (Connection connection = requireNonNull(dataSource.getConnection())) { - for (int i = 0; i < deviceObject.get().getShelves().size(); i++) { - Shelves shelve = deviceObject.get().getShelves().get(i); - String shelfName = shelve.getShelfName(); - - LOG.info("Getting Shelve Details of {}", shelfName); - if (shelve.getSlots() != null) { - LOG.info("Slot Size {} ", shelve.getSlots().size()); - persistShelveSlots(nodeId, shelve, connection); - } else { - LOG.info("No Slots for shelf {}", shelfName); + persistShelves(nodeId, connection, shelve); } - - persistShelves(nodeId, connection, shelve); + } catch (SQLException e1) { + LOG.error("Something wrong when fetching ROADM shelves in DB", e1); } - } catch (SQLException e1) { - LOG.error("Something wrong when fetching ROADM shelves in DB", e1); } } @@ -210,11 +235,12 @@ public class INode121 { LOG.warn("Device object {} was not found", nodeId); return; } - LOG.info("Circuit pack size {}", deviceObject.get().getCircuitPacks().size()); + Map circuitPacksMap = deviceObject.get().nonnullCircuitPacks(); + LOG.info("Circuit pack size {}", circuitPacksMap.size()); try (Connection connection = requireNonNull(dataSource.getConnection())) { - for (int i = 0; i < deviceObject.get().getCircuitPacks().size(); i++) { - CircuitPacks cp = deviceObject.get().getCircuitPacks().get(i); + for (Map.Entry circuitPackEntry : circuitPacksMap.entrySet()) { + CircuitPacks cp = circuitPackEntry.getValue(); if (cp.getCpSlots() != null) { persistCircuitPacksSlots(nodeId, cp, connection); @@ -265,8 +291,9 @@ public class INode121 { private void persistShelveSlots(String nodeId, Shelves shelves, Connection connection) { String startTimetampStr = getCurrentTimestamp(); - for (int i = 0; i < shelves.getSlots().size(); i++) { - Slots slot = shelves.getSlots().get(i); + Map slotsMap = shelves.nonnullSlots(); + for (Map.Entry slotEntry : slotsMap.entrySet()) { + Slots slot = slotEntry.getValue(); LOG.info("Getting Slot Details of {}", slot.getSlotName()); Object[] parameters = new Object[]{nodeId, shelves.getShelfName(), @@ -293,8 +320,9 @@ public class INode121 { private void persistCircuitPacksSlots(String nodeId, CircuitPacks circuitPacks, Connection connection) { String startTimetampStr = getCurrentTimestamp(); - for (int i = 0; i < circuitPacks.getCpSlots().size(); i++) { - CpSlots cpSlot = circuitPacks.getCpSlots().get(i); + Map cpSlotsMap = circuitPacks.nonnullCpSlots(); + for (Map.Entry cpSlotEntry: cpSlotsMap.entrySet()) { + CpSlots cpSlot = cpSlotEntry.getValue(); Object[] parameters = new Object[]{nodeId, circuitPacks.getCircuitPackName(), @@ -596,9 +624,10 @@ public class INode121 { private void persistCPPorts(String nodeId, Connection connection, CircuitPacks circuitPacks) { - - for (int i = 0; i < circuitPacks.getPorts().size(); i++) { - Object[] cpPortsParameters = prepareCPPortsParameters(nodeId, circuitPacks, circuitPacks.getPorts().get(i)); + @NonNull + Map nonnullPorts = circuitPacks.nonnullPorts(); + for (Map.Entry entry : nonnullPorts.entrySet()) { + Object[] cpPortsParameters = prepareCPPortsParameters(nodeId, circuitPacks, entry.getValue()); String query = Queries.getQuery().deviceCPPortInsert().get(); LOG.info("Running {} query ", query); try (PreparedStatement preparedStmt = connection.prepareStatement(query)) { @@ -1001,35 +1030,23 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (deviceObject.isPresent()) { + Map interfaceMap = deviceObject.get().nonnullInterface(); + for (Map.Entry interfaceEntrySet : interfaceMap.entrySet()) { + Interface deviceInterface = interfaceEntrySet.getValue(); + Object[] parameters = prepareDevInterfaceParameters(nodeId, deviceInterface, connection); - /*InstanceIdentifier interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(Interface.class); - Optional interfaceOpt = - deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, interfaceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); */ - - for (int i = 0; i < deviceObject.get().getInterface().size(); i++) { - Interface deviceInterface; - - deviceInterface = deviceObject.get().getInterface().get(i); - /*if (interfaceOpt.isPresent()) { - deviceInterface = interfaceOpt.get(); - } else { - LOG.warn("Could not get interface info"); - return false; - }*/ - Object[] parameters = prepareDevInterfaceParameters(nodeId, deviceInterface, connection); - - String query = Queries.getQuery().deviceInterfacesInsert().get(); - LOG.info("Running {} query ", query); - try (PreparedStatement stmt = connection.prepareStatement(query)) { - for (int j = 0; j < parameters.length; j++) { - stmt.setObject(j + 1, parameters[j]); + String query = Queries.getQuery().deviceInterfacesInsert().get(); + LOG.info("Running {} query ", query); + try (PreparedStatement stmt = connection.prepareStatement(query)) { + for (int j = 0; j < parameters.length; j++) { + stmt.setObject(j + 1, parameters[j]); + } + stmt.execute(); + stmt.clearParameters(); + } catch (SQLException e) { + LOG.error("Something wrong when storing devices interfaces in DB", e); } - stmt.execute(); - stmt.clearParameters(); - } catch (SQLException e) { - LOG.error("Something wrong when storing devices interfaces in DB", e); } } } @@ -1087,12 +1104,15 @@ public class INode121 { Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); if (!protocolObject.isPresent() || protocolObject.get().augmentation(Protocols1.class) == null) { LOG.error("LLDP subtree is missing"); + return; } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < protocolObject.get().augmentation(Protocols1.class).getLldp().getPortConfig().size(); i++) { - PortConfig portConfig = - protocolObject.get().augmentation(Protocols1.class).getLldp().getPortConfig().get(i); + @NonNull + Map portConfigMap = protocolObject.get() + .augmentation(Protocols1.class).getLldp().nonnullPortConfig(); + for (Map.Entry entry : portConfigMap.entrySet()) { + PortConfig portConfig = entry.getValue(); String ifName = portConfig.getIfName(); String adminStatusEnu = portConfig.getAdminStatus().getName(); @@ -1126,6 +1146,11 @@ public class INode121 { Optional protocolObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!protocolObject.isPresent()) { + LOG.error("Protocols is missing"); + return; + + } if (protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList() == null) { protocolObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, protocolsIID, @@ -1137,11 +1162,11 @@ public class INode121 { } else { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < protocolObject.get() - .augmentation(Protocols1.class).getLldp().getNbrList().getIfName().size(); i++) { + Map ifNameMap = + protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList().nonnullIfName(); + for (Map.Entry ifNameEntry : ifNameMap.entrySet()) { - IfName ifNameObj = protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList() - .getIfName().get(i); + IfName ifNameObj = ifNameEntry.getValue(); String ifName = ifNameObj.getIfName(); String remotesysname = ifNameObj.getRemoteSysName(); String remotemgmtaddresssubtype = ifNameObj.getRemoteMgmtAddressSubType().getName(); @@ -1186,47 +1211,40 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (deviceObject.get().getInternalLink() == null) { - deviceObject = - deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - } - if (deviceObject.get().getInternalLink() == null) { - LOG.info("External links not found for {}", nodeId); - } else { - - - String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getInternalLink().size(); i++) { - InternalLink internalLink = deviceObject.get().getInternalLink().get(i); - String internalLinkName = internalLink.getInternalLinkName(); - String sourceCircuitPackName = internalLink.getSource().getCircuitPackName(); - String sourcePortName = internalLink.getSource().getPortName().toString(); - String destinationCircuitPackName = internalLink.getDestination().getCircuitPackName(); - String destinationPortName = internalLink.getDestination().getPortName().toString(); - - Object[] parameters = {nodeId, - internalLinkName, - sourceCircuitPackName, - sourcePortName, - destinationCircuitPackName, - destinationPortName, - startTimestamp, - startTimestamp - }; - - String query = Queries.getQuery().deviceInternalLinkInsert().get(); - LOG.info("Running {} query ", query); - try (PreparedStatement stmt = connection.prepareStatement(query)) { - for (int j = 0; j < parameters.length; j++) { - stmt.setObject(j + 1, parameters[j]); + if (deviceObject.isPresent()) { + if (deviceObject.get().getInternalLink() == null) { + deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, + deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + } + if (deviceObject.get().getInternalLink() == null) { + LOG.info("External links not found for {}", nodeId); + } else { + @NonNull + Map internalLinkMap = deviceObject.get().nonnullInternalLink(); + String startTimestamp = getCurrentTimestamp(); + for (Map.Entry internalLinkEntry: internalLinkMap.entrySet()) { + InternalLink internalLink = internalLinkEntry.getValue(); + String internalLinkName = internalLink.getInternalLinkName(); + String sourceCircuitPackName = internalLink.getSource().getCircuitPackName(); + String sourcePortName = internalLink.getSource().getPortName().toString(); + String destinationCircuitPackName = internalLink.getDestination().getCircuitPackName(); + String destinationPortName = internalLink.getDestination().getPortName().toString(); + + Object[] parameters = { nodeId, internalLinkName, sourceCircuitPackName, sourcePortName, + destinationCircuitPackName, destinationPortName, startTimestamp, startTimestamp }; + String query = Queries.getQuery().deviceInternalLinkInsert().get(); + LOG.info("Running {} query ", query); + try (PreparedStatement stmt = connection.prepareStatement(query)) { + for (int j = 0; j < parameters.length; j++) { + stmt.setObject(j + 1, parameters[j]); + } + stmt.execute(); + stmt.clearParameters(); + } catch (SQLException e) { + LOG.error("Something wrong when storing devices internal links", e); } - stmt.execute(); - stmt.clearParameters(); - } catch (SQLException e) { - LOG.error("Something wrong when storing devices internal links", e); - } + } } } } @@ -1238,50 +1256,44 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - if (deviceObject.get().getExternalLink() == null) { - deviceObject = - deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - } - if (deviceObject.get().getExternalLink() == null) { - LOG.info("External links not found for {}", nodeId); - } else { - String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getExternalLink().size(); i++) { - ExternalLink externalLink = deviceObject.get().getExternalLink().get(i); - String externalLinkName = externalLink.getExternalLinkName(); - String sourceNodeId = externalLink.getSource().getNodeId(); - String sourceCircuitPackName = externalLink.getSource().getCircuitPackName(); - String sourcePortName = externalLink.getSource().getPortName(); - String destinationNodeId = externalLink.getDestination().getNodeId(); - String destinationCircuitPackName = externalLink.getDestination().getCircuitPackName(); - String destinationPortName = externalLink.getDestination().getPortName(); - - Object[] parameters = {nodeId, - externalLinkName, - sourceNodeId, - sourceCircuitPackName, - sourcePortName, - destinationNodeId, - destinationCircuitPackName, - destinationPortName, - startTimestamp, - startTimestamp - }; - - String query = Queries.getQuery().deviceExternalLinkInsert().get(); - LOG.info("Running {} query ", query); - try (PreparedStatement stmt = connection.prepareStatement(query)) { - for (int j = 0; j < parameters.length; j++) { - stmt.setObject(j + 1, parameters[j]); + if (deviceObject.isPresent()) { + if (deviceObject.get().getExternalLink() == null) { + deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, + deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + } + if (deviceObject.get().getExternalLink() == null) { + LOG.info("External links not found for {}", nodeId); + } else { + String startTimestamp = getCurrentTimestamp(); + @NonNull + Map externalLinkMap = deviceObject.get().nonnullExternalLink(); + for (Map.Entry externalLinkEntry: externalLinkMap.entrySet()) { + ExternalLink externalLink = externalLinkEntry.getValue(); + String externalLinkName = externalLink.getExternalLinkName(); + String sourceNodeId = externalLink.getSource().getNodeId(); + String sourceCircuitPackName = externalLink.getSource().getCircuitPackName(); + String sourcePortName = externalLink.getSource().getPortName(); + String destinationNodeId = externalLink.getDestination().getNodeId(); + String destinationCircuitPackName = externalLink.getDestination().getCircuitPackName(); + String destinationPortName = externalLink.getDestination().getPortName(); + + Object[] parameters = { nodeId, externalLinkName, sourceNodeId, sourceCircuitPackName, + sourcePortName, destinationNodeId, destinationCircuitPackName, destinationPortName, + startTimestamp, startTimestamp }; + + String query = Queries.getQuery().deviceExternalLinkInsert().get(); + LOG.info("Running {} query ", query); + try (PreparedStatement stmt = connection.prepareStatement(query)) { + for (int j = 0; j < parameters.length; j++) { + stmt.setObject(j + 1, parameters[j]); + } + stmt.execute(); + stmt.clearParameters(); + } catch (SQLException e) { + LOG.error("Something wrong when storing devices external links", e); } - stmt.execute(); - stmt.clearParameters(); - } catch (SQLException e) { - LOG.error("Something wrong when storing devices external links", e); - } + } } } } @@ -1292,18 +1304,28 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("No device with node Id {}", nodeId); + return; + } if (deviceObject.get().getPhysicalLink() == null) { deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); } + if (!deviceObject.isPresent()) { + LOG.error("No device with node Id {}", nodeId); + return; + } if (deviceObject.get().getPhysicalLink() == null) { LOG.info("Physical links not found for {}", nodeId); } else { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getPhysicalLink().size(); i++) { - PhysicalLink physicalLink = deviceObject.get().getPhysicalLink().get(i); + @NonNull + Map physicalLinkMap = deviceObject.get().nonnullPhysicalLink(); + for (Map.Entry physicalLinkEntry : physicalLinkMap.entrySet()) { + PhysicalLink physicalLink = physicalLinkEntry.getValue(); String physicalLinkName = physicalLink.getPhysicalLinkName(); String sourceCircuitPackName = physicalLink.getSource().getCircuitPackName(); String sourcePortName = physicalLink.getSource().getPortName().toString(); @@ -1349,53 +1371,47 @@ public class INode121 { deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); } */ - if (deviceObject.get().getDegree() == null) { - LOG.warn("Degree info not found for {}", nodeId); - } else { - - String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getDegree().size(); i++) { - Degree degree = deviceObject.get().getDegree().get(i); - String degreeNumber = degree.getDegreeNumber().toString(); - String maxWavelengths = degree.getMaxWavelengths().toString(); - String otdrPortCircuitPackName = + if (!deviceObject.isPresent()) { + LOG.error("Cannot get device for node {}", nodeId); + return; + } + String startTimestamp = getCurrentTimestamp(); + @NonNull + Map degreeMap = deviceObject.get().nonnullDegree(); + for (Map.Entry degreeEntry : degreeMap.entrySet()) { + Degree degree = degreeEntry.getValue(); + String degreeNumber = degree.getDegreeNumber().toString(); + String maxWavelengths = degree.getMaxWavelengths().toString(); + String otdrPortCircuitPackName = (degree.getOtdrPort() == null ? "" : degree.getOtdrPort().getCircuitPackName()); - String otdrPortPortName = + String otdrPortPortName = (degree.getOtdrPort() == null ? "" : degree.getOtdrPort().getPortName().toString()); - //String mcCapabilitiesSlotWidthGranularity = ""; - //String mcCapabilitiesCenterFreqGranularity = ""; - //String mcCapabilitiesMinSlots = "-1"; - //String mcCapabilitiesMaxSlots = "-1"; - persistDevDegreeCircuitPack(nodeId, degree, degreeNumber, connection); - persistDevDegreeConnectionPort(nodeId, degree, degreeNumber, connection); - - Object[] parameters = {nodeId, - degreeNumber, - maxWavelengths, - otdrPortCircuitPackName, - otdrPortPortName, - //mcCapabilitiesSlotWidthGranularity, - //mcCapabilitiesCenterFreqGranularity, - //mcCapabilitiesMinSlots, - //mcCapabilitiesMaxSlots, - "", "", "-1", "-1", - startTimestamp, - startTimestamp - }; - - String query = Queries.getQuery().deviceDegreeInsert().get(); - LOG.info("Running {} query ", query); - try (PreparedStatement stmt = connection.prepareStatement(query)) { - for (int j = 0; j < parameters.length; j++) { - stmt.setObject(j + 1, parameters[j]); - } - stmt.execute(); - stmt.clearParameters(); - } catch (SQLException e) { - LOG.error("Something wrong when storing devices degrees", e); + // String mcCapabilitiesSlotWidthGranularity = ""; + // String mcCapabilitiesCenterFreqGranularity = ""; + // String mcCapabilitiesMinSlots = "-1"; + // String mcCapabilitiesMaxSlots = "-1"; + persistDevDegreeCircuitPack(nodeId, degree, degreeNumber, connection); + persistDevDegreeConnectionPort(nodeId, degree, degreeNumber, connection); + + Object[] parameters = { nodeId, degreeNumber, maxWavelengths, otdrPortCircuitPackName, otdrPortPortName, + // mcCapabilitiesSlotWidthGranularity, + // mcCapabilitiesCenterFreqGranularity, + // mcCapabilitiesMinSlots, + // mcCapabilitiesMaxSlots, + "", "", "-1", "-1", startTimestamp, startTimestamp }; + + String query = Queries.getQuery().deviceDegreeInsert().get(); + LOG.info("Running {} query ", query); + try (PreparedStatement stmt = connection.prepareStatement(query)) { + for (int j = 0; j < parameters.length; j++) { + stmt.setObject(j + 1, parameters[j]); } - + stmt.execute(); + stmt.clearParameters(); + } catch (SQLException e) { + LOG.error("Something wrong when storing devices degrees", e); } + } } @@ -1403,10 +1419,16 @@ public class INode121 { private void persistDevDegreeCircuitPack(String nodeId, Degree degree, String degreeNumber, Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < degree.getCircuitPacks().size(); i++) { + @NonNull + Map + circuitPacksMap = degree.nonnullCircuitPacks(); + for (Map.Entry circuitPackEntry : + circuitPacksMap.entrySet()) { - String circuitPackIndex = degree.getCircuitPacks().get(i).getIndex().toString(); - String circuitPackName = degree.getCircuitPacks().get(i).getCircuitPackName(); + String circuitPackIndex = circuitPackEntry.getValue().getIndex().toString(); + String circuitPackName = circuitPackEntry.getValue().getCircuitPackName(); Object[] parameters = {nodeId, degreeNumber, @@ -1435,11 +1457,12 @@ public class INode121 { Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < degree.getConnectionPorts().size(); i++) { - - String connectionPortIndex = degree.getConnectionPorts().get(i).getIndex().toString(); - String circuitPackName = degree.getConnectionPorts().get(i).getCircuitPackName(); - String portName = degree.getConnectionPorts().get(i).getPortName().toString(); + @NonNull + Map connectionPortsMap = degree.nonnullConnectionPorts(); + for (Map.Entry portEntry : connectionPortsMap.entrySet()) { + String connectionPortIndex = portEntry.getValue().getIndex().toString(); + String circuitPackName = portEntry.getValue().getCircuitPackName(); + String portName = portEntry.getValue().getPortName().toString(); Object[] parameters = {nodeId, degreeNumber, @@ -1472,18 +1495,29 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("No device found in operational datastore for node {}", nodeId); + return; + } if (deviceObject.get().getSharedRiskGroup() == null) { deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("No device found in configuration datastore for node {}", nodeId); + return; + } } - if (deviceObject.get().getSharedRiskGroup() == null) { + + @NonNull + Map sharedRiskGroupMap = deviceObject.get().nonnullSharedRiskGroup(); + if (sharedRiskGroupMap.isEmpty()) { LOG.info("no srg found for node {} ", nodeId); } else { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getSharedRiskGroup().size(); i++) { - SharedRiskGroup sharedRiskGroup = deviceObject.get().getSharedRiskGroup().get(i); + for (Map.Entry groupEntry : sharedRiskGroupMap.entrySet()) { + SharedRiskGroup sharedRiskGroup = groupEntry.getValue(); //String currentProvisionedAddDropPorts = "-1"; //String mcCapSlotWidthGranularity = ""; //String mcCapCenterFreqGranularity = ""; @@ -1530,10 +1564,16 @@ public class INode121 { Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < sharedRiskGroup.getCircuitPacks().size(); i++) { + @NonNull + Map + circuitPacksMap = sharedRiskGroup.nonnullCircuitPacks(); + for (Map.Entry entry : + circuitPacksMap.entrySet()) { - String circuitPackindex = sharedRiskGroup.getCircuitPacks().get(i).getIndex().toString(); - String circuitPackName = sharedRiskGroup.getCircuitPacks().get(i).getCircuitPackName(); + String circuitPackindex = entry.getValue().getIndex().toString(); + String circuitPackName = entry.getValue().getCircuitPackName(); Object[] parameters = {nodeId, srgNumber, @@ -1566,17 +1606,26 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - + if (!deviceObject.isPresent()) { + LOG.error("No device found in operational datastore for node {}", nodeId); + return; + } if (deviceObject.get().getRoadmConnections() == null) { deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.CONFIGURATION, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("No device found in configuration datastore for node {}", nodeId); + return; + } } - if (deviceObject.get().getRoadmConnections() != null) { + @NonNull + Map connectionsMap = deviceObject.get().nonnullRoadmConnections(); + if (!connectionsMap.isEmpty()) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getRoadmConnections().size(); i++) { - RoadmConnections roadmConnections = deviceObject.get().getRoadmConnections().get(i); + for (Map.Entry entry : connectionsMap.entrySet()) { + RoadmConnections roadmConnections = entry.getValue(); String connectionNumber = roadmConnections.getConnectionNumber(); //String connectionName = ""; String wavelengthNumber = roadmConnections.getWavelengthNumber().toString(); @@ -1623,10 +1672,15 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - + if (!deviceObject.isPresent()) { + LOG.error("No device found in operational datastore for node {}", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getConnectionMap().size(); i++) { - ConnectionMap connectionMap = deviceObject.get().getConnectionMap().get(i); + @NonNull + Map connectionsMap = deviceObject.get().nonnullConnectionMap(); + for (Map.Entry entry : connectionsMap.entrySet()) { + ConnectionMap connectionMap = entry.getValue(); String connectionMapNumber = connectionMap.getConnectionMapNumber().toString(); String sourceCircuitPackName = connectionMap.getSource().getCircuitPackName(); String sourcePortName = connectionMap.getSource().getCircuitPackName(); @@ -1661,10 +1715,16 @@ public class INode121 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("No device found in operational datastore for node {}", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getWavelengthMap().getWavelengths().size(); i++) { - Wavelengths wavelengths = deviceObject.get().getWavelengthMap().getWavelengths().get(i); + @NonNull + Map wavelengthsMap = deviceObject.get().getWavelengthMap().nonnullWavelengths(); + for (Map.Entry entry : wavelengthsMap.entrySet()) { + Wavelengths wavelengths = entry.getValue(); String wavelengthNumber = wavelengths.getWavelengthNumber().toString(); String centerFrequency = wavelengths.getCenterFrequency().toString(); String wavelength = wavelengths.getWavelength().toString(); @@ -1697,10 +1757,9 @@ public class INode121 { private void persistDevInterfaceTcm(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - Tcm tcm; - - tcm = oduBuilder.getTcm().get(i); + Map tcmMap = oduBuilder.getTcm(); + for (Map.Entry entry : tcmMap.entrySet()) { + Tcm tcm = entry.getValue(); Object[] parameters = prepareDevInterfaceTcmParameters(nodeId, interfaceName, tcm); @@ -1721,10 +1780,10 @@ public class INode121 { private void persistDevInterfaceOtnOduTxMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - TxMsi txMsi; + Map txMsiMap = oduBuilder.getOpu().getMsi().nonnullTxMsi(); + for (Map.Entry entry : txMsiMap.entrySet()) { - txMsi = oduBuilder.getOpu().getMsi().getTxMsi().get(i); + TxMsi txMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduTxMsiParameters(nodeId, interfaceName, txMsi); @@ -1745,11 +1804,9 @@ public class INode121 { private void persistDevInterfaceOtnOduRxMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - RxMsi rxMsi; - - rxMsi = oduBuilder.getOpu().getMsi().getRxMsi().get(i); + Map rxMsiMap = oduBuilder.getOpu().getMsi().nonnullRxMsi(); + for (Map.Entry entry : rxMsiMap.entrySet()) { + RxMsi rxMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduRxMsiParameters(nodeId, interfaceName, rxMsi); @@ -1770,11 +1827,10 @@ public class INode121 { private void persistDevInterfaceOtnOduExpMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - ExpMsi expMsi; - - expMsi = oduBuilder.getOpu().getMsi().getExpMsi().get(i); + @NonNull + Map expMsiMap = oduBuilder.getOpu().getMsi().nonnullExpMsi(); + for (Map.Entry entry : expMsiMap.entrySet()) { + ExpMsi expMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduExpMsiParameters(nodeId, interfaceName, expMsi); diff --git a/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode221.java b/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode221.java index 220338415..aabbea2e4 100644 --- a/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode221.java +++ b/inventory/src/main/java/org/opendaylight/transportpce/inventory/INode221.java @@ -16,40 +16,63 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import javax.sql.DataSource; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.inventory.query.Queries; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.CpSlots; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.CpSlotsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.external.links.ExternalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.external.links.ExternalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.internal.links.InternalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.internal.links.InternalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMap; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMapKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.physical.links.PhysicalLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.physical.links.PhysicalLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelf.Slots; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelf.SlotsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelves.Shelves; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.shelves.ShelvesKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.Interface1; import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.ethernet.container.EthernetBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfig; +import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfigKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfName; +import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfNameKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.OtsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.attributes.Tcm; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.attributes.TcmKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.container.OduBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.ExpMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.ExpMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.RxMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.RxMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.TxMsi; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.opu.opu.msi.TxMsiKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.otu.container.OtuBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -177,11 +200,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - LOG.info("Shelves size {}", deviceObject.get().getShelves().size()); + if (!deviceObject.isPresent()) { + LOG.error("No device found in operational datastore for nodeId {}", nodeId); + return; + } + @NonNull + Map shelvesMap = deviceObject.get().nonnullShelves(); + LOG.info("Shelves size {}", shelvesMap.size()); try (Connection connection = requireNonNull(dataSource.getConnection())) { - for (int i = 0; i < deviceObject.get().getShelves().size(); i++) { - Shelves shelve = deviceObject.get().getShelves().get(i); + for (Map.Entry entry : shelvesMap.entrySet()) { + Shelves shelve = entry.getValue(); String shelfName = shelve.getShelfName(); LOG.info("Getting Shelve Details of {}", shelfName); @@ -209,11 +237,14 @@ public class INode221 { LOG.warn("Device object {} was not found", nodeId); return; } - LOG.info("Circuit pack size {}", deviceObject.get().getCircuitPacks().size()); + @NonNull + Map circuitPacksMap = deviceObject.get().nonnullCircuitPacks(); + LOG.info("Circuit pack size {}", circuitPacksMap.size()); try (Connection connection = requireNonNull(dataSource.getConnection())) { - for (int i = 0; i < deviceObject.get().getCircuitPacks().size(); i++) { - CircuitPacks cp = deviceObject.get().getCircuitPacks().get(i); + + for (Map.Entry entry : circuitPacksMap.entrySet()) { + CircuitPacks cp = entry.getValue(); if (cp.getCpSlots() != null) { persistCircuitPacksSlots(nodeId, cp, connection); @@ -262,8 +293,10 @@ public class INode221 { private void persistShelveSlots(String nodeId, Shelves shelves, Connection connection) { String startTimetampStr = getCurrentTimestamp(); - for (int i = 0; i < shelves.getSlots().size(); i++) { - Slots slot = shelves.getSlots().get(i); + @NonNull + Map slotsMap = shelves.nonnullSlots(); + for (Map.Entry entry : slotsMap.entrySet()) { + Slots slot = entry.getValue(); LOG.info("Getting Slot Details of {}", slot.getSlotName()); Object[] parameters = new Object[]{nodeId, shelves.getShelfName(), @@ -290,8 +323,10 @@ public class INode221 { private void persistCircuitPacksSlots(String nodeId, CircuitPacks circuitPacks, Connection connection) { String startTimetampStr = getCurrentTimestamp(); - for (int i = 0; i < circuitPacks.getCpSlots().size(); i++) { - CpSlots cpSlot = circuitPacks.getCpSlots().get(i); + @NonNull + Map cpSlotsMap = circuitPacks.nonnullCpSlots(); + for (Map.Entry entry : cpSlotsMap.entrySet()) { + CpSlots cpSlot = entry.getValue(); Object[] parameters = new Object[]{nodeId, circuitPacks.getCircuitPackName(), @@ -881,10 +916,12 @@ public class INode221 { deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, interfaceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); */ - for (int i = 0; i < deviceObject.get().getInterface().size(); i++) { + @NonNull + Map interfaceMap = deviceObject.get().nonnullInterface(); + for (Map.Entry entry : interfaceMap.entrySet()) { Interface deviceInterface; - deviceInterface = deviceObject.get().getInterface().get(i); + deviceInterface = entry.getValue(); /*if (interfaceOpt.isPresent()) { deviceInterface = interfaceOpt.get(); } else { @@ -966,10 +1003,12 @@ public class INode221 { } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < protocolObject.get().augmentation(Protocols1.class).getLldp().getPortConfig().size(); i++) { + @NonNull + Map portConfigMap = protocolObject.get() + .augmentation(Protocols1.class).getLldp().nonnullPortConfig(); + for (Map.Entry entry : portConfigMap.entrySet()) { - PortConfig portConfig = - protocolObject.get().augmentation(Protocols1.class).getLldp().getPortConfig().get(i); + PortConfig portConfig = entry.getValue(); String ifName = portConfig.getIfName(); int adminStatusEnu = portConfig.getAdminStatus().getIntValue(); @@ -1005,14 +1044,16 @@ public class INode221 { Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); if (!protocolObject.isPresent() || protocolObject.get().augmentation(Protocols1.class) == null) { LOG.error("LLDP subtree is missing"); + return; } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList().getIfName() - .size(); i++) { + @NonNull + Map ifNameMap = protocolObject.get() + .augmentation(Protocols1.class).getLldp().getNbrList().nonnullIfName(); + for (Map.Entry entry : ifNameMap.entrySet()) { - IfName ifNameObj = - protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList().getIfName().get(i); + IfName ifNameObj = entry.getValue(); String ifName = ifNameObj.getIfName(); String remotesysname = ifNameObj.getRemoteSysName(); String remotemgmtaddresssubtype = ifNameObj.getRemoteMgmtAddressSubType().getName(); @@ -1056,10 +1097,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getInternalLink().size(); i++) { - InternalLink internalLink = deviceObject.get().getInternalLink().get(i); + @NonNull + Map internalLinkMap = deviceObject.get().nonnullInternalLink(); + for (Map.Entry entry : internalLinkMap.entrySet()) { + InternalLink internalLink = entry.getValue(); String internalLinkName = internalLink.getInternalLinkName(); String sourceCircuitPackName = internalLink.getSource().getCircuitPackName(); String sourcePortName = internalLink.getSource().getPortName().toString(); @@ -1098,10 +1145,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getExternalLink().size(); i++) { - ExternalLink externalLink = deviceObject.get().getExternalLink().get(i); + @NonNull + Map externalLinkMap = deviceObject.get().nonnullExternalLink(); + for (Map.Entry entry : externalLinkMap.entrySet()) { + ExternalLink externalLink = entry.getValue(); String externalLinkName = externalLink.getExternalLinkName(); String sourceNodeId = externalLink.getSource().getNodeId(); String sourceCircuitPackName = externalLink.getSource().getCircuitPackName(); @@ -1143,10 +1196,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getPhysicalLink().size(); i++) { - PhysicalLink physicalLink = deviceObject.get().getPhysicalLink().get(i); + @NonNull + Map physicalLinkMap = deviceObject.get().nonnullPhysicalLink(); + for (Map.Entry entry : physicalLinkMap.entrySet()) { + PhysicalLink physicalLink = entry.getValue(); String physicalLinkName = physicalLink.getPhysicalLinkName(); String sourceCircuitPackName = physicalLink.getSource().getCircuitPackName(); String sourcePortName = physicalLink.getSource().getPortName().toString(); @@ -1184,10 +1243,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getDegree().size(); i++) { - Degree degree = deviceObject.get().getDegree().get(i); + @NonNull + Map degreeMap = deviceObject.get().nonnullDegree(); + for (Map.Entry entry : degreeMap.entrySet()) { + Degree degree = entry.getValue(); String degreeNumber = degree.getDegreeNumber().toString(); String maxWavelengths = degree.getMaxWavelengths().toString(); String otdrPortCircuitPackName = degree.getOtdrPort().getCircuitPackName(); @@ -1232,10 +1297,17 @@ public class INode221 { private void persistDevDegreeCircuitPack(String nodeId, Degree degree, String degreeNumber, Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < degree.getCircuitPacks().size(); i++) { + @NonNull + Map + circuitPacksMap = degree.nonnullCircuitPacks(); + for (Map.Entry entry : + circuitPacksMap.entrySet()) { + - String circuitPackIndex = degree.getCircuitPacks().get(i).getIndex().toString(); - String circuitPackName = degree.getCircuitPacks().get(i).getCircuitPackName(); + String circuitPackIndex = entry.getValue().getIndex().toString(); + String circuitPackName = entry.getValue().getCircuitPackName(); Object[] parameters = {nodeId, degreeNumber, @@ -1264,11 +1336,14 @@ public class INode221 { Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < degree.getConnectionPorts().size(); i++) { + @NonNull + Map connectionPortsMap = degree.nonnullConnectionPorts(); + for (Map.Entry entry : connectionPortsMap.entrySet()) { - String connectionPortIndex = degree.getConnectionPorts().get(i).getIndex().toString(); - String circuitPackName = degree.getConnectionPorts().get(i).getCircuitPackName(); - String portName = degree.getConnectionPorts().get(i).getPortName().toString(); + ConnectionPorts connectionPorts = entry.getValue(); + String connectionPortIndex = connectionPorts.getIndex().toString(); + String circuitPackName = connectionPorts.getCircuitPackName(); + String portName = connectionPorts.getPortName().toString(); Object[] parameters = {nodeId, degreeNumber, @@ -1301,10 +1376,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getSharedRiskGroup().size(); i++) { - SharedRiskGroup sharedRiskGroup = deviceObject.get().getSharedRiskGroup().get(i); + @NonNull + Map sharedRiskGroupMap = deviceObject.get().nonnullSharedRiskGroup(); + for (Map.Entry entry : sharedRiskGroupMap.entrySet()) { + SharedRiskGroup sharedRiskGroup = entry.getValue(); String maxAddDropPorts = sharedRiskGroup.getMaxAddDropPorts().toString(); String srgNumber = sharedRiskGroup.getSrgNumber().toString(); //int wavelengthDuplicationEnu = sharedRiskGroup.getWavelengthDuplication().getIntValue(); @@ -1348,10 +1429,18 @@ public class INode221 { Connection connection) { String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < sharedRiskGroup.getCircuitPacks().size(); i++) { - - String circuitPackindex = sharedRiskGroup.getCircuitPacks().get(i).getIndex().toString(); - String circuitPackName = sharedRiskGroup.getCircuitPacks().get(i).getCircuitPackName(); + @NonNull + Map + circuitPacksMap = sharedRiskGroup.nonnullCircuitPacks(); + for (Map.Entry entry : + circuitPacksMap.entrySet()) { + + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks circuitPack = + entry.getValue(); + String circuitPackindex = circuitPack.getIndex().toString(); + String circuitPackName = circuitPack.getCircuitPackName(); Object[] parameters = {nodeId, srgNumber, @@ -1382,10 +1471,16 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getRoadmConnections().size(); i++) { - RoadmConnections roadmConnections = deviceObject.get().getRoadmConnections().get(i); + @NonNull + Map roadmConnectionsMap = deviceObject.get().nonnullRoadmConnections(); + for (Map.Entry entry : roadmConnectionsMap.entrySet()) { + RoadmConnections roadmConnections = entry.getValue(); int opticalcontrolmodeEnu = roadmConnections.getOpticalControlMode().getIntValue(); //String connectionName = ""; //String connectionNumber = ""; @@ -1430,10 +1525,15 @@ public class INode221 { Optional deviceObject = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - + if (!deviceObject.isPresent()) { + LOG.error("Device with node id {} not found", nodeId); + return; + } String startTimestamp = getCurrentTimestamp(); - for (int i = 0; i < deviceObject.get().getConnectionMap().size(); i++) { - ConnectionMap connectionMap = deviceObject.get().getConnectionMap().get(i); + @NonNull + Map connectionMapMap = deviceObject.get().nonnullConnectionMap(); + for (Map.Entry entry : connectionMapMap.entrySet()) { + ConnectionMap connectionMap = entry.getValue(); String connectionMapNumber = connectionMap.getConnectionMapNumber().toString(); String sourceCircuitPackName = connectionMap.getSource().getCircuitPackName(); String sourcePortName = connectionMap.getSource().getCircuitPackName(); @@ -1509,10 +1609,9 @@ public class INode221 { private void persistDevInterfaceTcm(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - Tcm tcm; - - tcm = oduBuilder.getTcm().get(i); + Map tcmMap = oduBuilder.getTcm(); + for (Map.Entry entry : tcmMap.entrySet()) { + Tcm tcm = entry.getValue(); Object[] parameters = prepareDevInterfaceTcmParameters(nodeId, interfaceName, tcm); @@ -1532,12 +1631,14 @@ public class INode221 { private void persistDevInterfaceOtnOduTxMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - TxMsi txMsi; - - txMsi = oduBuilder.getOpu().getMsi().getTxMsi().get(i); - + @Nullable + Map txMsi2Map = oduBuilder.getOpu().getMsi().getTxMsi(); + if (txMsi2Map == null) { + LOG.error("Null txMsi2Map for node {}", nodeId); + return; + } + for (Map.Entry entry : txMsi2Map.entrySet()) { + TxMsi txMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduTxMsiParameters(nodeId, interfaceName, txMsi); String query = Queries.getQuery().deviceInterfaceOtnOduTxMsiInsert().get(); @@ -1557,11 +1658,14 @@ public class INode221 { private void persistDevInterfaceOtnOduRxMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - RxMsi rxMsi; - - rxMsi = oduBuilder.getOpu().getMsi().getRxMsi().get(i); + @Nullable + Map rxMsi2Map = oduBuilder.getOpu().getMsi().getRxMsi(); + if (rxMsi2Map == null) { + LOG.error("Null rxMsi2Map for node {}", nodeId); + return; + } + for (Map.Entry entry : rxMsi2Map.entrySet()) { + RxMsi rxMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduRxMsiParameters(nodeId, interfaceName, rxMsi); @@ -1582,11 +1686,14 @@ public class INode221 { private void persistDevInterfaceOtnOduExpMsi(String nodeId, String interfaceName, OduBuilder oduBuilder, Connection connection) { - - for (int i = 0; i < oduBuilder.getTcm().size(); i++) { - ExpMsi expMsi; - - expMsi = oduBuilder.getOpu().getMsi().getExpMsi().get(i); + @Nullable + Map expMsi2Map = oduBuilder.getOpu().getMsi().getExpMsi(); + if (expMsi2Map == null) { + LOG.error("Null expMsi2Map for node {}", nodeId); + return; + } + for (Map.Entry entry : expMsi2Map.entrySet()) { + ExpMsi expMsi = entry.getValue(); Object[] parameters = prepareDevInterfaceOtnOduExpMsiParameters(nodeId, interfaceName, expMsi);