|
|
@ -2,10 +2,16 @@ package space.caoshd.otone.builder;
|
|
|
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
import space.caoshd.otone.entity.ColumnInfo;
|
|
|
|
|
|
|
|
import space.caoshd.otone.entity.IndexInfo;
|
|
|
|
import space.caoshd.otone.entity.TableInfo;
|
|
|
|
import space.caoshd.otone.entity.TableInfo;
|
|
|
|
|
|
|
|
import space.caoshd.otone.extension.ColumnAddonAble;
|
|
|
|
|
|
|
|
import space.caoshd.otone.extension.TableAddonAble;
|
|
|
|
import space.caoshd.otone.tool.PropertyTools;
|
|
|
|
import space.caoshd.otone.tool.PropertyTools;
|
|
|
|
import space.caoshd.otone.util.ConfigConsts;
|
|
|
|
import space.caoshd.otone.util.ConfigConsts;
|
|
|
|
|
|
|
|
import space.caoshd.otone.util.DataTypeUtils;
|
|
|
|
import space.caoshd.otone.util.DatabaseUtils;
|
|
|
|
import space.caoshd.otone.util.DatabaseUtils;
|
|
|
|
|
|
|
|
import space.caoshd.otone.util.JsonUtils;
|
|
|
|
import space.caoshd.otone.util.PropertiesConsts;
|
|
|
|
import space.caoshd.otone.util.PropertiesConsts;
|
|
|
|
import space.caoshd.otone.util.SqlConsts;
|
|
|
|
import space.caoshd.otone.util.SqlConsts;
|
|
|
|
import space.caoshd.otone.util.StringUtils;
|
|
|
|
import space.caoshd.otone.util.StringUtils;
|
|
|
@ -13,10 +19,12 @@ import space.caoshd.otone.util.StringUtils;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Collections;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class TableBuilder {
|
|
|
|
public class TableBuilder {
|
|
|
|
|
|
|
|
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
|
|
|
@ -27,7 +35,21 @@ public class TableBuilder {
|
|
|
|
private static final PropertyTools configProperties =
|
|
|
|
private static final PropertyTools configProperties =
|
|
|
|
new PropertyTools(PropertiesConsts.CONFIG_PROPERTIES_PATH);
|
|
|
|
new PropertyTools(PropertiesConsts.CONFIG_PROPERTIES_PATH);
|
|
|
|
|
|
|
|
|
|
|
|
public static List<TableInfo> loadTableInfo() {
|
|
|
|
private final List<TableAddonAble> tableAddonAbles = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TableBuilder addTableAddonAble(TableAddonAble tableAddonAble) {
|
|
|
|
|
|
|
|
this.tableAddonAbles.add(tableAddonAble);
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final List<ColumnAddonAble> columnAddonAbles = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TableBuilder addColumnAddonAble(ColumnAddonAble columnAddonAble) {
|
|
|
|
|
|
|
|
this.columnAddonAbles.add(columnAddonAble);
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<TableInfo> build() {
|
|
|
|
List<TableInfo> result = new ArrayList<>();
|
|
|
|
List<TableInfo> result = new ArrayList<>();
|
|
|
|
List<String> schemaNames = configProperties.getStrings(ConfigConsts.SCHEMA_NAMES);
|
|
|
|
List<String> schemaNames = configProperties.getStrings(ConfigConsts.SCHEMA_NAMES);
|
|
|
|
if (schemaNames.isEmpty()) {
|
|
|
|
if (schemaNames.isEmpty()) {
|
|
|
@ -38,14 +60,14 @@ public class TableBuilder {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
for (String schemaName : schemaNames) {
|
|
|
|
for (String schemaName : schemaNames) {
|
|
|
|
result.addAll(loadTableInfo(schemaName));
|
|
|
|
result.addAll(build(schemaName));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
System.out.println(result);
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static List<TableInfo> loadTableInfo(String schemaName) {
|
|
|
|
public List<TableInfo> build(String schemaName) {
|
|
|
|
List<TableInfo> result = new ArrayList<>();
|
|
|
|
List<TableInfo> result = new ArrayList<>();
|
|
|
|
List<String> tableNames = configProperties.getStrings(ConfigConsts.TABLE_NAMES);
|
|
|
|
List<String> tableNames = configProperties.getStrings(ConfigConsts.TABLE_NAMES);
|
|
|
|
if (tableNames.isEmpty()) {
|
|
|
|
if (tableNames.isEmpty()) {
|
|
|
@ -57,7 +79,7 @@ public class TableBuilder {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
for (String tableName : tableNames) {
|
|
|
|
for (String tableName : tableNames) {
|
|
|
|
TableInfo tableInfo = loadTableInfo(schemaName, tableName);
|
|
|
|
TableInfo tableInfo = build(schemaName, tableName);
|
|
|
|
if (Objects.nonNull(tableInfo)) {
|
|
|
|
if (Objects.nonNull(tableInfo)) {
|
|
|
|
result.add(tableInfo);
|
|
|
|
result.add(tableInfo);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -66,7 +88,7 @@ public class TableBuilder {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static TableInfo loadTableInfo(String schemaName, String tableName) {
|
|
|
|
public TableInfo build(String schemaName, String tableName) {
|
|
|
|
String sql = sqlProperties.getString(SqlConsts.TABLE_SQL_SCHEMA_TABLE);
|
|
|
|
String sql = sqlProperties.getString(SqlConsts.TABLE_SQL_SCHEMA_TABLE);
|
|
|
|
List<String> params = Arrays.asList(schemaName, tableName);
|
|
|
|
List<String> params = Arrays.asList(schemaName, tableName);
|
|
|
|
Map<String, String> table = DatabaseUtils.one(sql, params);
|
|
|
|
Map<String, String> table = DatabaseUtils.one(sql, params);
|
|
|
@ -77,17 +99,20 @@ public class TableBuilder {
|
|
|
|
return createTableInfo(table);
|
|
|
|
return createTableInfo(table);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static TableInfo createTableInfo(Map<String, String> table) {
|
|
|
|
private TableInfo createTableInfo(Map<String, String> table) {
|
|
|
|
TableInfo result = new TableInfo();
|
|
|
|
TableInfo result = new TableInfo();
|
|
|
|
|
|
|
|
|
|
|
|
String tableSchema = sqlProperties.getString(SqlConsts.LABEL_TABLE_SCHEMA);
|
|
|
|
String tableSchemaLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_SCHEMA);
|
|
|
|
result.setTableSchema(table.get(tableSchema));
|
|
|
|
String tableSchema = table.get(tableSchemaLabel);
|
|
|
|
|
|
|
|
result.setTableSchema(tableSchema);
|
|
|
|
|
|
|
|
|
|
|
|
String tableComment = sqlProperties.getString(SqlConsts.LABEL_TABLE_COMMENT);
|
|
|
|
String tableCommentLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_COMMENT);
|
|
|
|
result.setComment(table.get(tableComment));
|
|
|
|
String comment = table.get(tableCommentLabel);
|
|
|
|
|
|
|
|
result.setComment(comment);
|
|
|
|
|
|
|
|
|
|
|
|
String tableName = sqlProperties.getString(SqlConsts.LABEL_TABLE_NAME);
|
|
|
|
String tableNameLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_NAME);
|
|
|
|
result.setTableName(table.get(tableName));
|
|
|
|
String tableName = table.get(tableNameLabel);
|
|
|
|
|
|
|
|
result.setTableName(tableName);
|
|
|
|
|
|
|
|
|
|
|
|
String tableNameWithoutPrefix = getTableNameWithoutPrefix(result.getTableName());
|
|
|
|
String tableNameWithoutPrefix = getTableNameWithoutPrefix(result.getTableName());
|
|
|
|
String beanName = StringUtils.toCamelCase(tableNameWithoutPrefix, true);
|
|
|
|
String beanName = StringUtils.toCamelCase(tableNameWithoutPrefix, true);
|
|
|
@ -98,16 +123,60 @@ public class TableBuilder {
|
|
|
|
ConfigConsts.VALUE_BEAN_SUFFIX
|
|
|
|
ConfigConsts.VALUE_BEAN_SUFFIX
|
|
|
|
);
|
|
|
|
);
|
|
|
|
result.setQueryBeanName(beanName + suffix);
|
|
|
|
result.setQueryBeanName(beanName + suffix);
|
|
|
|
|
|
|
|
List<ColumnInfo> columnInfo = loadColumnInfo(tableSchema, tableName);
|
|
|
|
|
|
|
|
result.setColumnInfo(columnInfo);
|
|
|
|
|
|
|
|
|
|
|
|
result.setFieldInfoList(FieldBuilder.loadFieldInfo(
|
|
|
|
result.setDateExists(columnInfo.stream()
|
|
|
|
|
|
|
|
.anyMatch(column -> DataTypeUtils.JAVA_TYPE_DATE.equals(column.getJavaDataType())));
|
|
|
|
|
|
|
|
result.setDecimalExists(columnInfo.stream()
|
|
|
|
|
|
|
|
.anyMatch(column -> DataTypeUtils.JAVA_TYPE_DECIMAL.equals(column.getJavaDataType())));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<IndexInfo> indexInfoList = IndexBuilder.loadIndexInfo(
|
|
|
|
result.getTableSchema(),
|
|
|
|
result.getTableSchema(),
|
|
|
|
result.getTableName()
|
|
|
|
result.getTableName()
|
|
|
|
));
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, List<ColumnInfo>> indexInfo = new HashMap<>();
|
|
|
|
|
|
|
|
indexInfoList.forEach(index -> {
|
|
|
|
|
|
|
|
List<ColumnInfo> indexColumnInfoList = indexInfo.computeIfAbsent(
|
|
|
|
|
|
|
|
index.getIndexName(),
|
|
|
|
|
|
|
|
k -> new ArrayList<>()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
ColumnInfo columnInfoByColumnName = getColumnInfoByColumnName(
|
|
|
|
|
|
|
|
columnInfo,
|
|
|
|
|
|
|
|
index.getColumnName()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
indexColumnInfoList.add(columnInfoByColumnName);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.setIndexInfo(indexInfo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (TableAddonAble tableAddonAble : tableAddonAbles) {
|
|
|
|
|
|
|
|
tableAddonAble.addon(result, result.getAddonInfo());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOGGER.debug(JsonUtils.toJson(result));
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static String getTableNameWithoutPrefix(String tableNameWithoutPrefix) {
|
|
|
|
private List<ColumnInfo> loadColumnInfo(String tableSchema, String tableName) {
|
|
|
|
|
|
|
|
ColumnBuilder columnBuilder = new ColumnBuilder(tableSchema, tableName);
|
|
|
|
|
|
|
|
for (ColumnAddonAble columnAddonAble : columnAddonAbles) {
|
|
|
|
|
|
|
|
columnBuilder.addColumnAddonAble(columnAddonAble);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return columnBuilder.build();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ColumnInfo getColumnInfoByColumnName(
|
|
|
|
|
|
|
|
List<ColumnInfo> columnInfoList, String columnName
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
return columnInfoList.stream()
|
|
|
|
|
|
|
|
.filter(x -> columnName.equals(x.getColumnName()))
|
|
|
|
|
|
|
|
.findFirst()
|
|
|
|
|
|
|
|
.orElseThrow(() -> new RuntimeException("column: " + columnName + " not exists."));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String getTableNameWithoutPrefix(String tableNameWithoutPrefix) {
|
|
|
|
List<String> tablePrefixes = configProperties.getStrings(ConfigConsts.TABLE_PREFIXIES);
|
|
|
|
List<String> tablePrefixes = configProperties.getStrings(ConfigConsts.TABLE_PREFIXIES);
|
|
|
|
|
|
|
|
|
|
|
|
for (String tablePrefix : tablePrefixes) {
|
|
|
|
for (String tablePrefix : tablePrefixes) {
|
|
|
|