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;
20 public class NormalizedNodeToNodeCodec {
21 public interface Encoded {
22 NormalizedNodeMessages.Container getEncodedNode();
24 NormalizedNodeMessages.InstanceIdentifier getEncodedPath();
27 public interface Decoded {
28 NormalizedNode<?,?> getDecodedNode();
30 YangInstanceIdentifier getDecodedPath();
33 public NormalizedNodeToNodeCodec() {
36 public NormalizedNodeMessages.Container encode(NormalizedNode<?,?> node) {
37 return encode(null, node).getEncodedNode();
40 public Encoded encode(YangInstanceIdentifier path, NormalizedNode<?,?> node) {
42 NormalizedNodeMessages.InstanceIdentifier serializedPath = null;
44 NormalizedNodeMessages.Container.Builder builder = NormalizedNodeMessages.Container.newBuilder();
46 // Note: parent path is no longer used
47 builder.setParentPath("");
51 builder.setNormalizedNode(NormalizedNodeSerializer.serialize(node));
53 Serializer serializer = NormalizedNodeSerializer.newSerializer(node);
54 builder.setNormalizedNode(serializer.serialize(path));
55 serializedPath = serializer.getSerializedPath();
59 return new EncodedImpl(builder.build(), serializedPath);
63 public NormalizedNode<?,?> decode(NormalizedNodeMessages.Node node) {
64 return decode(null, node).getDecodedNode();
67 public Decoded decode(NormalizedNodeMessages.InstanceIdentifier path,
68 NormalizedNodeMessages.Node node) {
69 if (node.getIntType() < 0 || node.getSerializedSize() == 0) {
70 return new DecodedImpl(null, null);
73 DeSerializer deSerializer = NormalizedNodeSerializer.newDeSerializer(path, node);
74 NormalizedNode<?,?> decodedNode = deSerializer.deSerialize();
75 return new DecodedImpl(decodedNode, deSerializer.getDeserializedPath());
78 private static class DecodedImpl implements Decoded {
80 private final NormalizedNode<?, ?> decodedNode;
81 private final YangInstanceIdentifier decodedPath;
83 DecodedImpl(NormalizedNode<?, ?> decodedNode, YangInstanceIdentifier decodedPath) {
84 this.decodedNode = decodedNode;
85 this.decodedPath = decodedPath;
89 public NormalizedNode<?, ?> getDecodedNode() {
94 public YangInstanceIdentifier getDecodedPath() {
99 private static class EncodedImpl implements Encoded {
101 private final Container encodedNode;
102 private final InstanceIdentifier encodedPath;
104 EncodedImpl(Container encodedNode, InstanceIdentifier encodedPath) {
105 this.encodedNode = encodedNode;
106 this.encodedPath = encodedPath;
110 public Container getEncodedNode() {
115 public InstanceIdentifier getEncodedPath() {