[ONOS-5723][ONOS-5763] Get request is printing only one object +
onos-app-yms YCH includes the Module name when encoding Java to XML
Change-Id: I453b7d879038511d1a184c0043c2659898c29df5
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
index 98a8ccb..61c2f00 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
@@ -50,6 +50,11 @@
private YdtExtendedContext rootYdtNode;
/**
+ * Module YDT node.
+ */
+ private YdtExtendedContext currentModule;
+
+ /**
* Creates a new codec listener.
*
* @param format protocol data format
@@ -59,6 +64,7 @@
YdtExtendedContext rootNode) {
dataFormat = format;
rootYdtNode = rootNode;
+ currentModule = ((YdtExtendedContext) rootNode.getFirstChild());
}
/**
@@ -70,10 +76,29 @@
return elementStack;
}
+ /**
+ * Returns true, if YDT node is module node; false otherwise.
+ *
+ * @param ydtContext YDT node
+ * @return true if YDT node is module; false otherwise
+ */
+ private boolean isModuleNode(YdtExtendedContext ydtContext,
+ boolean isExit) {
+ if (Objects.equals(currentModule, ydtContext)) {
+ if (isExit) {
+ currentModule = (YdtExtendedContext) currentModule
+ .getNextSibling();
+ }
+ return true;
+ }
+ return false;
+ }
+
@Override
public void enterYdtNode(YdtExtendedContext ydtContext) {
- if (!Objects.equals(rootYdtNode, ydtContext)) {
+ if (!Objects.equals(rootYdtNode, ydtContext) &&
+ !isModuleNode(ydtContext, false)) {
CodecHandlerFactory factory = CodecHandlerFactory.instance();
XmlCodecHandler handler =
@@ -94,7 +119,8 @@
@Override
public void exitYdtNode(YdtExtendedContext ydtExtendedContext) {
- if (!Objects.equals(rootYdtNode, ydtExtendedContext)) {
+ if (!Objects.equals(rootYdtNode, ydtExtendedContext) &&
+ !isModuleNode(ydtExtendedContext, true)) {
elementStack.pop();
}
}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
index 10874f0..4faa58b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
@@ -345,12 +345,30 @@
}
curTraversal = PARENT;
traverseToParent(curNode);
- curNode = curNode.getParent();
+ curNode = getParentSchemaNode(curNode);
}
}
}
/**
+ * Returns parent schema node of current node.
+ *
+ * @param curNode current schema node
+ * @return parent schema node
+ */
+ private YangNode getParentSchemaNode(YangNode curNode) {
+ if (curNode instanceof YangAugment) {
+ /*
+ * If curNode is augment, either next augment or augmented node
+ * has to be processed. So traversal type is changed to parent,
+ * but node is not changed.
+ */
+ return curNode;
+ }
+ return curNode.getParent();
+ }
+
+ /**
* Processes root YANG node and adds it as a child to the YDT
* extended builder which is created earlier.
*/
@@ -372,7 +390,8 @@
* @param curNode current YANG node
*/
private void traverseToParent(YangNode curNode) {
- if (curNode instanceof YangCase || curNode instanceof YangChoice) {
+ if (curNode instanceof YangCase || curNode instanceof YangChoice
+ || curNode instanceof YangAugment) {
return;
}
extBuilder.traverseToParentWithoutValidation();
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
index 7a1c8ea..dea5877 100644
--- a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
@@ -91,9 +91,8 @@
*/
private static String customsXml() {
return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
- "<customssupervisor xmlns=\"ydt.customs-supervisor\">" +
- "<supervisor>Customssupervisor</supervisor>" +
- "</customssupervisor>" +
+ "<supervisor xmlns=\"ydt.customs-supervisor\">" +
+ "Customssupervisor</supervisor>" +
"</filter>";
}
@@ -104,10 +103,8 @@
*/
private static String merchandXml() {
return "<config xmlns=\"ydt.root\">" +
- "<merchandisersupervisor xmlns=\"ydt.Merchandiser-" +
- "supervisor\">" +
- "<supervisor>Merchandisersupervisor</supervisor>" +
- "</merchandisersupervisor>" +
+ "<supervisor xmlns=\"ydt.Merchandiser-supervisor\">" +
+ "Merchandisersupervisor</supervisor>" +
"</config>";
}
@@ -118,9 +115,8 @@
*/
private static String tradingXml() {
return "<config xmlns=\"ydt.root\">" +
- "<tradingsupervisor xmlns=\"ydt.trading-supervisor\">" +
- "<supervisor>Tradingsupervisor</supervisor>" +
- "</tradingsupervisor>" +
+ "<supervisor xmlns=\"ydt.trading-supervisor\">" +
+ "Tradingsupervisor</supervisor>" +
"</config>";
}
@@ -130,10 +126,9 @@
* @return the xml string for customssupervisor module
*/
private static String customsCompositeXml() {
- return "<filter xmlns=\"ydt.filter-type\"><customssupervisor " +
- "xmlns=\"ydt.customs-supervisor\">" +
- "<supervisor>Customssupervisor</supervisor>" +
- "</customssupervisor></filter>";
+ return "<filter xmlns=\"ydt.filter-type\">" +
+ "<supervisor xmlns=\"ydt.customs-supervisor\">" +
+ "Customssupervisor</supervisor></filter>";
}
/**
@@ -143,7 +138,6 @@
*/
private static String customsEmptyXml() {
return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
- "<customssupervisor xmlns=\"ydt.customs-supervisor\"/>" +
"</filter>";
}
@@ -154,19 +148,21 @@
*/
private static String materialXml() {
return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
- "<materialsupervisor xmlns=\"ydt.material-supervisor\">" +
- "<supervisor>" +
+ "<supervisor xmlns=\"ydt.material-supervisor\">" +
"<name>abc1</name><departmentId>xyz1</departmentId>" +
"</supervisor>" +
- "<supervisor><name>abc2</name><departmentId>xyz2</departmentId>" +
+ "<supervisor xmlns=\"ydt.material-supervisor\"" +
+ "><name>abc2</name><departmentId>xyz2</departmentId>" +
"</supervisor>" +
- "<supervisor><name>abc3</name><departmentId>xyz3</departmentId>" +
+ "<supervisor xmlns=\"ydt.material-supervisor\"" +
+ "><name>abc3</name><departmentId>xyz3</departmentId>" +
"</supervisor>" +
- "<supervisor><name>abc4</name><departmentId>xyz4</departmentId>" +
+ "<supervisor xmlns=\"ydt.material-supervisor\"" +
+ "><name>abc4</name><departmentId>xyz4</departmentId>" +
"</supervisor>" +
- "<supervisor><name>abc5</name><departmentId>xyz5</departmentId>" +
+ "<supervisor xmlns=\"ydt.material-supervisor\"" +
+ "><name>abc5</name><departmentId>xyz5</departmentId>" +
"</supervisor>" +
- "</materialsupervisor>" +
"</filter>";
}
@@ -177,7 +173,6 @@
*/
private static String containerEmptyXml() {
return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
- "<EmptyContainer xmlns=\"ych.Empty.Container\"/>" +
"</filter>";
}
@@ -188,7 +183,7 @@
*/
private static String listTestXml() {
return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
- "<Combined xmlns=\"ych:combined\"><attributes>" +
+ "<attributes xmlns=\"ych:combined\">" +
"<origin><value>123</value></origin>" +
"<multi-exit-disc><med>456</med></multi-exit-disc>" +
"<local-pref><pref>23</pref></local-pref>" +
@@ -225,7 +220,7 @@
"<optional-capabilities><c-parameters><as4-bytes-capability>" +
"<as-number>33</as-number></as4-bytes-capability>" +
"</c-parameters></optional-capabilities>" +
- "</bgp-parameters></attributes></Combined></filter>";
+ "</bgp-parameters></attributes></filter>";
}
/**
@@ -342,6 +337,27 @@
}
/**
+ * Returns the xml string for more than one module.
+ *
+ * @return the xml string for more than one module
+ */
+ private String multipleAppxml() {
+ return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\"><supervisor" +
+ " xmlns=\"ydt.customs-supervisor\">Customssupervisor" +
+ "</supervisor><supervisor xmlns=\"ydt.material-supervisor\"" +
+ "><name>abc1</name><departmentId>xyz1</departmentId" +
+ "></supervisor><supervisor xmlns=\"ydt.material-supervisor\">" +
+ "<name>abc2</name><departmentId>xyz2</departmentId>" +
+ "</supervisor><supervisor xmlns=\"ydt" +
+ ".material-supervisor\"><name>abc3</name><departmentId>xyz3" +
+ "</departmentId></supervisor><supervisor xmlns=\"ydt" +
+ ".material-supervisor\"><name>abc4</name><departmentId>xyz4" +
+ "</departmentId></supervisor><supervisor xmlns=\"ydt" +
+ ".material-supervisor\"><name>abc5</name><departmentId>xyz5" +
+ "</departmentId></supervisor></filter>";
+ }
+
+ /**
* Unit test case in which verifying xml string for module object with leaf
* for composite encode.
*/
@@ -487,6 +503,57 @@
}
/**
+ * Unit test case in which verifying xml string for more than one module
+ * object.
+ */
+ @Test
+ public void proceessCodecHandlerForMultipleApp() {
+ testYangSchemaNodeProvider.processSchemaRegistry(null);
+ DefaultYangSchemaRegistry schemaRegistry = testYangSchemaNodeProvider
+ .getDefaultYangSchemaRegistry();
+ List<Object> yangModuleList = new ArrayList<>();
+
+ // Creating the object
+ Object object = CustomssupervisorOpParam.builder()
+ .supervisor("Customssupervisor").build();
+ yangModuleList.add(object);
+
+ // Creating the object
+ Supervisor supervisor1 = new DefaultSupervisor.SupervisorBuilder()
+ .name("abc1").departmentId("xyz1").build();
+ Supervisor supervisor2 = new DefaultSupervisor.SupervisorBuilder()
+ .name("abc2").departmentId("xyz2").build();
+ Supervisor supervisor3 = new DefaultSupervisor.SupervisorBuilder()
+ .name("abc3").departmentId("xyz3").build();
+ Supervisor supervisor4 = new DefaultSupervisor.SupervisorBuilder()
+ .name("abc4").departmentId("xyz4").build();
+ Supervisor supervisor5 = new DefaultSupervisor.SupervisorBuilder()
+ .name("abc5").departmentId("xyz5").build();
+
+ Object object1 = MaterialsupervisorOpParam.builder()
+ .addToSupervisor(supervisor1)
+ .addToSupervisor(supervisor2)
+ .addToSupervisor(supervisor3)
+ .addToSupervisor(supervisor4)
+ .addToSupervisor(supervisor5).build();
+ yangModuleList.add(object1);
+
+ // Get the xml string and compare
+ Map<String, String> tagAttr = new HashMap<String, String>();
+ tagAttr.put("type", "subtree");
+
+ YangCodecRegistry.initializeDefaultCodec();
+ DefaultYangCodecHandler codecHandler =
+ new DefaultYangCodecHandler(schemaRegistry);
+ String xml = codecHandler.encodeOperation("filter", "ydt.filter-type",
+ tagAttr, yangModuleList,
+ XML, null);
+
+ assertEquals(AM_XML + "for multiple applications",
+ multipleAppxml(), xml);
+ }
+
+ /**
* Unit test case in which verifying xml string for module object with list.
*/
@Test