Răsfoiți Sursa

add plugins

AE86 4 ani în urmă
părinte
comite
1cb24567f9

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 .idea
 data
+plugins
 *.iml
 out
 gen

+ 6 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/PluginService.java

@@ -18,4 +18,10 @@ public interface PluginService {
      */
     List<Plugin> getPluginAll();
 
+    /**
+     * 获取插件上传路径
+     * @return
+     */
+    String getPluginPath();
+
 }

+ 5 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/PluginServiceImpl.java

@@ -23,4 +23,9 @@ public class PluginServiceImpl implements PluginService {
     public List<Plugin> getPluginAll() {
         return manager.getPluginAll();
     }
+
+    @Override
+    public String getPluginPath() {
+        return manager.getPluginPath();
+    }
 }

+ 3 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java

@@ -117,4 +117,7 @@ public interface Manager extends Executor {
     // Plugin
     List<Plugin> getPluginAll();
 
+    String getPluginPath();
+
+    void loadPlugins();
 }

+ 10 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -289,6 +289,16 @@ public class ManagerFactory implements Manager, ApplicationContextAware, Applica
         return pluginFactory.getPluginAll();
     }
 
+    @Override
+    public String getPluginPath() {
+        return pluginFactory.getPluginPath();
+    }
+
+    @Override
+    public void loadPlugins() {
+        pluginFactory.loadPlugins();
+    }
+
     @Override
     public void start(Mapping mapping) {
         Puller puller = getPuller(mapping);

+ 3 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java

@@ -99,6 +99,9 @@ public final class PreloadTemplate extends AbstractTemplate implements Applicati
         // Load configs
         execute(new PreloadConfig(ConfigConstant.CONFIG, HandlerEnum.PRELOAD_CONFIG));
 
+        // Load plugins
+        manager.loadPlugins();
+
         // 启动驱动
         Meta meta = new Meta();
         meta.setType(ConfigConstant.META);

+ 30 - 3
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/PluginFactory.java

@@ -1,9 +1,15 @@
 package org.dbsyncer.plugin;
 
+import org.apache.commons.io.FileUtils;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.plugin.config.Plugin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
+import java.io.File;
+import java.util.Collection;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -15,9 +21,29 @@ import java.util.Map;
 @Component
 public class PluginFactory {
 
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 插件路径dbsyncer/plugin/
+     */
+    private final String PLUGIN_PATH = new StringBuilder(System.getProperty("user.dir")).append(File.separatorChar).append("plugins")
+            .append(File.separatorChar).toString();
+
+    private final List<Plugin> plugins = new LinkedList<>();
+
+    public void loadPlugins() {
+        Collection<File> files = FileUtils.listFiles(new File(PLUGIN_PATH), new String[] {"jar"}, true);
+        if (!CollectionUtils.isEmpty(files)) {
+            files.forEach(f -> plugins.add(new Plugin(f.getName(), f.getName())));
+        }
+    }
+
+    public String getPluginPath() {
+        return PLUGIN_PATH;
+    }
+
     public List<Plugin> getPluginAll() {
-        List<Plugin> list = new ArrayList<>();
-        return list;
+        return plugins;
     }
 
     public void convert(Plugin plugin, List<Map<String, Object>> source, List<Map<String, Object>> target) {
@@ -30,4 +56,5 @@ public class PluginFactory {
         if (null != plugin) {
         }
     }
+
 }

+ 8 - 0
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/config/Plugin.java

@@ -13,6 +13,14 @@ public class Plugin {
     // 插件实现
     private String className;
 
+    public Plugin() {
+    }
+
+    public Plugin(String name, String className) {
+        this.name = name;
+        this.className = className;
+    }
+
     public String getName() {
         return name;
     }

+ 13 - 3
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/upload/UploadController.java

@@ -1,8 +1,11 @@
 package org.dbsyncer.web.controller.upload;
 
+import org.apache.commons.io.FileUtils;
+import org.dbsyncer.biz.PluginService;
 import org.dbsyncer.biz.vo.RestResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -11,6 +14,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
 
 @Controller
 @RequestMapping("/upload")
@@ -23,7 +27,9 @@ public class UploadController {
         return "upload/upload";
     }
 
-    //@PreAuthorize("hasAuthority('ROLE_')")
+    @Autowired
+    private PluginService pluginService;
+
     @RequestMapping(value = "/upload")
     @ResponseBody
     public RestResult upload(HttpServletRequest request, @RequestParam("file") MultipartFile[] files) {
@@ -31,10 +37,14 @@ public class UploadController {
             if (files != null) {
                 int length = files.length;
                 MultipartFile file = null;
+                String filePath = pluginService.getPluginPath();
+                FileUtils.forceMkdir(new File(filePath));
                 for (int i = 0; i < length; i++) {
                     file = files[i];
-                    String fileName = file.getOriginalFilename();
-                    System.out.println(fileName);
+                    if (file != null) {
+                        File dest = new File(filePath + file.getOriginalFilename());
+                        FileUtils.copyInputStreamToFile(file.getInputStream(), dest);
+                    }
                 }
             }
             return RestResult.restSuccess("ok");