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

ru.taskurotta.service.hz.serialization.ArgContainerStreamSerializer 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.transport.model.ArgContainer;

import java.io.IOException;
import java.util.UUID;

import static ru.taskurotta.service.hz.serialization.SerializationTools.readString;
import static ru.taskurotta.service.hz.serialization.SerializationTools.writeString;

/**
 * User: greg
 */
public class ArgContainerStreamSerializer implements StreamSerializer {

    @Override
    public void write(ObjectDataOutput out, ArgContainer argContainer) throws IOException {

        if (argContainer == null) {
            out.writeBoolean(false);
            return;
        }

        out.writeBoolean(true);
        serializePlain(out, argContainer);
        compositeWrite(out, argContainer);
    }

    private void compositeWrite(ObjectDataOutput out, ArgContainer argContainer) throws IOException {

        ArgContainer[] compositeValue = argContainer.getCompositeValue();

        if (compositeValue == null) {
            out.writeInt(-1);
            return;
        }

        if (compositeValue.length == 0) {
            out.writeInt(0);
            return;
        }

        out.writeInt(argContainer.getCompositeValue().length);
        for (ArgContainer arg : compositeValue) {
            serializePlain(out, arg);
        }
    }

    @Override
    public ArgContainer read(ObjectDataInput in) throws IOException {

        if (!in.readBoolean()) {
            return null;
        }

        ArgContainer arg = deserializePlain(in);
        return compositeRead(in, arg);
    }

    private void serializePlain(ObjectDataOutput out, ArgContainer argContainer) throws IOException {
        writeString(out, argContainer.getDataType());
        if (argContainer.getTaskId() == null) {
            out.writeBoolean(false);
        } else {
            out.writeBoolean(true);
            UUIDSerializer.write(out, argContainer.getTaskId());
        }
        out.writeBoolean(argContainer.isReady());
        writeString(out, argContainer.getJSONValue());
        if (argContainer.getValueType() != null) {
            out.writeInt(argContainer.getValueType().getValue());
        } else {
            out.writeInt(-1);
        }
        out.writeBoolean(argContainer.isPromise());
    }

    private ArgContainer deserializePlain(ObjectDataInput in) throws IOException {
        ArgContainer arg = new ArgContainer();
        String className = readString(in);
        UUID taskId = null;
        boolean taskIdSetted = in.readBoolean();
        if (taskIdSetted) {
            taskId = UUIDSerializer.read(in);
        }
        boolean ready = in.readBoolean();
        String jsonValue = readString(in);
        int type = in.readInt();
        ArgContainer.ValueType valueType = null;
        if (type != -1) {
            valueType = ArgContainer.ValueType.fromInt(type);
        }
        boolean promise = in.readBoolean();
        arg.setDataType(className);
        arg.setTaskId(taskId);
        arg.setReady(ready);
        arg.setJSONValue(jsonValue);
        arg.setValueType(valueType);
        arg.setPromise(promise);
        return arg;
    }

    private ArgContainer compositeRead(ObjectDataInput in, ArgContainer arg) throws IOException {
        int compositeSize = in.readInt();

        switch (compositeSize) {

            case -1:
                arg.setCompositeValue(null);
                break;

            case 0:
                arg.setCompositeValue(new ArgContainer[0]);
                break;

            default:
                ArgContainer[] compositeValues = new ArgContainer[compositeSize];
                for (int i = 0; i < compositeSize; i++) {
                    compositeValues[i] = deserializePlain(in);
                }
                arg.setCompositeValue(compositeValues);
                break;

        }

        return arg;
    }

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

    @Override
    public void destroy() {

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy