89 lines
2.6 KiB
Java
89 lines
2.6 KiB
Java
/**
|
|
* Copyright (C) 2015 Typesafe Inc. <http://www.typesafe.com>
|
|
*/
|
|
package docs.ddata.japi.protobuf;
|
|
|
|
//#serializer
|
|
import docs.ddata.japi.TwoPhaseSet;
|
|
import docs.ddata.protobuf.msg.TwoPhaseSetMessages;
|
|
import docs.ddata.protobuf.msg.TwoPhaseSetMessages.TwoPhaseSet2.Builder;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
|
|
import akka.actor.ExtendedActorSystem;
|
|
import akka.cluster.ddata.GSet;
|
|
import akka.cluster.ddata.protobuf.AbstractSerializationSupport;
|
|
import akka.cluster.ddata.protobuf.ReplicatedDataSerializer;
|
|
|
|
public class TwoPhaseSetSerializer2 extends AbstractSerializationSupport {
|
|
|
|
private final ExtendedActorSystem system;
|
|
private final ReplicatedDataSerializer replicatedDataSerializer;
|
|
|
|
public TwoPhaseSetSerializer2(ExtendedActorSystem system) {
|
|
this.system = system;
|
|
this.replicatedDataSerializer = new ReplicatedDataSerializer(system);
|
|
}
|
|
|
|
@Override
|
|
public ExtendedActorSystem system() {
|
|
return this.system;
|
|
}
|
|
|
|
@Override
|
|
public boolean includeManifest() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int identifier() {
|
|
return 99998;
|
|
}
|
|
|
|
@Override
|
|
public byte[] toBinary(Object obj) {
|
|
if (obj instanceof TwoPhaseSet) {
|
|
return twoPhaseSetToProto((TwoPhaseSet) obj).toByteArray();
|
|
} else {
|
|
throw new IllegalArgumentException(
|
|
"Can't serialize object of type " + obj.getClass());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Object fromBinaryJava(byte[] bytes, Class<?> manifest) {
|
|
return twoPhaseSetFromBinary(bytes);
|
|
}
|
|
|
|
protected TwoPhaseSetMessages.TwoPhaseSet2 twoPhaseSetToProto(TwoPhaseSet twoPhaseSet) {
|
|
Builder b = TwoPhaseSetMessages.TwoPhaseSet2.newBuilder();
|
|
if (!twoPhaseSet.adds.isEmpty())
|
|
b.setAdds(otherMessageToProto(twoPhaseSet.adds).toByteString());
|
|
if (!twoPhaseSet.removals.isEmpty())
|
|
b.setRemovals(otherMessageToProto(twoPhaseSet.removals).toByteString());
|
|
return b.build();
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
protected TwoPhaseSet twoPhaseSetFromBinary(byte[] bytes) {
|
|
try {
|
|
TwoPhaseSetMessages.TwoPhaseSet2 msg =
|
|
TwoPhaseSetMessages.TwoPhaseSet2.parseFrom(bytes);
|
|
|
|
GSet<String> adds = GSet.create();
|
|
if (msg.hasAdds())
|
|
adds = (GSet<String>) otherMessageFromBinary(msg.getAdds().toByteArray());
|
|
|
|
GSet<String> removals = GSet.create();
|
|
if (msg.hasRemovals())
|
|
adds = (GSet<String>) otherMessageFromBinary(msg.getRemovals().toByteArray());
|
|
|
|
return new TwoPhaseSet(adds, removals);
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e.getMessage(), e);
|
|
}
|
|
}
|
|
}
|
|
//#serializer
|
|
|
|
|