Merge pull request #10972 from dataease/pr@dev-v2@refactor_ds_xpack

refactor: 数据源插件优化
This commit is contained in:
Junjun 2024-07-16 10:51:54 +08:00 committed by GitHub
commit 35f1810ce6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 124 additions and 1 deletions

View File

@ -135,6 +135,25 @@ const getDatasourceTypes = () => {
})
}
getDatasourceTypes()
const loadDsPlugin = data => {
data.forEach(item => {
const { name, category, type, icon, extraParams, staticMap } = item
const node = {
name,
category,
type,
icon,
extraParams,
isPlugin: true,
staticMap
}
const index = typeList.findIndex(ele => ele === node.catalog)
if (index !== -1) {
databaseList[index].push(node)
}
})
}
const getLatestUseTypes = () => {
latestUse({}).then(res => {
@ -726,6 +745,10 @@ defineExpose({
@finish="complete"
ref="creatDsFolder"
></creat-ds-group>
<XpackComponent
jsname="L2NvbXBvbmVudC9wbHVnaW5zLWhhbmRsZXIvRHNDYXRlZ29yeUhhbmRsZXI="
@load-ds-plugin="loadDsPlugin"
/>
</template>
<style lang="less">

View File

@ -1,6 +1,7 @@
package io.dataease.api.xpack.component;
import io.dataease.api.xpack.component.vo.XpackMenuVO;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.extensions.view.vo.XpackPluginsViewVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -21,6 +22,9 @@ public interface XpackComponentApi {
@GetMapping("/viewPlugins")
List<XpackPluginsViewVO> viewPlugins();
@GetMapping("/dsPlugins")
List<XpackPluginsDatasourceVO> dsPlugins();
@GetMapping("/pluginStaticInfo/{moduleName}")
void pluginStaticInfo(@PathVariable("moduleName") String moduleName);
}

View File

@ -1,11 +1,19 @@
package io.dataease.extensions.datasource.factory;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.plugin.DataEaseDatasourcePlugin;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.datasource.utils.SpringContextUtil;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.license.utils.LicenseUtil;
import io.dataease.license.utils.LogUtil;
import io.dataease.plugins.factory.DataEasePluginFactory;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @Author Junjun
@ -17,11 +25,38 @@ public class ProviderFactory {
if (list.contains(type)) {
return SpringContextUtil.getApplicationContext().getBean("calciteProvider", Provider.class);
}
return SpringContextUtil.getApplicationContext().getBean(type + "DsProvider", Provider.class);
return getInstance(type);
}
public static Provider getDefaultProvider() {
return SpringContextUtil.getApplicationContext().getBean("calciteProvider", Provider.class);
}
private static final Map<String, DataEaseDatasourcePlugin> templateMap = new ConcurrentHashMap<>();
public static Provider getInstance(String type) {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
String key = type;
return templateMap.get(key);
}
public static void loadPlugin(String type, DataEaseDatasourcePlugin plugin) {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
String key = type;
if (templateMap.containsKey(key)) return;
templateMap.put(key, plugin);
try {
String moduleName = plugin.getPluginInfo().getModuleName();
DataEasePluginFactory.loadTemplate(moduleName, plugin);
} catch (Exception e) {
LogUtil.error(e.getMessage(), new Throwable(e));
DEException.throwException(e);
}
}
public static List<XpackPluginsDatasourceVO> getDsConfigList() {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
return templateMap.values().stream().map(DataEaseDatasourcePlugin::getConfig).toList();
}
}

View File

@ -0,0 +1,33 @@
package io.dataease.extensions.datasource.plugin;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.factory.ProviderFactory;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.license.utils.JsonUtil;
import io.dataease.plugins.template.DataEasePlugin;
import io.dataease.plugins.vo.DataEasePluginVO;
/**
* @Author Junjun
*/
public abstract class DataEaseDatasourcePlugin extends Provider implements DataEasePlugin {
@Override
public void loadPlugin() {
XpackPluginsDatasourceVO datasourceConfig = getConfig();
ProviderFactory.loadPlugin(datasourceConfig.getType(), this);
}
public XpackPluginsDatasourceVO getConfig() {
DataEasePluginVO pluginInfo = null;
try {
pluginInfo = getPluginInfo();
} catch (Exception e) {
DEException.throwException(e);
}
String config = pluginInfo.getConfig();
XpackPluginsDatasourceVO vo = JsonUtil.parseObject(config, XpackPluginsDatasourceVO.class);
vo.setIcon(pluginInfo.getIcon());
return vo;
}
}

View File

@ -0,0 +1,28 @@
package io.dataease.extensions.datasource.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Map;
@Data
public class XpackPluginsDatasourceVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String icon;
private String category;
private String type;
private String extraParams;
private Map<String, String> staticMap;
}