import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
/**
* Abstract base class for a versioned Externalizable message.
private short version = DataStoreVersions.CURRENT_VERSION;
public VersionedExternalizableMessage() {
+ // Required for externalizable
}
- public VersionedExternalizableMessage(short version) {
- this.version = version;
+ public VersionedExternalizableMessage(final short version) {
+ this.version = version <= DataStoreVersions.CURRENT_VERSION ? version : DataStoreVersions.CURRENT_VERSION;
}
- public short getVersion() {
+ public final short getVersion() {
return version;
}
+ protected final @NonNull NormalizedNodeStreamVersion getStreamVersion() {
+ if (version >= DataStoreVersions.PHOSPHORUS_VERSION) {
+ return NormalizedNodeStreamVersion.MAGNESIUM;
+ } else if (version == DataStoreVersions.SODIUM_SR1_VERSION) {
+ return NormalizedNodeStreamVersion.SODIUM_SR1;
+ } else {
+ throw new IllegalStateException("Unsupported version " + version);
+ }
+ }
+
@Override
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
version = in.readShort();
}
@Override
- public void writeExternal(ObjectOutput out) throws IOException {
+ public void writeExternal(final ObjectOutput out) throws IOException {
out.writeShort(version);
}
+
+ @Override
+ public final Object toSerializable() {
+ final short ver = getVersion();
+ if (ver < DataStoreVersions.SODIUM_SR1_VERSION) {
+ throw new UnsupportedOperationException("Version " + ver
+ + " is older than the oldest version supported version " + DataStoreVersions.SODIUM_SR1_VERSION);
+ }
+
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + " [version=" + getVersion() + "]";
+ }
}