silentbalanceyh/vertx-zero

View on GitHub
vertx-pin/zero-vie/src/main/java/io/mature/extension/stellaris/OInfix.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.mature.extension.stellaris;

import io.horizon.fn.Actuator;
import io.horizon.uca.log.Annal;
import io.vertx.core.Vertx;
import io.vertx.up.plugin.elasticsearch.ElasticSearchInfix;
import io.vertx.up.plugin.excel.ExcelInfix;
import io.vertx.up.plugin.jooq.JooqInfix;
import io.vertx.up.plugin.neo4j.Neo4jInfix;
import io.vertx.up.plugin.shared.MapInfix;
import io.vertx.up.runtime.ZeroStore;

/**
 * @author <a href="http://www.origin-x.cn">Lang</a>
 */
class OInfix {

    /**
     * Zero专用日志器,{@link Annal}
     */
    private static final Annal LOGGER = Annal.get(OInfix.class);

    /* 静态初始化 api / ambient 环境 */
    /* 初始化完整环境 */
    // ZeroHeart.init();

    /**
     * 私有构造,转换成工具类
     */
    private OInfix() {
    }

    static void on(final Vertx vertx) {
        // Jooq
        onDB(vertx);
        // Elastic Search
        onES(vertx);
        // Excel
        onEX(vertx);
        // Neo4j
        onGE(vertx);
        // Shared Map
        onSD(vertx);
    }

    /**
     * 初始化Jooq数据库访问环境。
     *
     * @param vertx {@link Vertx} 输入的Vertx实例
     */
    private static void onDB(final Vertx vertx) {
        if (isEnabled("jooq")) {
            on("Jooq", () -> JooqInfix.init(vertx));
        }
    }

    /**
     * 初始化Elastic Search全文检索引擎环境。
     *
     * @param vertx {@link Vertx} 输入的Vertx实例
     */
    private static void onES(final Vertx vertx) {
        if (isEnabled("elasticsearch")) {
            on("Elastic", () -> ElasticSearchInfix.init(vertx));
        }
    }

    private static boolean isEnabled(final String key) {
        return ZeroStore.is(key);
    }

    /**
     * 内部调用初始化日志器,出错时输出异常信息
     *
     * @param label    {@link String} 日志显示标签
     * @param actuator {@link Actuator} 「函数接口」同步执行函数
     */
    private static void on(final String label, final Actuator actuator) {
        try {
            actuator.execute();
        } catch (final Throwable ex) {
            LOGGER.warn("[ ZERO ] {0}: {1}", label, ex.getMessage());
        }
    }

    /**
     * 初始化Excel导入/导出环境。
     *
     * @param vertx {@link Vertx} 输入的Vertx实例
     */
    private static void onEX(final Vertx vertx) {
        if (isEnabled("excel")) {
            on("Excel", () -> ExcelInfix.init(vertx));
        }
    }

    /**
     * 初始化Neo4j图引擎。
     *
     * @param vertx {@link Vertx} 输入的Vertx实例
     */
    private static void onGE(final Vertx vertx) {
        if (isEnabled("neo4j")) {
            on("Neo4j", () -> Neo4jInfix.init(vertx));
        }
    }

    /**
     * 初始化异步缓存池SharedMap环境。
     *
     * @param vertx {@link Vertx} 输入的Vertx实例
     */
    private static void onSD(final Vertx vertx) {
        on("Pool", () -> MapInfix.init(vertx));
    }
}