
ru.taskurotta.service.hz.serialization.GraphStreamSerializer Maven / Gradle / Ivy
The newest version!
package ru.taskurotta.service.hz.serialization;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;
import ru.taskurotta.service.dependency.links.Graph;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
/**
* User: romario
* Date: 9/12/13
* Time: 2:23 PM
*/
public class GraphStreamSerializer implements StreamSerializer {
public static void serializeLinks(ObjectDataOutput out, Map> links) throws IOException {
if (links == null) {
out.writeInt(-1);
} else {
out.writeInt(links.size());
for (Map.Entry> entry : links.entrySet()) {
UUIDSerializer.write(out, entry.getKey());
Set set = entry.getValue();
out.writeInt(set.size());
for (UUID uuid : set) {
UUIDSerializer.write(out, uuid);
}
}
}
}
public static Map> deserializeLinks(ObjectDataInput in) throws IOException {
int mapSize = in.readInt();
if (mapSize == -1) {
return null;
}
Map> links = new HashMap<>(mapSize);
while (mapSize > 0) {
UUID key = UUIDSerializer.read(in);
int setSize = in.readInt();
Set set = new HashSet<>(setSize);
while (setSize > 0) {
set.add(UUIDSerializer.read(in));
setSize--;
}
links.put(key, set);
mapSize--;
}
return links;
}
@Override
public void write(ObjectDataOutput out, Graph graph) throws IOException {
out.writeInt(graph.getVersion());
UUIDSerializer.write(out, graph.getGraphId());
Map notFinishedItems = graph.getNotFinishedItems();
out.writeInt(notFinishedItems.size());
for (Map.Entry entry : notFinishedItems.entrySet()) {
UUIDSerializer.write(out, entry.getKey());
out.writeLong(entry.getValue());
}
serializeLinks(out, graph.getLinks());
Set finishedItems = graph.getFinishedItems();
out.writeInt(finishedItems.size());
for (UUID uuid : finishedItems) {
UUIDSerializer.write(out, uuid);
}
out.writeLong(graph.getLastApplyTimeMillis());
out.writeLong(graph.getTouchTimeMillis());
}
@Override
public Graph read(ObjectDataInput in) throws IOException {
int version = in.readInt();
UUID graphId = UUIDSerializer.read(in);
int mapSize = in.readInt();
Map notFinishedItems = new HashMap<>(mapSize);
while (mapSize > 0) {
UUID key = UUIDSerializer.read(in);
long value = in.readLong();
notFinishedItems.put(key, value);
mapSize--;
}
Map> links = deserializeLinks(in);
int setSize = in.readInt();
Set finishedItems = new HashSet<>(setSize);
while (setSize > 0) {
finishedItems.add(UUIDSerializer.read(in));
setSize--;
}
long lastApplyTimeMillis = in.readLong();
long touchTimeMillis = in.readLong();
return new Graph(version, graphId, notFinishedItems, links, finishedItems, lastApplyTimeMillis, touchTimeMillis);
}
@Override
public int getTypeId() {
return ObjectTypes.GRAPH;
}
@Override
public void destroy() {
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy