silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-co/src/main/environment/io/vertx/up/runtime/ZeroEquip.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.vertx.up.runtime;

import io.horizon.eon.VSpec;
import io.horizon.eon.VString;
import io.horizon.spi.boot.HEquip;
import io.macrocosm.atom.boot.KSetting;
import io.macrocosm.specification.config.HConfig;
import io.macrocosm.specification.config.HSetting;
import io.vertx.core.json.JsonObject;
import io.vertx.up.eon.KName;
import io.vertx.up.eon.KPlugin;
import io.vertx.up.eon.configure.YmlCore;
import io.vertx.up.util.Ut;

import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author lang : 2023-05-30
 */
public class ZeroEquip implements HEquip {
    /**
     * @return {@link io.macrocosm.atom.boot.KSetting}
     */
    @Override
    public HSetting initialize() {
        /*
         * 基础装配 vertx.yml 读取
         * - up/config/vertx.yml
         * - vertx.yml
         *
         * zero:
         *    lime: key1,key2,key3
         * boot:
         *
         */
        final JsonObject configuration = ZeroIo.read(null, true);
        final HSetting setting = KSetting.of();
        final JsonObject configZero = Ut.valueJObject(configuration, KName.Internal.ZERO);
        setting.container(HConfig.of(configZero));
        final String extension = Ut.valueString(configZero, YmlCore.LIME);

        final JsonObject configBoot = Ut.valueJObject(configuration, VSpec.Boot.__KEY);
        setting.launcher(HConfig.of(configBoot));

        /*
         * zero:
         *    lime: key1,key2,key3
         */
        final JsonObject configExtension = new JsonObject();
        final Set<String> keys = Ut.toSet(extension, VString.COMMA);
        final Set<String> internal = Arrays.stream(KPlugin.FILE_KEY)
            .collect(Collectors.toSet());
        keys.stream().filter(field -> !internal.contains(field)).forEach(field -> {
            // lime file
            // - vertx-key1.yml
            // - vertx-key2.yml
            // - vertx-key3.yml
            final JsonObject fileData = ZeroIo.read(field, false);
            configExtension.mergeIn(fileData, true);
        });
        /*
         * 文件合并处理,所有 key 值
         */
        Ut.<JsonObject>itJObject(configExtension).forEach(entry -> {
            final String key = entry.getKey();
            setting.infix(key, HConfig.of(entry.getValue()));
        });
        /*
         * <Internal>
         * server = {}
         * inject = {}
         * error = {}
         * resolver = {}
         */
        Arrays.stream(KPlugin.FILE_KEY).forEach(field -> {
            final JsonObject fileData = ZeroIo.read(field, true);
            setting.infix(field, HConfig.of(fileData));
        });
        return setting;
    }
}