AbstractChecker.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package org.dbsyncer.biz.checker;
  2. import org.dbsyncer.biz.BizException;
  3. import org.dbsyncer.common.util.CollectionUtils;
  4. import org.dbsyncer.common.util.JsonUtil;
  5. import org.dbsyncer.common.util.StringUtil;
  6. import org.dbsyncer.connector.model.Filter;
  7. import org.dbsyncer.manager.Manager;
  8. import org.dbsyncer.parser.model.AbstractConfigModel;
  9. import org.dbsyncer.parser.model.ConfigModel;
  10. import org.dbsyncer.parser.model.Convert;
  11. import org.dbsyncer.plugin.config.Plugin;
  12. import org.dbsyncer.storage.SnowflakeIdWorker;
  13. import org.dbsyncer.storage.constant.ConfigConstant;
  14. import org.json.JSONArray;
  15. import org.json.JSONException;
  16. import org.json.JSONObject;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.util.Assert;
  19. import java.time.Instant;
  20. import java.util.*;
  21. /**
  22. * @author AE86
  23. * @version 1.0.0
  24. * @date 2020/1/8 15:17
  25. */
  26. public abstract class AbstractChecker implements Checker {
  27. @Autowired
  28. private Manager manager;
  29. @Autowired
  30. private SnowflakeIdWorker snowflakeIdWorker;
  31. /**
  32. * 修改基本配置
  33. * <p>id,type,name,createTime,updateTime</p>
  34. *
  35. * @param model
  36. * @param params
  37. */
  38. protected void modifyConfigModel(ConfigModel model, Map<String, String> params) {
  39. Assert.notNull(model, "ConfigModel can not be null.");
  40. Assert.hasText(model.getType(), "ConfigModel type can not be empty.");
  41. Assert.hasText(model.getName(), "ConfigModel name can not be empty.");
  42. // 名称
  43. String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
  44. if (StringUtil.isNotBlank(name)) {
  45. model.setName(name);
  46. }
  47. model.setId(StringUtil.isBlank(model.getId()) ? String.valueOf(snowflakeIdWorker.nextId()) : model.getId());
  48. long now = Instant.now().toEpochMilli();
  49. model.setCreateTime(null == model.getCreateTime() ? now : model.getCreateTime());
  50. model.setUpdateTime(now);
  51. }
  52. /**
  53. * 修改高级配置:过滤条件/转换配置/插件配置
  54. *
  55. * @param model
  56. * @param params
  57. */
  58. protected void modifySuperConfigModel(AbstractConfigModel model, Map<String, String> params) {
  59. // 全局参数
  60. String mappingParams = params.get("params");
  61. model.setParams(StringUtil.isNotBlank(mappingParams) ? JsonUtil.jsonToObj(mappingParams, Map.class) : new LinkedHashMap());
  62. // 过滤条件
  63. String filterJson = params.get("filter");
  64. if (StringUtil.isNotBlank(filterJson)) {
  65. List<Filter> list = jsonToList(filterJson, Filter.class);
  66. model.setFilter(list);
  67. }
  68. // 转换配置
  69. String convertJson = params.get("convert");
  70. if (StringUtil.isNotBlank(convertJson)) {
  71. List<Convert> convert = jsonToList(convertJson, Convert.class);
  72. model.setConvert(convert);
  73. }
  74. // 插件配置
  75. String pluginClassName = params.get("pluginClassName");
  76. Plugin plugin = null;
  77. if (StringUtil.isNotBlank(pluginClassName)) {
  78. List<Plugin> plugins = manager.getPluginAll();
  79. if (!CollectionUtils.isEmpty(plugins)) {
  80. for (Plugin p : plugins) {
  81. if (StringUtil.equals(p.getClassName(), pluginClassName)) {
  82. plugin = p;
  83. break;
  84. }
  85. }
  86. }
  87. }
  88. model.setPlugin(plugin);
  89. }
  90. private <T> List<T> jsonToList(String json, Class<T> valueType) {
  91. try {
  92. JSONArray array = new JSONArray(json);
  93. if (null != array) {
  94. List<T> list = new ArrayList<>();
  95. int length = array.length();
  96. for (int i = 0; i < length; i++) {
  97. JSONObject obj = array.getJSONObject(i);
  98. T t = JsonUtil.jsonToObj(obj.toString(), valueType);
  99. list.add(t);
  100. }
  101. return list;
  102. }
  103. } catch (JSONException e) {
  104. throw new BizException(String.format("解析高级配置参数异常:%s", json));
  105. }
  106. return Collections.EMPTY_LIST;
  107. }
  108. }