package org.opendaylight.controller.cluster.access.concepts;
import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
-import java.io.DataInput;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.Serial;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableIdentifier;
-import org.opendaylight.yangtools.concepts.WritableObjects;
/**
* Abstract Externalizable proxy for use with {@link Message} subclasses.
* @param <T> Target identifier type
* @param <C> Message class
*/
-abstract class AbstractMessageProxy<T extends WritableIdentifier, C extends Message<T, C>> implements Externalizable {
- @Serial
+abstract class AbstractMessageProxy<T extends WritableIdentifier, C extends Message<T, C>>
+ implements Message.SerialForm<T, C> {
+ @java.io.Serial
private static final long serialVersionUID = 1L;
- private T target;
- private long sequence;
+ private C message;
protected AbstractMessageProxy() {
// For Externalizable
}
AbstractMessageProxy(final @NonNull C message) {
- this.target = message.getTarget();
- this.sequence = message.getSequence();
+ this.message = requireNonNull(message);
}
@Override
- public void writeExternal(final ObjectOutput out) throws IOException {
- target.writeTo(out);
- WritableObjects.writeLong(out, sequence);
+ public final C message() {
+ return verifyNotNull(message);
}
@Override
- public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
- target = verifyNotNull(readTarget(in));
- sequence = WritableObjects.readLong(in);
+ public final void setMessage(final C message) {
+ this.message = requireNonNull(message);
}
- @Serial
- protected final Object readResolve() {
- return verifyNotNull(createMessage(target, sequence));
+ @Override
+ public final Object readResolve() {
+ return message();
}
-
- protected abstract @NonNull T readTarget(@NonNull DataInput in) throws IOException;
-
- abstract @NonNull C createMessage(@NonNull T msgTarget, long msgSequence);
}