Browse Source

优化插件列表

AE86 3 years ago
parent
commit
61fd4ae9ad

+ 2 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/PluginService.java

@@ -1,6 +1,6 @@
 package org.dbsyncer.biz;
 
-import org.dbsyncer.plugin.config.Plugin;
+import org.dbsyncer.biz.vo.PluginVo;
 
 import java.util.List;
 
@@ -16,7 +16,7 @@ public interface PluginService {
      *
      * @return
      */
-    List<Plugin> getPluginAll();
+    List<PluginVo> getPluginAll();
 
     /**
      * 获取插件上传路径

+ 6 - 6
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/AbstractChecker.java

@@ -2,13 +2,13 @@ package org.dbsyncer.biz.checker;
 
 import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.BizException;
-import org.dbsyncer.biz.PluginService;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.Filter;
-import org.dbsyncer.parser.model.Convert;
+import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.model.AbstractConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.parser.model.Convert;
 import org.dbsyncer.plugin.config.Plugin;
 import org.dbsyncer.storage.SnowflakeIdWorker;
 import org.dbsyncer.storage.constant.ConfigConstant;
@@ -29,7 +29,7 @@ import java.util.*;
 public abstract class AbstractChecker implements Checker {
 
     @Autowired
-    private PluginService pluginService;
+    private Manager manager;
 
     @Autowired
     private SnowflakeIdWorker snowflakeIdWorker;
@@ -85,7 +85,7 @@ public abstract class AbstractChecker implements Checker {
         String pluginClassName = params.get("pluginClassName");
         Plugin plugin = null;
         if (StringUtils.isNotBlank(pluginClassName)) {
-            List<Plugin> plugins = pluginService.getPluginAll();
+            List<Plugin> plugins = manager.getPluginAll();
             if (!CollectionUtils.isEmpty(plugins)) {
                 for (Plugin p : plugins) {
                     if (StringUtils.equals(p.getClassName(), pluginClassName)) {
@@ -98,10 +98,10 @@ public abstract class AbstractChecker implements Checker {
         model.setPlugin(plugin);
     }
 
-    private <T> List<T> jsonToList(String json, Class<T> valueType){
+    private <T> List<T> jsonToList(String json, Class<T> valueType) {
         try {
             JSONArray array = new JSONArray(json);
-            if(null != array){
+            if (null != array) {
                 List<T> list = new ArrayList<>();
                 int length = array.length();
                 for (int i = 0; i < length; i++) {

+ 32 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/PluginServiceImpl.java

@@ -3,15 +3,23 @@ package org.dbsyncer.biz.impl;
 import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.PluginService;
+import org.dbsyncer.biz.vo.PluginVo;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.logger.LogService;
 import org.dbsyncer.parser.logger.LogType;
+import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.plugin.config.Plugin;
 import org.dbsyncer.plugin.enums.FileSuffixEnum;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author AE86
@@ -28,8 +36,30 @@ public class PluginServiceImpl implements PluginService {
     private LogService logService;
 
     @Override
-    public List<Plugin> getPluginAll() {
-        return manager.getPluginAll();
+    public List<PluginVo> getPluginAll() {
+        List<Plugin> pluginAll = manager.getPluginAll();
+        List<PluginVo> vos = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(pluginAll)) {
+            Map<String, List<String>> pluginClassNameMap = new HashMap<>();
+            List<Mapping> mappingAll = manager.getMappingAll();
+            if (!CollectionUtils.isEmpty(mappingAll)) {
+                mappingAll.forEach(mapping -> {
+                    Plugin plugin = mapping.getPlugin();
+                    if(null != plugin){
+                        pluginClassNameMap.putIfAbsent(plugin.getClassName(), new ArrayList<>());
+                        pluginClassNameMap.get(plugin.getClassName()).add(mapping.getName());
+                    }
+                });
+            }
+
+            vos.addAll(pluginAll.stream().map(plugin -> {
+                PluginVo vo = new PluginVo();
+                BeanUtils.copyProperties(plugin, vo);
+                vo.setMappingName(StringUtils.join(pluginClassNameMap.get(plugin.getClassName()), "|"));
+                return vo;
+            }).collect(Collectors.toList()));
+        }
+        return vos;
     }
 
     @Override

+ 19 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/PluginVo.java

@@ -0,0 +1,19 @@
+package org.dbsyncer.biz.vo;
+
+import org.dbsyncer.plugin.config.Plugin;
+
+public class PluginVo extends Plugin {
+
+    /**
+     * 正在使用插件的驱动名称,多个","拼接
+     */
+    private String mappingName;
+
+    public String getMappingName() {
+        return mappingName;
+    }
+
+    public void setMappingName(String mappingName) {
+        this.mappingName = mappingName;
+    }
+}

+ 2 - 0
dbsyncer-web/src/main/resources/public/upload/upload.html

@@ -108,6 +108,7 @@ public class MyPlugin implements ConvertService{
                             <thead>
                             <tr>
                                 <th>名称</th>
+                                <th>运行驱动</th>
                                 <th>类名</th>
                                 <th>版本</th>
                                 <th>文件</th>
@@ -117,6 +118,7 @@ public class MyPlugin implements ConvertService{
                             <tr th:id="${p?.name}" th:each="p,state : ${plugins}">
                                 <td th:if="${p?.unmodifiable}"><i class="fa fa-plug" aria-hidden="true" th:title="内置插件"></i> [[${p?.name}]]</td>
                                 <td th:if="${not p?.unmodifiable}"><i class="fa fa-star" aria-hidden="true" th:title="普通插件"></i> [[${p?.name}]]</td>
+                                <td th:text="${p?.mappingName}"/>
                                 <td th:text="${p?.className}"/>
                                 <td th:text="${p?.version}"/>
                                 <td th:text="${p?.fileName}"/>