Skip to content
This repository was archived by the owner on Nov 5, 2024. It is now read-only.

Commit 7ff0e25

Browse files
Fix for colon handling in value
Change-Id: Id2e78bdf13f07bc12d3faa95dc23d0dbd6044382
1 parent 86e9932 commit 7ff0e25

File tree

4 files changed

+82
-4
lines changed

4 files changed

+82
-4
lines changed

runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,20 +361,30 @@ public static Builder addDataNode(Builder builder,
361361
throw new IllegalArgumentException(E_RESID);
362362
}
363363
schema = (LeafSchemaContext) childSchema;
364+
365+
lType = schema.getLeafType(value);
366+
if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
367+
value = valNamespace + ":" + value;
368+
valNamespace = null;
369+
}
370+
364371
valObject = getLeaf(value, schema);
365372
valNamespace = getValidValNamespace(value, schema,
366373
valNamespace);
367-
lType = schema.getLeafType(value);
368374
builder = LeafNode.builder(name, namespace)
369375
.type(nodeType).value(valObject)
370376
.valueNamespace(valNamespace).leafType(lType);
371377
break;
372378
case MULTI_INSTANCE_LEAF_VALUE_NODE:
373379
schema = (LeafSchemaContext) childSchema;
380+
lType = schema.getLeafType(value);
381+
if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
382+
value = valNamespace + ":" + value;
383+
valNamespace = null;
384+
}
374385
valObject = getLeafList(value, schema);
375386
valNamespace = getValidValNamespace(value, schema,
376387
valNamespace);
377-
lType = schema.getLeafType(value);
378388
builder = LeafNode.builder(name, namespace)
379389
.type(nodeType).value(valObject)
380390
.valueNamespace(valNamespace).leafType(lType);
@@ -393,10 +403,14 @@ public static Builder addDataNode(Builder builder,
393403
switch (nodeType) {
394404
case SINGLE_INSTANCE_LEAF_VALUE_NODE:
395405
schema = (LeafSchemaContext) childSchema;
406+
lType = schema.getLeafType(value);
407+
if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
408+
value = valNamespace + ":" + value;
409+
valNamespace = null;
410+
}
396411
valObject = getLeaf(value, schema);
397412
valNamespace = getValidValNamespace(value, schema,
398413
valNamespace);
399-
lType = schema.getLeafType(value);
400414
if (((YangLeaf) childSchema).isKeyLeaf()) {
401415
builder = builder.addKeyLeaf(
402416
name, namespace, valObject);
@@ -407,10 +421,14 @@ public static Builder addDataNode(Builder builder,
407421
break;
408422
case MULTI_INSTANCE_LEAF_VALUE_NODE:
409423
schema = (LeafSchemaContext) childSchema;
424+
lType = schema.getLeafType(value);
425+
if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
426+
value = valNamespace + ":" + value;
427+
valNamespace = null;
428+
}
410429
valObject = getLeafList(value, schema);
411430
valNamespace = getValidValNamespace(value, schema,
412431
valNamespace);
413-
lType = schema.getLeafType(value);
414432
builder = builder.createChildBuilder(
415433
name, namespace, valObject, valNamespace)
416434
.type(nodeType).leafType(lType);

serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,42 @@ public void demo1Test() throws IOException {
116116
}
117117
}
118118

119+
@Test
120+
public void colonTest() throws IOException {
121+
String path = "src/test/resources/colontest.json";
122+
// decode
123+
DefaultCompositeStream external =
124+
new DefaultCompositeStream("demo1:device", parseInput(path));
125+
CompositeData compositeData = jsonSerializer.decode(external, context);
126+
ResourceData resourceData = compositeData.resourceData();
127+
ResourceId rid = resourceData.resourceId();
128+
DataNode rootNode = resourceData.dataNodes().get(0);
129+
130+
// encode
131+
RuntimeContext.Builder runtimeContextBuilder = DefaultRuntimeContext.builder();
132+
runtimeContextBuilder.setDataFormat("JSON");
133+
DefaultResourceData.Builder resourceDataBuilder = DefaultResourceData.builder();
134+
resourceDataBuilder.addDataNode(rootNode);
135+
resourceDataBuilder.resourceId(rid);
136+
137+
ResourceData resourceDataOutput = resourceDataBuilder.build();
138+
DefaultCompositeData.Builder compositeDataBuilder = DefaultCompositeData.builder();
139+
compositeDataBuilder.resourceData(resourceDataOutput);
140+
CompositeData compositeData1 = compositeDataBuilder.build();
141+
// CompositeData --- YangRuntimeService ---> CompositeStream.
142+
CompositeStream compositeStreamOutPut = jsonSerializer.encode(compositeData1,
143+
context);
144+
InputStream inputStreamOutput = compositeStreamOutPut.resourceData();
145+
ObjectNode rootNodeOutput;
146+
ObjectMapper mapper = new ObjectMapper();
147+
try {
148+
rootNodeOutput = (ObjectNode) mapper.readTree(inputStreamOutput);
149+
assertEquals(true, rootNodeOutput != null);
150+
} catch (IOException e) {
151+
throw e;
152+
}
153+
}
154+
119155
@Test
120156
public void jsonListTest() throws IOException {
121157
String path = "src/test/resources/testinput1.json";
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"req-start-date-time":"2018-09-15T15:53:00+05:30"
3+
}

serializers/json/src/test/resources/demo1.yang

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ module demo1 {
44
prefix "demo1";
55
revision "2013-07-15";
66
container device {
7+
8+
uses start-end-date-time;
9+
710
list device {
811
key deviceid;
912
leaf deviceid {
@@ -79,6 +82,24 @@ module demo1 {
7982
}
8083
}
8184

85+
grouping start-end-date-time
86+
{
87+
leaf req-start-date-time
88+
{
89+
type string {
90+
pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})';
91+
}
92+
}
93+
leaf req-end-date-time
94+
{
95+
type string {
96+
pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
97+
+ '(Z|[\+\-]\d{2}:\d{2})';
98+
}
99+
}
100+
description "";
101+
}
102+
82103
list list1 {
83104
key leaf1;
84105
leaf leaf1 {

0 commit comments

Comments
 (0)