Browse Source

change model

AE86 5 năm trước cách đây
mục cha
commit
5cb2bbc776
22 tập tin đã thay đổi với 302 bổ sung314 xóa
  1. 4 4
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/ConnectorService.java
  2. 17 6
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/AbstractChecker.java
  3. 12 3
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/Checker.java
  4. 59 4
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/ConnectorChecker.java
  5. 3 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlMysqlConfigChecker.java
  6. 3 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/MysqlConfigChecker.java
  7. 1 1
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/DqlMysqlLogConfigChecker.java
  8. 29 4
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MappingChecker.java
  9. 61 4
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java
  10. 8 8
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ConnectorServiceImpl.java
  11. 5 20
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java
  12. 27 69
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/TableGroupServiceImpl.java
  13. 11 7
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java
  14. 23 47
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java
  15. 0 2
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/OperationTemplate.java
  16. 1 2
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/ConfigOperationTemplate.java
  17. 11 29
      dbsyncer-parser/src/main/java/org/dbsyncer/parser/Parser.java
  18. 14 87
      dbsyncer-parser/src/main/java/org/dbsyncer/parser/ParserFactory.java
  19. 6 4
      dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/ConnectorController.java
  20. 3 9
      dbsyncer-web/src/main/resources/static/js/connector/add.js
  21. 2 2
      dbsyncer-web/src/main/resources/templates/connector/addDqlMysql.html
  22. 2 2
      dbsyncer-web/src/main/resources/templates/connector/addDqlOracle.html

+ 4 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/ConnectorService.java

@@ -15,17 +15,17 @@ public interface ConnectorService {
     /**
     /**
      * 检查连接器是否可用
      * 检查连接器是否可用
      *
      *
-     * @param json
+     * @param params
      * @return
      * @return
      */
      */
-    boolean alive(String json);
+    boolean alive(Map<String, String> params);
 
 
     /**
     /**
      * 新增连接器
      * 新增连接器
      *
      *
-     * @param json
+     * @param params
      */
      */
-    String add(String json);
+    String add(Map<String, String> params);
 
 
     /**
     /**
      * 修改连接器
      * 修改连接器

+ 17 - 6
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/AbstractChecker.java

@@ -9,8 +9,10 @@ import org.dbsyncer.parser.convert.Convert;
 import org.dbsyncer.parser.model.AbstractConfigModel;
 import org.dbsyncer.parser.model.AbstractConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.plugin.config.Plugin;
 import org.dbsyncer.plugin.config.Plugin;
+import org.dbsyncer.storage.SnowflakeIdWorker;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.Assert;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -25,19 +27,29 @@ public abstract class AbstractChecker implements Checker {
     @Autowired
     @Autowired
     private PluginService pluginService;
     private PluginService pluginService;
 
 
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
     /**
     /**
      * 修改基本配置
      * 修改基本配置
+     * <p>id,type,name,createTime,updateTime</p>
      *
      *
-     * @param configModel
+     * @param model
      * @param params
      * @param params
      */
      */
-    protected void modifyConfigModel(ConfigModel configModel, Map<String, String> params) {
+    protected void modifyConfigModel(ConfigModel model, Map<String, String> params) {
+        Assert.notNull(model, "ConfigModel can not be null.");
+        Assert.hasText(model.getType(), "ConfigModel type can not be empty.");
+        Assert.hasText(model.getName(), "ConfigModel name can not be empty.");
         // 名称
         // 名称
         String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
         String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
         if (StringUtils.isNotBlank(name)) {
         if (StringUtils.isNotBlank(name)) {
-            configModel.setName(name);
+            model.setName(name);
         }
         }
-        configModel.setUpdateTime(System.currentTimeMillis());
+        model.setId(StringUtils.isEmpty(model.getId()) ? String.valueOf(snowflakeIdWorker.nextId()) : model.getId());
+        long now = System.currentTimeMillis();
+        model.setCreateTime(null == model.getCreateTime() ? now : model.getCreateTime());
+        model.setUpdateTime(now);
     }
     }
 
 
     /**
     /**
@@ -66,7 +78,7 @@ public abstract class AbstractChecker implements Checker {
         Plugin plugin = null;
         Plugin plugin = null;
         if (StringUtils.isNotBlank(pluginClassName)) {
         if (StringUtils.isNotBlank(pluginClassName)) {
             List<Plugin> plugins = pluginService.getPluginAll();
             List<Plugin> plugins = pluginService.getPluginAll();
-            if(!CollectionUtils.isEmpty(plugins)){
+            if (!CollectionUtils.isEmpty(plugins)) {
                 for (Plugin p : plugins) {
                 for (Plugin p : plugins) {
                     if (StringUtils.equals(p.getClassName(), pluginClassName)) {
                     if (StringUtils.equals(p.getClassName(), pluginClassName)) {
                         plugin = p;
                         plugin = p;
@@ -76,7 +88,6 @@ public abstract class AbstractChecker implements Checker {
             }
             }
         }
         }
         model.setPlugin(plugin);
         model.setPlugin(plugin);
-
     }
     }
 
 
 }
 }

+ 12 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/Checker.java

@@ -1,5 +1,7 @@
 package org.dbsyncer.biz.checker;
 package org.dbsyncer.biz.checker;
 
 
+import org.dbsyncer.parser.model.ConfigModel;
+
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -10,11 +12,18 @@ import java.util.Map;
 public interface Checker {
 public interface Checker {
 
 
     /**
     /**
-     * 修改配置
+     * 新增配置
      *
      *
-     * @param params 修改参数
+     * @param params
      * @return
      * @return
      */
      */
-    String checkConfigModel(Map<String, String> params);
+    ConfigModel checkAddConfigModel(Map<String, String> params);
 
 
+    /**
+     * 修改配置
+     *
+     * @param params
+     * @return
+     */
+    ConfigModel checkEditConfigModel(Map<String, String> params);
 }
 }

+ 59 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/ConnectorChecker.java

@@ -1,11 +1,13 @@
 package org.dbsyncer.biz.checker.impl.connector;
 package org.dbsyncer.biz.checker.impl.connector;
 
 
