Thanks.
I dismissed the attempt to work with the Binding Aware objects due to the Proxy 
complications and some entities that hold transient InstanceIdentifier as 
fields.
Instead of continuing the struggle just for a demo sake, I moved to working 
with the Binding Independent layer, as Robert suggested, and thus the last mail 
to verify I’m going in the right path.

From: Michael Vorburger [mailto:vorbur...@redhat.com]
Sent: Tuesday, August 30, 2016 5:34 PM
To: Sela, Guy <guy.s...@hpe.com>
Cc: Muthukumaran K <muthukumara...@ericsson.com>; Robert Varga <n...@hq.sk>; 
controller-dev@lists.opendaylight.org; mdsal-...@lists.opendaylight.org; 
yangtools-...@lists.opendaylight.org
Subject: Re: [mdsal-dev] Serialize/Deserialize DTOs to JSON

Guy, I don't have any direct answer for a ready made solution for JSON, but I 
thought that you may be interested in knowing that I'm actively working on 
something vaguely related, in [1] :
The goal there isn't to serialize to generic format dynamically (like JSON, for 
which the NormalizedNode representation seems to be the way go go), but to be 
able to create code literals (text) to recreate given DataObject instances 
through the respective Builder.

The few problems that had to be solved for that goal include dealing with 
Augmentations in a general way; the [2] helper could be handy for anyone else 
ever needing anything like this.

[1] https://git.opendaylight.org/gerrit/#/c/44099/

[2] 
https://git.opendaylight.org/gerrit/#/c/44099/8/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/xtendbeans/AugmentableExtension.java


Tx,
M.
--
Michael Vorburger <vorbur...@redhat.com<mailto:vorbur...@redhat.com>> | IRC: 
vorburger @freenode | ~ = http://vorburger.ch<http://vorburger.ch/>

On Mon, Aug 29, 2016 at 8:40 PM, Sela, Guy 
<guy.s...@hpe.com<mailto:guy.s...@hpe.com>> wrote:
?

-----Original Message-----
From: Sela, Guy
Sent: Wednesday, August 24, 2016 2:21 PM
To: 'Muthukumaran K' 
<muthukumara...@ericsson.com<mailto:muthukumara...@ericsson.com>>; 'Robert 
Varga' <n...@hq.sk<mailto:n...@hq.sk>>; 
'controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>'
 
<controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>>;
 'mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>' 
<mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>>; 
'yangtools-...@lists.opendaylight.org<mailto:yangtools-...@lists.opendaylight.org>'
 
<yangtools-...@lists.opendaylight.org<mailto:yangtools-...@lists.opendaylight.org>>
Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON

The only way it is working for me now, is the following (Some of it is 
pseudo-code):
"
PRODUCER CODE:
I have a 
org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node
 in my hands (Got it from a DCN).
This is the code I need to run in order to do what I'm trying:
TopologyBuilder topologyBuilder = new TopologyBuilder(); 
topologyBuilder.setKey(new TopologyKey(new TopologyId(new Uri("ovsdb:1")))); 
topologyBuilder.setNode(Collections.singletonList(node));
NetworkTopologyBuilder ntBuilder = new NetworkTopologyBuilder(); 
ntBuilder.setTopology(Collections.singletonList(topologyBuilder.build()));
InstanceIdentifier path = InstanceIdentifier.create(NetworkTopology.class);
String json = TTPUtils.jsonStringFromDataObject(path, ntBuilder.build(), true); 
Serialize the json...

CONSUMER CODE:
NormalizedNode normalizedNode = 
TTPUtils.normalizedNodeFromJsonString(jsonInput);
DataObject obj = BindingNormalizedNodeCodecRegistry. 
fromNormalizedNode(YangInstanceIdentifier.of(BindingReflections.findQName(NetworkTopology.class)),
 normalizedNode); NetworkTopology nt = (NetworkTopology)obj; Node node = 
nt.getTopology().get(0).getNode().get(0);
return node;
"

Is this what you guys meant by working with NormalizedNodes or is there a 
better way?



-----Original Message-----
From: Sela, Guy
Sent: Tuesday, August 23, 2016 6:11 PM
To: 'Muthukumaran K' 
<muthukumara...@ericsson.com<mailto:muthukumara...@ericsson.com>>; Robert Varga 
<n...@hq.sk<mailto:n...@hq.sk>>; 
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>;
 mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>; 
'yangtools-...@lists.opendaylight.org<mailto:yangtools-...@lists.opendaylight.org>'
 
<yangtools-...@lists.opendaylight.org<mailto:yangtools-...@lists.opendaylight.org>>
Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON
I am probably missing something, or not explaining myself well.
I'll give a fresh example.

I am holding a 
"org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node"
 in my hands.
Node node = new NodeBuilder().setKey(new NodeKey(new NodeId("asdsd"))).build();

