001package cn.mybatis.mp.generator.database.meta;
002
003import cn.mybatis.mp.generator.config.GeneratorConfig;
004import cn.mybatis.mp.generator.util.GeneratorUtil;
005import lombok.Getter;
006import lombok.ToString;
007
008import java.util.ArrayList;
009import java.util.List;
010import java.util.stream.Collectors;
011
012@Getter
013@ToString
014public class EntityInfo {
015
016    public final String serviceName;
017    public final String servicePackage;
018    public final String serviceImplName;
019    public final String serviceImplPackage;
020    public final String actionName;
021    public final String actionPackage;
022    private final TableInfo tableInfo;
023    private final String name;
024    private final String remarks;
025    private final EntityFieldInfo idFieldInfo;
026    private final List<EntityFieldInfo> fieldInfoList;
027    private final List<EntityFieldInfo> excludeFieldInfoList;
028    private final String entityPackage;
029    private final String mapperName;
030    private final String mapperPackage;
031    private final String daoName;
032    private final String daoPackage;
033    private final String daoImplName;
034    private final String daoImplPackage;
035    private boolean hasIgnoreTablePrefix = false;
036
037    public EntityInfo(GeneratorConfig generatorConfig, TableInfo tableInfo) {
038        String tmpTableName = tableInfo.getName();
039        for (String prefix : generatorConfig.getTableConfig().getTablePrefixs()) {
040            if (tmpTableName.startsWith(prefix)) {
041                tmpTableName = tmpTableName.replaceFirst(prefix, "");
042                hasIgnoreTablePrefix = true;
043                break;
044            }
045        }
046
047
048        this.name = GeneratorUtil.getEntityName(generatorConfig, tmpTableName);
049        this.remarks = tableInfo.getRemarks();
050        this.tableInfo = tableInfo;
051        if (tableInfo.getIdColumnInfo() != null) {
052            this.idFieldInfo = new EntityFieldInfo(generatorConfig, this, tableInfo.getIdColumnInfo());
053        } else {
054            this.idFieldInfo = null;
055        }
056        List<EntityFieldInfo> fieldInfoList = tableInfo.getColumnInfoList().stream().map(item -> new EntityFieldInfo(generatorConfig, this, item)).collect(Collectors.toList());
057
058        this.excludeFieldInfoList = fieldInfoList.stream().filter(item -> {
059            return generatorConfig.getColumnConfig().getExcludeColumns().contains(item.getColumnInfo().getName()) || generatorConfig.getColumnConfig().getExcludeColumns().contains(item.getColumnInfo().getName().toUpperCase());
060        }).collect(Collectors.toList());
061
062        fieldInfoList.removeAll(this.excludeFieldInfoList);
063        this.fieldInfoList = fieldInfoList;
064
065        this.entityPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getEntityConfig().getPackageName();
066
067        this.mapperName = this.name + generatorConfig.getMapperConfig().getSuffix();
068        this.mapperPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getMapperConfig().getPackageName();
069
070        this.daoName = this.name + generatorConfig.getDaoConfig().getSuffix();
071        this.daoPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getDaoConfig().getPackageName();
072
073        this.daoImplName = this.name + generatorConfig.getDaoImplConfig().getSuffix();
074        this.daoImplPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getDaoImplConfig().getPackageName();
075
076        this.serviceName = this.name + generatorConfig.getServiceConfig().getSuffix();
077        this.servicePackage = generatorConfig.getBasePackage() + "." + generatorConfig.getServiceConfig().getPackageName();
078
079        this.serviceImplName = this.name + generatorConfig.getServiceImplConfig().getSuffix();
080        this.serviceImplPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getServiceImplConfig().getPackageName();
081
082        this.actionName = this.name + generatorConfig.getActionConfig().getSuffix();
083        this.actionPackage = generatorConfig.getBasePackage() + "." + generatorConfig.getActionConfig().getPackageName();
084    }
085
086    public List<EntityFieldInfo> allFiledInfoList() {
087        List<EntityFieldInfo> list = new ArrayList<>();
088        if (this.idFieldInfo != null) {
089            list.add(this.idFieldInfo);
090        }
091        list.addAll(this.excludeFieldInfoList);
092        list.addAll(this.fieldInfoList);
093
094        return list.stream().distinct().collect(Collectors.toList());
095    }
096}