[controller-dev] First shot at serializing data tree entities using the Binding Independent level
Colin Dixon
Sorry I haven't caught up with this. Did you make any more progress? --ColinOn Tue, Aug 23, 2016 at 5:54 AM, Sela, Guy <guy.sela@...> wrote:
|
Sela, Guy <guy.sela@...>
Yeah, this is what I done: 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; "
If I want to manipulate the data before sending, it looks nastier:
EGRESS EXAMPLE (1): // Changing networkId before sending it on the wire PortBuilder pb = new PortBuilder(port); pb.setNetworkId(federatedNetworkUid); return pb.build();
INGRESS EXAMPLE (1): // Changing networkId, tenantId, subnetId Neutron neutron = (Neutron) input.getInput(); Port port = neutron.getPorts().getPort().get(0); PortBuilder pb = new PortBuilder(port); LOG.info("Manipulating from Network ID: " + pb.getNetworkId() + " to Network ID: " + localNetworkUid); pb.setNetworkId(localNetworkUid); LOG.info("Manipulating from Tenant ID: " + pb.getTenantId() + " to Tenant ID: " + localTenantUid); pb.setTenantId(localTenantUid); List<FixedIps> federatedFixedIps = pb.getFixedIps(); if (federatedFixedIps != null && !federatedFixedIps.isEmpty()) { List<FixedIps> localFixedIps = new ArrayList<>(); federatedFixedIps.forEach(ip -> localFixedIps.add(new FixedIpsBuilder(ip).setSubnetId(localSubnetUid).build())); pb.setFixedIps(localFixedIps); } return pb.build();
EGRESS EXAMPLE (2): // Removing unnecessary augmentations before sending NodeBuilder nodeBuilder = new NodeBuilder(node); nodeBuilder.addAugmentation(FlowCapableNode.class, null); nodeBuilder.addAugmentation(FlowCapableStatisticsGatheringStatus.class, null); List<NodeConnector> ncList = node.getNodeConnector(); List<NodeConnector> newNcList = new ArrayList<>(); if (ncList != null) { for (NodeConnector nc : ncList) { NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(nc); ncBuilder.addAugmentation(FlowCapableNodeConnectorStatisticsData.class, null); newNcList.add(ncBuilder.build()); } } nodeBuilder.setNodeConnector(newNcList); node = nodeBuilder.build();
The manipulations code is very not elegant as an understatement, given the current Binding API.
From: Colin Dixon [mailto:colin@...]
Sent: Wednesday, September 07, 2016 9:30 PM To: Sela, Guy <guy.sela@...> Cc: Robert Varga <nite@...>; mdsal-dev@...; controller-dev@...; ttp-dev@...; yangtools-dev@... Subject: Re: [controller-dev] First shot at serializing data tree entities using the Binding Independent level
Sorry I haven't caught up with this. Did you make any more progress? --Colin
On Tue, Aug 23, 2016 at 5:54 AM, Sela, Guy <guy.sela@...> wrote:
|
Colin Dixon
I probably just know too much about how ugly this was to start, but that looks pretty clean at this point. --ColinOn Thu, Sep 8, 2016 at 3:01 AM, Sela, Guy <guy.sela@...> wrote:
|