+package org.opendaylight.controller.sal.restconf.impl.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import java.io.*;
+import java.util.*;
+
+import javax.validation.constraints.AssertFalse;
+
+import org.junit.Test;
+import org.opendaylight.controller.sal.restconf.impl.test.structures.*;
+
+import com.google.gson.stream.JsonReader;
+
+public class YangAndXmlToJsonBasicYangTypesTest {
+
+ @Test
+ public void simpleYangTypesWithJsonReaderTest() {
+ String jsonOutput;
+ // jsonOutput =
+ // TestUtils.readJsonFromFile("/yang-to-json-conversion/simple-yang-types/xml/awaited_output.json",
+ // false);
+
+ jsonOutput = TestUtils.convertXmlDataAndYangToJson("/yang-to-json-conversion/simple-yang-types/xml/data.xml",
+ "/yang-to-json-conversion/simple-yang-types", "/yang-to-json-conversion/simple-yang-types/xml");
+
+ verifyJsonOutput(jsonOutput);
+
+ }
+
+ private void verifyJsonOutput(String jsonOutput) {
+ StringReader strReader = new StringReader(jsonOutput);
+ JsonReader jReader = new JsonReader(strReader);
+
+ String exception = null;
+ Cont dataFromJson = null;
+ try {
+ dataFromJson = jsonReadCont1(jReader);
+ } catch (IOException e) {
+ exception = e.getMessage();
+ }
+
+ assertNotNull("Data structures from json are missing.", dataFromJson);
+ checkDataFromJson(dataFromJson);
+
+ assertNull("Error during reading Json output: " + exception, exception);
+ }
+
+ private Cont jsonReadCont1(JsonReader jReader) throws IOException {
+ jReader.beginObject();
+ assertNotNull("cont1 is missing.", jReader.hasNext());
+
+ Cont dataFromJson = new Cont(jReader.nextName());
+ dataFromJson = jsonReadCont1Elements(jReader, dataFromJson);
+
+ assertFalse("cont shouldn't have other element.", jReader.hasNext());
+ jReader.endObject();
+ return dataFromJson;
+
+ }
+
+ private Cont jsonReadCont1Elements(JsonReader jReader, Cont redData) throws IOException {
+ jReader.beginObject();
+ while (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf11")) {
+ redData.addLf(new Lf(keyName, jReader.nextString()));
+ } else if (keyName.equals("lflst11")) {
+ LfLst lfLst = new LfLst(keyName);
+ lfLst = jsonReadLflstValues(jReader, lfLst);
+ redData.addLfLst(lfLst);
+ } else if (keyName.equals("lflst12")) {
+ LfLst lfLst = new LfLst(keyName);
+ jsonReadLflstValues(jReader, lfLst);
+ redData.addLfLst(lfLst);
+ } else if (keyName.equals("lst11")) {
+ Lst lst = new Lst(keyName);
+ lst = jsonReadLst11(jReader, lst);
+ redData.addLst(lst);
+ } else {
+ assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
+ }
+ }
+ jReader.endObject();
+ return redData;
+
+ }
+
+ private Lst jsonReadLst11(JsonReader jReader, Lst lst) throws IOException {
+ jReader.beginArray();
+
+ while (jReader.hasNext()) {
+ LstItem lstItem = jsonReadLst11Elements(jReader);
+ lst.addLstItem(lstItem);
+ }
+ jReader.endArray();
+ return lst;
+ }
+
+ private LstItem jsonReadLst11Elements(JsonReader jReader) throws IOException {
+ LstItem lstItem = new LstItem();
+ jReader.beginObject();
+ while (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf111")) {
+ lstItem.addLf(new Lf(keyName, jReader.nextString()));
+ } else if (keyName.equals("lf112")) {
+ lstItem.addLf(new Lf(keyName, jReader.nextString()));
+ } else if (keyName.equals("cont111")) {
+ Cont cont = new Cont(keyName);
+ cont = jsonReadCont111(jReader, cont);
+ lstItem.addCont(cont);
+ } else if (keyName.equals("lst111")) {
+ Lst lst = new Lst(keyName);
+ lst = jsonReadLst111(jReader, lst);
+ lstItem.addLst(lst);
+ } else if (keyName.equals("lst112")) {
+ Lst lst = new Lst(keyName);
+ lst = jsonReadLst112(jReader, lst);
+ lstItem.addLst(lst);
+ } else {
+ assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
+ }
+ }
+ jReader.endObject();
+ return lstItem;
+ }
+
+ private Lst jsonReadLst112(JsonReader jReader, Lst lst) throws IOException {
+ jReader.beginArray();
+ while (jReader.hasNext()) {
+ LstItem lstItem = jsonReadLst112Elements(jReader);
+ lst.addLstItem(lstItem);
+ }
+ jReader.endArray();
+ return lst;
+ }
+
+ private LstItem jsonReadLst112Elements(JsonReader jReader) throws IOException {
+ LstItem lstItem = new LstItem();
+ jReader.beginObject();
+ if (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf1121")) {
+ lstItem.addLf(new Lf(keyName, jReader.nextString()));
+ }
+ }
+ jReader.endObject();
+ return lstItem;
+
+ }
+
+ private Lst jsonReadLst111(JsonReader jReader, Lst lst) throws IOException {
+ jReader.beginArray();
+ while (jReader.hasNext()) {
+ LstItem lstItem = jsonReadLst111Elements(jReader);
+ lst.addLstItem(lstItem);
+ }
+ jReader.endArray();
+ return lst;
+ }
+
+ private LstItem jsonReadLst111Elements(JsonReader jReader) throws IOException {
+ LstItem lstItem = new LstItem();
+ jReader.beginObject();
+ if (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf1111")) {
+ lstItem.addLf(new Lf(keyName, jReader.nextString()));
+ }
+ }
+ jReader.endObject();
+ return lstItem;
+ }
+
+ private Cont jsonReadCont111(JsonReader jReader, Cont cont) throws IOException {
+ jReader.beginObject();
+ cont = jsonReadCont111Elements(jReader, cont);
+ jReader.endObject();
+ return cont;
+ }
+
+ private Cont jsonReadCont111Elements(JsonReader jReader, Cont cont) throws IOException {
+ while (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf1111")) {
+ cont.addLf(new Lf(keyName, jReader.nextString()));
+ } else if (keyName.equals("lflst1111")) {
+ LfLst lfLst = new LfLst(keyName);
+ lfLst = jsonReadLflstValues(jReader, lfLst);
+ cont.addLfLst(lfLst);
+ } else if (keyName.equals("lst1111")) {
+ Lst lst = new Lst(keyName);
+ lst = jsonReadLst1111(jReader, lst);
+ cont.addLst(lst);
+ } else {
+ assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
+ }
+ }
+ return cont;
+
+ }
+
+ private Lst jsonReadLst1111(JsonReader jReader, Lst lst) throws IOException {
+ jReader.beginArray();
+ while (jReader.hasNext()) {
+ LstItem lstItem = jsonReadLst1111Elements(jReader);
+ lst.addLstItem(lstItem);
+ }
+ jReader.endArray();
+ return lst;
+ }
+
+ private LstItem jsonReadLst1111Elements(JsonReader jReader) throws IOException {
+ jReader.beginObject();
+ LstItem lstItem = new LstItem();
+ while (jReader.hasNext()) {
+ String keyName = jReader.nextName();
+ if (keyName.equals("lf1111A") || keyName.equals("lf1111B")) {
+ lstItem.addLf(new Lf(keyName, jReader.nextString()));
+ }
+ }
+ jReader.endObject();
+ return lstItem;
+ }
+
+ private LfLst jsonReadLflstValues(JsonReader jReader, LfLst lfLst) throws IOException {
+ jReader.beginArray();
+ while (jReader.hasNext()) {
+ lfLst.addLf(new Lf(jReader.nextString()));
+ }
+ jReader.endArray();
+ return lfLst;
+ }
+
+ private void checkDataFromJson(Cont dataFromJson) {
+ assertNotNull(dataFromJson.getLfs().get("lf11"));
+ assertEquals(dataFromJson.getLfs().get("lf11"), new Lf("lf11", "lf"));
+
+ LfLst lflst11 = null;
+ LfLst lflst12 = null;
+
+ lflst11 = dataFromJson.getLfLsts().get("lflst11");
+ lflst12 = dataFromJson.getLfLsts().get("lflst12");
+
+ assertNotNull(lflst11);
+ assertNotNull(lflst12);
+
+ assertEquals(3, lflst11.getLfs().size());
+ assertTrue(lflst11.getLfs().contains(new Lf("55")));
+ assertTrue(lflst11.getLfs().contains(new Lf("56")));
+ assertTrue(lflst11.getLfs().contains(new Lf("57")));
+
+ assertEquals(3, lflst12.getLfs().size());
+ assertTrue(lflst12.getLfs().contains(new Lf("lflst12 str1")));
+ assertTrue(lflst12.getLfs().contains(new Lf("lflst12 str2")));
+ assertTrue(lflst12.getLfs().contains(new Lf("lflst12 str3")));
+
+ assertEquals(1, dataFromJson.getLsts().size());
+ Lst lst11 = dataFromJson.getLsts().get("lst11");
+ assertNotNull(lst11);
+ assertEquals(2, lst11.getLstItems().size());
+
+ LstItem lst11_1 = null;
+ LstItem lst11_2 = null;
+ for (LstItem lstItem : lst11.getLstItems()) {
+ Lf lf = lstItem.getLfs().get("lf111");
+ if (lf != null && lf.getValue().equals("140")) {
+ lst11_1 = lstItem;
+ } else if (lf != null && lf.getValue().equals("141")) {
+ lst11_2 = lstItem;
+ }
+ }
+
+ checkLst11_1(lst11_1);
+ checkLst11_2(lst11_2);
+ }
+
+ private void checkLst11_2(LstItem lst11_2) {
+ assertNotNull(lst11_2);
+ assertEquals(2, lst11_2.getLfs().size());
+ assertEquals(1, lst11_2.getConts().size());
+ assertEquals(2, lst11_2.getLsts().size());
+
+ assertEquals(lst11_2.getLfs().get("lf112"), new Lf("lf112", "lf112 str2"));
+
+ Cont lst11_2_cont = lst11_2.getConts().get("cont111");
+ assertEquals(0, lst11_2_cont.getConts().size());
+ assertEquals(1, lst11_2_cont.getLfLsts().size());
+ assertEquals(1, lst11_2_cont.getLfs().size());
+ assertEquals(1, lst11_2_cont.getLsts().size());
+
+ // cont111 check
+ assertEquals(new Lf("lf1111", "lf1111 str2"), lst11_2_cont.getLfs().get("lf1111"));
+ assertEquals(new LfLst("lflst1111").addLf(new Lf("2049")).addLf(new Lf("1025")).addLf(new Lf("4097")),
+ lst11_2_cont.getLfLsts().get("lflst1111"));
+
+ assertNotNull(lst11_2_cont.getLsts().get("lst1111"));
+ checkLst1111(lst11_2_cont.getLsts().get("lst1111").getLstItems(), new Lf("lf1111A", "lf1111A str21"), new Lf(
+ "lf1111B", "5"), new Lf("lf1111A", "lf1111A str22"), new Lf("lf1111B", "8"));
+
+ checkLst11x(lst11_2.getLsts().get("lst111"), new LstItem().addLf(new Lf("lf1111", "55")),
+ new LstItem().addLf(new Lf("lf1111", "56")));
+ checkLst11x(lst11_2.getLsts().get("lst112"), new LstItem().addLf(new Lf("lf1121", "lf1121 str22")),
+ new LstItem().addLf(new Lf("lf1121", "lf1121 str21")));
+ }
+
+ private void checkLst11_1(LstItem lst11_1) {
+ assertNotNull(lst11_1);
+
+ assertEquals(2, lst11_1.getLfs().size());
+ assertEquals(1, lst11_1.getConts().size());
+ assertEquals(2, lst11_1.getLsts().size());
+
+ assertEquals(lst11_1.getLfs().get("lf112"), new Lf("lf112", "lf112 str"));
+
+ Cont lst11_1_cont = lst11_1.getConts().get("cont111");
+ assertEquals(0, lst11_1_cont.getConts().size());
+ assertEquals(1, lst11_1_cont.getLfLsts().size());
+ assertEquals(1, lst11_1_cont.getLfs().size());
+ assertEquals(1, lst11_1_cont.getLsts().size());
+
+ // cont111 check
+ assertEquals(new Lf("lf1111", "lf1111 str"), lst11_1_cont.getLfs().get("lf1111"));
+ assertEquals(new LfLst("lflst1111").addLf(new Lf("2048")).addLf(new Lf("1024")).addLf(new Lf("4096")),
+ lst11_1_cont.getLfLsts().get("lflst1111"));
+
+ assertNotNull(lst11_1_cont.getLsts().get("lst1111"));
+ checkLst1111(lst11_1_cont.getLsts().get("lst1111").getLstItems(), new Lf("lf1111A", "lf1111A str11"), new Lf(
+ "lf1111B", "4"), new Lf("lf1111A", "lf1111A str12"), new Lf("lf1111B", "7"));
+
+ checkLst11x(lst11_1.getLsts().get("lst111"), new LstItem().addLf(new Lf("lf1111", "65")));
+ checkLst11x(lst11_1.getLsts().get("lst112"), new LstItem().addLf(new Lf("lf1121", "lf1121 str11")));
+ }
+
+ private void checkLst11x(Lst lst, LstItem... lstItems) {
+ assertNotNull(lst);
+
+ Lst requiredLst = new Lst(lst.getName());
+ for (LstItem lstItem : lstItems) {
+ requiredLst.addLstItem(lstItem);
+ }
+
+ assertEquals(requiredLst, lst);
+
+ }
+
+ private void checkLst1111(Set<LstItem> lstItems, Lf lf11, Lf lf12, Lf lf21, Lf lf22) {
+ LstItem lst11_1_cont_lst1111_1 = null;
+ LstItem lst11_1_cont_lst1111_2 = null;
+ for (LstItem lstItem : lstItems) {
+ if (new LstItem().addLf(lf11).addLf(lf12).equals(lstItem)) {
+ lst11_1_cont_lst1111_1 = lstItem;
+ } else if (new LstItem().addLf(lf21).addLf(lf22).equals(lstItem)) {
+ lst11_1_cont_lst1111_2 = lstItem;
+ }
+ }
+
+ assertNotNull(lst11_1_cont_lst1111_1);
+ assertNotNull(lst11_1_cont_lst1111_2);
+ }
+
+}