提交 92c8c60f 编写于 作者: 黄勇

【I】代码优化

上级 b4f5ecbc
......@@ -9,7 +9,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<groupId>com.smart</groupId>
<groupId>smart</groupId>
<artifactId>smart-generator</artifactId>
<version>1.0</version>
......@@ -41,9 +41,9 @@
</dependency>
<!-- Smart -->
<dependency>
<groupId>com.smart</groupId>
<groupId>smart</groupId>
<artifactId>smart-framework</artifactId>
<version>2.0</version>
<version>2.2-SNAPSHOT</version>
</dependency>
</dependencies>
......
package com.smart.generator;
package smart.generator;
import com.smart.framework.FrameworkConstant;
import com.smart.framework.util.FileUtil;
import com.smart.framework.util.StringUtil;
import java.io.FileWriter;
import java.util.Map;
import org.apache.velocity.Template;
......@@ -12,6 +9,9 @@ import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.log.NullLogChute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import smart.framework.FrameworkConstant;
import smart.framework.util.FileUtil;
import smart.framework.util.StringUtil;
public class CodeGenerator {
......
package com.smart.generator;
package smart.generator;
import com.smart.framework.util.ArrayUtil;
import com.smart.framework.util.ObjectUtil;
import com.smart.generator.command.Command;
import smart.framework.util.ArrayUtil;
import smart.framework.util.ObjectUtil;
import smart.generator.command.Command;
public class Invoker {
......
package com.smart.generator.bean;
public class Column {
private String name;
private String type;
private String length;
private String precision;
private String notnull;
private String pk;
private String comment;
public Column(String name, String type, String length, String precision, String notnull, String pk, String comment) {
this.name = name;
this.type = type;
this.length = length;
this.precision = precision;
this.notnull = notnull;
this.pk = pk;
this.comment = comment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getPrecision() {
return precision;
}
public void setPrecision(String precision) {
this.precision = precision;
}
public String getNotnull() {
return notnull;
}
public void setNotnull(String notnull) {
this.notnull = notnull;
}
public String getPk() {
return pk;
}
public void setPk(String pk) {
this.pk = pk;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
package smart.generator.bean;
public class Column {
private String name;
private String type;
private String length;
private String precision;
private String notnull;
private String pk;
private String comment;
public Column(String name, String type, String length, String precision, String notnull, String pk, String comment) {
this.name = name;
this.type = type;
this.length = length;
this.precision = precision;
this.notnull = notnull;
this.pk = pk;
this.comment = comment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getPrecision() {
return precision;
}
public void setPrecision(String precision) {
this.precision = precision;
}
public String getNotnull() {
return notnull;
}
public void setNotnull(String notnull) {
this.notnull = notnull;
}
public String getPk() {
return pk;
}
public void setPk(String pk) {
this.pk = pk;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
package com.smart.generator.bean;
public class Field {
private String name;
private String type;
private String comment;
public Field(String name, String type, String comment) {
this.name = name;
this.type = type;
this.comment = comment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
package smart.generator.bean;
public class Field {
private String name;
private String type;
private String comment;
public Field(String name, String type, String comment) {
this.name = name;
this.type = type;
this.comment = comment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
package com.smart.generator.bean;
public class Table {
private String name;
private String pk;
public Table(String name, String pk) {
this.name = name;
this.pk = pk;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPk() {
return pk;
}
public void setPk(String pk) {
this.pk = pk;
}
}
package smart.generator.bean;
public class Table {
private String name;
private String pk;
public Table(String name, String pk) {
this.name = name;
this.pk = pk;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPk() {
return pk;
}
public void setPk(String pk) {
this.pk = pk;
}
}
package com.smart.generator.builder;
package smart.generator.builder;
import com.smart.generator.bean.Column;
import com.smart.generator.bean.Table;
import java.util.List;
import java.util.Map;
import smart.generator.bean.Column;
import smart.generator.bean.Table;
public abstract class Builder {
......
package com.smart.generator.builder.impl;
package smart.generator.builder.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.bean.Column;
import com.smart.generator.bean.Field;
import com.smart.generator.bean.Table;
import com.smart.generator.builder.Builder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.bean.Column;
import smart.generator.bean.Field;
import smart.generator.bean.Table;
import smart.generator.builder.Builder;
public class EntityBuilder extends Builder {
......
package com.smart.generator.builder.impl;
package smart.generator.builder.impl;
import com.smart.generator.CodeGenerator;
import com.smart.generator.bean.Column;
import com.smart.generator.bean.Table;
import com.smart.generator.builder.Builder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import smart.generator.CodeGenerator;
import smart.generator.bean.Column;
import smart.generator.bean.Table;
import smart.generator.builder.Builder;
public class SQLBuilder extends Builder {
......
package com.smart.generator.command;
package smart.generator.command;
import com.smart.framework.util.ArrayUtil;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import smart.framework.util.ArrayUtil;
public abstract class Command {
......
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
public class CreateActionCommand extends Command {
private String appPath;
private String actionName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
actionName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String actionNamePascal = StringUtil.toPascalStyle(actionName, "-");
String actionNameUnderline = StringUtil.toUnderlineStyle(actionName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("action_name_p", actionNamePascal);
dataMap.put("action_name_u", actionNameUnderline);
String vmPath = "create-action/action_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/action/" + actionNamePascal + "Action.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package smart.generator.command.impl;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreateActionCommand extends Command {
private String appPath;
private String actionName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
actionName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String actionNamePascal = StringUtil.toPascalStyle(actionName, "-");
String actionNameUnderline = StringUtil.toUnderlineStyle(actionName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("action_name_p", actionNamePascal);
dataMap.put("action_name_u", actionNameUnderline);
String vmPath = "create-action/action_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/action/" + actionNamePascal + "Action.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package com.smart.generator.command.impl;
package smart.generator.command.impl;
import com.smart.framework.util.FileUtil;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.FileUtil;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreateAppCommand extends Command {
......@@ -83,7 +83,6 @@ public class CreateAppCommand extends Command {
private void generateConfigFileForMain(String dbName) {
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_name", appName);
dataMap.put("app_package", appPackage);
dataMap.put("db_name", dbName);
......@@ -94,7 +93,6 @@ public class CreateAppCommand extends Command {
private void generateConfigFileForTest(String dbName) {
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_name", appName);
dataMap.put("app_package", appPackage);
dataMap.put("db_name", dbName + "_test");
......
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
public class CreateCRUDCommand extends Command {
private String appPath;
private String crudName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
crudName = params[1];
}
@Override
public void generateFiles() {
generateEntity();
generateService();
generateAction();
generatePage();
}
private void generateEntity() {
Command command = new CreateEntityCommand();
command.initVariables(appPath, crudName);
command.generateFiles();
}
private void generateService() {
Command command = new CreateServiceCommand();
command.initVariables(appPath, crudName);
command.generateFiles();
}
private void generateAction() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String actionNamePascal = StringUtil.toPascalStyle(crudName, "-");
String actionNameUnderline = StringUtil.toUnderlineStyle(crudName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("action_name_p", actionNamePascal);
dataMap.put("action_name_u", actionNameUnderline);
String vmPath = "create-crud/action_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/action/" + actionNamePascal + "Action.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
private void generatePage() {
String[] pageNames = {
crudName,
crudName + "-create",
crudName + "-edit",
crudName + "-view",
};
Command command;
for (String pageName : pageNames) {
command = new CreatePageCommand();
command.initVariables(appPath, pageName);
command.generateFiles();
}
}
}
package smart.generator.command.impl;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreateCRUDCommand extends Command {
private String appPath;
private String crudName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
crudName = params[1];
}
@Override
public void generateFiles() {
generateEntity();
generateService();
generateAction();
generatePage();
}
private void generateEntity() {
Command command = new CreateEntityCommand();
command.initVariables(appPath, crudName);
command.generateFiles();
}
private void generateService() {
Command command = new CreateServiceCommand();
command.initVariables(appPath, crudName);
command.generateFiles();
}
private void generateAction() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String actionNamePascal = StringUtil.toPascalStyle(crudName, "-");
String actionNameUnderline = StringUtil.toUnderlineStyle(crudName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("action_name_p", actionNamePascal);
dataMap.put("action_name_u", actionNameUnderline);
String vmPath = "create-crud/action_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/action/" + actionNamePascal + "Action.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
private void generatePage() {
String[] pageNames = {
crudName,
crudName + "-create",
crudName + "-edit",
crudName + "-view",
};
Command command;
for (String pageName : pageNames) {
command = new CreatePageCommand();
command.initVariables(appPath, pageName);
command.generateFiles();
}
}
}
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
public class CreateEntityCommand extends Command {
private String appPath;
private String entityName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
entityName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String entityNamePascal = StringUtil.toPascalStyle(entityName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("entity_name_p", entityNamePascal);
String vmPath = "create-entity/entity_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/entity/" + entityNamePascal + ".java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package smart.generator.command.impl;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreateEntityCommand extends Command {
private String appPath;
private String entityName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
entityName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String entityNamePascal = StringUtil.toPascalStyle(entityName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("entity_name_p", entityNamePascal);
String vmPath = "create-entity/entity_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/entity/" + entityNamePascal + ".java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
public class CreatePageCommand extends Command {
private String appPath;
private String pageName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
pageName = params[1];
}
@Override
public void generateFiles() {
String appName = getAppName(appPath);
String appNameDisplay = StringUtil.toDisplayStyle(appName, "-");
String pageNameDisplay = StringUtil.toDisplayStyle(pageName, "-");
String pageNameUnderline = StringUtil.toUnderlineStyle(pageName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_name_d", appNameDisplay);
dataMap.put("page_name_d", pageNameDisplay);
String vmPath = "create-page/page_html.vm";
String filePath = appPath + "/src/main/webapp/www/html/" + pageNameUnderline + ".html";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package smart.generator.command.impl;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreatePageCommand extends Command {
private String appPath;
private String pageName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
pageName = params[1];
}
@Override
public void generateFiles() {
String appName = getAppName(appPath);
String appNameDisplay = StringUtil.toDisplayStyle(appName, "-");
String pageNameDisplay = StringUtil.toDisplayStyle(pageName, "-");
String pageNameUnderline = StringUtil.toUnderlineStyle(pageName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_name_d", appNameDisplay);
dataMap.put("page_name_d", pageNameDisplay);
String vmPath = "create-page/page_html.vm";
String filePath = appPath + "/src/main/webapp/www/html/" + pageNameUnderline + ".html";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.CodeGenerator;
import com.smart.generator.command.Command;
import java.util.HashMap;
import java.util.Map;
public class CreateServiceCommand extends Command {
private String appPath;
private String serviceName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
serviceName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String serviceNamePascal = StringUtil.toPascalStyle(serviceName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("service_name_p", serviceNamePascal);
generateServiceInterface(packageName, serviceNamePascal, dataMap);
generateServiceImplement(packageName, serviceNamePascal, dataMap);
}
private void generateServiceInterface(String packageName, String serviceNamePascal, Map<String, Object> dataMap) {
String vmPath = "create-service/service_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/service/" + serviceNamePascal + "Service.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
private void generateServiceImplement(String packageName, String serviceNamePascal, Map<String, Object> dataMap) {
String vmPath = "create-service/service_impl_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/service/impl/" + serviceNamePascal + "ServiceImpl.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package smart.generator.command.impl;
import java.util.HashMap;
import java.util.Map;
import smart.framework.util.StringUtil;
import smart.generator.CodeGenerator;
import smart.generator.command.Command;
public class CreateServiceCommand extends Command {
private String appPath;
private String serviceName;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
serviceName = params[1];
}
@Override
public void generateFiles() {
String appPackage = getAppPackage(appPath);
String packageName = appPackage.replace('.', '/');
String serviceNamePascal = StringUtil.toPascalStyle(serviceName, "-");
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("app_package", appPackage);
dataMap.put("service_name_p", serviceNamePascal);
generateServiceInterface(packageName, serviceNamePascal, dataMap);
generateServiceImplement(packageName, serviceNamePascal, dataMap);
}
private void generateServiceInterface(String packageName, String serviceNamePascal, Map<String, Object> dataMap) {
String vmPath = "create-service/service_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/service/" + serviceNamePascal + "Service.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
private void generateServiceImplement(String packageName, String serviceNamePascal, Map<String, Object> dataMap) {
String vmPath = "create-service/service_impl_java.vm";
String filePath = appPath + "/src/main/java/" + packageName + "/service/impl/" + serviceNamePascal + "ServiceImpl.java";
CodeGenerator.generateCode(vmPath, dataMap, filePath);
}
}
package com.smart.generator.command.impl;
import com.smart.framework.util.StringUtil;
import com.smart.generator.bean.Column;
import com.smart.generator.bean.Table;
import com.smart.generator.builder.Builder;
import com.smart.generator.builder.impl.EntityBuilder;
import com.smart.generator.builder.impl.SQLBuilder;
import com.smart.generator.command.Command;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoadDictCommand extends Command {
private static final Logger logger = LoggerFactory.getLogger(LoadDictCommand.class);
private String appPath;
private String dictPath;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
dictPath = params[1];
}
@Override
public void generateFiles() {
String appName = getAppName(appPath);
String appPackage = getAppPackage(appPath);
Map<Table, List<Column>> tableMap = createTableMap(dictPath);
generateSQL(tableMap, appName);
generateEntity(tableMap, appPackage);
}
private void generateSQL(Map<Table, List<Column>> tableMap, String appName) {
String outputPath = appPath + "/doc";
Builder sqlBuilder = new SQLBuilder(outputPath, tableMap, appName);
sqlBuilder.build();
}
private void generateEntity(Map<Table, List<Column>> tableMap, String appPackage) {
String outputPath = appPath + "/src/main/java/" + appPackage.replace('.', '/') + "/entity";
String packageName = appPackage + ".entity";
Builder entityBuilder = new EntityBuilder(outputPath, tableMap, packageName);
entityBuilder.build();
}
private Map<Table, List<Column>> createTableMap(String inputPath) {
Map<Table, List<Column>> tableMap = new LinkedHashMap<Table, List<Column>>();
Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File(inputPath));
handleWorkbook(workbook, tableMap);
} catch (IOException e) {
logger.error("读取 Excel 出错!", e);
throw new RuntimeException(e);
} catch (BiffException e) {
logger.error("解析 Excel 出错!", e);
throw new RuntimeException(e);
} finally {
if (workbook != null) {
workbook.close();
}
}
return tableMap;
}
private void handleWorkbook(Workbook workbook, Map<Table, List<Column>> tableMap) {
for (int i = 1; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheet(i);
handleSheet(sheet, tableMap);
}
}
private void handleSheet(Sheet sheet, Map<Table, List<Column>> tableMap) {
String tableName = sheet.getName().toLowerCase();
String tablePK = "";
List<Column> columnList = new ArrayList<Column>();
for (int row = 1; row < sheet.getRows(); row++) {
String name = getData(sheet, 0, row);
String type = getData(sheet, 1, row);
String length = getData(sheet, 2, row);
String precision = getData(sheet, 3, row);
String notnull = getData(sheet, 4, row);
String pk = getData(sheet, 5, row);
String comment = getData(sheet, 6, row);
columnList.add(new Column(name, type, length, precision, notnull, pk, comment));
if (StringUtil.isNotEmpty(pk)) {
tablePK = name;
}
}
tableMap.put(new Table(tableName, tablePK), columnList);
}
private String getData(Sheet sheet, int column, int row) {
return sheet.getCell(column, row).getContents().trim();
}
}
package smart.generator.command.impl;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import smart.framework.util.StringUtil;
import smart.generator.bean.Column;
import smart.generator.bean.Table;
import smart.generator.builder.Builder;
import smart.generator.builder.impl.EntityBuilder;
import smart.generator.builder.impl.SQLBuilder;
import smart.generator.command.Command;
public class LoadDictCommand extends Command {
private static final Logger logger = LoggerFactory.getLogger(LoadDictCommand.class);
private String appPath;
private String dictPath;
@Override
public int getParamsLength() {
return 2;
}
@Override
public void initVariables(String... params) {
appPath = params[0];
dictPath = params[1];
}
@Override
public void generateFiles() {
String appName = getAppName(appPath);
String appPackage = getAppPackage(appPath);
Map<Table, List<Column>> tableMap = createTableMap(dictPath);
generateSQL(tableMap, appName);
generateEntity(tableMap, appPackage);
}
private void generateSQL(Map<Table, List<Column>> tableMap, String appName) {
String outputPath = appPath + "/doc";
Builder sqlBuilder = new SQLBuilder(outputPath, tableMap, appName);
sqlBuilder.build();
}
private void generateEntity(Map<Table, List<Column>> tableMap, String appPackage) {
String outputPath = appPath + "/src/main/java/" + appPackage.replace('.', '/') + "/entity";
String packageName = appPackage + ".entity";
Builder entityBuilder = new EntityBuilder(outputPath, tableMap, packageName);
entityBuilder.build();
}
private Map<Table, List<Column>> createTableMap(String inputPath) {
Map<Table, List<Column>> tableMap = new LinkedHashMap<Table, List<Column>>();
Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File(inputPath));
handleWorkbook(workbook, tableMap);
} catch (IOException e) {
logger.error("读取 Excel 出错!", e);
throw new RuntimeException(e);
} catch (BiffException e) {
logger.error("解析 Excel 出错!", e);
throw new RuntimeException(e);
} finally {
if (workbook != null) {
workbook.close();
}
}
return tableMap;
}
private void handleWorkbook(Workbook workbook, Map<Table, List<Column>> tableMap) {
for (int i = 1; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheet(i);
handleSheet(sheet, tableMap);
}
}
private void handleSheet(Sheet sheet, Map<Table, List<Column>> tableMap) {
String tableName = sheet.getName().toLowerCase();
String tablePK = "";
List<Column> columnList = new ArrayList<Column>();
for (int row = 1; row < sheet.getRows(); row++) {
String name = getData(sheet, 0, row);
String type = getData(sheet, 1, row);
String length = getData(sheet, 2, row);
String precision = getData(sheet, 3, row);
String notnull = getData(sheet, 4, row);
String pk = getData(sheet, 5, row);
String comment = getData(sheet, 6, row);
columnList.add(new Column(name, type, length, precision, notnull, pk, comment));
if (StringUtil.isNotEmpty(pk)) {
tablePK = name;
}
}
tableMap.put(new Table(tableName, tablePK), columnList);
}
private String getData(Sheet sheet, int column, int row) {
return sheet.getCell(column, row).getContents().trim();
}
}
......@@ -11,4 +11,4 @@ log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %c (%L) - %m%n
log4j.logger.com.smart.generator=ERROR
\ No newline at end of file
log4j.logger.smart.generator=ERROR
\ No newline at end of file
package com.smart.generator.test;
import com.smart.framework.OrderedRunner;
import com.smart.framework.annotation.Order;
import com.smart.generator.Invoker;
import com.smart.generator.command.impl.CreateActionCommand;
import com.smart.generator.command.impl.CreateAppCommand;
import com.smart.generator.command.impl.CreateCRUDCommand;
import com.smart.generator.command.impl.CreateEntityCommand;
import com.smart.generator.command.impl.CreatePageCommand;
import com.smart.generator.command.impl.CreateServiceCommand;
import com.smart.generator.command.impl.LoadDictCommand;
package smart.generator.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import smart.framework.OrderedRunner;
import smart.framework.annotation.Order;
import smart.generator.Invoker;
import smart.generator.command.impl.CreateActionCommand;
import smart.generator.command.impl.CreateAppCommand;
import smart.generator.command.impl.CreateCRUDCommand;
import smart.generator.command.impl.CreateEntityCommand;
import smart.generator.command.impl.CreatePageCommand;
import smart.generator.command.impl.CreateServiceCommand;
import smart.generator.command.impl.LoadDictCommand;
@RunWith(OrderedRunner.class)
public class CommandTest {
......@@ -25,8 +25,8 @@ public class CommandTest {
String[] params = {
"C:\\Smart", // Current Path
"demo", // App Name
"com.smart", // App Group
"com.smart.demo" // App Package = <App Group> + <App Artifact>
"smart", // App Group
"smart.demo" // App Package = <App Group> + <App Artifact>
};
boolean result = invoker.execCommand(params);
if (!result) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册