Deprecate ReadData/DataExists protobuff messages
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / messages / AbstractRead.java
index c1d83e989184a7795cb5b987438d4a562b67659b..e73b5af7cdecdf7a311c9a36f36bb975f19d17a3 100644 (file)
@@ -10,6 +10,10 @@ package org.opendaylight.controller.cluster.datastore.messages;
 
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.SettableFuture;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.opendaylight.controller.cluster.datastore.utils.SerializationUtils;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -20,10 +24,16 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
  * @author gwu
  *
  */
-public abstract class AbstractRead<T> implements SerializableMessage {
-    private final YangInstanceIdentifier path;
+public abstract class AbstractRead<T> extends VersionedExternalizableMessage {
+    private static final long serialVersionUID = 1L;
 
-    public AbstractRead(final YangInstanceIdentifier path) {
+    private YangInstanceIdentifier path;
+
+    protected AbstractRead() {
+    }
+
+    public AbstractRead(final YangInstanceIdentifier path, final short version) {
+        super(version);
         this.path = path;
     }
 
@@ -31,8 +41,25 @@ public abstract class AbstractRead<T> implements SerializableMessage {
         return path;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        path = SerializationUtils.deserializePath(in);
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+        SerializationUtils.serializePath(path, out);
+    }
+
+    public AbstractRead<T> asVersion(short version) {
+        return version == getVersion() ? this : newInstance(version);
+    }
+
     public abstract CheckedFuture<T, ReadFailedException> apply(DOMStoreReadTransaction readDelegate);
 
     public abstract void processResponse(Object reponse, SettableFuture<T> promise);
 
+    protected abstract AbstractRead<T> newInstance(short withVersion);
 }