+import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.biz.util.CheckerTypeUtil;
 import org.dbsyncer.biz.util.CheckerTypeUtil;
-import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.ConnectorConfig;
+import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -17,6 +19,7 @@ import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -40,8 +43,36 @@ public class ConnectorChecker extends AbstractChecker implements ApplicationCont
     }
     }
 
 
     @Override
     @Override
-    public String checkConfigModel(Map<String, String> params) {
-        logger.info("check connector params:{}", params);
+    public ConfigModel checkAddConfigModel(Map<String, String> params) {
+        logger.info("checkAddConfigModel connector params:{}", params);
+        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
+        String connectorType = params.get("connectorType");
+        Assert.hasText(name, "connector name is empty.");
+        Assert.hasText(connectorType, "connector connectorType is empty.");
+
+        Connector connector = new Connector();
+        connector.setName(name);
+        connector.setType(ConfigConstant.CONNECTOR);
+        setConfig(connector, connectorType);
+
+        // 配置连接器配置
+        String type = CheckerTypeUtil.getCheckerType(connectorType);
+        ConnectorConfigChecker checker = map.get(type);
+        Assert.notNull(checker, "Checker can not be null.");
+        checker.modify(connector, params);
+
+        // 获取表
+        setTable(connector);
+
+        // 修改基本配置
+        this.modifyConfigModel(connector, params);
+
+        return connector;
+    }
+
+    @Override
+    public ConfigModel checkEditConfigModel(Map<String, String> params) {
+        logger.info("checkEditConfigModel connector params:{}", params);
         Assert.notEmpty(params, "ConnectorChecker check params is null.");
         Assert.notEmpty(params, "ConnectorChecker check params is null.");
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         Connector connector = manager.getConnector(id);
         Connector connector = manager.getConnector(id);
@@ -57,7 +88,31 @@ public class ConnectorChecker extends AbstractChecker implements ApplicationCont
         Assert.notNull(checker, "Checker can not be null.");
         Assert.notNull(checker, "Checker can not be null.");
         checker.modify(connector, params);
         checker.modify(connector, params);
 
 
-        return JsonUtil.objToJson(connector);
+        // 获取表
+        setTable(connector);
+
+        return connector;
+    }
+
+    private void setConfig(Connector connector, String connectorType) {
+        Class<ConnectorConfig> configClass = (Class<ConnectorConfig>) ConnectorEnum.getConfigClass(connectorType);
+        Assert.notNull(configClass, String.format("不支持该连接器类型:%s", connectorType));
+        try {
+            ConnectorConfig config = configClass.newInstance();
+            config.setConnectorType(connectorType);
+            connector.setConfig(config);
+        } catch (Exception e) {
+            logger.error(e.getMessage());
+            throw new BizException("获取连接器配置异常.");
+        }
+    }
+
+    private void setTable(Connector connector) {
+        // 获取表信息
+        boolean alive = manager.alive(connector.getConfig());
+        Assert.isTrue(alive, "无法连接,请检查配置.");
+        List<String> table = manager.getTable(connector.getConfig());
+        connector.setTable(table);
     }
     }
 
 
 }
 }

+ 3 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlMysqlConfigChecker.java

@@ -22,15 +22,18 @@ public class DqlMysqlConfigChecker implements ConnectorConfigChecker {
         String password = params.get("password");
         String password = params.get("password");
         String url = params.get("url");
         String url = params.get("url");
         String sql = params.get("sql");
         String sql = params.get("sql");
+        String driverClassName = params.get("driverClassName");
         Assert.hasText(username, "DqlMysqlConfigChecker modify username is empty.");
         Assert.hasText(username, "DqlMysqlConfigChecker modify username is empty.");
         Assert.hasText(password, "DqlMysqlConfigChecker modify password is empty.");
         Assert.hasText(password, "DqlMysqlConfigChecker modify password is empty.");
         Assert.hasText(url, "DqlMysqlConfigChecker modify url is empty.");
         Assert.hasText(url, "DqlMysqlConfigChecker modify url is empty.");
         Assert.hasText(sql, "DqlMysqlConfigChecker modify sql is empty.");
         Assert.hasText(sql, "DqlMysqlConfigChecker modify sql is empty.");
+        Assert.hasText(driverClassName, "DqlMysqlConfigChecker modify driverClassName is empty.");
 
 
         DatabaseConfig config = (DatabaseConfig) connector.getConfig();
         DatabaseConfig config = (DatabaseConfig) connector.getConfig();
         config.setUsername(username);
         config.setUsername(username);
         config.setPassword(password);
         config.setPassword(password);
         config.setUrl(url);
         config.setUrl(url);
+        config.setDriverClassName(driverClassName);
         config.setSql(sql);
         config.setSql(sql);
     }
     }
 }
 }

+ 3 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/MysqlConfigChecker.java

@@ -21,13 +21,16 @@ public class MysqlConfigChecker implements ConnectorConfigChecker {
         String username = params.get("username");
         String username = params.get("username");
         String password = params.get("password");
         String password = params.get("password");
         String url = params.get("url");
         String url = params.get("url");
+        String driverClassName = params.get("driverClassName");
         Assert.hasText(username, "MysqlConfigChecker modify username is empty.");
         Assert.hasText(username, "MysqlConfigChecker modify username is empty.");
         Assert.hasText(password, "MysqlConfigChecker modify password is empty.");
         Assert.hasText(password, "MysqlConfigChecker modify password is empty.");
         Assert.hasText(url, "MysqlConfigChecker modify url is empty.");
         Assert.hasText(url, "MysqlConfigChecker modify url is empty.");
+        Assert.hasText(driverClassName, "MysqlConfigChecker modify driverClassName is empty.");
 
 
         DatabaseConfig config = (DatabaseConfig) connector.getConfig();
         DatabaseConfig config = (DatabaseConfig) connector.getConfig();
         config.setUsername(username);
         config.setUsername(username);
         config.setPassword(password);
         config.setPassword(password);
         config.setUrl(url);
         config.setUrl(url);
+        config.setDriverClassName(driverClassName);
     }
     }
 }
 }

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/DqlMysqlLogConfigChecker.java

@@ -9,7 +9,7 @@ import org.springframework.util.Assert;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
- * 检查增量MYSQL配置
+ * 检查增量DqlMysql配置
  *
  *
  * @author AE86
  * @author AE86
  * @version 1.0.0
  * @version 1.0.0

+ 29 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MappingChecker.java

@@ -5,9 +5,11 @@ import org.apache.commons.lang.math.NumberUtils;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.MappingConfigChecker;
 import org.dbsyncer.biz.checker.MappingConfigChecker;
 import org.dbsyncer.biz.util.CheckerTypeUtil;
 import org.dbsyncer.biz.util.CheckerTypeUtil;
-import org.dbsyncer.common.util.JsonUtil;
+import org.dbsyncer.listener.config.ListenerConfig;
+import org.dbsyncer.listener.enums.ListenerEnum;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.constant.ModelConstant;
 import org.dbsyncer.parser.constant.ModelConstant;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -42,8 +44,31 @@ public class MappingChecker extends AbstractChecker implements ApplicationContex
     }
     }
 
 
     @Override
     @Override
-    public String checkConfigModel(Map<String, String> params) {
-        logger.info("check mapping params:{}", params);
+    public ConfigModel checkAddConfigModel(Map<String, String> params) {
+        logger.info("checkAddConfigModel mapping params:{}", params);
+        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
+        String sourceConnectorId = params.get("sourceConnectorId");
+        String targetConnectorId = params.get("targetConnectorId");
+        Assert.hasText(name, "mapping name is empty.");
+        Assert.hasText(sourceConnectorId, "mapping sourceConnectorId is empty.");
+        Assert.hasText(targetConnectorId, "mapping targetConnectorId is empty.");
+
+        Mapping mapping = new Mapping();
+        mapping.setName(name);
+        mapping.setType(ConfigConstant.MAPPING);
+        mapping.setSourceConnectorId(sourceConnectorId);
+        mapping.setTargetConnectorId(targetConnectorId);
+        mapping.setModel(ModelConstant.FULL);
+        mapping.setListener(new ListenerConfig(ListenerEnum.TIMING.getCode()));
+
+        // 修改基本配置
+        this.modifyConfigModel(mapping, params);
+        return mapping;
+    }
+
+    @Override
+    public ConfigModel checkEditConfigModel(Map<String, String> params) {
+        logger.info("checkEditConfigModel mapping params:{}", params);
         Assert.notEmpty(params, "MappingChecker check params is null.");
         Assert.notEmpty(params, "MappingChecker check params is null.");
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         Mapping mapping = manager.getMapping(id);
         Mapping mapping = manager.getMapping(id);
@@ -78,7 +103,7 @@ public class MappingChecker extends AbstractChecker implements ApplicationContex
         this.modifySuperConfigModel(mapping, params);
         this.modifySuperConfigModel(mapping, params);
 
 
         // 增量配置
         // 增量配置
-        return JsonUtil.objToJson(mapping);
+        return mapping;
     }
     }
 
 
 }
 }

+ 61 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -1,11 +1,16 @@
 package org.dbsyncer.biz.checker.impl.tablegroup;
 package org.dbsyncer.biz.checker.impl.tablegroup;
 
 
+import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.AbstractChecker;
-import org.dbsyncer.common.util.JsonUtil;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.connector.config.Field;
+import org.dbsyncer.connector.config.MetaInfo;
+import org.dbsyncer.connector.config.Table;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.parser.model.FieldMapping;
+import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.json.JSONArray;
 import org.json.JSONArray;
