X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fmessages%2FReadDataReply.java;h=8ac6e1b1494a68fd3e7f2f04e0081a4d7f538a10;hp=52e2c29249704fc2831b1db0d97ad1a4f9b2ecdc;hb=3f153e5fa694fe4147e72e615edbb5c263e5a394;hpb=bef0749bb2517eaae6a501be501e16a7d3905045 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java index 52e2c29249..8ac6e1b149 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java @@ -8,17 +8,93 @@ package org.opendaylight.controller.cluster.datastore.messages; +import com.google.protobuf.ByteString; +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import org.opendaylight.controller.cluster.datastore.DataStoreVersions; +import org.opendaylight.controller.cluster.datastore.node.NormalizedNodeToNodeCodec; +import org.opendaylight.controller.cluster.datastore.utils.SerializationUtils; +import org.opendaylight.controller.protobuff.messages.transaction.ShardTransactionMessages; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public class ReadDataReply { - private final NormalizedNode normalizedNode; +public class ReadDataReply implements VersionedSerializableMessage, Externalizable { + private static final long serialVersionUID = 1L; - public ReadDataReply(NormalizedNode normalizedNode){ + public static final Class SERIALIZABLE_CLASS = ReadDataReply.class; - this.normalizedNode = normalizedNode; - } + private NormalizedNode normalizedNode; + private short version; - public NormalizedNode getNormalizedNode() { - return normalizedNode; - } + public ReadDataReply() { + } + + public ReadDataReply(NormalizedNode normalizedNode) { + this.normalizedNode = normalizedNode; + } + + public NormalizedNode getNormalizedNode() { + return normalizedNode; + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + version = in.readShort(); + normalizedNode = SerializationUtils.deserializeNormalizedNode(in); + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + out.writeShort(version); + SerializationUtils.serializeNormalizedNode(normalizedNode, out); + } + + @Override + public Object toSerializable(short toVersion) { + if(toVersion >= DataStoreVersions.LITHIUM_VERSION) { + version = toVersion; + return this; + } else { + return toSerializableReadDataReply(normalizedNode); + } + } + + private static ShardTransactionMessages.ReadDataReply toSerializableReadDataReply( + NormalizedNode normalizedNode) { + if(normalizedNode != null) { + return ShardTransactionMessages.ReadDataReply.newBuilder() + .setNormalizedNode(new NormalizedNodeToNodeCodec(null) + .encode(normalizedNode).getNormalizedNode()).build(); + } else { + return ShardTransactionMessages.ReadDataReply.newBuilder().build(); + + } + } + + public static ReadDataReply fromSerializable(Object serializable) { + if(serializable instanceof ReadDataReply) { + return (ReadDataReply) serializable; + } else { + ShardTransactionMessages.ReadDataReply o = + (ShardTransactionMessages.ReadDataReply) serializable; + return new ReadDataReply(new NormalizedNodeToNodeCodec(null).decode(o.getNormalizedNode())); + } + } + + public static ByteString fromSerializableAsByteString(Object serializable) { + if(serializable instanceof ReadDataReply) { + ReadDataReply r = (ReadDataReply)serializable; + return toSerializableReadDataReply(r.getNormalizedNode()).toByteString(); + } else { + ShardTransactionMessages.ReadDataReply o = + (ShardTransactionMessages.ReadDataReply) serializable; + return o.getNormalizedNode().toByteString(); + } + } + + public static boolean isSerializedType(Object message) { + return SERIALIZABLE_CLASS.isAssignableFrom(message.getClass()) || + message instanceof ShardTransactionMessages.ReadDataReply; + } }