update websocketmanager
[ccsdk/features.git] / sdnr / wt / devicemanager-openroadm / provider / src / main / java / org / onap / ccsdk / features / sdnr / wt / devicemanager / openroadm / impl / PmDataBuilderOpenRoadm.java
index 755f8ed..f1fd447 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.devicemanager.openroadm.impl;
 
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import java.util.Map;
+import org.onap.ccsdk.features.sdnr.wt.common.YangHelper;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev191129.HistoricalPmList;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev191129.historical.pm.group.HistoricalPm;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev191129.historical.pm.list.HistoricalPmEntry;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev191129.historical.pm.val.group.Measurement;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmDataType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmGranularity;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmNamesEnum;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.g836.pm.types.rev200413.ErroredSecond;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.g836.pm.types.rev200413.SeverelyErroredSecond;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.PerformanceMeasurementTypeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.Celsius;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.DB;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.DBm;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.Fahrenheit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.KHz;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.MW;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.PerformanceMeasurementUnitId;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,12 +68,13 @@ import org.slf4j.LoggerFactory;
  */
 public class PmDataBuilderOpenRoadm {
     // variables
-    private static final Logger log = LoggerFactory.getLogger(OpenroadmNetworkElement.class);
+    private static final Logger log = LoggerFactory.getLogger(PmDataBuilderOpenRoadm.class);
     private PmdataEntityBuilder pmDataBuilder;
+    private Bundle b = FrameworkUtil.getBundle(this.getClass());
 
     // end of variables
     // constructors
-    public PmDataBuilderOpenRoadm(NetconfAccessor accessor) {
+    public PmDataBuilderOpenRoadm(NetconfBindingAccessor accessor) {
         this.pmDataBuilder = new PmdataEntityBuilder();
         this.pmDataBuilder.setNodeName(accessor.getNodeId().getValue());
     }
@@ -59,7 +82,7 @@ public class PmDataBuilderOpenRoadm {
     // end of constructors
     // public methods
     // Read PM data
-    public HistoricalPmList getPmData(NetconfAccessor accessor) {
+    public HistoricalPmList getPmData(NetconfBindingAccessor accessor) {
         final Class<HistoricalPmList> pmDataClass = HistoricalPmList.class;
         log.info("Get PM data for element {}", accessor.getNodeId().getValue());
         InstanceIdentifier<HistoricalPmList> pmDataIid = InstanceIdentifier.builder(pmDataClass).build();
@@ -71,17 +94,22 @@ public class PmDataBuilderOpenRoadm {
     // Build PM entity for writing into the database
     public List<PmdataEntity> buildPmDataEntity(HistoricalPmList historicalPmEnitityList) {
         List<PmdataEntity> pmEntitiyList = new ArrayList<>();
-        List<HistoricalPmEntry> pmDataEntryList = historicalPmEnitityList.getHistoricalPmEntry();
+        Collection<HistoricalPmEntry> pmDataEntryList =
+                YangHelper.getCollection(historicalPmEnitityList.getHistoricalPmEntry());
         for (HistoricalPmEntry pmDataEntry : pmDataEntryList) {
             pmDataBuilder.setUuidInterface(pmDataEntry.getPmResourceType().getName());
-            List<HistoricalPm> historicalPmList = pmDataEntry.getHistoricalPm();
+            Collection<HistoricalPm> historicalPmList = YangHelper.getCollection(pmDataEntry.getHistoricalPm());
             for (HistoricalPm historicalPm : historicalPmList) {
                 log.info("PmName:{}", historicalPm.getType());
-                this.pmDataBuilder.setScannerId(historicalPm.getType().getName());
-                writeperformanceData(historicalPm);
-                log.info("NodeName: {}, Scanner Id:{}, Period: {}", this.pmDataBuilder.getNodeName(),
-                        this.pmDataBuilder.getScannerId(), this.pmDataBuilder.getGranularityPeriod().getName());
+                //              pmDataBuilder.setPerformanceData(value)
+
+                try {
+                    writeperformanceData(historicalPm);
+                } catch (ClassNotFoundException e) {
+                    log.info("No relevant data found");
+                }
                 pmEntitiyList.add(this.pmDataBuilder.build());
+
                 log.info("PmListSize before db writing: {}", pmEntitiyList.size());
             }
             log.info("PmListSize before db writing: {}", pmEntitiyList.size());
@@ -91,30 +119,29 @@ public class PmDataBuilderOpenRoadm {
     // end of public methods
 
     // private methods
-    private void writeperformanceData(HistoricalPm historicalPm) {
-        List<Measurement> measurementList = historicalPm.getMeasurement();
-
+    private void writeperformanceData(HistoricalPm historicalPm) throws ClassNotFoundException {
+        Collection<Measurement> measurementList = YangHelper.getCollection(historicalPm.getMeasurement());
+          Map<MeasurementKey, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.Measurement> measurementMap=new HashMap<>();
+        // Map Performance data of PmDataEntity with MeasurmentData-HistoricalPm
+        PerformanceDataBuilder performanceDataBuilder = new PerformanceDataBuilder();
         for (Measurement measurementData : measurementList) {
             this.pmDataBuilder.setGranularityPeriod(mapGranularityPeriod(measurementData.getGranularity()))
-                    .setPerformanceData(getPerformancedata(measurementData))
                     .setTimeStamp(measurementData.getCompletionTime());
             if (measurementData.getValidity().getName().equals("suspect")) {
                 this.pmDataBuilder.setSuspectIntervalFlag(true);
             }
-            log.info("Time:d{}, \n Scannerid: {}, \n UUID: {}", this.pmDataBuilder.getGranularityPeriod().getName(),
-                    this.pmDataBuilder.getScannerId(), this.pmDataBuilder.getUuidInterface());
+            measurementMap.put(new MeasurementKey(measurementBuilder(historicalPm.getType(), measurementData.getPmParameterUnit(),
+                    measurementData.getPmParameterValue()).getPmKey()), measurementBuilder(historicalPm.getType(), measurementData.getPmParameterUnit(),
+                    measurementData.getPmParameterValue()));
+
+
         }
-    }
 
-    //Map Performance data of PmDataEntity with  MeasurmentData-HistoricalPm
-    private PerformanceData getPerformancedata(Measurement measurementData) {
-        PerformanceData performanceData;
-        PerformanceDataBuilder performanceDataBuilder = new PerformanceDataBuilder();
-        performanceData = performanceDataBuilder.setCses(measurementData.getBinNumber())
-                .setSes(measurementData.getPmParameterValue().getUint64().intValue()).build();
-        return performanceData;
+        pmDataBuilder.setPerformanceData(performanceDataBuilder.setMeasurement(measurementMap).build());
     }
 
+
+
     // Mapping Granularity period of PmDataEntity with PmGranularity of MeasurmentData-HistoricalPm
     private GranularityPeriodType mapGranularityPeriod(PmGranularity pmGranularity) {
 
@@ -135,5 +162,129 @@ public class PmDataBuilderOpenRoadm {
         }
         return granPeriod;
     }
+
+    private List<Class<? extends PerformanceMeasurementTypeId>> setMeasurementTypeId() {
+        String packageName =
+                "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413";
+        String packageName1 =
+                "/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/data/provider/openroadm/pm/types/rev200413/";
+        List<Class<? extends PerformanceMeasurementTypeId>> measTypeObjList =
+                new ArrayList<>();
+        URL root = Thread.currentThread().getContextClassLoader().getResource(packageName1);
+
+        log.info("path for type package: {}", root);
+
+        Enumeration<URL> results = getFileURL(b, packageName);
+        log.info("FOund Packages {}", results);
+        if(results != null) {
+            while (results.hasMoreElements()) {
+                URL path = results.nextElement();
+
+                Class<?> cls1 = loadClass(b, path.getFile());
+
+                if (PerformanceMeasurementTypeId.class.isAssignableFrom(cls1)) {
+                    measTypeObjList.add((Class<? extends PerformanceMeasurementTypeId>) cls1);
+
+
+                }
+                if(cls1!=null) {
+                    log.info("Class Added {}", cls1.getSimpleName());
+                }
+
+        }
+
+
+        }
+
+        return measTypeObjList;
+    }
+
+    private Class<? extends PerformanceMeasurementUnitId> setMeasurementUnit(String unitName) {
+        Class<? extends PerformanceMeasurementUnitId>  measurementUnitClass = null;
+        switch (unitName) {
+            case ("celsius"):
+                measurementUnitClass = Celsius.class;
+                break;
+            case("dB"):
+                measurementUnitClass = DB.class;
+                break;
+            case("dBm"):
+                measurementUnitClass = DBm.class;
+                break;
+            case("fahrenheit"):
+                measurementUnitClass = Fahrenheit.class;
+                break;
+            case("kHz"):
+                measurementUnitClass = KHz.class;
+                break;
+            case("mW"):
+                measurementUnitClass = MW.class;
+                break;
+            default:
+                break;
+        }
+            return measurementUnitClass;
+     }
+
+    private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.Measurement measurementBuilder(
+            PmNamesEnum pmType, String pmUnit, PmDataType pmDataType) {
+
+        MeasurementBuilder measBuilder = new MeasurementBuilder();
+        if (pmType.getName().equals("erroredSeconds") ) {
+            measBuilder.setPmKey(ErroredSecond.class);
+        } else if (pmType.getName().equals("severelyErroredSeconds")) {
+            measBuilder.setPmKey(SeverelyErroredSecond.class);
+        } else {
+            for (Class<? extends PerformanceMeasurementTypeId> obj : setMeasurementTypeId()) {
+                if (obj.toString().contains(pmType.name())) {
+                    measBuilder.setPmKey(obj);
+                }
+            }
+        }
+        measBuilder.setPmUnit(setMeasurementUnit(pmUnit));
+        measBuilder.setPmValue(pmDataType);
+        return measBuilder.build();
+
+    }
+
+    private Class<?> loadClass(Bundle bundle, String classFilePath) {
+        String className = classFilePath.replaceFirst("^/", "").replace('/', '.').replaceFirst(".class$", "");
+        try {
+            return bundle.loadClass(className);
+        } catch (Exception e) {
+            log.info(String.format("Class [%s] could not be loaded. Message: [%s].", className, e.getMessage()));
+        }
+        return null;
+    }
+
+    private static Enumeration<URL> getFileURL(Bundle b, String classPath) {
+
+        BundleContext context = b == null ? null : b.getBundleContext();
+        if (context == null) {
+            log.info("no bundle context available");
+            return null;
+        }
+        Bundle[] bundles = context.getBundles();
+        if (bundles == null || bundles.length <= 0) {
+            log.info("no bundles found");
+            return null;
+        }
+        log.info("found {} bundles", bundles.length);
+        Enumeration<URL> resultUrl = null;
+
+        for (Bundle bundle : bundles) {
+            resultUrl = bundle.findEntries("/" + classPath.replace(".", "/"), "*.class", false);
+            if (resultUrl != null) {
+                break;
+
+            }
+
+        }
+
+        return resultUrl;
+    }
+
+
     // end of private methods
 }
+