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=b0c163d87f346ccaefc300ce38f88573ab033b17;hp=43dd81252c3a52f35da645e6993d716e2a0d7715;hb=6405fa8d6b47e406cdf566b26b15f980d802cad4;hpb=4f81f4ed61cf74c4dcac48e4f7714adcda501a5f 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 43dd81252c..b0c163d87f 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 @@ -9,23 +9,28 @@ package org.opendaylight.controller.cluster.datastore.messages; import com.google.protobuf.ByteString; +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.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -public class ReadDataReply implements SerializableMessage { - public static final Class SERIALIZABLE_CLASS = - ShardTransactionMessages.ReadDataReply.class; +public class ReadDataReply extends VersionedExternalizableMessage { + private static final long serialVersionUID = 1L; - private final NormalizedNode normalizedNode; - private final SchemaContext schemaContext; + public static final Class SERIALIZABLE_CLASS = ReadDataReply.class; - public ReadDataReply(SchemaContext context,NormalizedNode normalizedNode){ + private NormalizedNode normalizedNode; + public ReadDataReply() { + } + + public ReadDataReply(NormalizedNode normalizedNode, short version) { + super(version); this.normalizedNode = normalizedNode; - this.schemaContext = context; } public NormalizedNode getNormalizedNode() { @@ -33,26 +38,62 @@ public class ReadDataReply implements SerializableMessage { } @Override - public Object toSerializable(){ + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + super.readExternal(in); + normalizedNode = SerializationUtils.deserializeNormalizedNode(in); + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + super.writeExternal(out); + SerializationUtils.serializeNormalizedNode(normalizedNode, out); + } + + @Override + public Object toSerializable() { + if(getVersion() >= DataStoreVersions.LITHIUM_VERSION) { + return this; + } else { + return toSerializableReadDataReply(normalizedNode); + } + } + + private static ShardTransactionMessages.ReadDataReply toSerializableReadDataReply( + NormalizedNode normalizedNode) { if(normalizedNode != null) { return ShardTransactionMessages.ReadDataReply.newBuilder() - .setNormalizedNode(new NormalizedNodeToNodeCodec(schemaContext) - .encode(normalizedNode).getNormalizedNode()).build(); + .setNormalizedNode(new NormalizedNodeToNodeCodec(null) + .encode(normalizedNode).getNormalizedNode()).build(); } else { return ShardTransactionMessages.ReadDataReply.newBuilder().build(); } } - public static ReadDataReply fromSerializable(SchemaContext schemaContext, - YangInstanceIdentifier id, Object serializable) { - ShardTransactionMessages.ReadDataReply o = (ShardTransactionMessages.ReadDataReply) serializable; - return new ReadDataReply(schemaContext, new NormalizedNodeToNodeCodec(schemaContext).decode( - o.getNormalizedNode())); + 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()), + DataStoreVersions.HELIUM_2_VERSION); + } + } + + 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 ByteString getNormalizedNodeByteString(Object serializable){ - ShardTransactionMessages.ReadDataReply o = (ShardTransactionMessages.ReadDataReply) serializable; - return ((ShardTransactionMessages.ReadDataReply) serializable).getNormalizedNode().toByteString(); + public static boolean isSerializedType(Object message) { + return SERIALIZABLE_CLASS.isAssignableFrom(message.getClass()) || + message instanceof ShardTransactionMessages.ReadDataReply; } }