After converting it to NormalizedNode I get:
ImmutableMapEntryNode{nodeIdentifier=(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node[{(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node-id=asdsd}],
 
value=[ImmutableLeafNode{nodeIdentifier=(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node-id,
 value=asdsd, attributes={}}], attributes={}}

When I try to convert this NormalizedNode to a JsonString using the algorithm 
used in the Test class[1], I get the following exception Exception in thread 
"main" java.lang.IllegalArgumentException: List item is not appropriate
        at 
com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
        at 
org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker.startListItem(SchemaTracker.java:144)
        at 
org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter.startMapEntryNode(JSONNormalizedNodeStreamWriter.java:156)
        at 
org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(NormalizedNodeWriter.java:269)
        at 
org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:210)
        at 
org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:102)
        at 
org.opendaylight.newfederation.transform.GuyDemoUtils.normalizedNodeToJsonStreamTransformation(GuyDemoUtils.java:190)
        at 
org.opendaylight.newfederation.tests.JsonParsing.main(JsonParsing.java:115)

[1] The algorithm (I'm replacing schemaContext with the correct schemaContext):
private static String normalizedNodeToJsonStreamTransformation(final Writer 
writer,
            final NormalizedNode<?, ?> inputStructure) throws IOException {

        final NormalizedNodeStreamWriter jsonStream = 
JSONNormalizedNodeStreamWriter.
                createExclusiveWriter(JSONCodecFactory.create(schemaContext), 
SchemaPath.ROOT, null,
                    JsonWriterFactory.createJsonWriter(writer, 2));
        final NormalizedNodeWriter nodeWriter = 
NormalizedNodeWriter.forStreamWriter(jsonStream);
        nodeWriter.write(inputStructure);

        nodeWriter.close();
        return writer.toString();
    }


-----Original Message-----
From: Muthukumaran K 
[mailto:muthukumara...@ericsson.com<mailto:muthukumara...@ericsson.com>]
Sent: Tuesday, August 23, 2016 5:51 PM
To: Sela, Guy <guy.s...@hpe.com<mailto:guy.s...@hpe.com>>; Robert Varga 
<n...@hq.sk<mailto:n...@hq.sk>>; 
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>;
 mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>
Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON

Since NormalizedNode is a pre-requisite for the deserialization into json, this 
seems to demonstrate how to get an entry from keyed list  
https://github.com/opendaylight/yangtools/blob/master/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java
 particularly  'keyedListNodeInContainer()'

-----Original Message-----
From: 
controller-dev-boun...@lists.opendaylight.org<mailto:controller-dev-boun...@lists.opendaylight.org>
 
[mailto:controller-dev-boun...@lists.opendaylight.org<mailto:controller-dev-boun...@lists.opendaylight.org>]
 On Behalf Of Sela, Guy
Sent: Tuesday, August 23, 2016 7:52 PM
To: Robert Varga; 
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>;
 mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>
Subject: Re: [controller-dev] [mdsal-dev] Serialize/Deserialize DTOs to JSON

Sorry, I meant to ask about an entry of a list, not a leaf node.
I mean, let's say I have this yang model:
"
container elan-instances {
        description
           "elan instances configuration parameters. Elan instances support 
both the VLAN and VNI based elans.";

        list elan-instance {
            max-elements "unbounded";
            min-elements "0";
            key "elan-instance-name";
            description
                "Specifies the name of the elan instance. It is a string of 1 
to 31
                 case-sensitive characters.";
            leaf elan-instance-name {
...
"
Can I convert a specific elan-instance ? Or do I have to convert something 
bigger?

-----Original Message-----
From: Sela, Guy
Sent: Tuesday, August 23, 2016 4:49 PM
To: 'Robert Varga' <n...@hq.sk<mailto:n...@hq.sk>>; 
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>;
 mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>
Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON

From what I'm seeing so far, I can't convert a leaf node into a JSON string. 
The only entities I can convert are container or list.
Is this correct?

I got this from:
    private SchemaTracker(final SchemaContext context, final SchemaPath path) {
        SchemaNode current = SchemaUtils.findParentSchemaOnPath(context, path);
        Preconditions.checkArgument(current instanceof 
DataNodeContainer,"Schema path must point to container or list or an rpc 
input/output. Supplied path %s pointed to: %s",path,current);
        root = (DataNodeContainer) current;
    }

When trying to create JSONNormalizedNodeStreamWriter

-----Original Message-----
From: Robert Varga [mailto:n...@hq.sk<mailto:n...@hq.sk>]
Sent: Sunday, July 24, 2016 4:52 PM
To: Sela, Guy <guy.s...@hpe.com<mailto:guy.s...@hpe.com>>; 
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>;
 mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>
Subject: Re: [mdsal-dev] Serialize/Deserialize DTOs to JSON

On 07/24/2016 01:36 PM, Sela, Guy wrote:
> Hi,
>
> Is there an API that I can call which gets a DataObject as input and
> returns a JSON representation of it?

Not directly, as DataObject and related generated code is an access facade. 
Primary data representation is NormalizedNode, hence you need to transform the 
DTOs to NormalizedNodes (see mdsal-binding-dom-codec) and then use 
yang-data-codec-gson (or -xml) to get the representation you seek.

I think TTPUtils (in TTP) does exactly that.

Bye,
Robert

_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org<mailto:controller-dev@lists.opendaylight.org>
https://lists.opendaylight.org/mailman/listinfo/controller-dev
_______________________________________________
mdsal-dev mailing list
mdsal-...@lists.opendaylight.org<mailto:mdsal-...@lists.opendaylight.org>
https://lists.opendaylight.org/mailman/listinfo/mdsal-dev

_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to