2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2019 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.yang.mapper;
 
  24 import java.io.IOException;
 
  25 import java.util.ArrayList;
 
  26 import java.util.HashMap;
 
  27 import java.util.List;
 
  29 import org.json.JSONObject;
 
  30 import org.junit.Test;
 
  31 import org.onap.ccsdk.features.sdnr.wt.yang.mapper.serialize.IdentifierDeserializer;
 
  32 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmDataType;
 
  33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 
  34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 
  35 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
 
  36 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
 
  37 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.OdlHelloMessageCapabilitiesBuilder;
 
  38 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
 
  39 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
 
  40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.DefectSeconds;
 
  41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.Measurement;
 
  42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementBuilder;
 
  43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementKey;
 
  44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata15m.entity.PerformanceDataBuilder;
 
  45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data;
 
  46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.DataBuilder;
 
  47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.units.rev200413.KHz;
 
  48 import org.slf4j.Logger;
 
  49 import org.slf4j.LoggerFactory;
 
  51 public class TestYangGenSalMapping {
 
  53     // Create mapper for serialization and deserialization
 
  54     DataProviderYangToolsMapper mapper = new DataProviderYangToolsMapper();
 
  57     public void test1() throws IOException {
 
  60         NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
 
  61         netconfNodeBuilder.setConnectedMessage("ConnMessage");
 
  63         LoginPasswordBuilder loginPasswordBuilder = new LoginPasswordBuilder();
 
  64         loginPasswordBuilder.setUsername("myTestUsername");
 
  65         loginPasswordBuilder.setPassword("myTestPassword");
 
  66         netconfNodeBuilder.setCredentials(loginPasswordBuilder.build());
 
  68         OdlHelloMessageCapabilitiesBuilder odlHelloMessageCapabilitiesBuilder =
 
  69                 new OdlHelloMessageCapabilitiesBuilder();
 
  70         List<Uri> uriList = new ArrayList<>();
 
  71         uriList.add(new Uri("test.uri"));
 
  72         odlHelloMessageCapabilitiesBuilder.setCapability(uriList);
 
  73         netconfNodeBuilder.setOdlHelloMessageCapabilities(odlHelloMessageCapabilitiesBuilder.build());
 
  75         NetconfNode netconfNode = netconfNodeBuilder.build();
 
  76         out(netconfNode.toString());
 
  78         // Map Object to JSON String
 
  79         String res = mapper.writeValueAsString(netconfNode);
 
  80         JSONObject json = new JSONObject(res); // Convert text to object
 
  81         out(json.toString(4)); // Print it with specified indentation
 
  83         // Map to JSON String to Object
 
  84         NetconfNode generatedNode = mapper.readValue(res.getBytes(), NetconfNode.class);
 
  85         out(generatedNode.toString()); // Print it with specified indentation
 
  88         //out("Equal?  "+netconfNode.equals(generatedNode));
 
  92     public void test3() throws IOException {
 
  94         PerformanceDataBuilder performanceBuilder = new PerformanceDataBuilder();
 
  95         performanceBuilder.setEs(99);
 
  96         Map<MeasurementKey, Measurement> values = new HashMap<>();
 
  98         Measurement m = new MeasurementBuilder().setPmKey(DefectSeconds.class).setPmUnit(KHz.class)
 
  99                 .setPmValue(new PmDataType(1L)).build();
 
 100         values.put(m.key(), m);
 
 101         performanceBuilder.setMeasurement(values);
 
 102         DataBuilder pmData15MinutesBuilder = new DataBuilder();
 
 103         pmData15MinutesBuilder.setLayerProtocolName("fdsaf");
 
 104         pmData15MinutesBuilder.setTimeStamp(new DateAndTime("2017-03-01T09:15:00.0Z"));
 
 105         pmData15MinutesBuilder.setPerformanceData(performanceBuilder.build());
 
 107         // Map Object to JSON String
 
 108         String res = mapper.writeValueAsString(pmData15MinutesBuilder.build());
 
 109         JSONObject json = new JSONObject(res); // Convert text to object
 
 110         out(json.toString(4)); // Print it with specified indentation
 
 112         // Map to JSON String to Object
 
 113         Data generatedNode = mapper.readValue(res.getBytes(), Data.class);
 
 114         out(generatedNode.toString()); // Print it with specified indentation
 
 118     public void test4() throws IOException {
 
 120      String jsonString = "{\n"
 
 121                 + "\"node-name\": \"Sim2230\",\n"
 
 122                 + "\"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n"
 
 123                 + "\"layer-protocol-name\": \"MWPS\",\n"
 
 124                 + "\"radio-signal-id\": \"Test8\",\n"
 
 125                 + "\"time-stamp\": \"2017-03-01T09:15:00.0Z\",\n"
 
 126                 + "\"granularity-period\": \"Period15Min\",\n"
 
 127                 + "\"scanner-id\": \"PM_RADIO_15M_4\",\n"
 
 128                 + "\"performance-data\": {\n"
 
 129                 +     "\"unavailability\": 0,\n"
 
 130                 +     "\"tx-level-max\": 3,\n"
 
 131                 +     "\"tx-level-avg\": 3,\n"
 
 132                 +     "\"rx-level-min\": -44,\n"
 
 133                 +     "\"rx-level-max\": -45,\n"
 
 134                 +     "\"rx-level-avg\": -44,\n"
 
 135                 +     "\"time2-states\": 0,\n"
 
 136                 +     "\"time4-states-s\": 0,\n"
 
 137                 +     "\"time4-states\": 0,\n"
 
 138                 +     "\"time8-states\": -1,\n"
 
 139                 +     "\"time16-states-s\": -1,\n"
 
 140                 +     "\"time16-states\": 0,\n"
 
 141                 +     "\"time32-states\": -1,\n"
 
 142                 +     "\"time64-states\": 900,\n"
 
 143                 +     "\"time128-states\": -1,\n"
 
 144                 +     "\"time256-states\": -1,\n"
 
 145                 +     "\"time512-states\": -1,\n"
 
 146                 +     "\"time512-states-l\": -1,\n"
 
 147                 +     "\"time1024-states\": -1,\n"
 
 148                 +     "\"time1024-states-l\": -1,\n"
 
 149                 +     "\"time8192-states-l\": -1,\n"
 
 150                 +     "\"time8192-states\": -1,\n"
 
 151                 +     "\"time2048-states\": -1,\n"
 
 152                 +     "\"snir-min\": -99,\n"
 
 153                 +     "\"snir-max\": -99,\n"
 
 154                 +     "\"snir-avg\": -99,\n"
 
 155                 +     "\"xpd-min\": -99,\n"
 
 156                 +     "\"xpd-max\": -99,\n"
 
 157                 +     "\"xpd-avg\": -99,\n"
 
 158                 +     "\"rf-temp-min\": -99,\n"
 
 159                 +     "\"rf-temp-max\": -99,\n"
 
 160                 +     "\"rf-temp-avg\": -99,\n"
 
 161                 +     "\"defect-blocks-sum\": -1,\n"
 
 162                 +     "\"time-period\": 900,\n"
 
 164                 +     "\"time4096-states-l\": -1,\n"
 
 165                 +     "\"tx-level-min\": 3,\n"
 
 167                 +     "\"time2048-states-l\": -1,\n"
 
 168                 +     "\"time4096-states\": -1,\n"
 
 171                 + "\"suspect-interval-flag\": false\n"
 
 175         // Map to JSON String to Object
 
 176         Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
 
 177         out(generatedNode.toString()); // Print it with specified indentation
 
 181     public void test5() throws IOException {
 
 183         String jsonString = "{\n"
 
 184                 + "    \"time-stamp\": \"2017-03-01T06:45:00.0Z\",\n"
 
 185                 + "    \"node-name\": \"Sim2230\",\n"
 
 186                 + "    \"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n"
 
 187                 + "    \"scanner-id\": \"PM_RADIO_15M_14\",\n"
 
 188                 + "    \"layer-protocol-name\": \"MWPS\",\n"
 
 189                 + "    \"granularity-period\": \"Period15Min\",\n"
 
 190                 + "    \"radio-signal-id\": \"Test8\",\n"
 
 191                 + "    \"suspect-interval-flag\": false,\n"
 
 192                 + "    \"performance-data\": {\n"
 
 193                 + "        \"time4096-states-l\": -1,\n"
 
 194                 + "        \"time16-states-s\": -1,\n"
 
 195                 + "        \"tx-level-max\": 3,\n"
 
 196                 + "        \"snir-max\": -99,\n"
 
 197                 + "        \"time16-states\": 0,\n"
 
 198                 + "        \"time64-states\": 900,\n"
 
 199                 + "        \"unavailability\": 0,\n"
 
 200                 + "        \"time8192-states-l\": -1,\n"
 
 201                 + "        \"time512-states\": -1,\n"
 
 202                 + "        \"xpd-min\": -99,\n"
 
 203                 + "        \"xpd-avg\": -99,\n"
 
 204                 + "        \"tx-level-avg\": 3,\n"
 
 205                 + "        \"tx-level-min\": 3,\n"
 
 206                 + "        \"rf-temp-min\": -99,\n"
 
 207                 + "        \"rf-temp-avg\": -99,\n"
 
 208                 + "        \"snir-avg\": -99,\n"
 
 209                 + "        \"snir-min\": -99,\n"
 
 210                 + "        \"time-period\": 900,\n"
 
 211                 + "        \"time2-states\": 0,\n"
 
 212                 + "        \"time4-states\": 0,\n"
 
 213                 + "        \"time8-states\": -1,\n"
 
 215                 + "        \"time2048-states-l\": -1,\n"
 
 216                 + "        \"time2048-states\": -1,\n"
 
 217                 + "        \"xpd-max\": -99,\n"
 
 218                 + "        \"rf-temp-max\": -99,\n"
 
 219                 + "        \"time8192-states\": -1,\n"
 
 220                 + "        \"time128-states\": -1,\n"
 
 221                 + "        \"time256-states\": -1,\n"
 
 222                 + "        \"rx-level-min\": -44,\n"
 
 223                 + "        \"rx-level-avg\": -44,\n"
 
 224                 + "        \"time1024-states-l\": -1,\n"
 
 227                 + "        \"time4-states-s\": 0,\n"
 
 228                 + "        \"time1024-states\": -1,\n"
 
 229                 + "        \"time512-states-l\": -1,\n"
 
 230                 + "        \"time4096-states\": -1,\n"
 
 231                 + "        \"rx-level-max\": -45,\n"
 
 232                 + "        \"defect-blocks-sum\": -1,\n"
 
 233                 + "        \"time32-states\": -1\n"
 
 237         // Map to JSON String to Object
 
 238         Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
 
 239         out(generatedNode.toString()); // Print it with specified indentation
 
 243     public void test8() throws IOException {
 
 247         System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
 
 249         System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
 
 251         System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
 
 253         System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
 
 255         System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
 
 258     /* ---------------------------------
 
 261     private static String method() {
 
 262         String nameofCurrMethod = new Throwable().getStackTrace()[1].getMethodName();
 
 263         return nameofCurrMethod;
 
 266     private static void out(String text) {
 
 267         System.out.println("----------------------");
 
 268         System.out.println(text);
 
 271     private static class DataProviderYangToolsMapper extends YangToolsMapper {
 
 273         @SuppressWarnings("unused")
 
 274         private final Logger LOG = LoggerFactory.getLogger(DataProviderYangToolsMapper.class);
 
 275         private static final long serialVersionUID = 1L;
 
 277         public DataProviderYangToolsMapper() {
 
 279             this.addDeserializer(Credentials.class, LoginPasswordBuilder.class.getName());
 
 280             this.addKeyDeserializer(MeasurementKey.class, new IdentifierDeserializer());