migrate sdnr features to phosphorus
[ccsdk/features.git] / sdnr / wt / devicemanager-onap / onf14 / provider / src / main / java / org / onap / ccsdk / features / sdnr / wt / devicemanager / onf14 / dom / impl / Onf14DomNetworkElement.java
  * the License.
  * ============LICENSE_END==========================================================================
  */
-package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.dataprovider.Onf14ToInternalDataModel;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.equipment.Onf14DomEquipmentManager;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.interfaces.Onf14DomInterfacePacManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.dataprovider.Onf14DomToInternalDataModel;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.equipment.Onf14DomEquipmentManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.interfaces.Onf14DomInterfacePacManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.util.Onf14DevicemanagerQNames;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NotificationService;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfDomAccessor;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.StreamKey;
-import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ControlConstruct;
-import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
-import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.control.construct.Equipment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Representation of ONF Core model 1.4 device Top level element is "ControlConstruct" (replaces "NetworkElement" of
- * older ONF Version) NOTE: This class is still under development due to unmet dependencies (especially the ones related
- * to DOM notifications) in ODL. Once the dependencies are complete, this class will replace the ONF14NetworkElement
+ * older ONF Version) NOTE:
  */
 public class Onf14DomNetworkElement implements NetworkElement {
 
     private static final Logger log = LoggerFactory.getLogger(Onf14DomNetworkElement.class);
 
-    //    protected static final InstanceIdentifier<ControlConstruct> CONTROLCONSTRUCT_IID =
-    //            InstanceIdentifier.builder(ControlConstruct.class).build();
-    protected static final YangInstanceIdentifier CONTROLCONSTRUCT_IID =
-            YangInstanceIdentifier.builder().node(ControlConstruct.QNAME).build();
+    protected static final YangInstanceIdentifier TOPLEVELEQUIPMENT_IID =
+            YangInstanceIdentifier.builder().node(Onf14DevicemanagerQNames.CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER)
+                    .node(Onf14DevicemanagerQNames.CORE_MODEL_CC_TOP_LEVEL_EQPT).build();
 
     private final NetconfDomAccessor netconfDomAccessor;
     private final DataProvider databaseService;
     private final @NonNull FaultService faultService;
     private final @NonNull NotificationService notificationService;
 
-    private final Onf14ToInternalDataModel onf14Mapper;
+    private final Onf14DomToInternalDataModel onf14Mapper;
 
     private final @NonNull Onf14DomEquipmentManager equipmentManager;
     private final @NonNull Onf14DomInterfacePacManager interfacePacManager;
     private final @NonNull String namespaceRevision;
 
-    private boolean experimental;
-
-
     public Onf14DomNetworkElement(NetconfDomAccessor netconfDomAccessor, DeviceManagerServiceProvider serviceProvider,
             String namespaceRevision) {
         log.info("Create {}", Onf14DomNetworkElement.class.getSimpleName());
@@ -83,76 +74,26 @@ public class Onf14DomNetworkElement implements NetworkElement {
         this.notificationService = serviceProvider.getNotificationService();
         this.faultService = serviceProvider.getFaultService();
         this.namespaceRevision = namespaceRevision;
-        this.onf14Mapper = new Onf14ToInternalDataModel();
+        this.onf14Mapper = new Onf14DomToInternalDataModel();
         this.equipmentManager = new Onf14DomEquipmentManager(netconfDomAccessor, databaseService, onf14Mapper);
-
         this.interfacePacManager = new Onf14DomInterfacePacManager(netconfDomAccessor, serviceProvider);
-        this.experimental = false;
+
     }
 
     /**
      * reading the inventory (CoreModel 1.4 Equipment Model) and adding it to the DB
      */
     public void initialReadFromNetworkElement() {
+        log.info("Calling read equipment");
+        // Read complete device tree
+        readEquipmentData();
+
+        // Read fault data and subscribe for notifications
+        interfacePacManager.register();
+
+        int problems = faultService.removeAllCurrentProblemsOfNode(netconfDomAccessor.getNodeId());
+        log.debug("Removed all {} problems from database at registration", problems);
 
-        //Read complete device tree
-        Optional<ControlConstruct> oControlConstruct = readControlConstruct(netconfDomAccessor);
-
-        if (oControlConstruct.isPresent()) {
-            ControlConstruct controlConstruct = oControlConstruct.get();
-
-            equipmentManager.setEquipmentData(controlConstruct);
-
-            //-- Start for experimental purpose
-            if (experimental) {
-                log.warn("Experimental code activated");
-                for (UniversalId uuid : equipmentManager.getEquipmentUuidList()) {
-                    log.info("Read data with id {}", uuid);
-                    Optional<Equipment> res1 = equipmentManager.readEquipmentInstance(netconfDomAccessor, uuid);
-                    log.info("Res1: {}", res1.isPresent() ? res1.get() : "No data1");
-
-                    /*List<DataObject> res2 = equipmentManager.readEquipmentList(netconfDomAccessor);
-                    log.info("Res2: {}", res2.isPresent() ? res2.get() : "No data2");*/
-
-                    equipmentManager.readTopLevelEquipment(netconfDomAccessor);
-                    //Do it only once for test purpose and break
-                    break;
-                }
-                List<DataObject> res2 = equipmentManager.readEquipmentList(netconfDomAccessor);
-                //log.info("Res2: {}", res2.isPresent() ? res2.get() : "No data2");
-                for (DataObject dobj : res2) {
-                    Equipment eqpt = (Equipment) dobj;
-                    log.info("Equipment local ID is : {}", eqpt.getLocalId());
-                }
-
-                equipmentManager.readTopLevelEquipment(netconfDomAccessor);
-            }
-            //-- End for experimental purpose
-
-            // storing all the LTP UUIDs internally, for later usage, for air-interface and ethernet-container
-            interfacePacManager.readKeys(controlConstruct);
-
-            // Read all fault data
-            FaultData resultList = new FaultData();
-
-            int problems = faultService.removeAllCurrentProblemsOfNode(netconfDomAccessor.getNodeId());
-            log.debug("Removed all {} problems from database at registration", problems);
-
-            interfacePacManager.readAllAirInterfaceCurrentProblems(netconfDomAccessor, controlConstruct, resultList);
-            problems = resultList.size();
-            log.debug("NETCONF read air interface current problems completed. Got back {} problems.", problems);
-            /*
-            readAllEhernetContainerCurrentProblems(resultList);
-            problems = resultList.size() - problems;
-            log.debug("NETCONF read current problems completed. Got back {} problems.", resultList.size());
-
-            readAllWireInterfaceCurrentProblems(resultList);
-            problems = resultList.size();
-            log.debug("NETCONF read wire interface current problems completed. Got back {} problems.", problems);
-            */
-            faultService.initCurrentProblemStatus(netconfDomAccessor.getNodeId(), resultList);
-            log.debug("DB write current problems completed");
-        }
     }
 
     /**
@@ -171,8 +112,6 @@ public class Onf14DomNetworkElement implements NetworkElement {
         initialReadFromNetworkElement();
 
         if (netconfDomAccessor.isNotificationsRFC5277Supported()) {
-            // register listener
-            interfacePacManager.subscribeNotifications();
             // Output notification streams to LOG
             Map<StreamKey, Stream> streams = netconfDomAccessor.getNotificationStreamsAsMap();
             log.info("Available notifications streams: {}", streams);
@@ -184,7 +123,6 @@ public class Onf14DomNetworkElement implements NetworkElement {
     @Override
     public void deregister() {}
 
-
     @Override
     public NodeId getNodeId() {
         return netconfDomAccessor.getNodeId();
@@ -208,11 +146,18 @@ public class Onf14DomNetworkElement implements NetworkElement {
         return NetworkElementDeviceType.Wireless;
     }
 
-    private static Optional<ControlConstruct> readControlConstruct(NetconfDomAccessor netconfDomAccessor) {
-        return netconfDomAccessor.readData(LogicalDatastoreType.CONFIGURATION, CONTROLCONSTRUCT_IID,
-                ControlConstruct.class);
-    }
+    private void readEquipmentData() {
+        Optional<NormalizedNode> topLevelEquipment = readTopLevelEquipment(netconfDomAccessor);
+        log.info("Top level equipment data is {}", topLevelEquipment.isPresent() ? topLevelEquipment.get() : null);
+        if (topLevelEquipment.isPresent()) {
+            equipmentManager.setEquipmentData(topLevelEquipment.get());
+        }
 
+    }
 
+    private Optional<NormalizedNode> readTopLevelEquipment(NetconfDomAccessor netconfDomAccessor) {
+        log.info("Reading Top level equipment data");
+        return netconfDomAccessor.readDataNode(LogicalDatastoreType.CONFIGURATION, TOPLEVELEQUIPMENT_IID);
+    }
 
 }