PluginFactory.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package org.dbsyncer.plugin;
  2. import org.apache.commons.io.FileUtils;
  3. import org.dbsyncer.common.spi.ConvertService;
  4. import org.dbsyncer.common.util.CollectionUtils;
  5. import org.dbsyncer.plugin.config.Plugin;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.stereotype.Component;
  9. import java.io.File;
  10. import java.util.Collection;
  11. import java.util.LinkedList;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.concurrent.ConcurrentHashMap;
  15. /**
  16. * @author AE86
  17. * @version 1.0.0
  18. * @date 2019/10/1 13:26
  19. */
  20. @Component
  21. public class PluginFactory {
  22. private final Logger logger = LoggerFactory.getLogger(getClass());
  23. /**
  24. * 插件路径dbsyncer/plugin/
  25. */
  26. private final String PLUGIN_PATH = new StringBuilder(System.getProperty("user.dir")).append(File.separatorChar).append("plugins")
  27. .append(File.separatorChar).toString();
  28. private final List<Plugin> plugins = new LinkedList<>();
  29. private final Map<String, ConvertService> service = new ConcurrentHashMap<>();
  30. public void loadPlugins() {
  31. plugins.clear();
  32. service.clear();
  33. Collection<File> files = FileUtils.listFiles(new File(PLUGIN_PATH), new String[] {"jar"}, true);
  34. if (!CollectionUtils.isEmpty(files)) {
  35. files.forEach(f -> {
  36. plugins.add(new Plugin(f.getName(), f.getName()));
  37. loadPlugin(f);
  38. });
  39. }
  40. logger.info("PreLoad plugin:{}", plugins.size());
  41. }
  42. public String getPluginPath() {
  43. return PLUGIN_PATH;
  44. }
  45. public List<Plugin> getPluginAll() {
  46. return plugins;
  47. }
  48. public void convert(Plugin plugin, List<Map<String, Object>> source, List<Map<String, Object>> target) {
  49. if (null != plugin && service.containsKey(plugin.getClassName())) {
  50. service.get(plugin.getClassName()).convert(source, target);
  51. }
  52. }
  53. public void convert(Plugin plugin, String event, Map<String, Object> source, Map<String, Object> target) {
  54. if (null != plugin && service.containsKey(plugin.getClassName())) {
  55. service.get(plugin.getClassName()).convert(event, source, target);
  56. }
  57. }
  58. /**
  59. * SPI, 扫描jar扩展接口实现,注册为本地服务
  60. *
  61. * @param file
  62. */
  63. private void loadPlugin(File file) {
  64. // TODO 加载扩展实现
  65. }
  66. }