ParserFactory.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package org.dbsyncer.parser;
  2. import org.dbsyncer.cache.CacheService;
  3. import org.dbsyncer.common.util.CollectionUtils;
  4. import org.dbsyncer.common.util.JsonUtil;
  5. import org.dbsyncer.connector.ConnectorFactory;
  6. import org.dbsyncer.connector.config.ConnectorConfig;
  7. import org.dbsyncer.connector.config.MetaInfo;
  8. import org.dbsyncer.connector.config.Table;
  9. import org.dbsyncer.connector.enums.ConnectorEnum;
  10. import org.dbsyncer.connector.enums.FilterEnum;
  11. import org.dbsyncer.connector.enums.OperationEnum;
  12. import org.dbsyncer.connector.template.CommandTemplate;
  13. import org.dbsyncer.parser.enums.ConvertEnum;
  14. import org.dbsyncer.parser.model.Connector;
  15. import org.dbsyncer.parser.model.FieldMapping;
  16. import org.dbsyncer.parser.model.Mapping;
  17. import org.dbsyncer.parser.model.TableGroup;
  18. import org.dbsyncer.storage.SnowflakeIdWorker;
  19. import org.json.JSONException;
  20. import org.json.JSONObject;
  21. import org.slf4j.Logger;
  22. import org.slf4j.LoggerFactory;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Component;
  26. import org.springframework.util.Assert;
  27. import java.util.ArrayList;
  28. import java.util.Arrays;
  29. import java.util.List;
  30. import java.util.Map;
  31. /**
  32. * @author AE86
  33. * @version 1.0.0
  34. * @date 2019/9/29 22:38
  35. */
  36. @Component
  37. public class ParserFactory implements Parser {
  38. private final Logger logger = LoggerFactory.getLogger(getClass());
  39. @Autowired
  40. private ConnectorFactory connectorFactory;
  41. @Autowired
  42. private CacheService cacheService;
  43. @Autowired
  44. private SnowflakeIdWorker snowflakeIdWorker;
  45. @Override
  46. public boolean alive(ConnectorConfig config) {
  47. return connectorFactory.isAlive(config);
  48. }
  49. @Override
  50. public List<String> getTable(ConnectorConfig config) {
  51. return connectorFactory.getTable(config);
  52. }
  53. @Override
  54. public MetaInfo getMetaInfo(String connectorId, String tableName) {
  55. ConnectorConfig config = getConnectorConfig(connectorId);
  56. return connectorFactory.getMetaInfo(config, tableName);
  57. }
  58. @Override
  59. public Map<String, String> getCommand(String sourceConnectorId, String targetConnectorId, TableGroup tableGroup) {
  60. List<FieldMapping> fieldMapping = tableGroup.getFieldMapping();
  61. if(CollectionUtils.isEmpty(fieldMapping)){
  62. return null;
  63. }
  64. String sType = getConnectorConfig(sourceConnectorId).getConnectorType();
  65. String tType = getConnectorConfig(targetConnectorId).getConnectorType();
  66. String sTableName = tableGroup.getSourceTable().getName();
  67. String tTableName = tableGroup.getTargetTable().getName();
  68. Table sTable = new Table().setName(sTableName).setColumn(new ArrayList<>());
  69. Table tTable = new Table().setName(tTableName).setColumn(new ArrayList<>());
  70. fieldMapping.forEach(m ->{
  71. sTable.getColumn().add(m.getSource());
  72. tTable.getColumn().add(m.getTarget());
  73. });
  74. final CommandTemplate sourceCmdTemplate = new CommandTemplate(sType, sTable, tableGroup.getFilter());
  75. final CommandTemplate targetCmdTemplate = new CommandTemplate(tType, tTable);
  76. // 获取连接器同步参数
  77. Map<String, String> command = connectorFactory.getCommand(sourceCmdTemplate, targetCmdTemplate);
  78. return command;
  79. }
  80. @Override
  81. public Connector parseConnector(String json) {
  82. try {
  83. JSONObject conn = new JSONObject(json);
  84. JSONObject config = (JSONObject) conn.remove("config");
  85. Connector connector = JsonUtil.jsonToObj(conn.toString(), Connector.class);
  86. Assert.notNull(connector, "Connector can not be null.");
  87. String connectorType = config.getString("connectorType");
  88. Class<?> configClass = ConnectorEnum.getConfigClass(connectorType);
  89. ConnectorConfig obj = (ConnectorConfig) JsonUtil.jsonToObj(config.toString(), configClass);
  90. connector.setConfig(obj);
  91. return connector;
  92. } catch (JSONException e) {
  93. logger.error(e.getMessage());
  94. throw new ParserException(e.getMessage());
  95. }
  96. }
  97. @Override
  98. public Mapping parseMapping(String json) {
  99. try {
  100. JSONObject map = new JSONObject(json);
  101. Mapping mapping = JsonUtil.jsonToObj(map.toString(), Mapping.class);
  102. Assert.notNull(mapping, "Mapping can not be null.");
  103. return mapping;
  104. } catch (JSONException e) {
  105. logger.error(e.getMessage());
  106. throw new ParserException(e.getMessage());
  107. }
  108. }
  109. @Override
  110. public TableGroup parseTableGroup(String json) {
  111. try {
  112. JSONObject conn = new JSONObject(json);
  113. TableGroup tableGroup = JsonUtil.jsonToObj(conn.toString(), TableGroup.class);
  114. Assert.notNull(tableGroup, "TableGroup can not be null.");
  115. return tableGroup;
  116. } catch (JSONException e) {
  117. logger.error(e.getMessage());
  118. throw new ParserException(e.getMessage());
  119. }
  120. }
  121. @Override
  122. public List<ConnectorEnum> getConnectorEnumAll() {
  123. return Arrays.asList(ConnectorEnum.values());
  124. }
  125. @Override
  126. public List<OperationEnum> getOperationEnumAll() {
  127. return Arrays.asList(OperationEnum.values());
  128. }
  129. @Override
  130. public List<FilterEnum> getFilterEnumAll() {
  131. return Arrays.asList(FilterEnum.values());
  132. }
  133. @Override
  134. public List<ConvertEnum> getConvertEnumAll() {
  135. return Arrays.asList(ConvertEnum.values());
  136. }
  137. /**
  138. * 获取连接配置
  139. *
  140. * @param connectorId
  141. * @return
  142. */
  143. private ConnectorConfig getConnectorConfig(String connectorId) {
  144. Assert.hasText(connectorId, "Connector id can not be empty.");
  145. Connector conn = cacheService.get(connectorId, Connector.class);
  146. Assert.notNull(conn, "Connector can not be null.");
  147. Connector connector = new Connector();
  148. BeanUtils.copyProperties(conn, connector);
  149. return connector.getConfig();
  150. }
  151. }