2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
 
   7  * ================================================================================
 
   8  * Licensed under the Apache License, Version 2.0 (the "License");
 
   9  * you may not use this file except in compliance with the License.
 
  10  * You may obtain a copy of the License at
 
  12  *     http://www.apache.org/licenses/LICENSE-2.0
 
  14  * Unless required by applicable law or agreed to in writing, software
 
  15  * distributed under the License is distributed on an "AS IS" BASIS,
 
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  17  * See the License for the specific language governing permissions and
 
  18  * limitations under the License.
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.test;
 
  24 import java.util.Arrays;
 
  25 import java.util.List;
 
  26 import java.util.Scanner;
 
  27 import java.util.stream.Collectors;
 
  28 import java.util.stream.IntStream;
 
  29 import org.json.JSONArray;
 
  30 import org.json.JSONObject;
 
  31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.Fan;
 
  32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass;
 
  33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.Port;
 
  34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.Sensor;
 
  35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.AdminState;
 
  36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.OperState;
 
  37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.SensorStatus;
 
  38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.SensorValue;
 
  39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.SensorValueType;
 
  40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
 
  41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.ComponentBuilder;
 
  42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.component.SensorData;
 
  43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.component.SensorDataBuilder;
 
  44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.component.State;
 
  45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.component.StateBuilder;
 
  46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 
  47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 
  49 public class ComponentHelper {
 
  51     public static Component get(String name, String dateTimeString) {
 
  52         DateAndTime dateTime = new DateAndTime(dateTimeString);
 
  53         Uuid uuid = new Uuid("0Aabcdef-0abc-0cfD-0abC-0123456789AB");
 
  55         ComponentBuilder componentBuilder = new ComponentBuilder();
 
  56         componentBuilder.setParent("Shelf").setName("Slot-0").setParentRelPos(0);
 
  57         componentBuilder.setUuid(uuid);
 
  58         componentBuilder.setContainsChild(Arrays.asList("Card-01A", "Card-01B"));
 
  59         componentBuilder.setDescription("ORAN Network Element NO-456");
 
  60         componentBuilder.setXmlClass(TestHardwareClass.class);
 
  61         componentBuilder.setMfgName("Nokia");
 
  62         componentBuilder.setMfgDate(dateTime);
 
  63         return componentBuilder.build();
 
  66     public static List<Component> getComponentList(String resourceName) {
 
  67         try (Scanner scanner = new Scanner(ComponentHelper.class.getResourceAsStream(resourceName), "UTF-8")) {
 
  68             String jsonString = scanner.useDelimiter("\\A").next();
 
  69             JSONObject jsonHardware = new JSONObject(jsonString).getJSONObject("hardware");
 
  70             JSONArray jsonComponentArray = jsonHardware.getJSONArray("component");
 
  71             return IntStream.range(0, jsonComponentArray.length())
 
  72                     .mapToObj(idx -> ComponentHelper.get(jsonComponentArray.getJSONObject(idx)))
 
  73                     .collect(Collectors.toList());
 
  77     public static Component get(JSONObject jsonComponent) {
 
  78         ComponentBuilder componentBuilder = new ComponentBuilder();
 
  79         componentBuilder.setName(getString(jsonComponent, "name"));
 
  80         componentBuilder.setParent(getString(jsonComponent, "parent"));
 
  81         componentBuilder.setParentRelPos(getInteger(jsonComponent, "parent-rel-pos"));
 
  82         componentBuilder.setAlias(getString(jsonComponent, "alias"));
 
  83         componentBuilder.setXmlClass(getXmlClass(jsonComponent, "class"));
 
  84         componentBuilder.setState(getState(jsonComponent, "state"));
 
  85         componentBuilder.setDescription(getString(jsonComponent, "description"));
 
  86         componentBuilder.setContainsChild(getStringArray(jsonComponent, "contains-child"));
 
  87         componentBuilder.setSensorData(getSensorData(jsonComponent, "sensor-data"));
 
  88         componentBuilder.setFirmwareRev(getString(jsonComponent, "firmware-rev"));
 
  89         componentBuilder.setSerialNum(getString(jsonComponent, "serial-num"));
 
  90         componentBuilder.setSoftwareRev(getString(jsonComponent, "software-rev"));
 
  91         return componentBuilder.build();
 
  96     private static State getState(JSONObject jsonComponent, String key) {
 
  97         if (jsonComponent.has(key)) {
 
  98             JSONObject jsonState = jsonComponent.getJSONObject(key);
 
  99             StateBuilder stateBuilder = new StateBuilder();
 
 100             stateBuilder.setOperState(getString(jsonState, "oper-state", value -> OperState.forName(value)).get());
 
 101             stateBuilder.setAdminState(getString(jsonState, "admin-state", value -> AdminState.forName(value)).get());
 
 102             return stateBuilder.build();
 
 107     private static SensorData getSensorData(JSONObject jsonComponent, String key) {
 
 108         if (jsonComponent.has(key)) {
 
 109             JSONObject jsonSonsor = jsonComponent.getJSONObject(key);
 
 110             SensorDataBuilder sensorBuilder = new SensorDataBuilder();
 
 111             sensorBuilder.setValueTimestamp(getString(jsonSonsor, "value-timestamp", value -> new DateAndTime(value)));
 
 112             sensorBuilder.setValue(getInteger(jsonSonsor, "value", value -> new SensorValue(value)));
 
 114                     .setValueType(getString(jsonSonsor, "value-type", value -> SensorValueType.forName(value).get()));
 
 116                     .setOperStatus(getString(jsonSonsor, "oper-status", value -> SensorStatus.forName(value).get()));
 
 117             return sensorBuilder.build();
 
 123     private static Class<? extends HardwareClass> getXmlClass(JSONObject jsonComponent, String key) {
 
 124         return getString(jsonComponent, key, value -> {
 
 126                 case "iana-hardware:sensor":
 
 128                 case "iana-hardware:port":
 
 130                 case "iana-hardware:fan":
 
 133                     return HardwareClass.class;
 
 138     private static String getString(JSONObject jsonObject, String key) {
 
 139         return getString(jsonObject, key, value -> value);
 
 142     private static Integer getInteger(JSONObject jsonObject, String key) {
 
 143         return getInteger(jsonObject, key, value -> value);
 
 146     private interface ConvertString<T> {
 
 147         T convert(String value);
 
 150     private static <T> T getString(JSONObject jsonObject, String key, ConvertString<T> convert) {
 
 151         if (jsonObject.has(key)) {
 
 152             String value = jsonObject.getString(key);
 
 153             return convert.convert(value);
 
 158     private interface ConvertInteger<T> {
 
 159         T convert(int value);
 
 162     private static <T> T getInteger(JSONObject jsonObject, String key, ConvertInteger<T> convert) {
 
 163         if (jsonObject.has(key)) {
 
 164             int value = jsonObject.getInt(key);
 
 165             return convert.convert(value);
 
 170     private static List<String> getStringArray(JSONObject jsonComponent, String key) {
 
 171         if (jsonComponent.has(key)) {
 
 172             JSONArray stringArray = jsonComponent.getJSONArray(key);
 
 173             return IntStream.range(0, stringArray.length()).mapToObj(idx -> stringArray.getString(idx))
 
 174                     .collect(Collectors.toList());