Browse Source

update config model

AE86 5 years ago
parent
commit
6ad9c9a1a8

+ 0 - 22
dbsyncer-biz/src/main/java/org/dbsyncer/biz/CheckService.java

@@ -1,22 +0,0 @@
-package org.dbsyncer.biz;
-
-import java.util.Map;
-
-/**
- * @author AE86
- * @version 1.0.0
- * @date 2020/1/7 22:58
- */
-public interface CheckService {
-
-    /**
-     * 检查配置
-     *
-     * @param params 参数
-     * @param type 返回类型
-     * @param <T>
-     * @return
-     */
-    <T> T check(Map<String, String> params, Class<T> type);
-
-}

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

@@ -6,9 +6,11 @@ import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.Filter;
 import org.dbsyncer.parser.convert.FieldConvert;
 import org.dbsyncer.parser.model.AbstractConfigModel;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.plugin.config.Plugin;
+import org.dbsyncer.storage.constant.ConfigConstant;
 
 import java.util.List;
 import java.util.Map;
@@ -20,39 +22,45 @@ import java.util.Map;
  */
 public abstract class AbstractChecker implements Checker {
 
-    @Override
-    public void modify(Connector connector, Map<String, String> params) {
-        throw new BizException("Un supported.");
-    }
-
-    @Override
-    public void modify(Mapping mapping, Map<String, String> params) {
-        throw new BizException("Un supported.");
+    /**
+     * 修改基本配置
+     *
+     * @param configModel
+     * @param params
+     */
+    protected void modifyConfigModel(ConfigModel configModel, Map<String, String> params) {
+        // 名称
+        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
+        if (StringUtils.isNotBlank(name)) {
+            configModel.setName(name);
+        }
+        configModel.setUpdateTime(System.currentTimeMillis());
     }
 
     /**
-     * 修改:过滤条件/转换配置/插件配置
+     * 修改高级配置:过滤条件/转换配置/插件配置
+     *
      * @param model
      * @param params
      */
-    protected void modifyConfigModel(AbstractConfigModel model, Map<String, String> params){
+    protected void modifySuperConfigModel(AbstractConfigModel model, Map<String, String> params) {
         // 过滤条件
         String filterJson = params.get("filter");
-        if(StringUtils.isNotBlank(filterJson)){
+        if (StringUtils.isNotBlank(filterJson)) {
             List<Filter> filter = JsonUtil.jsonToObj(filterJson, List.class);
             model.setFilter(filter);
         }
 
         // 转换配置
         String fieldConvertJson = params.get("fieldConvert");
-        if(StringUtils.isNotBlank(fieldConvertJson)){
+        if (StringUtils.isNotBlank(fieldConvertJson)) {
             List<FieldConvert> fieldConvert = JsonUtil.jsonToObj(fieldConvertJson, List.class);
             model.setFieldConvert(fieldConvert);
         }
 
         // 插件配置
         String pluginJson = params.get("plugin");
-        if(StringUtils.isNotBlank(pluginJson)){
+        if (StringUtils.isNotBlank(pluginJson)) {
             Plugin plugin = JsonUtil.jsonToObj(pluginJson, Plugin.class);
             model.setPlugin(plugin);
         }

+ 5 - 14
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/Checker.java

@@ -1,7 +1,6 @@
 package org.dbsyncer.biz.checker;
 
-import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.parser.model.ConfigModel;
 
 import java.util.Map;
 
@@ -13,19 +12,11 @@ import java.util.Map;
 public interface Checker {
 
     /**
-     * 修改连接器配置
+     * 修改配置
      *
-     * @param connector
-     * @param params
+     * @param params 修改参数
+     * @return
      */
-    void modify(Connector connector, Map<String, String> params);
-
-    /**
-     * 修改驱动配置
-     *
-     * @param connector
-     * @param params
-     */
-    void modify(Mapping connector, Map<String, String> params);
+    ConfigModel checkConfigModel(Map<String, String> params);
 
 }

+ 23 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/ConnectorConfigChecker.java

@@ -0,0 +1,23 @@
+package org.dbsyncer.biz.checker;
+
+import org.dbsyncer.parser.model.Connector;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/7 23:17
+ */
+public interface ConnectorConfigChecker {
+
+    /**
+     * 修改配置
+     *
+     * @param connector
+     * @param params
+     * @return
+     */
+    void modify(Connector connector, Map<String, String> params);
+
+}

+ 10 - 12
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/MysqlChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/connector/MysqlConfigChecker.java

@@ -1,6 +1,9 @@
-package org.dbsyncer.biz.checker.impl;
+/**
+ * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.connector;
 
-import org.dbsyncer.biz.checker.AbstractChecker;
+import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.storage.constant.ConfigConstant;
@@ -12,28 +15,23 @@ import java.util.Map;
 /**
  * @author AE86
  * @version 1.0.0
- * @date 2020/1/7 23:16
+ * @date 2020/1/8 15:17
  */
 @Component
-public class MysqlChecker extends AbstractChecker {
+public class MysqlConfigChecker implements ConnectorConfigChecker {
 
     @Override
     public void modify(Connector connector, Map<String, String> params) {
-        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
         String username = params.get("username");
         String password = params.get("password");
         String url = params.get("url");
-        Assert.hasText(name, "MysqlChecker modify name is empty.");
-        Assert.hasText(username, "MysqlChecker modify username is empty.");
-        Assert.hasText(password, "MysqlChecker modify password is empty.");
-        Assert.hasText(url, "MysqlChecker modify url is empty.");
+        Assert.hasText(username, "MysqlConfigChecker modify username is empty.");
+        Assert.hasText(password, "MysqlConfigChecker modify password is empty.");
+        Assert.hasText(url, "MysqlConfigChecker modify url is empty.");
 
-        connector.setName(name);
         DatabaseConfig config = (DatabaseConfig) connector.getConfig();
         config.setUsername(username);
         config.setPassword(password);
         config.setUrl(url);
-        connector.setUpdateTime(System.currentTimeMillis());
     }
-
 }

+ 49 - 32
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/ConnectorChecker.java

@@ -4,15 +4,22 @@
 package org.dbsyncer.biz.checker.impl;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.NumberUtils;
-import org.dbsyncer.biz.CheckService;
 import org.dbsyncer.biz.checker.AbstractChecker;
-import org.dbsyncer.listener.config.ListenerConfig;
-import org.dbsyncer.parser.constant.ModelConstant;
-import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.biz.checker.ConnectorConfigChecker;
+import org.dbsyncer.connector.config.ConnectorConfig;
+import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.storage.constant.ConfigConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
 
 import java.util.Map;
 
@@ -22,41 +29,51 @@ import java.util.Map;
  * @date 2020/1/8 15:17
  */
 @Component
-public class ConnectorChecker extends AbstractChecker {
+public class ConnectorChecker extends AbstractChecker implements ApplicationContextAware {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
 
     @Autowired
-    private CheckService checkService;
+    private Manager manager;
+
+    private Map<String, ConnectorConfigChecker> map;
 
     @Override
-    public void modify(Mapping mapping, Map<String, String> params) {
-        // 名称
-        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
-        if(StringUtils.isNotBlank(name)){
-            mapping.setName(name);
-        }
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        map = applicationContext.getBeansOfType(ConnectorConfigChecker.class);
+    }
 
-        // 同步方式(仅支持全量或增量同步方式)
-        String model = params.get("model");
-        if(StringUtils.isNotBlank(model)){
-            if(StringUtils.equals(ModelConstant.FULL, model) || StringUtils.equals(ModelConstant.INCREMENT, model)){
-                mapping.setModel(model);
-            }
-        }
+    @Override
+    public ConfigModel checkConfigModel(Map<String, String> params) {
+        logger.info("check connector params:{}", params);
+        Assert.notEmpty(params, "ConnectorChecker check params is null.");
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        Connector connector = manager.getConnector(id);
+        Assert.notNull(connector, "Can not find connector.");
 
-        // 全量配置
-        String threadNum = params.get("threadNum");
-        mapping.setThreadNum(NumberUtils.toInt(threadNum, mapping.getThreadNum()));
-        String batchNum = params.get("batchNum");
-        mapping.setBatchNum(NumberUtils.toInt(batchNum, mapping.getBatchNum()));
-        // TODO 增量配置(日志/定时)
-        String incrementStrategy = params.get("incrementStrategy");
-        ListenerConfig listener = mapping.getListener();
+        // 修改基本配置
+        this.modifyConfigModel(connector, params);
 
-        // 修改:过滤条件/转换配置/插件配置
-        modifyConfigModel(mapping, params);
+        // 配置连接器配置
+        ConnectorConfig config = connector.getConfig();
+        String type = toLowerCaseFirstOne(config.getConnectorType()) + "ConfigChecker";
+        ConnectorConfigChecker checker = map.get(type);
+        Assert.notNull(checker, "Checker can not be null.");
+        checker.modify(connector, params);
+        return connector;
+    }
 
-        // 增量配置
-        mapping.setUpdateTime(System.currentTimeMillis());
+    /**
+     * 首字母转小写
+     *
+     * @param s
+     * @return
+     */
+    private String toLowerCaseFirstOne(String s) {
+        if (StringUtils.isBlank(s) || Character.isLowerCase(s.charAt(0))){
+            return s;
+        }
+        return new StringBuilder().append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
     }
 
 }

+ 20 - 11
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/MappingChecker.java

@@ -5,14 +5,18 @@ package org.dbsyncer.biz.checker.impl;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
-import org.dbsyncer.biz.CheckService;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.listener.config.ListenerConfig;
+import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.constant.ModelConstant;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.storage.constant.ConfigConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
 
 import java.util.Map;
 
@@ -24,16 +28,21 @@ import java.util.Map;
 @Component
 public class MappingChecker extends AbstractChecker {
 
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
     @Autowired
-    private CheckService checkService;
+    private Manager manager;
 
     @Override
-    public void modify(Mapping mapping, Map<String, String> params) {
-        // 名称
-        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
-        if(StringUtils.isNotBlank(name)){
-            mapping.setName(name);
-        }
+    public ConfigModel checkConfigModel(Map<String, String> params) {
+        logger.info("check mapping params:{}", params);
+        Assert.notEmpty(params, "MappingChecker check params is null.");
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        Mapping mapping = manager.getMapping(id);
+        Assert.notNull(mapping, "Can not find mapping.");
+
+        // 修改基本配置
+        this.modifyConfigModel(mapping, params);
 
         // 同步方式(仅支持全量或增量同步方式)
         String model = params.get("model");
@@ -52,11 +61,11 @@ public class MappingChecker extends AbstractChecker {
         String incrementStrategy = params.get("incrementStrategy");
         ListenerConfig listener = mapping.getListener();
 
-        // 修改:过滤条件/转换配置/插件配置
-        modifyConfigModel(mapping, params);
+        // 修改高级配置:过滤条件/转换配置/插件配置
+        this.modifySuperConfigModel(mapping, params);
 
         // 增量配置
-        mapping.setUpdateTime(System.currentTimeMillis());
+        return mapping;
     }
 
 }

+ 52 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/TableGroupChecker.java

@@ -0,0 +1,52 @@
+/**
+ * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.impl;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.NumberUtils;
+import org.dbsyncer.biz.checker.AbstractChecker;
+import org.dbsyncer.listener.config.ListenerConfig;
+import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.constant.ModelConstant;
+import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.storage.constant.ConfigConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/8 15:17
+ */
+@Component
+public class TableGroupChecker extends AbstractChecker {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private Manager manager;
+
+    @Override
+    public ConfigModel checkConfigModel(Map<String, String> params) {
+        logger.info("check tableGroup params:{}", params);
+        Assert.notEmpty(params, "TableGroupChecker check params is null.");
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        TableGroup tableGroup = manager.getTableGroup(id);
+        Assert.notNull(tableGroup, "Can not find tableGroup.");
+
+        // 修改基本配置
+        this.modifyConfigModel(tableGroup, params);
+
+        // 修改高级配置:过滤条件/转换配置/插件配置
+        this.modifySuperConfigModel(tableGroup, params);
+        return tableGroup;
+    }
+}

+ 0 - 85
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/CheckServiceImpl.java

@@ -1,85 +0,0 @@
-package org.dbsyncer.biz.impl;
-
-import org.dbsyncer.biz.CheckService;
-import org.dbsyncer.biz.checker.Checker;
-import org.dbsyncer.common.util.JsonUtil;
-import org.dbsyncer.connector.config.ConnectorConfig;
-import org.dbsyncer.manager.Manager;
-import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.Mapping;
-import org.dbsyncer.storage.constant.ConfigConstant;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-
-import java.util.Map;
-
-/**
- * @author AE86
- * @version 1.0.0
- * @date 2020/1/7 22:59
- */
-@Service
-public class CheckServiceImpl implements CheckService, ApplicationContextAware {
-
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Autowired
-    private Manager manager;
-
-    private ApplicationContext applicationContext;
-
-    @Override
-    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        this.applicationContext = applicationContext;
-    }
-
-//    @Override
-//    public String checkConnector(Map<String, String> params) {
-//        logger.info("check connector params:{}", params);
-//        Assert.notEmpty(params, "CheckServiceImpl check connector params is null.");
-//        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
-//        Connector connector = manager.getConnector(id);
-//        Assert.notNull(connector, "Can not find connector.");
-//        ConnectorConfig config = connector.getConfig();
-//        String type = config.getConnectorType();
-//        Checker checker = map.get(type);
-//        Assert.notNull(checker, "Checker can not be null.");
-//
-//        checker.modify(connector, params);
-//        String json = JsonUtil.objToJson(connector);
-//        logger.info("check success:{}", json);
-//        return json;
-//    }
-
-//    @Override
-//    public String checkMapping(Map<String, String> params) {
-//        logger.info("check mapping params:{}", params);
-//        Assert.notEmpty(params, "CheckServiceImpl check mapping params is null.");
-//        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
-//        Mapping mapping = manager.getMapping(id);
-//        Assert.notNull(mapping, "Can not find mapping.");
-//        String type = mapping.getType();
-//        Checker checker = map.get(type);
-//        Assert.notNull(checker, "Checker can not be null.");
-//
-//        checker.modify(mapping, params);
-//        String json = JsonUtil.objToJson(mapping);
-//        logger.info("check success:{}", json);
-//        return json;
-//    }
-
-    @Override
-    public <T> T check(Map<String, String> params, Class<T> type) {
-        T checker = applicationContext.getBean(type);
-        Assert.notNull(checker, "Checker can not be null.");
-
-//        checker.modify(null, params);
-        return null;
-    }
-}

+ 6 - 6
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ConnectorServiceImpl.java

@@ -1,12 +1,12 @@
 package org.dbsyncer.biz.impl;
 
 import org.apache.commons.lang.StringUtils;
-import org.dbsyncer.biz.CheckService;
 import org.dbsyncer.biz.ConnectorService;
+import org.dbsyncer.biz.checker.Checker;
+import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.Mapping;
-import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +29,7 @@ public class ConnectorServiceImpl implements ConnectorService {
     private Manager manager;
 
     @Autowired
-    private CheckService checkService;
+    private Checker connectorChecker;
 
     @Override
     public boolean alive(String json) {
@@ -45,8 +45,8 @@ public class ConnectorServiceImpl implements ConnectorService {
 
     @Override
     public String edit(Map<String, String> params) {
-        Connector connector = checkService.check(params, Connector.class);
-        return manager.editConnector(null);
+        ConfigModel model = connectorChecker.checkConfigModel(params);
+        return manager.editConnector(JsonUtil.objToJson(model));
     }
 
     @Override

+ 5 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -1,13 +1,14 @@
 package org.dbsyncer.biz.impl;
 
-import org.dbsyncer.biz.CheckService;
 import org.dbsyncer.biz.MappingService;
+import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.vo.MappingVo;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.listener.config.TimingListenerConfig;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.constant.ModelConstant;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.storage.constant.ConfigConstant;
@@ -36,7 +37,7 @@ public class MappingServiceImpl implements MappingService {
     private Manager manager;
 
     @Autowired
-    private CheckService checkService;
+    private Checker mappingChecker;
 
     @Override
     public String add(Map<String, String> params) {
@@ -62,8 +63,8 @@ public class MappingServiceImpl implements MappingService {
     @Override
     public String edit(Map<String, String> params) {
         logger.info("检查驱动是否停止运行");
-        Mapping mapping = checkService.check(params, Mapping.class);
-        return manager.editMapping(null);
+        ConfigModel model = mappingChecker.checkConfigModel(params);
+        return manager.editMapping(JsonUtil.objToJson(model));
     }
 
     @Override

+ 7 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/TableGroupServiceImpl.java

@@ -1,10 +1,12 @@
 package org.dbsyncer.biz.impl;
 
 import org.dbsyncer.biz.TableGroupService;
+import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.config.Table;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.slf4j.Logger;
@@ -29,6 +31,9 @@ public class TableGroupServiceImpl implements TableGroupService {
     @Autowired
     private Manager manager;
 
+    @Autowired
+    private Checker tableGroupChecker;
+
     @Override
     public String add(Map<String, String> params) {
         String mappingId = params.get("mappingId");
@@ -51,7 +56,8 @@ public class TableGroupServiceImpl implements TableGroupService {
 
     @Override
     public String edit(Map<String, String> params) {
-        return manager.editTableGroup(null);
+        ConfigModel model = tableGroupChecker.checkConfigModel(params);
+        return manager.editTableGroup(JsonUtil.objToJson(model));
     }
 
     @Override