package org.dbsyncer.biz.checker; import org.dbsyncer.biz.BizException; import org.dbsyncer.common.util.CollectionUtils; import org.dbsyncer.common.util.JsonUtil; import org.dbsyncer.common.util.StringUtil; import org.dbsyncer.connector.model.Filter; import org.dbsyncer.manager.Manager; import org.dbsyncer.parser.model.AbstractConfigModel; import org.dbsyncer.parser.model.ConfigModel; import org.dbsyncer.parser.model.Convert; import org.dbsyncer.plugin.config.Plugin; import org.dbsyncer.storage.SnowflakeIdWorker; import org.dbsyncer.storage.constant.ConfigConstant; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.Assert; import java.time.Instant; import java.util.*; /** * @author AE86 * @version 1.0.0 * @date 2020/1/8 15:17 */ public abstract class AbstractChecker implements Checker { @Autowired private Manager manager; @Autowired private SnowflakeIdWorker snowflakeIdWorker; /** * 修改基本配置 *

id,type,name,createTime,updateTime

* * @param model * @param params */ protected void modifyConfigModel(ConfigModel model, Map 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); if (StringUtil.isNotBlank(name)) { model.setName(name); } model.setId(StringUtil.isBlank(model.getId()) ? String.valueOf(snowflakeIdWorker.nextId()) : model.getId()); long now = Instant.now().toEpochMilli(); model.setCreateTime(null == model.getCreateTime() ? now : model.getCreateTime()); model.setUpdateTime(now); } /** * 修改高级配置:过滤条件/转换配置/插件配置 * * @param model * @param params */ protected void modifySuperConfigModel(AbstractConfigModel model, Map params) { // 全局参数 String mappingParams = params.get("params"); model.setParams(StringUtil.isNotBlank(mappingParams) ? JsonUtil.jsonToObj(mappingParams, Map.class) : new LinkedHashMap()); // 过滤条件 String filterJson = params.get("filter"); if (StringUtil.isNotBlank(filterJson)) { List list = jsonToList(filterJson, Filter.class); model.setFilter(list); } // 转换配置 String convertJson = params.get("convert"); if (StringUtil.isNotBlank(convertJson)) { List convert = jsonToList(convertJson, Convert.class); model.setConvert(convert); } // 插件配置 String pluginClassName = params.get("pluginClassName"); Plugin plugin = null; if (StringUtil.isNotBlank(pluginClassName)) { List plugins = manager.getPluginAll(); if (!CollectionUtils.isEmpty(plugins)) { for (Plugin p : plugins) { if (StringUtil.equals(p.getClassName(), pluginClassName)) { plugin = p; break; } } } } model.setPlugin(plugin); } private List jsonToList(String json, Class valueType) { try { JSONArray array = new JSONArray(json); if (null != array) { List list = new ArrayList<>(); int length = array.length(); for (int i = 0; i < length; i++) { JSONObject obj = array.getJSONObject(i); T t = JsonUtil.jsonToObj(obj.toString(), valueType); list.add(t); } return list; } } catch (JSONException e) { throw new BizException(String.format("解析高级配置参数异常:%s", json)); } return Collections.EMPTY_LIST; } }