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

org.zodiac.plugin.realize.ConfigDefinitionTip Maven / Gradle / Ivy

There is a newer version: 1.6.8
Show newest version
package org.zodiac.plugin.realize;

import org.pf4j.PluginManager;
import org.pf4j.PluginWrapper;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.zodiac.plugin.factory.PluginRegistryInfo;
import org.zodiac.plugin.integration.operator.module.PluginInfo;
import org.zodiac.sdk.toolkit.util.lang.ObjUtil;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 给系统中所有{@link org.zodiac.plugin.annotation.ConfigDefinition} 提供的工具类。可通过它获取主程序的某些bean和当前插件一些信息。
 * 
 */
public class ConfigDefinitionTip {

    private final PluginRegistryInfo pluginRegistryInfo;

    public ConfigDefinitionTip(PluginRegistryInfo pluginRegistryInfo) {
        this.pluginRegistryInfo = pluginRegistryInfo;
    }

    /**
     * 得到当前插件信息
     * 
     * @return 插件信息
     */
    public PluginInfo getCurrentPluginInfo() {
        PluginWrapper pluginWrapper = pluginRegistryInfo.getPluginWrapper();
        PluginManager pluginManager = pluginWrapper.getPluginManager();
        return new PluginInfo(pluginWrapper.getDescriptor(), pluginWrapper.getPluginState(),
            pluginWrapper.getPluginPath().toAbsolutePath().toString(), pluginManager.getRuntimeMode().toString());
    }

    /**
     * 得到主程序的 ApplicationContext
     * 
     * @return ApplicationContext
     */
    public ApplicationContext getMainApplication() {
        return pluginRegistryInfo.getMainApplicationContext();
    }

    /**
     * 获取当前插件的其他的ConfigDefinition
     * 
     * @param configDefinitionClass ConfigDefinition的类类型
     * @param  类类型
     * @return T
     */
    public  T getOtherConfigDefinition(Class configDefinitionClass) {
        return ObjUtil.getObjectClass(pluginRegistryInfo.getConfigSingletons(), configDefinitionClass);
    }

    /**
     * 将Springboot类型的配置文件中的值映射为bean 注意: 只针对插件扩展的 springboot 配置文件生效
     * 
     * @param prefix 配置文件中的前置, 比如: plugin.config
     * @param type 配置文件中结构对应的类类型, 比如: plugin.config 下定义的键值对和type类类型一致
     * @param  类类型
     * @return T
     */
    public  T getConfigOfBean(String prefix, Class type) {
        return pluginRegistryInfo.getPluginBinder().bind(prefix, Bindable.of(type)).orElseGet(() -> null);
    }

    /**
     * 将Springboot类型的配置文件中的值映射为 List 注意: 只针对插件扩展的 springboot 配置文件生效
     * 
     * @param prefix 配置文件中的前置, 比如: plugin.config
     * @param type List元素的类类型
     * @param  List中定义的类类型
     * @return List
     */
    public  List getConfigOfList(String prefix, Class type) {
        return pluginRegistryInfo.getPluginBinder().bind(prefix, Bindable.listOf(type))
            .orElseGet(Collections::emptyList);
    }

    /**
     * 将Springboot类型的配置文件中的值映射为 Set 注意: 只针对插件扩展的 springboot 配置文件生效
     * 
     * @param prefix 配置文件中的前置, 比如: plugin.config
     * @param type Set元素的类类型
     * @param  类类型
     * @return Set
     */
    public  Set getConfigOfSet(String prefix, Class type) {
        return pluginRegistryInfo.getPluginBinder().bind(prefix, Bindable.setOf(type)).orElseGet(Collections::emptySet);
    }

    /**
     * 将Springboot类型的配置文件中的值映射为 Map 注意: 只针对插件扩展的 springboot 配置文件生效
     * 
     * @param prefix
     *            配置文件中的前置, 比如: plugin.config
     * @param keyType
     *            map的key元素类型
     * @param valueType
     *            map的值元素类型
     * @param 
     *            map key 元素的类类型
     * @param 
     *            map value 元素的类类型
     * @return Map
     */
    public  Map getConfigOfSet(String prefix, Class keyType, Class valueType) {
        return pluginRegistryInfo.getPluginBinder().bind(prefix, Bindable.mapOf(keyType, valueType))
            .orElseGet(Collections::emptyMap);
    }

    /**
     * 返回当前插件的ConfigurableEnvironment
     * 
     * @return ConfigurableEnvironment
     */
    public ConfigurableEnvironment getPluginEnvironment() {
        return pluginRegistryInfo.getPluginApplicationContext().getEnvironment();
    }

    /**
     * 返回当前插件的Binder
     * 
     * @return Binder
     */
    public Binder getPluginBinder() {
        return pluginRegistryInfo.getPluginBinder();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy