X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2FNormalizedNodeToNodeCodec.java;h=6669e48627b6b782327684fcc9a13818b867816a;hp=4e76e37fa25c179ac3f2b196f97ee389261a8c97;hb=73e969cf365dd78772596c71e940ae44fe2f22d3;hpb=351a78c9840c5b98a478b91ffd50befad998eb0e diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodec.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodec.java index 4e76e37fa2..6669e48627 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodec.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodec.java @@ -10,47 +10,116 @@ package org.opendaylight.controller.cluster.datastore.node; -import org.opendaylight.controller.cluster.datastore.node.utils.PathUtils; import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer.DeSerializer; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer.Serializer; import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.Container; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class NormalizedNodeToNodeCodec { + public interface Encoded { + NormalizedNodeMessages.Container getEncodedNode(); + + NormalizedNodeMessages.InstanceIdentifier getEncodedPath(); + } + + public interface Decoded { + NormalizedNode getDecodedNode(); + + YangInstanceIdentifier getDecodedPath(); + } + private final SchemaContext ctx; - private static final Logger logger = LoggerFactory.getLogger(NormalizedNodeToNodeCodec.class); public NormalizedNodeToNodeCodec(final SchemaContext ctx){ this.ctx = ctx; + } + public NormalizedNodeMessages.Container encode(NormalizedNode node){ + return encode(null, node).getEncodedNode(); } - public NormalizedNodeMessages.Container encode(YangInstanceIdentifier id, NormalizedNode node){ + public Encoded encode(YangInstanceIdentifier path, NormalizedNode node) { + + NormalizedNodeMessages.InstanceIdentifier serializedPath = null; NormalizedNodeMessages.Container.Builder builder = NormalizedNodeMessages.Container.newBuilder(); - String parentPath = ""; - if(id != null){ - parentPath = PathUtils.getParentPath(PathUtils.toString(id)); - } + // Note: parent path is no longer used + builder.setParentPath(""); - builder.setParentPath(parentPath); if(node != null) { - builder.setNormalizedNode(NormalizedNodeSerializer.serialize(node)); + if(path == null) { + builder.setNormalizedNode(NormalizedNodeSerializer.serialize(node)); + } else { + Serializer serializer = NormalizedNodeSerializer.newSerializer(node); + builder.setNormalizedNode(serializer.serialize(path)); + serializedPath = serializer.getSerializedPath(); + } } - return builder.build(); + return new EncodedImpl(builder.build(), serializedPath); + } + + + public NormalizedNode decode(NormalizedNodeMessages.Node node){ + return decode(null, node).getDecodedNode(); } - public NormalizedNode decode(YangInstanceIdentifier id, NormalizedNodeMessages.Node node){ + public Decoded decode(NormalizedNodeMessages.InstanceIdentifier path, + NormalizedNodeMessages.Node node) { if(node.getIntType() < 0 || node.getSerializedSize() == 0){ - return null; + return new DecodedImpl(null, null); } - return NormalizedNodeSerializer.deSerialize(node); + + DeSerializer deSerializer = NormalizedNodeSerializer.newDeSerializer(path, node); + NormalizedNode decodedNode = deSerializer.deSerialize(); + return new DecodedImpl(decodedNode, deSerializer.getDeserializedPath()); } + private static class DecodedImpl implements Decoded { + + private final NormalizedNode decodedNode; + private final YangInstanceIdentifier decodedPath; + public DecodedImpl(NormalizedNode decodedNode, YangInstanceIdentifier decodedPath) { + this.decodedNode = decodedNode; + this.decodedPath = decodedPath; + } + + @Override + public NormalizedNode getDecodedNode() { + return decodedNode; + } + + @Override + public YangInstanceIdentifier getDecodedPath() { + return decodedPath; + } + } + + private static class EncodedImpl implements Encoded { + + private final Container encodedNode; + private final InstanceIdentifier encodedPath; + + EncodedImpl(Container encodedNode, InstanceIdentifier encodedPath) { + this.encodedNode = encodedNode; + this.encodedPath = encodedPath; + } + + @Override + public Container getEncodedNode() { + return encodedNode; + } + + @Override + public InstanceIdentifier getEncodedPath() { + return encodedPath; + } + } }