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

co.spraybot.messagerunner.datastores.TransientDataStoreParcelProcessor Maven / Gradle / Ivy

package co.spraybot.messagerunner.datastores;

import co.spraybot.messagerunner.DataStoreParcelProcessor;
import co.spraybot.messagerunner.DataStoreParcel;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public class TransientDataStoreParcelProcessor extends AbstractVerticle implements DataStoreParcelProcessor {

    private Map data = new HashMap<>();

    private Map>> writeParcelHandlerMap;

    public TransientDataStoreParcelProcessor() {
        setwriteParcelHandlerMap();
    }

    private void setwriteParcelHandlerMap() {
        writeParcelHandlerMap = new HashMap<>();
        writeParcelHandlerMap.put(String.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (String) parcel.getValue()));
        writeParcelHandlerMap.put(Integer.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (Integer) parcel.getValue()));
        writeParcelHandlerMap.put(Double.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (Double) parcel.getValue()));
        writeParcelHandlerMap.put(Boolean.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (Boolean) parcel.getValue()));
        writeParcelHandlerMap.put(JsonObject.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (JsonObject) parcel.getValue()));
        writeParcelHandlerMap.put(JsonArray.class, (DataStoreParcel parcel) -> write(parcel.getKey(), (JsonArray) parcel.getValue()));
    }

    @Override
    public void start() throws Exception {
        super.start();
    }

    @Override
    public Future write(String key, JsonObject value) {
        return doWrite(key, value);
    }

    @Override
    public Future write(String key, JsonArray value) {
        return doWrite(key, value);
    }

    @Override
    public Future write(String key, String value) {
        return doWrite(key, value);
    }

    @Override
    public Future write(String key, int value) {
        return doWrite(key, value);
    }

    @Override
    public Future write(String key, double value) {
        return doWrite(key, value);
    }

    @Override
    public Future write(String key, boolean value) {
        return doWrite(key, value);
    }

    private Future doWrite(String key, Object value) {
        data.put(key, value);
        return Future.succeededFuture(true);
    }

    @Override
    public  Future read(String key) {
        return Future.succeededFuture((T) data.get(key));
    }

    @Override
    public  Future erase(String key) {
        return Future.succeededFuture((T) data.remove(key));
    }

    @Override
    public Future eraseEverything() {
        data.clear();
        return Future.succeededFuture();
    }

    @Override
    public Future processParcel(DataStoreParcel parcel, String replyAddress) {
        if (parcel.getDataStoreOperation().equals(Operation.WRITE)) {
            return processWriteOperation(parcel, replyAddress);
        } else if (parcel.getDataStoreOperation().equals(Operation.READ)) {
            return processReadOperation(parcel, replyAddress);
        } else if (parcel.getDataStoreOperation().equals(Operation.ERASE)) {
            return processEraseOperation(parcel, replyAddress);
        } else if (parcel.getDataStoreOperation().equals(Operation.ERASE_EVERYTHING)) {
            return processEraseEverythingOperation(replyAddress);
        }

        return null;
    }

    private Future processWriteOperation(DataStoreParcel parcel, String replyAddress) {
        Future future = Future.future();
        EventBus eventBus = getVertx().eventBus();
        Class valueType = parcel.getValueType();
        Handler> writtenHandler = ar -> {
            eventBus.send(replyAddress, ar.result());
        };

        for (Map.Entry>> valueTypeHandlerInfo : writeParcelHandlerMap.entrySet()) {
            Class _vt = valueTypeHandlerInfo.getKey();
            Function> function = valueTypeHandlerInfo.getValue();

            if (valueType.isAssignableFrom(_vt)) {
                function.apply(parcel).setHandler(writtenHandler);
            }
        }

        return future;
    }

    private Future processReadOperation(DataStoreParcel parcel, String replyAddress) {
        Future future = Future.future();

        read(parcel.getKey()).setHandler(ar -> {
            getVertx().eventBus().send(replyAddress, ar.result());
        });

        return future;
    }

    private Future processEraseOperation(DataStoreParcel parcel, String replyAddress) {
        Future future = Future.future();

        erase(parcel.getKey()).setHandler(ar -> {
            getVertx().eventBus().send(replyAddress, ar.result());
        });

        return future;
    }

    private Future processEraseEverythingOperation(String replyAddress) {
        Future future = Future.future();

        eraseEverything().setHandler(ar -> {
            getVertx().eventBus().send(replyAddress, null);
        });

        return future;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy