ORAN Devicemanager null exception 17/118217/1
authorRavi Pendurty <ravi.pendurty@highstreet-technologies.com>
Tue, 23 Feb 2021 07:08:21 +0000 (08:08 +0100)
committerRavi Pendurty <ravi.pendurty@highstreet-technologies.com>
Tue, 23 Feb 2021 07:08:35 +0000 (08:08 +0100)
optional field uuid should not be used as key

Issue-ID: CCSDK-3159
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Change-Id: I55d561dacb5892b3539eb06681bde820d0e83973
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java
sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanToInternalDataModel.java

index 59d51e1..7577685 100644 (file)
@@ -85,12 +85,22 @@ public class ORanNetworkElement implements NetworkElement {
         if (hardware != null) {
             Collection<Component> componentList = YangHelper.getCollection(hardware.getComponent());
             if (componentList != null) {
+                int componentListSize = componentList.size();
+                int writeCount = 0;
+
                 for (Component component : componentList) {
-                    databaseService
-                            .writeInventory(oRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component));
+                    if (component.getParent() == null) {
+                        writeCount += writeInventory(component, componentList, 0);
+                    }
+                }
+                if (componentListSize != writeCount) {
+                    log.warn("Not all data were written to the Inventory. Potential entries with missing "
+                            + "contained-child. Node Id = {}, Components Found = {}, Entries written to Database = {}",
+                            netconfAccessor.getNodeId().getValue(), componentListSize, writeCount);
                 }
             }
         }
+
         System1 sys = getOnapSystemData(netconfAccessor);
         if (sys != null) {
             GuicutthroughBuilder gcBuilder = new GuicutthroughBuilder();
@@ -99,6 +109,23 @@ public class ORanNetworkElement implements NetworkElement {
         }
     }
 
+    private int writeInventory(Component component, Collection<Component> componentList, int treeLevel) {
+        databaseService
+                .writeInventory(oRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component, treeLevel));
+        int count = 1;
+        if (component.getContainsChild() != null) {
+            List<String> containerHolderList = component.getContainsChild();
+            for (String containerHolder : containerHolderList) {
+                for (Component c : componentList) {
+                    if (containerHolder.equals(c.getName())) {
+                        count += writeInventory(c, componentList, treeLevel + 1);
+                    }
+                }
+            }
+        }
+        return count;
+    }
+
     @Override
     public NetworkElementDeviceType getDeviceType() {
         return NetworkElementDeviceType.ORAN;
index c563cc4..ca44e63 100644 (file)
@@ -31,18 +31,16 @@ import org.opendaylight.yangtools.yang.common.Uint32;
  */
 public class ORanToInternalDataModel {
 
-
-    public Inventory getInternalEquipment(NodeId nodeId, Component component) {
+    public Inventory getInternalEquipment(NodeId nodeId, Component component, int treeLevel) {
 
         InventoryBuilder inventoryBuilder = new InventoryBuilder();
 
         // General
         inventoryBuilder.setNodeId(nodeId.getValue());
-        inventoryBuilder.setParentUuid(component.getParent());
-        inventoryBuilder.setTreeLevel(new Long(component.getParentRelPos()));
-        inventoryBuilder.setTreeLevel(Uint32.valueOf(component.getParentRelPos().intValue()));
+        inventoryBuilder.setParentUuid(component.getParent()!=null?component.getParent():component.getName());
+        inventoryBuilder.setTreeLevel(Uint32.valueOf(treeLevel));
 
-        inventoryBuilder.setUuid(component.getUuid().getValue());
+        inventoryBuilder.setUuid(component.getName());
         // -- String list with ids of holders
         List<String> containerHolderKeyList = new ArrayList<>();
         List<String> containerHolderList = component.getContainsChild();
@@ -53,19 +51,25 @@ public class ORanToInternalDataModel {
         }
         inventoryBuilder.setContainedHolder(containerHolderKeyList);
         // -- Manufacturer related things
-        inventoryBuilder.setManufacturerName(component.getName());
+        inventoryBuilder.setManufacturerName(component.getMfgName());
+        inventoryBuilder.setManufacturerIdentifier(component.getMfgName());
+
 
         // Equipment type
         inventoryBuilder.setDescription(component.getDescription());
         inventoryBuilder.setModelIdentifier(component.getModelName());
-        inventoryBuilder.setPartTypeId(component.getXmlClass().getName());
+        if (component.getXmlClass() != null) {
+            inventoryBuilder.setPartTypeId(component.getXmlClass().getName());
+        }
         inventoryBuilder.setTypeName(component.getName());
         inventoryBuilder.setVersion(component.getHardwareRev());
 
+
         // Equipment instance
-        inventoryBuilder.setDate(component.getMfgDate().getValue());
+        if (component.getMfgDate() != null) {
+            inventoryBuilder.setDate(component.getMfgDate().getValue());
+        }
         inventoryBuilder.setSerial(component.getSerialNum());
-
         return inventoryBuilder.build();
     }
 
index c33926b..76b2f32 100644 (file)
@@ -39,13 +39,14 @@ public class TestORanToInternalDataModel {
     NodeId nodeId;
     Component component;
 
-     @Before
+    @Before
     public void init() throws InterruptedException, IOException {
         nodeId = mock(NodeId.class);
         component = mock(Component.class);
 
         when(nodeId.getValue()).thenReturn("ORan-1000");
         when(component.getParent()).thenReturn("Shelf");
+        when(component.getName()).thenReturn("Slot-0");
         when(component.getParentRelPos()).thenReturn(0);
         when(component.getUuid()).thenReturn(new Uuid("0Aabcdef-0abc-0cfD-0abC-0123456789AB"));
 
@@ -67,7 +68,7 @@ public class TestORanToInternalDataModel {
     @Test
     public void test() throws Exception {
         ORanToInternalDataModel model = new ORanToInternalDataModel();
-        model.getInternalEquipment(nodeId, component);
+        model.getInternalEquipment(nodeId, component,0);
         assertEquals(component.getUuid().getValue(), "0Aabcdef-0abc-0cfD-0abC-0123456789AB");
         assertEquals(component.getMfgDate().getValue(), "2020-02-05T12:30:45.283Z");