org.zodiac.plugin.extension.resources.PluginResourceResolverProcess Maven / Gradle / Ivy
package org.zodiac.plugin.extension.resources;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.util.ObjectUtils;
import org.zodiac.plugin.extension.resources.resolver.PluginResourceResolvers;
import org.zodiac.plugin.factory.PluginRegistryInfo;
import org.zodiac.plugin.factory.process.post.PluginPostProcessorExtend;
import org.zodiac.sdk.toolkit.model.OrderPriority;
import org.zodiac.sdk.toolkit.util.lang.ObjUtil;
import java.util.List;
import java.util.Set;
/**
* 插件资源处理器。
*/
public class PluginResourceResolverProcess implements PluginPostProcessorExtend {
private static final Logger LOGGER = LoggerFactory.getLogger(PluginResourceResolverProcess.class);
private static final String KEY = "PluginResourceResolverProcess";
PluginResourceResolverProcess() {}
@Override
public String key() {
return KEY;
}
@Override
public OrderPriority order() {
return OrderPriority.getMiddlePriority();
}
@Override
public void initialize() throws Exception {
}
@Override
public synchronized void registry(List pluginRegistryInfos) throws Exception {
for (PluginRegistryInfo pluginRegistryInfo : pluginRegistryInfos) {
if (pluginRegistryInfo == null) {
continue;
}
String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
try {
/*直接从配置文件获取, 后续版本移除从实现类中获取配置。*/
Set locations = pluginRegistryInfo.getPluginBinder()
.bind(PropertyKey.STATIC_LOCATIONS, Bindable.setOf(String.class)).orElseGet(() -> null);
if (ObjectUtils.isEmpty(locations)) {
StaticResourceConfig config = ObjUtil.getObjectByInterfaceClass(
pluginRegistryInfo.getConfigSingletons(), StaticResourceConfig.class);
if (config != null) {
locations = config.locations();
}
}
if (ObjectUtils.isEmpty(locations)) {
return;
}
PluginResourceResolvers.parse(pluginRegistryInfo, locations);
} catch (Exception e) {
LOGGER.error("Parse plugin '{}' static resource failure.", pluginId, e);
}
}
}
@Override
public void unRegistry(List pluginRegistryInfos) throws Exception {
for (PluginRegistryInfo pluginRegistryInfo : pluginRegistryInfos) {
try {
PluginResourceResolvers.remove(pluginRegistryInfo.getPluginWrapper().getPluginId());
} catch (Exception e) {
LOGGER.error("Remove plugin '{}' static resource failure.",
pluginRegistryInfo.getPluginWrapper().getPluginId(), e);
}
}
}
}