PluginServiceImpl.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /**
  2. * DBSyncer Copyright 2020-2024 All Rights Reserved.
  3. */
  4. package org.dbsyncer.biz.impl;
  5. import org.dbsyncer.biz.BizException;
  6. import org.dbsyncer.biz.PluginService;
  7. import org.dbsyncer.biz.vo.PluginVo;
  8. import org.dbsyncer.common.util.CollectionUtils;
  9. import org.dbsyncer.common.util.StringUtil;
  10. import org.dbsyncer.parser.ProfileComponent;
  11. import org.dbsyncer.parser.LogService;
  12. import org.dbsyncer.parser.LogType;
  13. import org.dbsyncer.parser.model.Mapping;
  14. import org.dbsyncer.parser.model.TableGroup;
  15. import org.dbsyncer.plugin.PluginFactory;
  16. import org.dbsyncer.plugin.model.Plugin;
  17. import org.dbsyncer.common.enums.FileSuffixEnum;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.stereotype.Component;
  20. import org.springframework.util.Assert;
  21. import javax.annotation.Resource;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.stream.Collectors;
  27. /**
  28. * @author AE86
  29. * @version 1.0.0
  30. * @date 2020/01/13 17:18
  31. */
  32. @Component
  33. public class PluginServiceImpl implements PluginService {
  34. @Resource
  35. private PluginFactory pluginFactory;
  36. @Resource
  37. private ProfileComponent profileComponent;
  38. @Resource
  39. private LogService logService;
  40. @Override
  41. public List<PluginVo> getPluginAll() {
  42. List<Plugin> pluginAll = pluginFactory.getPluginAll();
  43. List<PluginVo> vos = new ArrayList<>();
  44. if (!CollectionUtils.isEmpty(pluginAll)) {
  45. Map<String, List<String>> pluginClassNameMap = getPluginClassNameMap();
  46. vos.addAll(pluginAll.stream().map(plugin -> {
  47. PluginVo vo = new PluginVo();
  48. BeanUtils.copyProperties(plugin, vo);
  49. vo.setMappingName(StringUtil.join(pluginClassNameMap.get(plugin.getClassName()), "|"));
  50. return vo;
  51. }).collect(Collectors.toList()));
  52. }
  53. return vos;
  54. }
  55. @Override
  56. public String getPluginPath() {
  57. return pluginFactory.getPluginPath();
  58. }
  59. @Override
  60. public String getLibraryPath() {
  61. return pluginFactory.getLibraryPath();
  62. }
  63. @Override
  64. public void loadPlugins() {
  65. pluginFactory.loadPlugins();
  66. logService.log(LogType.PluginLog.UPDATE);
  67. }
  68. @Override
  69. public void checkFileSuffix(String filename) {
  70. Assert.hasText(filename, "the plugin filename is null.");
  71. String suffix = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
  72. FileSuffixEnum fileSuffix = FileSuffixEnum.getFileSuffix(suffix);
  73. Assert.notNull(fileSuffix, "Illegal file suffix");
  74. if (FileSuffixEnum.JAR != fileSuffix) {
  75. String msg = String.format("不正确的文件扩展名 \"%s\",只支持 \"%s\" 的文件扩展名。", filename, FileSuffixEnum.JAR.getName());
  76. logService.log(LogType.PluginLog.CHECK_ERROR, msg);
  77. throw new BizException(msg);
  78. }
  79. }
  80. private Map<String, List<String>> getPluginClassNameMap() {
  81. Map<String, List<String>> map = new HashMap<>();
  82. List<Mapping> mappingAll = profileComponent.getMappingAll();
  83. if (CollectionUtils.isEmpty(mappingAll)) {
  84. return map;
  85. }
  86. for (Mapping m : mappingAll) {
  87. Plugin plugin = m.getPlugin();
  88. if (null != plugin) {
  89. map.putIfAbsent(plugin.getClassName(), new ArrayList<>());
  90. map.get(plugin.getClassName()).add(m.getName());
  91. continue;
  92. }
  93. List<TableGroup> tableGroupAll = profileComponent.getTableGroupAll(m.getId());
  94. if (CollectionUtils.isEmpty(tableGroupAll)) {
  95. continue;
  96. }
  97. for (TableGroup t : tableGroupAll) {
  98. Plugin p = t.getPlugin();
  99. if (null != p) {
  100. map.putIfAbsent(p.getClassName(), new ArrayList<>());
  101. map.get(p.getClassName()).add(m.getName());
  102. break;
  103. }
  104. }
  105. }
  106. return map;
  107. }
  108. }