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

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

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

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 java.util.ArrayList;
import java.util.List;

public final class BSerializerTools {

    public static interface ArrayFactory {
        public T[] create(int size);
    }

    public static  Void writeObjectIfNotNull(int index, T object, StreamBSerializer serializer, BDataOutput out) {
        if (object == null) {
            return null;
        }

        int objectLabel = out.writeObject(index);
        serializer.write(out, object);
        out.writeObjectStop(objectLabel);

        return null;
    }

    public static  Void writeObjectIfNotNull(CString name, T object, StreamBSerializer serializer, BDataOutput out) {
        if (object == null) {
            return null;
        }

        int objectLabel = out.writeObject(name);
        serializer.write(out, object);
        out.writeObjectStop(objectLabel);

        return null;
    }

    public static  T readObject(CString name, StreamBSerializer serializer, BDataInput in) {
        int objLabel = in.readObject(name);
        if (objLabel == -1) {
            return null;
        }

        T obj = serializer.read(in);
        in.readObjectStop(objLabel);

        return obj;
    }

    public static  T readObject(int index, StreamBSerializer serializer, BDataInput in) {
        int objLabel = in.readObject(index);
        if (objLabel == -1) {
            return null;
        }

        T obj = serializer.read(in);
        in.readObjectStop(objLabel);

        return obj;
    }

    public static  Void writeArrayOfObjectsIfNotEmpty(CString name, T[] array, StreamBSerializer serializer,
                                                         BDataOutput out) {

        if (array == null || array.length == 0) {
            return null;
        }

        return writeArrayOfObjects(name, array, serializer, out);
    }

    public static  Void writeArrayOfObjects(CString name, T[] array, StreamBSerializer serializer, BDataOutput
            out) {

        if (array == null) {
            return null;
        }

        int arrayLabel = out.writeArray(name);
        for (int i = 0; i < array.length; i++) {
            int objectLabel = out.writeObject(i);
            serializer.write(out, array[i]);
            out.writeObjectStop(objectLabel);
        }
        out.writeArrayStop(arrayLabel);

        return null;
    }

    public static  T[] readArrayOfObjects(CString name, ArrayFactory arrayF, StreamBSerializer serializer,
                                             BDataInput in) {

        int arrayLabel = in.readArray(name);
        if (arrayLabel == -1) {
            return null;
        }

        int arraySize = in.readArraySize();

        T[] objects = arrayF.create(arraySize);
        for (int i = 0; i < arraySize; i++) {
            objects[i] = readObject(i, serializer, in);
        }
        in.readArrayStop(arrayLabel);

        return objects;
    }

    public static void writeArrayOfString(CString name, String[] array, BDataOutput out) {
        if (array == null) {
            return;
        }

        int arrayLabel = out.writeArray(name);
        for (int i = 0; i < array.length; i++) {
            out.writeString(i, array[i]);
        }
        out.writeArrayStop(arrayLabel);
    }

    public static String[] readArrayOfString(CString name, BDataInput in) {
        int arrayLabel = in.readArray(name);
        if (arrayLabel == -1) {
            return null;
        }

        int arraySize = in.readArraySize();

        String[] array = new String[arraySize];
        for (int i = 0; i < arraySize; i++) {
            array[i] = in.readString(i);
        }
        in.readArrayStop(arrayLabel);

        return array;
    }

    public static void writeListOfString(CString name, List list, BDataOutput out) {
        if (list == null) {
            return;
        }

        int label = out.writeArray(name);
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            out.writeString(i, s);
        }
        out.writeArrayStop(label);
    }

    public static List readListOfString(CString name, BDataInput in, List defValue) {
        int label = in.readArray(name);
        if (label == -1) {
            return defValue;
        }

        int size = in.readArraySize();
        List list = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            list.add(in.readString(i));
        }
        in.readArrayStop(label);

        return list;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy