AE86 4 anos atrás
pai
commit
afbfd5750d

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

@@ -1,7 +1,10 @@
 package org.dbsyncer.biz.checker;
 
+import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.parser.model.Connector;
+import org.dbsyncer.parser.model.Mapping;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -11,6 +14,15 @@ import java.util.Map;
  */
 public interface ConnectorConfigChecker {
 
+    /**
+     * 设置默认字段
+     *
+     * @param mapping
+     * @param column
+     * @param isSourceTable
+     */
+    default void updateFields(Mapping mapping, List<Field> column, boolean isSourceTable) {}
+
     /**
      * 修改配置
      *

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DataBaseConfigChecker.java

@@ -13,7 +13,7 @@ import java.util.Map;
  * @version 1.0.0
  * @date 2020/1/8 15:17
  */
-public abstract class DataBaseConfigChecker implements ConnectorConfigChecker {
+public abstract class AbstractDataBaseConfigChecker implements ConnectorConfigChecker {
 
     @Override
     public void modify(Connector connector, Map<String, String> params) {

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

@@ -11,7 +11,7 @@ import java.util.Map;
  * @date 2020/1/8 15:17
  */
 @Component
-public class DqlMysqlConfigChecker extends DataBaseConfigChecker {
+public class DqlMysqlConfigChecker extends AbstractDataBaseConfigChecker {
 
     @Override
     public void modify(Connector connector, Map<String, String> params) {

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlOracleConfigChecker.java

@@ -11,7 +11,7 @@ import java.util.Map;
  * @date 2020/1/8 15:17
  */
 @Component
-public class DqlOracleConfigChecker extends DataBaseConfigChecker {
+public class DqlOracleConfigChecker extends AbstractDataBaseConfigChecker {
 
     @Override
     public void modify(Connector connector, Map<String, String> params) {

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

@@ -8,6 +8,6 @@ import org.springframework.stereotype.Component;
  * @date 2020/1/8 15:17
  */
 @Component
-public class MysqlConfigChecker extends DataBaseConfigChecker {
+public class OracleConfigChecker extends AbstractDataBaseConfigChecker {
 
 }

+ 33 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/OracleConfigChecker.java

@@ -1,13 +1,45 @@
 package org.dbsyncer.biz.checker.impl.connector;
 
+import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.connector.config.Field;
+import org.dbsyncer.parser.model.Mapping;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author AE86
  * @version 1.0.0
  * @date 2020/1/8 15:17
  */
 @Component
-public class OracleConfigChecker extends DataBaseConfigChecker {
+public class OracleConfigChecker extends AbstractDataBaseConfigChecker {
+
+    @Override
+    public void updateFields(Mapping mapping, List<Field> column, boolean isSourceTable) {
+        String rowId = "DBSYNCER_ROWID";
+
+        // TODO source   Oralce >> Oracle   Oralce >> Mysql   Mysql >> Oracle
+        if(isSourceTable) {
+            String rowIdName = rowId;
+            List<Field> list = new ArrayList<>();
+            list.add(new Field(rowIdName, "VARCHAR2",12, CollectionUtils.isEmpty(column)));
+            list.addAll(column);
+            column.clear();
+            column.addAll(list);
+            return;
+        }
 
+        // mapping 配置全局目标源ROWID名称
+        // Target
+        // Oracle 默认加上ROWID名称,设置为唯一主键
+        String rowIdName = rowId;
+        List<Field> list = new ArrayList<>();
+        list.add(new Field(rowIdName, "VARCHAR2",12, true));
+        column.parallelStream().forEach(f -> f.setPk(false));
+        list.addAll(column);
+        column.clear();
+        column.addAll(list);
+    }
 }

+ 16 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -3,7 +3,9 @@ package org.dbsyncer.biz.checker.impl.tablegroup;
 import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.checker.AbstractChecker;
+import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.config.Table;
@@ -39,6 +41,9 @@ public class TableGroupChecker extends AbstractChecker {
     @Autowired
     private Manager manager;
 
+    @Autowired
+    private Map<String, ConnectorConfigChecker> map;
+
     @Override
     public ConfigModel checkAddConfigModel(Map<String, String> params) {
         logger.info("params:{}", params);
@@ -59,8 +64,8 @@ public class TableGroupChecker extends AbstractChecker {
         tableGroup.setName(ConfigConstant.TABLE_GROUP);
         tableGroup.setType(ConfigConstant.TABLE_GROUP);
         tableGroup.setMappingId(mappingId);
-        tableGroup.setSourceTable(getTable(mapping.getSourceConnectorId(), sourceTable));
-        tableGroup.setTargetTable(getTable(mapping.getTargetConnectorId(), targetTable));
+        tableGroup.setSourceTable(getTable(mapping, sourceTable, true));
+        tableGroup.setTargetTable(getTable(mapping, targetTable, false));
 
         // 修改基本配置
         this.modifyConfigModel(tableGroup, params);
@@ -112,9 +117,17 @@ public class TableGroupChecker extends AbstractChecker {
         tableGroup.getSourceTable().setCount(count);
     }
 
-    private Table getTable(String connectorId, String tableName) {
+    private Table getTable(Mapping mapping, String tableName, boolean isSourceTable) {
+        String connectorId = isSourceTable ? mapping.getSourceConnectorId() : mapping.getTargetConnectorId();
         MetaInfo metaInfo = manager.getMetaInfo(connectorId, tableName);
         Assert.notNull(metaInfo, "无法获取连接器表信息.");
+
+        String connectorType = manager.getConnector(connectorId).getConfig().getConnectorType();
+        String type = StringUtil.toLowerCaseFirstOne(connectorType).concat("ConfigChecker");
+        ConnectorConfigChecker checker = map.get(type);
+        Assert.notNull(checker, "Checker can not be null.");
+        // TODO 暂时实现
+        //checker.updateFields(mapping, metaInfo.getColumn(), isSourceTable);
         return new Table().setName(tableName).setColumn(metaInfo.getColumn());
     }
 

+ 16 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/Field.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.connector.config;
 
+import com.alibaba.fastjson.annotation.JSONField;
 import org.dbsyncer.common.util.JsonUtil;
 
 /**
@@ -31,6 +32,12 @@ public class Field {
      */
     private boolean pk;
 
+    /**
+     * 是否数据源表字段
+     */
+    @JSONField(serialize = false)
+    private boolean sourceTable;
+
     public Field() {
     }
 
@@ -79,6 +86,15 @@ public class Field {
         this.pk = pk;
     }
 
+    public boolean isSourceTable() {
+        return sourceTable;
+    }
+
+    public Field setSourceTable(boolean sourceTable) {
+        this.sourceTable = sourceTable;
+        return this;
+    }
+
     @Override
     public String toString() {
         return JsonUtil.objToJson(this);