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

io.vertx.up.unity.Web Maven / Gradle / Ivy

package io.vertx.up.unity;

import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.Promise;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.up.commune.Envelop;
import io.vertx.up.eon.KName;
import io.vertx.up.util.Ut;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Consumer;
import java.util.function.Function;

class Web {

    static  Handler> toHandler(
        final Message message
    ) {
        return handler -> {
            if (handler.succeeded()) {
                message.reply(To.toEnvelop(handler.result()));
            } else {
                // Readible codec for configured information, error flow needed.
                if (null != handler.cause()) {
                    handler.cause().printStackTrace();
                }
                message.reply(Envelop.failure(To.toError(Web.class, handler.cause())));
            }
        };
    }

    static  Future toFuture(final Consumer>> handler) {
        final Promise promise = Promise.promise();
        handler.accept(result -> {
            if (result.succeeded()) {
                promise.complete(result.result());
            } else {
                promise.fail(result.cause());
            }
        });
        return promise.future();
    }

    @SuppressWarnings("all")
    static  Future toAttach(
        final JsonObject input,
        final Function> function) {
        /*
         * Normalized key = index
         */
        final ConcurrentMap indexMap = new ConcurrentHashMap<>();
        final List> futures = new ArrayList<>();
        final Iterator it = input.fieldNames().iterator();
        int index = 0;
        while (it.hasNext()) {
            /*
             * Field extract
             */
            final String field = it.next();
            final T value = (T) input.getValue(field);
            if (Objects.nonNull(value)) {
                indexMap.put(field, String.valueOf(index));
                futures.add(function.apply(value));
                index++;
            }
        }
        return Combine.thenCombine(futures.toArray(new Future[]{}))
            .compose(response -> {
                final JsonObject finalJson = new JsonObject();
                final JsonObject reference = (JsonObject) response;
                indexMap.forEach((field, indexKey) -> {
                    final JsonObject data = reference.getJsonObject(indexKey);
                    if (Ut.notNil(data)) {
                        finalJson.put(field, data.copy());
                    }
                });
                return To.future(finalJson);
            });
    }

    static  Function> toAttachJ(
        final String field,
        final Function> function
    ) {
        return json -> {
            if (Ut.isNil(json) || !json.containsKey(field)) {
                return To.future(json);
            } else {
                final JsonObject combine = json.getJsonObject(field);
                if (Ut.isNil(combine)) {
                    return To.future(json);
                } else {
                    return toAttach(combine, function).compose(response -> {
                        if (Ut.notNil(response)) {
                            json.put(field, response);
                        }
                        return To.future(json);
                    });
                }
            }
        };
    }

    static  Function> toAttachJ(final String field, final JsonObject data) {
        return json -> {
            if (Objects.nonNull(json)) {
                data.put(field, json);
            }
            return To.future(data);
        };
    }

    @SuppressWarnings("unchecked")
    static  Function> toAttach(
        final String field,
        final Function> function) {
        return json -> {
            if (Ut.isNil(json) || !json.containsKey(field)) {
                return To.future(json);
            } else {
                final T value = (T) json.getValue(field);
                if (Objects.isNull(value)) {
                    return To.future(json);
                } else {
                    return function.apply(value).compose(data -> {
                        if (Ut.notNil(data)) {
                            json.put(field, data);
                        }
                        return To.future(json);
                    });
                }
            }
        };
    }

    static JsonObject pageData(JsonArray data, Long count) {
        if (Ut.isNil(data)) {
            data = new JsonArray();
        }
        if (Objects.isNull(count) || 0 > count) {
            count = 0L;
        }
        return new JsonObject().put(KName.LIST, data).put(KName.COUNT, count);
    }

    static JsonObject pageData(final JsonObject pageData, final Function function) {
        final JsonArray data = Ut.valueJArray(pageData.getJsonArray(KName.LIST));
        final JsonArray updated;
        if (Objects.nonNull(function)) {
            updated = function.apply(data);
        } else {
            updated = data;
        }
        return pageData.put(KName.LIST, updated);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy