2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.node;
11 import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer;
12 import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer.DeSerializer;
13 import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer.Serializer;
14 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages;
15 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.Container;
16 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.InstanceIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
21 public class NormalizedNodeToNodeCodec {
22 public interface Encoded {
23 NormalizedNodeMessages.Container getEncodedNode();
25 NormalizedNodeMessages.InstanceIdentifier getEncodedPath();
28 public interface Decoded {
29 NormalizedNode<?,?> getDecodedNode();
31 YangInstanceIdentifier getDecodedPath();
34 private final SchemaContext ctx;
36 public NormalizedNodeToNodeCodec(final SchemaContext ctx){
40 public NormalizedNodeMessages.Container encode(NormalizedNode<?,?> node){
41 return encode(null, node).getEncodedNode();
44 public Encoded encode(YangInstanceIdentifier path, NormalizedNode<?,?> node) {
46 NormalizedNodeMessages.InstanceIdentifier serializedPath = null;
48 NormalizedNodeMessages.Container.Builder builder = NormalizedNodeMessages.Container.newBuilder();
50 // Note: parent path is no longer used
51 builder.setParentPath("");
55 builder.setNormalizedNode(NormalizedNodeSerializer.serialize(node));
57 Serializer serializer = NormalizedNodeSerializer.newSerializer(node);
58 builder.setNormalizedNode(serializer.serialize(path));
59 serializedPath = serializer.getSerializedPath();
63 return new EncodedImpl(builder.build(), serializedPath);
67 public NormalizedNode<?,?> decode(NormalizedNodeMessages.Node node){
68 return decode(null, node).getDecodedNode();
71 public Decoded decode(NormalizedNodeMessages.InstanceIdentifier path,
72 NormalizedNodeMessages.Node node) {
73 if(node.getIntType() < 0 || node.getSerializedSize() == 0){
74 return new DecodedImpl(null, null);
77 DeSerializer deSerializer = NormalizedNodeSerializer.newDeSerializer(path, node);
78 NormalizedNode<?,?> decodedNode = deSerializer.deSerialize();
79 return new DecodedImpl(decodedNode, deSerializer.getDeserializedPath());
82 private static class DecodedImpl implements Decoded {
84 private final NormalizedNode<?, ?> decodedNode;
85 private final YangInstanceIdentifier decodedPath;
87 public DecodedImpl(NormalizedNode<?, ?> decodedNode, YangInstanceIdentifier decodedPath) {
88 this.decodedNode = decodedNode;
89 this.decodedPath = decodedPath;
93 public NormalizedNode<?, ?> getDecodedNode() {
98 public YangInstanceIdentifier getDecodedPath() {
103 private static class EncodedImpl implements Encoded {
105 private final Container encodedNode;
106 private final InstanceIdentifier encodedPath;
108 EncodedImpl(Container encodedNode, InstanceIdentifier encodedPath) {
109 this.encodedNode = encodedNode;
110 this.encodedPath = encodedPath;
114 public Container getEncodedNode() {
119 public InstanceIdentifier getEncodedPath() {