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

io.vertx.tp.plugin.booting.AbstractBoot Maven / Gradle / Ivy

There is a newer version: 0.9.0
Show newest version
package io.vertx.tp.plugin.booting;

import com.fasterxml.jackson.core.type.TypeReference;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.up.eon.Strings;
import io.vertx.up.log.Annal;
import io.vertx.up.util.Ut;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors;

/**
 * @author Lang
 */
public abstract class AbstractBoot implements KBoot {
    private transient final ConcurrentMap connects =
        new ConcurrentHashMap<>();
    private transient final ConcurrentMap modules =
        new ConcurrentHashMap<>();
    private transient final ConcurrentMap columns =
        new ConcurrentHashMap<>();
    private transient final List files = new ArrayList<>();
    private transient final String root;

    public AbstractBoot(final String module) {
        this.root = "plugin/" + module + "/oob/";
    }

    protected Annal logger() {
        return Annal.get(this.getClass());
    }

    @Override
    public ConcurrentMap configure() {
        if (this.connects.isEmpty()) {
            final String excelYaml = this.root + "initialize.yml";
            final JsonArray data = Ut.ioYaml(excelYaml);
            final List connectList = Ut.deserialize(data, new TypeReference>() {
            });
            connectList.stream().filter(Objects::nonNull)
                .filter(connect -> Objects.nonNull(connect.getTable()))
                .forEach(connect -> this.connects.put(connect.getTable(), connect));
            final JsonArray fileData = Ut.ioJArray(this.root + "initialize.json");
            Ut.itJArray(fileData, String.class, (item, index) -> this.files.add(item));
            // Extension Built In
            this.files.addAll(this.configureBuiltIn());
        }
        return this.connects;
    }

    protected Set configureBuiltIn() {
        return new HashSet<>();
    }

    @Override
    public List oob() {
        return this.files;
    }

    @Override
    public List oob(final String prefix) {
        // Fix Issue of Null Pointer
        final String prefixFile = Objects.isNull(prefix) ? Strings.EMPTY : prefix;
        return this.files.stream()
            .filter(item -> item.contains(prefixFile))
            .collect(Collectors.toList());
    }

    @Override
    public ConcurrentMap module() {
        if (this.modules.isEmpty()) {
            final Set modules = this.moduleSet();
            modules.forEach(item -> {
                final String moduleJson = this.root + "module/crud/" + item + ".json";
                final JsonObject module = Ut.ioJObject(moduleJson);
                if (Ut.notNil(module)) {
                    this.modules.put(item, module);
                }
            });
        }
        return this.modules;
    }

    @Override
    public ConcurrentMap column() {
        if (this.columns.isEmpty()) {
            final Set modules = this.moduleSet();
            modules.forEach(item -> {
                final String moduleJson = this.root + "module/ui/" + item + ".json";
                final JsonArray module = Ut.ioJArray(moduleJson);
                if (Ut.notNil(module)) {
                    this.columns.put(item, module);
                }
            });
        }
        return this.columns;
    }

    private Set moduleSet() {
        final String moduleJson = this.root + "module.json";
        final JsonArray module = Ut.ioJArray(moduleJson);
        return Ut.toSet(module);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy