|
|
|
@ -7,7 +7,10 @@ import space.caoshd.otone.entity.ContextInfo;
|
|
|
|
|
import space.caoshd.otone.entity.OutputInfo;
|
|
|
|
|
import space.caoshd.otone.entity.TableInfo;
|
|
|
|
|
import space.caoshd.otone.tool.PropTools;
|
|
|
|
|
import space.caoshd.otone.util.*;
|
|
|
|
|
import space.caoshd.otone.util.CfgUtils;
|
|
|
|
|
import space.caoshd.otone.util.FileUtils;
|
|
|
|
|
import space.caoshd.otone.util.PathConsts;
|
|
|
|
|
import space.caoshd.otone.util.VelocityUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
@ -20,16 +23,17 @@ public class SourceBuilder {
|
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(SourceBuilder.class);
|
|
|
|
|
|
|
|
|
|
private static final PropTools CONFIG = new PropTools(PathConsts.CONFIG_PROPERTIES_PATH);
|
|
|
|
|
|
|
|
|
|
private final Map<String, Object> extra = new HashMap<>();
|
|
|
|
|
private TableInfo tableInfo;
|
|
|
|
|
|
|
|
|
|
private OutputInfo outputInfo;
|
|
|
|
|
|
|
|
|
|
private List<TableInfo> tableInfoList;
|
|
|
|
|
|
|
|
|
|
private List<OutputInfo> outputInfoList;
|
|
|
|
|
|
|
|
|
|
private final Map<String, Object> extra = new HashMap<>();
|
|
|
|
|
private static ClassInfo buildClassInfo(TableInfo tableInfo, OutputInfo outputInfo) {
|
|
|
|
|
return new InfoClsBuilder().setTableName(tableInfo.getTableName())
|
|
|
|
|
.setPackageName(outputInfo.getPackageName())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public SourceBuilder setTableInfo(TableInfo tableInfo) {
|
|
|
|
|
this.tableInfo = tableInfo;
|
|
|
|
@ -88,9 +92,9 @@ public class SourceBuilder {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void build(TableInfo tableInfo, OutputInfo outputInfo) {
|
|
|
|
|
|
|
|
|
|
// 创建数据文件夹
|
|
|
|
|
FileUtils.mkdir(outputInfo.getPackagePath());
|
|
|
|
|
|
|
|
|
|
// 创建上下文环境信息
|
|
|
|
|
ContextInfo contextInfo = new ContextInfo();
|
|
|
|
|
// 设置表信息
|
|
|
|
@ -99,42 +103,40 @@ public class SourceBuilder {
|
|
|
|
|
ClassInfo classInfo = buildClassInfo(tableInfo, outputInfo);
|
|
|
|
|
contextInfo.setConfigInfo(classInfo);
|
|
|
|
|
|
|
|
|
|
// 获取输出文件路径
|
|
|
|
|
// 完善输出信息 计算输出路径
|
|
|
|
|
enhanceOutputInfo(outputInfo, classInfo);
|
|
|
|
|
String outputPath = outputInfo.getOutputPath();
|
|
|
|
|
|
|
|
|
|
// 获取模板文件路径
|
|
|
|
|
String templatePath = outputInfo.getTemplatePath();
|
|
|
|
|
// 判断输出文件是否已存在
|
|
|
|
|
if (!FileUtils.exists(outputPath)) {
|
|
|
|
|
if (!FileUtils.exists(outputInfo.getOutputPath())) {
|
|
|
|
|
// 输出文件不存在 直接生成
|
|
|
|
|
VelocityUtils.render(templatePath, outputPath, contextInfo);
|
|
|
|
|
VelocityUtils.render(
|
|
|
|
|
outputInfo.getTemplatePath(),
|
|
|
|
|
outputInfo.getOutputPath(),
|
|
|
|
|
contextInfo
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 输出文件存在 判断是否可以覆盖
|
|
|
|
|
if (CONFIG.getBoolean(CfgUtils.OUTPUT_COVER_IF_EXIST)) {
|
|
|
|
|
// 配置可以执行覆盖 覆盖生成
|
|
|
|
|
VelocityUtils.render(templatePath, outputPath, contextInfo);
|
|
|
|
|
VelocityUtils.render(
|
|
|
|
|
outputInfo.getTemplatePath(),
|
|
|
|
|
outputInfo.getOutputPath(),
|
|
|
|
|
contextInfo
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
// 配置不可以执行覆盖 提示错误消息
|
|
|
|
|
LOGGER.warn("output file already exists: {}, " + "please remove it or enable auto " + "cover exist file,"
|
|
|
|
|
LOGGER.warn(
|
|
|
|
|
"output file already exists: {}, " + "please remove it or enable auto "
|
|
|
|
|
+ "cover exist file,"
|
|
|
|
|
+ " config.properties should like [output.cover_if_exists=true]",
|
|
|
|
|
outputPath
|
|
|
|
|
outputInfo.getOutputPath()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void enhanceOutputInfo(OutputInfo outputInfo, ClassInfo classInfo) {
|
|
|
|
|
new InfoOutBuilder()
|
|
|
|
|
.init(outputInfo)
|
|
|
|
|
.setClassName(classInfo.getClassName())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static ClassInfo buildClassInfo(TableInfo tableInfo, OutputInfo outputInfo) {
|
|
|
|
|
return new InfoClsBuilder()
|
|
|
|
|
.setTableName(tableInfo.getTableName())
|
|
|
|
|
.setPackageName(outputInfo.getPackageName())
|
|
|
|
|
.build();
|
|
|
|
|
new InfoOutBuilder().init(outputInfo).setClassName(classInfo.getClassName()).build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void build(TableInfo tableInfo, List<OutputInfo> outputInfoList) {
|
|
|
|
|