@@ -36,8 +41,39 @@ public class TableGroupChecker extends AbstractChecker {
     private Manager manager;
     private Manager manager;
 
 
     @Override
     @Override
-    public String checkConfigModel(Map<String, String> params) {
-        logger.info("check tableGroup params:{}", params);
+    public ConfigModel checkAddConfigModel(Map<String, String> params) {
+        logger.info("checkAddConfigModel tableGroup params:{}", params);
+        String mappingId = params.get("mappingId");
+        String sourceTable = params.get("sourceTable");
+        String targetTable = params.get("targetTable");
+        Assert.hasText(mappingId, "tableGroup mappingId is empty.");
+        Assert.hasText(sourceTable, "tableGroup sourceTable is empty.");
+        Assert.hasText(targetTable, "tableGroup targetTable is empty.");
+        Mapping mapping = manager.getMapping(mappingId);
+        Assert.notNull(mapping, "mapping can not be null.");
+
+        // 检查是否存在重复映射关系
+        checkRepeatedTable(mappingId, sourceTable, targetTable);
+
+        // 读取表信息
+        Table sTable = getTable(mapping.getSourceConnectorId(), sourceTable);
+        Table tTable = getTable(mapping.getTargetConnectorId(), targetTable);
+
+        TableGroup tableGroup = new TableGroup();
+        tableGroup.setName(ConfigConstant.TABLE_GROUP);
+        tableGroup.setType(ConfigConstant.TABLE_GROUP);
+        tableGroup.setMappingId(mappingId);
+        tableGroup.setSourceTable(sTable);
+        tableGroup.setTargetTable(tTable);
+
+        // 修改基本配置
+        this.modifyConfigModel(mapping, params);
+        return tableGroup;
+    }
+
+    @Override
+    public ConfigModel checkEditConfigModel(Map<String, String> params) {
+        logger.info("checkEditConfigModel tableGroup params:{}", params);
         Assert.notEmpty(params, "TableGroupChecker check params is null.");
         Assert.notEmpty(params, "TableGroupChecker check params is null.");
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         TableGroup tableGroup = manager.getTableGroup(id);
         TableGroup tableGroup = manager.getTableGroup(id);
@@ -54,7 +90,28 @@ public class TableGroupChecker extends AbstractChecker {
         // 修改高级配置:过滤条件/转换配置/插件配置
         // 修改高级配置:过滤条件/转换配置/插件配置
         this.modifySuperConfigModel(tableGroup, params);
         this.modifySuperConfigModel(tableGroup, params);
 
 
-        return JsonUtil.objToJson(tableGroup);
+        return tableGroup;
+    }
+
+    private Table getTable(String connectorId, String tableName) {
+        MetaInfo metaInfo = manager.getMetaInfo(connectorId, tableName);
+        Assert.notNull(metaInfo, "无法获取连接信息.");
+        return new Table().setName(tableName).setColumn(metaInfo.getColumn());
+    }
+
+    private void checkRepeatedTable(String mappingId, String sourceTable, String targetTable) {
+        List<TableGroup> list = manager.getTableGroupAll(mappingId);
+        if (!CollectionUtils.isEmpty(list)) {
+            for (TableGroup g : list) {
+                // 数据源表和目标表都存在
+                if (StringUtils.equals(sourceTable, g.getSourceTable().getName()) && StringUtils.equals(targetTable,
+                        g.getTargetTable().getName())) {
+                    final String error = String.format("映射关系[%s]>>[%s]已存在.", sourceTable, targetTable);
+                    logger.error(error);
+                    throw new BizException(error);
+                }
+            }
+        }
     }
     }
 
 
     /**
     /**

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

@@ -4,6 +4,7 @@ import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.ConnectorService;
 import org.dbsyncer.biz.ConnectorService;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Connector;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -31,21 +32,20 @@ public class ConnectorServiceImpl implements ConnectorService {
     private Checker connectorChecker;
     private Checker connectorChecker;
 
 
     @Override
     @Override
-    public boolean alive(String json) {
-        logger.info("alive:{}", json);
-        return manager.alive(json);
+    public boolean alive(Map<String, String> params) {
+        return manager.alive(null);
     }
     }
 
 
     @Override
     @Override
-    public String add(String json) {
-        logger.info("add:{}", json);
-        return manager.addConnector(json);
+    public String add(Map<String, String> params) {
+        ConfigModel model = connectorChecker.checkAddConfigModel(params);
+        return manager.addConnector(model);
     }
     }
 
 
     @Override
     @Override
     public String edit(Map<String, String> params) {
     public String edit(Map<String, String> params) {
-        String json = connectorChecker.checkConfigModel(params);
-        return manager.editConnector(json);
+        ConfigModel model = connectorChecker.checkEditConfigModel(params);
+        return manager.editConnector(model);
     }
     }
 
 
     @Override
     @Override

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

@@ -4,12 +4,11 @@ import org.dbsyncer.biz.MappingService;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.vo.MappingVo;
 import org.dbsyncer.biz.vo.MappingVo;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.CollectionUtils;
-import org.dbsyncer.common.util.JsonUtil;
-import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.listener.config.ListenerConfig;
 import org.dbsyncer.listener.config.ListenerConfig;
 import org.dbsyncer.listener.enums.ListenerEnum;
 import org.dbsyncer.listener.enums.ListenerEnum;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.constant.ModelConstant;
 import org.dbsyncer.parser.constant.ModelConstant;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
@@ -42,29 +41,15 @@ public class MappingServiceImpl implements MappingService {
 
 
     @Override
     @Override
     public String add(Map<String, String> params) {
     public String add(Map<String, String> params) {
-        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
-        String sourceConnectorId = params.get("sourceConnectorId");
-        String targetConnectorId = params.get("targetConnectorId");
-        Assert.hasText(name, "mapping name is empty.");
-        Assert.hasText(sourceConnectorId, "mapping sourceConnectorId is empty.");
-        Assert.hasText(targetConnectorId, "mapping targetConnectorId is empty.");
-
-        Mapping mapping = new Mapping();
-        mapping.setName(name);
-        mapping.setSourceConnectorId(sourceConnectorId);
-        mapping.setTargetConnectorId(targetConnectorId);
-
-        mapping.setModel(ModelConstant.FULL);
-        mapping.setListener(new ListenerConfig(ListenerEnum.TIMING.getCode()));
-        String json = JsonUtil.objToJson(mapping);
-        return manager.addMapping(json);
+        ConfigModel model = mappingChecker.checkAddConfigModel(params);
+        return manager.addMapping(model);
     }
     }
 
 
     @Override
     @Override
     public String edit(Map<String, String> params) {
     public String edit(Map<String, String> params) {
         logger.info("检查驱动是否停止运行");
         logger.info("检查驱动是否停止运行");
-        String json = mappingChecker.checkConfigModel(params);
-        return manager.editMapping(json);
+        ConfigModel model = mappingChecker.checkEditConfigModel(params);
+        return manager.editMapping(model);
     }
     }
 
 
     @Override
     @Override

+ 27 - 69
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/TableGroupServiceImpl.java

@@ -1,16 +1,11 @@
 package org.dbsyncer.biz.impl;
 package org.dbsyncer.biz.impl;
 
 
-import com.sun.org.apache.xpath.internal.operations.Bool;
-import org.apache.commons.lang.StringUtils;
-import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.TableGroupService;
 import org.dbsyncer.biz.TableGroupService;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.CollectionUtils;
-import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.connector.config.Field;
-import org.dbsyncer.connector.config.MetaInfo;
-import org.dbsyncer.connector.config.Table;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -19,10 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
 /**
  * @author AE86
  * @author AE86
@@ -42,37 +34,19 @@ public class TableGroupServiceImpl implements TableGroupService {
 
 
     @Override
     @Override
     public String add(Map<String, String> params) {
     public String add(Map<String, String> params) {
+        ConfigModel model = tableGroupChecker.checkAddConfigModel(params);
+        String id = manager.addTableGroup(model);
+
         String mappingId = params.get("mappingId");
         String mappingId = params.get("mappingId");
-        String sourceTable = params.get("sourceTable");
-        String targetTable = params.get("targetTable");
         Assert.hasText(mappingId, "tableGroup mappingId is empty.");
         Assert.hasText(mappingId, "tableGroup mappingId is empty.");
-        Assert.hasText(sourceTable, "tableGroup sourceTable is empty.");
-        Assert.hasText(targetTable, "tableGroup targetTable is empty.");
-        Mapping mapping = manager.getMapping(mappingId);
-        Assert.notNull(mapping, "mapping can not be null.");
-
-        // 检查是否存在重复映射关系
-        checkRepeatedTable(mappingId, sourceTable, targetTable);
-
-        // 读取表信息
-        TableGroup tableGroup = new TableGroup();
-        tableGroup.setMappingId(mappingId);
-        Table sTable = getTable(mapping.getSourceConnectorId(), sourceTable);
-        Table tTable = getTable(mapping.getTargetConnectorId(), targetTable);
-        tableGroup.setSourceTable(sTable);
-        tableGroup.setTargetTable(tTable);
-
-        // 合并驱动公共字段
-        mergeMappingColumn(mapping, sTable.getColumn(), tTable.getColumn());
-
-        String json = JsonUtil.objToJson(tableGroup);
-        return manager.addTableGroup(json);
+        mergeMappingColumn(mappingId);
+        return id;
     }
     }
 
 
     @Override
     @Override
     public String edit(Map<String, String> params) {
     public String edit(Map<String, String> params) {
-        String json = tableGroupChecker.checkConfigModel(params);
-        return manager.editTableGroup(json);
+        ConfigModel model = tableGroupChecker.checkEditConfigModel(params);
+        return manager.editTableGroup(model);
     }
     }
 
 
     @Override
     @Override
@@ -81,14 +55,7 @@ public class TableGroupServiceImpl implements TableGroupService {
         Assert.notNull(tableGroup, "tableGroup can not be null.");
         Assert.notNull(tableGroup, "tableGroup can not be null.");
 
 
         manager.removeTableGroup(id);
         manager.removeTableGroup(id);
-        Mapping mapping = manager.getMapping(tableGroup.getMappingId());
-        Assert.notNull(mapping, "mapping not exist.");
-
-        // 合并驱动公共字段
-        Table sTable = tableGroup.getSourceTable();
-        Table tTable = tableGroup.getTargetTable();
-        mergeMappingColumn(mapping, sTable.getColumn(), tTable.getColumn());
-
+        mergeMappingColumn(tableGroup.getMappingId());
         return true;
         return true;
     }
     }
 
 
@@ -104,42 +71,33 @@ public class TableGroupServiceImpl implements TableGroupService {
         return manager.getTableGroupAll(mappingId);
         return manager.getTableGroupAll(mappingId);
     }
     }
 
 
-    private Table getTable(String connectorId, String tableName) {
-        MetaInfo metaInfo = manager.getMetaInfo(connectorId, tableName);
-        Assert.notNull(metaInfo, "无法获取连接信息.");
-        return new Table().setName(tableName).setColumn(metaInfo.getColumn());
-    }
+    private void mergeMappingColumn(String mappingId) {
+        List<TableGroup> groups = manager.getTableGroupAll(mappingId);
 
 
-    private void checkRepeatedTable(String mappingId, String sourceTable, String targetTable) {
-        List<TableGroup> list = manager.getTableGroupAll(mappingId);
-        if (!CollectionUtils.isEmpty(list)) {
-            for (TableGroup g : list) {
-                // 数据源表和目标表都存在
-                if(StringUtils.equals(sourceTable, g.getSourceTable().getName()) && StringUtils.equals(targetTable, g.getTargetTable().getName())){
-                    final String error = String.format("映射关系[%s]>>[%s]已存在.", sourceTable, targetTable);
-                    logger.error(error);
-                    throw new BizException(error);
-                }
-            }
+        Mapping mapping = manager.getMapping(mappingId);
+        Assert.notNull(mapping, "mapping not exist.");
+
+        List<Field> sourceColumn = null;
+        List<Field> targetColumn = null;
+        for (TableGroup g : groups) {
+            sourceColumn = pickCommonFields(sourceColumn, g.getSourceTable().getColumn());
+            targetColumn = pickCommonFields(targetColumn, g.getTargetTable().getColumn());
         }
         }
-    }
 
 
-    private void mergeMappingColumn(Mapping mapping, List<Field> sColumn, List<Field> tColumn) {
-        mapping.setSourceColumn(pickCommonFields(mapping.getSourceColumn(), sColumn));
-        mapping.setTargetColumn(pickCommonFields(mapping.getTargetColumn(), tColumn));
-        String json = JsonUtil.objToJson(mapping);
-        manager.editMapping(json);
+        mapping.setSourceColumn(sourceColumn);
+        mapping.setTargetColumn(targetColumn);
+        manager.editMapping(mapping);
     }
     }
 
 
     private List<Field> pickCommonFields(List<Field> column, List<Field> target) {
     private List<Field> pickCommonFields(List<Field> column, List<Field> target) {
-        if(CollectionUtils.isEmpty(column) || CollectionUtils.isEmpty(target)){
+        if (CollectionUtils.isEmpty(column) || CollectionUtils.isEmpty(target)) {
             return target;
             return target;
         }
         }
         List<Field> list = new ArrayList<>();
         List<Field> list = new ArrayList<>();
-        Map<String, Boolean> map = new HashMap<>(column.size());
-        column.forEach(f -> map.putIfAbsent(f.getName(), true));
+        Set<String> keys = new HashSet<>(column.size());
+        column.forEach(f -> keys.add(f.getName()));
         target.forEach(f -> {
         target.forEach(f -> {
-            if(map.get(f.getName())){
+            if (keys.contains(f.getName())) {
                 list.add(f);
                 list.add(f);
             }
             }
         });
         });

+ 11 - 7
dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java

@@ -1,10 +1,12 @@
 package org.dbsyncer.manager;
 package org.dbsyncer.manager;
 
 
+import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
+import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
@@ -19,14 +21,16 @@ import java.util.List;
  */
  */
 public interface Manager {
 public interface Manager {
 
 
-    boolean alive(String json);
+    boolean alive(ConnectorConfig config);
+
+    List<String> getTable(ConnectorConfig config);
 
 
     MetaInfo getMetaInfo(String connectorId, String tableName);
     MetaInfo getMetaInfo(String connectorId, String tableName);
 
 
     // Connector
     // Connector
-    String addConnector(String json);
+    String addConnector(ConfigModel model);
 
 
-    String editConnector(String json);
+    String editConnector(ConfigModel model);
 
 
     void removeConnector(String connectorId);
     void removeConnector(String connectorId);
 
 
@@ -35,9 +39,9 @@ public interface Manager {
     List<Connector> getConnectorAll();
     List<Connector> getConnectorAll();
 
 
     // Mapping
     // Mapping
-    String addMapping(String json);
+    String addMapping(ConfigModel model);
 
 
-    String editMapping(String json);
+    String editMapping(ConfigModel model);
 
 
     void removeMapping(String mappingId);
     void removeMapping(String mappingId);
 
 
@@ -46,9 +50,9 @@ public interface Manager {
     List<Mapping> getMappingAll();
     List<Mapping> getMappingAll();
 
 
     // TableGroup
     // TableGroup
-    String addTableGroup(String json);
+    String addTableGroup(ConfigModel model);
 
 
-    String editTableGroup(String json);
+    String editTableGroup(ConfigModel model);
 
 
     void removeTableGroup(String tableGroupId);
     void removeTableGroup(String tableGroupId);
 
 

+ 23 - 47
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.manager;
 package org.dbsyncer.manager;
 
 
+import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
@@ -54,8 +55,13 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     private GroupStrategy tableGroupStrategy;
     private GroupStrategy tableGroupStrategy;
 
 
     @Override
     @Override
-    public boolean alive(String json) {
-        return parser.alive(json);
+    public boolean alive(ConnectorConfig config) {
+        return parser.alive(config);
+    }
+
+    @Override
+    public List<String> getTable(ConnectorConfig config) {
+        return parser.getTable(config);
     }
     }
 
 
     @Override
     @Override
@@ -64,13 +70,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String addConnector(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseConnector(json);
-            }
+    public String addConnector(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -86,13 +87,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String editConnector(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseConnector(json);
-            }
+    public String editConnector(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -144,13 +140,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String addMapping(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseMapping(json);
-            }
+    public String addMapping(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -166,13 +157,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String editMapping(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseMapping(json);
-            }
+    public String editMapping(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -225,13 +211,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String addTableGroup(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseTableGroup(json);
-            }
+    public String addTableGroup(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -247,13 +228,8 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     }
     }
 
 
     @Override
     @Override
-    public String editTableGroup(String json) {
-        return operationTemplate.execute(new OperationTemplate() {
-
-            @Override
-            public ConfigModel parseConfigModel() {
-                return parser.parseTableGroup(json);
-            }
+    public String editTableGroup(ConfigModel model) {
+        return operationTemplate.execute(model, new OperationTemplate() {
 
 
             @Override
             @Override
             public void handleEvent(ConfigOperationTemplate.Call call) {
             public void handleEvent(ConfigOperationTemplate.Call call) {
@@ -358,7 +334,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public ConfigModel parseModel(String json) {
             public ConfigModel parseModel(String json) {
-                return parser.parseConnector(json, false);
+                return parser.parseConnector(json);
             }
             }
         });
         });
 
 
@@ -377,7 +353,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public ConfigModel parseModel(String json) {
             public ConfigModel parseModel(String json) {
-                return parser.parseMapping(json, false);
+                return parser.parseMapping(json);
             }
             }
         });
         });
 
 
@@ -396,7 +372,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public ConfigModel parseModel(String json) {
             public ConfigModel parseModel(String json) {
-                return parser.parseTableGroup(json, false);
+                return parser.parseTableGroup(json);
             }
             }
         });
         });
     }
     }

+ 0 - 2
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/OperationTemplate.java

@@ -12,8 +12,6 @@ import org.dbsyncer.parser.model.ConfigModel;
  */
  */
 public interface OperationTemplate extends BaseTemplate {
 public interface OperationTemplate extends BaseTemplate {
 
 
-    ConfigModel parseConfigModel();
-
     void handleEvent(ConfigOperationTemplate.Call call);
     void handleEvent(ConfigOperationTemplate.Call call);
 
 
 }
 }

+ 1 - 2
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/ConfigOperationTemplate.java

@@ -60,9 +60,8 @@ public class ConfigOperationTemplate {
         return (T) cacheService.get(id);
         return (T) cacheService.get(id);
     }
     }
 
 
-    public String execute(OperationTemplate operationTemplate) {
+    public String execute(ConfigModel model, OperationTemplate operationTemplate) {
         // 1、解析配置
         // 1、解析配置
-        ConfigModel model = operationTemplate.parseConfigModel();
         Assert.notNull(model, "ConfigModel can not be null.");
         Assert.notNull(model, "ConfigModel can not be null.");
         String id = model.getId();
         String id = model.getId();
         logger.info("Parse config model id:{}", id);
         logger.info("Parse config model id:{}", id);

+ 11 - 29
dbsyncer-parser/src/main/java/org/dbsyncer/parser/Parser.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.parser;
 package org.dbsyncer.parser;
 
 
+import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
@@ -21,36 +22,35 @@ public interface Parser {
     /**
     /**
      * 解析连接器配置是否可用
      * 解析连接器配置是否可用
      *
      *
-     * @param json
+     * @param config
      * @return
      * @return
      */
      */
-    boolean alive(String json);
+    boolean alive(ConnectorConfig config);
 
 
     /**
     /**
-     * 获取表元信息
+     * 获取连接器
      *
      *
-     * @param connectorId
-     * @param tableName
+     * @param config
      * @return
      * @return
      */
      */
-    MetaInfo getMetaInfo(String connectorId, String tableName);
+    List<String> getTable(ConnectorConfig config);
 
 
     /**
     /**
-     * 解析连接器配置为Connector
+     * 获取表元信息
      *
      *
-     * @param json
+     * @param connectorId
+     * @param tableName
      * @return
      * @return
      */
      */
-    Connector parseConnector(String json);
+    MetaInfo getMetaInfo(String connectorId, String tableName);
 
 
     /**
     /**
      * 解析连接器配置为Connector
      * 解析连接器配置为Connector
      *
      *
      * @param json
      * @param json
-     * @param checkAlive
      * @return
      * @return
      */
      */
-    Connector parseConnector(String json, boolean checkAlive);
+    Connector parseConnector(String json);
 
 
     /**
     /**
      * 解析驱动映射关系配置为Mapping
      * 解析驱动映射关系配置为Mapping
@@ -60,15 +60,6 @@ public interface Parser {
      */
      */
     Mapping parseMapping(String json);
     Mapping parseMapping(String json);
 
 
-    /**
-     * 解析驱动映射关系配置为Mapping
-     *
-     * @param json
-     * @param checkAlive
-     * @return
-     */
-    Mapping parseMapping(String json, boolean checkAlive);
-
     /**
     /**
      * 解析表映射关系
      * 解析表映射关系
      *
      *
@@ -77,15 +68,6 @@ public interface Parser {
      */
      */
     TableGroup parseTableGroup(String json);
     TableGroup parseTableGroup(String json);
 
 
-    /**
-     * 解析表映射关系
-     *
-     * @param json
-     * @param checkAlive
-     * @return
-     */
-    TableGroup parseTableGroup(String json, boolean checkAlive);
-
     /**
     /**
      * 获取所有连接器类型
      * 获取所有连接器类型
      *
      *

+ 14 - 87
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ParserFactory.java

@@ -9,15 +9,12 @@ import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
-import org.dbsyncer.listener.config.ListenerConfig;
-import org.dbsyncer.listener.enums.ListenerEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.storage.SnowflakeIdWorker;
 import org.dbsyncer.storage.SnowflakeIdWorker;
-import org.dbsyncer.storage.constant.ConfigConstant;
 import org.json.JSONException;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -49,22 +46,13 @@ public class ParserFactory implements Parser {
     private SnowflakeIdWorker snowflakeIdWorker;
     private SnowflakeIdWorker snowflakeIdWorker;
 
 
     @Override
     @Override
-    public boolean alive(String json) {
-        ConnectorConfig config;
-        try {
-            JSONObject configObj = new JSONObject(json);
-            String connectorType = configObj.getString("connectorType");
-            Class<?> configClass = ConnectorEnum.getConfigClass(connectorType);
-            Object obj = JsonUtil.jsonToObj(configObj.toString(), configClass);
-            Assert.notNull(obj, "ConnectorConfig is invalid.");
-            config = (ConnectorConfig) obj;
-            config.setConnectorType(connectorType);
-            Assert.notNull(config, "ConnectorConfig can not be null.");
-            return connectorFactory.isAlive(config);
-        } catch (Exception e) {
-            logger.error(e.getMessage());
-            throw new ParserException(e.getMessage());
-        }
+    public boolean alive(ConnectorConfig config) {
+        return connectorFactory.isAlive(config);
+    }
+
+    @Override
+    public List<String> getTable(ConnectorConfig config) {
+        return connectorFactory.getTable(config);
     }
     }
 
 
     @Override
     @Override
@@ -75,108 +63,46 @@ public class ParserFactory implements Parser {
 
 
     @Override
     @Override
     public Connector parseConnector(String json) {
     public Connector parseConnector(String json) {
-        return parseConnector(json, true);
-    }
-
-    @Override
-    public Connector parseConnector(String json, boolean checkAlive) {
-        // 1、Json串转Bean
-        Connector connector = null;
         try {
         try {
             JSONObject conn = new JSONObject(json);
             JSONObject conn = new JSONObject(json);
             JSONObject config = (JSONObject) conn.remove("config");
             JSONObject config = (JSONObject) conn.remove("config");
-            connector = JsonUtil.jsonToObj(conn.toString(), Connector.class);
+            Connector connector = JsonUtil.jsonToObj(conn.toString(), Connector.class);
             Assert.notNull(connector, "Connector can not be null.");
             Assert.notNull(connector, "Connector can not be null.");
             String connectorType = config.getString("connectorType");
             String connectorType = config.getString("connectorType");
             Class<?> configClass = ConnectorEnum.getConfigClass(connectorType);
             Class<?> configClass = ConnectorEnum.getConfigClass(connectorType);
             ConnectorConfig obj = (ConnectorConfig) JsonUtil.jsonToObj(config.toString(), configClass);
             ConnectorConfig obj = (ConnectorConfig) JsonUtil.jsonToObj(config.toString(), configClass);
             connector.setConfig(obj);
             connector.setConfig(obj);
+            return connector;
         } catch (JSONException e) {
         } catch (JSONException e) {
             logger.error(e.getMessage());
             logger.error(e.getMessage());
             throw new ParserException(e.getMessage());
             throw new ParserException(e.getMessage());
         }
         }
-
-        if (!checkAlive) {
-            return connector;
-        }
-
-        // 2、验证连接是否可用
-        ConnectorConfig config = connector.getConfig();
-        if (!connectorFactory.isAlive(config)) {
-            throw new ParserException("无法连接,请检查服务是否正常.");
-        }
-
-        // 3、config
-        List<String> table = connectorFactory.getTable(config);
-        connector.setTable(table);
-        setConfigModel(connector, ConfigConstant.CONNECTOR);
-        return connector;
     }
     }
 
 
     @Override
     @Override
     public Mapping parseMapping(String json) {
     public Mapping parseMapping(String json) {
-        return parseMapping(json, true);
-    }
-
-    @Override
-    public Mapping parseMapping(String json, boolean checkAlive) {
-        // 1、Json串转Bean
-        Mapping mapping = null;
         try {
         try {
             JSONObject map = new JSONObject(json);
             JSONObject map = new JSONObject(json);
-            mapping = JsonUtil.jsonToObj(map.toString(), Mapping.class);
+            Mapping mapping = JsonUtil.jsonToObj(map.toString(), Mapping.class);
             Assert.notNull(mapping, "Mapping can not be null.");
             Assert.notNull(mapping, "Mapping can not be null.");
+            return mapping;
         } catch (JSONException e) {
         } catch (JSONException e) {
             logger.error(e.getMessage());
             logger.error(e.getMessage());
             throw new ParserException(e.getMessage());
             throw new ParserException(e.getMessage());
         }
         }
-
-        if (!checkAlive) {
-            return mapping;
-        }
-
-        // 2、验证连接是否可用
-        aliveConnector(mapping.getSourceConnectorId());
-        aliveConnector(mapping.getTargetConnectorId());
-
-        // 3、config
-        setConfigModel(mapping, ConfigConstant.MAPPING);
-        return mapping;
     }
     }
 
 
     @Override
     @Override
     public TableGroup parseTableGroup(String json) {
     public TableGroup parseTableGroup(String json) {
-        return parseTableGroup(json, true);
-    }
-
-    @Override
-    public TableGroup parseTableGroup(String json, boolean checkAlive) {
-        // 1、Json串转Bean
-        TableGroup tableGroup = null;
         try {
         try {
             JSONObject conn = new JSONObject(json);
             JSONObject conn = new JSONObject(json);
-            tableGroup = JsonUtil.jsonToObj(conn.toString(), TableGroup.class);
+            TableGroup tableGroup = JsonUtil.jsonToObj(conn.toString(), TableGroup.class);
             Assert.notNull(tableGroup, "TableGroup can not be null.");
             Assert.notNull(tableGroup, "TableGroup can not be null.");
+            return tableGroup;
         } catch (JSONException e) {
         } catch (JSONException e) {
             logger.error(e.getMessage());
             logger.error(e.getMessage());
             throw new ParserException(e.getMessage());
             throw new ParserException(e.getMessage());
         }
         }
-
-        if (!checkAlive) {
-            return tableGroup;
-        }
-
-        // 2、验证驱动配置是否存在
-        String mappingId = tableGroup.getMappingId();
-        Assert.hasText(mappingId, "MappingId can not be empty.");
-        Mapping mapping = cacheService.get(mappingId, Mapping.class);
-        Assert.notNull(mapping, "Mapping can not be null.");
-
-        // 3、config
-        String name = tableGroup.getName();
-        tableGroup.setName(StringUtils.isEmpty(name) ? ConfigConstant.TABLE_GROUP : name);
-        setConfigModel(tableGroup, ConfigConstant.TABLE_GROUP);
-        return tableGroup;
     }
     }
 
 
     @Override
     @Override
@@ -213,6 +139,7 @@ public class ParserFactory implements Parser {
 
 
     /**
     /**
      * 获取连接配置
      * 获取连接配置
+     *
      * @param connectorId
      * @param connectorId
      * @return
      * @return
      */
      */

+ 6 - 4
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/ConnectorController.java

@@ -41,9 +41,10 @@ public class ConnectorController extends BaseController {
 
 
     @PostMapping(value = "/alive")
     @PostMapping(value = "/alive")
     @ResponseBody
     @ResponseBody
-    public RestResult alive(HttpServletRequest request, @RequestParam(value = "json") String json) {
+    public RestResult alive(HttpServletRequest request) {
         try {
         try {
-            return RestResult.restSuccess(connectorService.alive(json));
+            Map<String, String> params = getParams(request);
+            return RestResult.restSuccess(connectorService.alive(params));
         } catch (Exception e) {
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e.getClass());
             logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
             return RestResult.restFail(e.getMessage());
@@ -52,9 +53,10 @@ public class ConnectorController extends BaseController {
 
 
     @PostMapping("/add")
     @PostMapping("/add")
     @ResponseBody
     @ResponseBody
-    public RestResult add(HttpServletRequest request, @RequestParam(value = "json") String json) {
+    public RestResult add(HttpServletRequest request) {
         try {
         try {
-            return RestResult.restSuccess(connectorService.add(json));
+            Map<String, String> params = getParams(request);
+            return RestResult.restSuccess(connectorService.add(params));
         } catch (Exception e) {
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e.getClass());
             logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
             return RestResult.restFail(e.getMessage());

+ 3 - 9
dbsyncer-web/src/main/resources/static/js/connector/add.js

@@ -1,5 +1,5 @@
-function submit(connector) {
-    doPoster("/connector/add", {"json": JSON.stringify(connector)}, function (data) {
+function submit(data) {
+    doPoster("/connector/add", data, function (data) {
         if (data.success == true) {
         if (data.success == true) {
             bootGrowl("新增连接器成功!", "success");
             bootGrowl("新增连接器成功!", "success");
             backIndexPage();
             backIndexPage();
@@ -13,13 +13,7 @@ var check = function () {
     var $form = $("#connectorAddForm");
     var $form = $("#connectorAddForm");
     if ($form.formValidate() == true) {
     if ($form.formValidate() == true) {
         var data = $form.serializeJson();
         var data = $form.serializeJson();
-        var connector = {
-            "type": "connector",
-            "name": data.name,
-            "config": data
-        }
-        delete connector.config.name;
-        submit(connector);
+        submit(data);
     }
     }
 };
 };
 
 

+ 2 - 2
dbsyncer-web/src/main/resources/templates/connector/addDqlMysql.html

@@ -16,7 +16,7 @@
     <div class="form-group">
     <div class="form-group">
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
         <div class="col-sm-10">
-            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">[[${connector?.config?.sql}]]</textarea>
+            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
         </div>
         </div>
     </div>
     </div>
     <div class="form-group">
     <div class="form-group">
@@ -27,7 +27,7 @@
     <div class="form-group">
     <div class="form-group">
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
         <div class="col-sm-10">
-            <textarea name="url" class="form-control" maxlength="128" dbsyncer-valid="require" rows="5">[[${connector?.config?.url}]]</textarea>
+            <textarea name="url" class="form-control" maxlength="128" dbsyncer-valid="require" rows="5" th:text="${connector?.config?.url}?:'jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF8&amp;useSSL=true'"></textarea>
         </div>
         </div>
     </div>
     </div>
     <div class="form-group">
     <div class="form-group">

+ 2 - 2
dbsyncer-web/src/main/resources/templates/connector/addDqlOracle.html

@@ -16,7 +16,7 @@
     <div class="form-group">
     <div class="form-group">
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
         <div class="col-sm-10">
-            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">[[${connector?.config?.sql}]]</textarea>
+            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
         </div>
         </div>
     </div>
     </div>
     <div class="form-group">
     <div class="form-group">
@@ -27,7 +27,7 @@
     <div class="form-group">
     <div class="form-group">
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
         <div class="col-sm-10">
-            <textarea name="url" class="form-control" maxlength="512" dbsyncer-valid="require" rows="5">[[${connector?.config?.url}]]</textarea>
+            <textarea name="url" class="form-control" maxlength="512" dbsyncer-valid="require" rows="5" th:text="${connector?.config?.url}?:'jdbc:oracle:thin:@127.0.0.1:1521:ORCL'"></textarea>
         </div>
         </div>
     </div>
     </div>
     <div class="form-group">
     <div class="form-group">