
top.javatool.canal.client.factory.EntryColumnModelFactory Maven / Gradle / Ivy
The newest version!
package top.javatool.canal.client.factory;
import com.alibaba.otter.canal.protocol.CanalEntry;
import org.apache.commons.lang3.StringUtils;
import top.javatool.canal.client.enums.TableNameEnum;
import top.javatool.canal.client.handler.EntryHandler;
import top.javatool.canal.client.util.EntryUtil;
import top.javatool.canal.client.util.FieldUtil;
import top.javatool.canal.client.util.GenericUtil;
import top.javatool.canal.client.util.HandlerUtil;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author yang peng
* @date 2019/3/2916:16
*/
public class EntryColumnModelFactory extends AbstractModelFactory> {
@Override
public R newInstance(EntryHandler entryHandler, List columns) throws Exception {
String canalTableName = HandlerUtil.getCanalTableName(entryHandler);
if (TableNameEnum.ALL.name().toLowerCase().equals(canalTableName)) {
Map map = columns.stream().collect(Collectors.toMap(CanalEntry.Column::getName, CanalEntry.Column::getValue));
return (R) map;
}
Class tableClass = GenericUtil.getTableClass(entryHandler);
if (tableClass != null) {
return newInstance(tableClass, columns);
}
return null;
}
@Override
public R newInstance(EntryHandler entryHandler, List columns, Set updateColumn) throws Exception {
String canalTableName = HandlerUtil.getCanalTableName(entryHandler);
if (TableNameEnum.ALL.name().toLowerCase().equals(canalTableName)) {
Map map = columns.stream().filter(column -> updateColumn.contains(column.getName()))
.collect(Collectors.toMap(CanalEntry.Column::getName, CanalEntry.Column::getValue));
return (R) map;
}
Class tableClass = GenericUtil.getTableClass(entryHandler);
if (tableClass != null) {
R r = tableClass.newInstance();
Map columnNames = EntryUtil.getFieldName(r.getClass());
for (CanalEntry.Column column : columns) {
if (updateColumn.contains(column.getName())) {
String fieldName = columnNames.get(column.getName());
if (StringUtils.isNotEmpty(fieldName)) {
FieldUtil.setFieldValue(r, fieldName, column.getValue());
}
}
}
return r;
}
return null;
}
@Override
R newInstance(Class c, List columns) throws Exception {
R object = c.newInstance();
Map columnNames = EntryUtil.getFieldName(object.getClass());
for (CanalEntry.Column column : columns) {
String fieldName = columnNames.get(column.getName());
if (StringUtils.isNotEmpty(fieldName)) {
FieldUtil.setFieldValue(object, fieldName, column.getValue());
}
}
return object;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy