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

ru.taskurotta.service.hz.serialization.bson.TaskContainerBSerializer Maven / Gradle / Ivy

The newest version!
package ru.taskurotta.service.hz.serialization.bson;


import ru.taskurotta.internal.core.TaskType;
import ru.taskurotta.mongodb.driver.BDataInput;
import ru.taskurotta.mongodb.driver.BDataOutput;
import ru.taskurotta.mongodb.driver.CString;
import ru.taskurotta.mongodb.driver.StreamBSerializer;
import ru.taskurotta.transport.model.ArgContainer;
import ru.taskurotta.transport.model.TaskContainer;
import ru.taskurotta.transport.model.TaskOptionsContainer;

import java.util.UUID;

import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.readArrayOfObjects;
import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.readArrayOfString;
import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.readObject;
import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.writeArrayOfObjectsIfNotEmpty;
import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.writeArrayOfString;
import static ru.taskurotta.service.hz.serialization.bson.BSerializerTools.writeObjectIfNotNull;


public class TaskContainerBSerializer implements StreamBSerializer {

    private static final CString TASK_ID = new CString("t");
    private static final CString PROCESS_ID = new CString("p");
    private static final CString ACTOR_ID = new CString("actorId");
    private static final CString METHOD = new CString("method");
    private static final CString ERROR_ATTEMPTS = new CString("errorAttempts");
    private static final CString TYPE = new CString("type");
    private static final CString START_TIME = new CString("startTime");
    private static final CString FAIL_TYPES = new CString("failTypes");
    private static final CString ARGS = new CString("args");
    private static final CString UNSAFE = new CString("unsafe");
    private static final CString TASK_OPTIONS = new CString("options");

    protected static BSerializerTools.ArrayFactory arrayFactory =
            new BSerializerTools.ArrayFactory() {
        @Override
        public TaskContainer[] create(int size) {
            return new TaskContainer[size];
        }
    };

    private ArgContainerBSerializer argContainerBSerializer = new ArgContainerBSerializer();
    private TaskOptionsContainerBSerializer taskOptionsContainerBSerializer = new TaskOptionsContainerBSerializer();

    @Override
    public Class getObjectClass() {
        return TaskContainer.class;
    }

    @Override
    public void write(BDataOutput out, TaskContainer object) {
        int writeIdLabel = out.writeObject(_ID);
        out.writeUUID(TASK_ID, object.getTaskId());
        out.writeUUID(PROCESS_ID, object.getProcessId());
        out.writeObjectStop(writeIdLabel);

        out.writeString(METHOD, object.getMethod());
        out.writeString(ACTOR_ID, object.getActorId());
        out.writeInt(TYPE, object.getType().getValue(), TaskType.DECIDER_ASYNCHRONOUS.getValue());
        out.writeLong(START_TIME, object.getStartTime(), -1l);
        out.writeInt(ERROR_ATTEMPTS, object.getErrorAttempts(), 0);
        writeArrayOfObjectsIfNotEmpty(ARGS, object.getArgs(), argContainerBSerializer, out);
        writeObjectIfNotNull(TASK_OPTIONS, object.getOptions(), taskOptionsContainerBSerializer, out);
        out.writeBoolean(UNSAFE, object.isUnsafe(), false);
        writeArrayOfString(FAIL_TYPES, object.getFailTypes(), out);
    }

    @Override
    public TaskContainer read(BDataInput in) {
        int readIdLabel = in.readObject(_ID);
        UUID taskId = in.readUUID(TASK_ID);
        UUID processId = in.readUUID(PROCESS_ID);
        in.readObjectStop(readIdLabel);

        String method = in.readString(METHOD);
        String actorId = in.readString(ACTOR_ID);
        TaskType type = TaskType.fromInt(in.readInt(TYPE, TaskType.DECIDER_ASYNCHRONOUS.getValue()));
        long startTime = in.readLong(START_TIME, -1l);
        int errorAttempts = in.readInt(ERROR_ATTEMPTS, 0);
        ArgContainer[] argContainers = readArrayOfObjects(ARGS, ArgContainerBSerializer.arrayFactory,
                argContainerBSerializer, in);
        TaskOptionsContainer taskOptionsContainer = readObject(TASK_OPTIONS,
                taskOptionsContainerBSerializer, in);
        boolean unsafe = in.readBoolean(UNSAFE, false);
        String[] failTypes = readArrayOfString(FAIL_TYPES, in);

        return new TaskContainer(taskId, processId, null, method, actorId, type, startTime, errorAttempts,
                argContainers, taskOptionsContainer, unsafe, failTypes);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy