All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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