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

ru.taskurotta.service.hz.serialization.DecisionRowStreamSerializer 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.Modification;
import ru.taskurotta.service.hz.dependency.HzGraphDao;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

/**
 * User: romario
 * Date: 9/12/13
 * Time: 2:52 PM
 */
public class DecisionRowStreamSerializer implements StreamSerializer {

    @Override
    public void write(ObjectDataOutput out, HzGraphDao.DecisionRow decisionRow) throws IOException {

        UUIDSerializer.write(out, decisionRow.getTaskId());
        UUIDSerializer.write(out, decisionRow.getProcessId());

        Modification modification = decisionRow.getModification();
        UUIDSerializer.write(out, modification.getCompletedItem());

        UUID waitForItemId = modification.getWaitForAfterRelease();
        if (waitForItemId == null) {
            out.writeBoolean(false);
        } else {
            out.writeBoolean(true);
            UUIDSerializer.write(out, waitForItemId);
        }

        Set newItems = modification.getNewItems();
        if (newItems == null) {
            out.writeInt(-1);
        } else {
            out.writeInt(newItems.size());
            for (UUID item : newItems) {
                UUIDSerializer.write(out, item);
            }
        }

        Map> links = modification.getLinks();
        GraphStreamSerializer.serializeLinks(out, links);

        int readyItemsCount = (decisionRow.getReadyItems() != null) ? decisionRow.getReadyItems().length : 0;

        if (readyItemsCount > 0) {
            out.writeInt(readyItemsCount);
            for (int i = 0; i < readyItemsCount; i++) {
                UUIDSerializer.write(out, decisionRow.getReadyItems()[i]);
            }
        } else {
            out.writeInt(-1);
        }
    }

    @Override
    public HzGraphDao.DecisionRow read(ObjectDataInput in) throws IOException {
        UUID itemId = UUIDSerializer.read(in);
        UUID processId = UUIDSerializer.read(in);

        Modification modification = new Modification();
        modification.setCompletedItem(UUIDSerializer.read(in));
        boolean hasWaitForAfterRelease = in.readBoolean();
        if (hasWaitForAfterRelease) {
            modification.setWaitForAfterRelease(UUIDSerializer.read(in));
        }
        int countOfNewItems = in.readInt();

        if (countOfNewItems != -1) {
            Set newItems = new HashSet<>();
            for (int i = 0; i < countOfNewItems; i++) {
                newItems.add(UUIDSerializer.read(in));
            }
            modification.setNewItems(newItems);
        }
        Map> links = GraphStreamSerializer.deserializeLinks(in);
        modification.setLinks(links);

        int readyItemCount = in.readInt();

        if (readyItemCount != -1) {
            List list = new ArrayList<>();

            for (int i = 0; i < readyItemCount; i++) {
                list.add(UUIDSerializer.read(in));
            }
            UUID[] arrayOfUUID = new UUID[list.size()];
            list.toArray(arrayOfUUID);

            return new HzGraphDao.DecisionRow(itemId, processId, modification, arrayOfUUID);
        }
        return new HzGraphDao.DecisionRow(itemId, processId, modification, null);
    }


    @Override
    public int getTypeId() {
        return ObjectTypes.DECISION_ROW_STREAM;
    }

    @Override
    public void destroy() {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy