📄 servicebuilder.java
字号:
/**
* Copyright (c) 2000-2007 bkgd, Inc. All rights reserved.
*/
package com.bkgd.platform.system.tools;
import com.bkgd.platform.system.kernel.util.ArrayUtil;
import com.bkgd.platform.system.kernel.util.ClassUtil;
import com.bkgd.platform.system.kernel.util.GetterUtil;
import com.bkgd.platform.system.kernel.util.PropertiesUtil;
import com.bkgd.platform.system.kernel.util.StringMaker;
import com.bkgd.platform.system.kernel.util.StringPool;
import com.bkgd.platform.system.kernel.util.StringUtil;
import com.bkgd.platform.system.kernel.util.Validator;
import com.bkgd.platform.system.model.ModelHintsUtil;
import com.bkgd.platform.system.util.SAXReaderFactory;
import com.bkgd.platform.system.util.FileUtil;
import com.bkgd.platform.system.util.TextFormatter;
import com.bkgd.platform.system.util.Time;
import com.bkgd.platform.system.util.log4j.Log4JUtil;
import com.thoughtworks.qdox.JavaDocBuilder;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.JavaParameter;
import com.thoughtworks.qdox.model.Type;
import de.hunsicker.io.FileFormat;
import de.hunsicker.jalopy.Jalopy;
import de.hunsicker.jalopy.storage.Convention;
import de.hunsicker.jalopy.storage.ConventionKeys;
import de.hunsicker.jalopy.storage.Environment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringBufferInputStream;
import java.io.StringReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* <a href="ServiceBuilder.java.html"><b><i>View Source</i></b></a>
*
*
* 业务类代码生成器 add cyzhang
* 修改历史:
* cyzhang 2008-10-30
* 生成json类时,根据returntype List<xxx>中标明的类,调用不同的Serializer
*/
public class ServiceBuilder {
public static void main(String[] args) {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Log4JUtil.configureLog4J(
classLoader.getResource("META-INF/bkplat-log4j.xml"));
Log4JUtil.configureLog4J(
classLoader.getResource("META-INF/bkplat-log4j-ext.xml"));
ServiceBuilder serviceBuilder = null;
if (args.length == 7) {
String fileName = args[0];
String hbmFileName = args[1];
String modelHintsFileName = args[2];
String springFileName = args[3];
String springDataSourceFileName = "";
String apiDir = args[5];
String implDir = "src";
String jsonFileName = args[6];
String sqlDir = "../sql";
String sqlFileName = "portal-tables.sql";
boolean autoNamespaceTables = false;
String baseModelImplPackage = "com.bkgd.platform.system.model.impl";
String basePersistencePackage = "com.bkgd.platform.system.service.persistence";
String beanLocatorUtilPackage = "com.bkgd.platform.system.kernel.bean";
String principalBeanPackage = "com.bkgd.platform.system.service.impl";
String propsUtilPackage = "com.bkgd.platform.system.util";
String springHibernatePackage = "com.bkgd.platform.system.spring.hibernate";
String springUtilPackage = "com.bkgd.platform.system.spring.util";
serviceBuilder = new ServiceBuilder(
fileName, hbmFileName, modelHintsFileName, springFileName,
springDataSourceFileName, apiDir, implDir, jsonFileName, sqlDir,
sqlFileName, autoNamespaceTables, baseModelImplPackage,
basePersistencePackage, beanLocatorUtilPackage,
principalBeanPackage, propsUtilPackage, springHibernatePackage,
springUtilPackage);
}
else if (args.length == 0) {
//service.xml文件位置
String fileName = System.getProperty("service.input.file");
String hbmFileName = System.getProperty("service.hbm.file");
String modelHintsFileName = System.getProperty("service.model.hints.file");
String springFileName = System.getProperty("service.spring.file");
String springDataSourceFileName = System.getProperty("service.spring.data.source.file");
String apiDir = System.getProperty("service.api.dir");
String implDir = System.getProperty("service.impl.dir");
String jsonFileName = System.getProperty("service.json.file");
String sqlDir = System.getProperty("service.sql.dir");
String sqlFileName = System.getProperty("service.sql.file");
boolean autoNamespaceTables = GetterUtil.getBoolean(System.getProperty("service.auto.namespace.tables"));
String baseModelImplPackage = System.getProperty("service.base.model.impl.package");
String basePersistencePackage = System.getProperty("service.base.persistence.package");
String beanLocatorUtilPackage = System.getProperty("service.bean.locator.util.package");
String principalBeanPackage = System.getProperty("service.principal.bean.package");
String propsUtilPackage = System.getProperty("service.props.util.package");
String springHibernatePackage = System.getProperty("service.spring.hibernate.package");
String springUtilPackage = System.getProperty("service.spring.util.package");
serviceBuilder = new ServiceBuilder(
fileName, hbmFileName, modelHintsFileName, springFileName,
springDataSourceFileName, apiDir, implDir, jsonFileName, sqlDir,
sqlFileName, autoNamespaceTables, baseModelImplPackage,
basePersistencePackage, beanLocatorUtilPackage,
principalBeanPackage, propsUtilPackage, springHibernatePackage,
springUtilPackage);
}
if (serviceBuilder == null) {
System.out.println(
"Please set the system properties. Sample properties are:\n" +
"\t-Dservice.input.file=${service.file}\n" +
"\t-Dservice.hbm.file=classes/META-INF/portal-hbm.xml\n" +
"\t-Dservice.model.hints.file=classes/META-INF/portal-model-hints.xml\n" +
"\t-Dservice.spring.file=classes/META-INF/portal-spring.xml\n" +
"\t-Dservice.api.dir=${project.dir}/portal-service/src\n" +
"\t-Dservice.impl.dir=src\n" +
"\t-Dservice.json.file=${project.dir}/portal-web/docroot/html/js/liferay/service_unpacked.js\n" +
"\t-Dservice.sql.dir=../sql\n" +
"\t-Dservice.sql.file=portal-tables.sql\n" +
"\t-Dservice.base.model.impl.package=com.bkgd.platform.system.model.impl\n" +
"\t-Dservice.base.persistence.package=com.bkgd.platform.system.service.persistence\n" +
"\t-Dservice.bean.locator.util.package=com.bkgd.platform.system.kernel.bean\n" +
"\t-Dservice.principal.bean.package=com.bkgd.platform.system.service.impl\n" +
"\t-Dservice.props.util.package=com.bkgd.platform.system.util\n" +
"\t-Dservice.spring.hibernate.package=com.bkgd.platform.system.spring.hibernate\n" +
"\t-Dservice.spring.util.package=com.bkgd.platform.system.spring.util");
}
}
public static Set getBadCmpFields() {
Set badCmpFields = new HashSet();
badCmpFields.add("access");
badCmpFields.add("active");
badCmpFields.add("alias");
badCmpFields.add("code");
badCmpFields.add("data");
badCmpFields.add("date");
badCmpFields.add("end");
badCmpFields.add("idd");
badCmpFields.add("featured");
badCmpFields.add("fields");
badCmpFields.add("from");
badCmpFields.add("hidden");
badCmpFields.add("id");
badCmpFields.add("index");
badCmpFields.add("internal");
badCmpFields.add("interval");
badCmpFields.add("join");
badCmpFields.add("key");
badCmpFields.add("log");
badCmpFields.add("number");
badCmpFields.add("password");
badCmpFields.add("path");
badCmpFields.add("primary");
badCmpFields.add("sale");
badCmpFields.add("settings");
badCmpFields.add("size");
badCmpFields.add("start");
badCmpFields.add("text");
badCmpFields.add("to");
badCmpFields.add("type");
badCmpFields.add("values");
return badCmpFields;
}
/**
* 这是系统保留保留的数据库表名字,当等于下列名字时,后加下划线。
* @return
*/
public static Set getBadTableNames() {
Set badTableNames = new HashSet();
badTableNames = new HashSet();
badTableNames.add("Account");
badTableNames.add("Action");
badTableNames.add("Cache");
badTableNames.add("ClassName");
badTableNames.add("Contact");
badTableNames.add("Group");
badTableNames.add("Organization");
badTableNames.add("Permission");
badTableNames.add("Release");
badTableNames.add("Resource");
badTableNames.add("Role");
badTableNames.add("User");
return badTableNames;
}
public static void writeFile(File file, String content) throws IOException {
writeFile(file, content, null);
}
public static void writeFile(File file, String content, Map jalopySettings)
throws IOException {
File tempFile = new File("ServiceBuilder.temp");
FileUtil.write(tempFile, content);
/*if (file.getName().equals("ShoppingItemPersistence.java")) {
FileUtil.write(file, content);
return;
}*/
// Strip unused imports
String[] checkImports = new String[] {
"com.bkgd.platform.system.BkPlatException",
"com.bkgd.platform.system.kernel.log.Log",
"com.bkgd.platform.system.kernel.log.LogFactoryUtil",
"com.bkgd.platform.system.kernel.util.BooleanWrapper",
"com.bkgd.platform.system.kernel.util.DateUtil",
"com.bkgd.platform.system.kernel.util.DoubleWrapper",
"com.bkgd.platform.system.kernel.util.FloatWrapper",
"com.bkgd.platform.system.kernel.util.GetterUtil",
"com.bkgd.platform.system.kernel.util.IntegerWrapper",
"com.bkgd.platform.system.kernel.util.LongWrapper",
"com.bkgd.platform.system.kernel.util.MethodWrapper",
"com.bkgd.platform.system.kernel.util.NullWrapper",
"com.bkgd.platform.system.kernel.util.OrderByComparator",
"com.bkgd.platform.system.kernel.util.ShortWrapper",
"com.bkgd.platform.system.kernel.util.StringMaker",
"com.bkgd.platform.system.kernel.util.StringPool",
"com.bkgd.platform.system.security.auth.HttpPrincipal",
"com.bkgd.platform.system.service.http.TunnelUtil",
"com.bkgd.platform.system.spring.hibernate.FinderCache",
"com.bkgd.platform.system.spring.hibernate.HibernateUtil",
"com.bkgd.platform.system.util.PropsUtil",
"com.bkgd.platform.system.util.JSONUtil",
"com.bkgd.platform.system.util.XSSUtil",
"com.bkgd.platform.util.dao.hibernate.QueryPos",
"com.bkgd.platform.util.dao.hibernate.QueryUtil",
"java.io.Serializable",
"java.rmi.RemoteException",
"java.sql.ResultSet",
"java.sql.SQLException",
"java.sql.Types",
"java.util.Collection",
"java.util.Collections",
"java.util.Date",
"java.util.HashSet",
"java.util.Iterator",
"java.util.List",
"java.util.Properties",
"java.util.Set",
"javax.sql.DataSource",
"org.apache.commons.logging.Log",
"org.apache.commons.logging.LogFactory",
"org.hibernate.Hibernate",
"org.hibernate.ObjectNotFoundException",
"org.hibernate.Query",
"org.hibernate.SQLQuery",
"org.json.JSONArray",
"org.json.JSONObject",
"org.springframework.dao.DataAccessException",
"org.springframework.jdbc.core.SqlParameter",
"org.springframework.jdbc.object.MappingSqlQuery",
"org.springframework.jdbc.object.SqlUpdate"
};
Set classes = ClassUtil.getClasses(tempFile);
for (int i = 0; i < checkImports.length; i++) {
String importClass = checkImports[i].substring(
checkImports[i].lastIndexOf(".") + 1, checkImports[i].length());
if (!classes.contains(importClass)) {
content = StringUtil.replace(
content, "import " + checkImports[i] + ";", "");
}
}
FileUtil.write(tempFile, content);
// Beautify
StringBuffer sb = new StringBuffer();
Jalopy jalopy = new Jalopy();
jalopy.setFileFormat(FileFormat.UNIX);
jalopy.setInput(tempFile);
jalopy.setOutput(sb);
try {
Jalopy.setConvention("../tools/jalopy.xml");
}
catch (FileNotFoundException fnne) {
}
try {
Jalopy.setConvention("../../misc/jalopy.xml");
}
catch (FileNotFoundException fnne) {
}
if (jalopySettings == null) {
jalopySettings = new HashMap();
}
Environment env = Environment.getInstance();
// Author
String author = GetterUtil.getString(
(String)jalopySettings.get("author"), "Brian Wing Shun Chan");
env.set("author", author);
// File name
env.set("fileName", file.getName());
Convention convention = Convention.getInstance();
String classMask =
"/**\n" +
" * <a href=\"$fileName$.html\"><b><i>View Source</i></b></a>\n" +
" *\n";
String[] classCommentsArray = (String[])jalopySettings.get("classComments");
if ((classCommentsArray != null) && (classCommentsArray.length > 0)) {
for (int i = 0; i < classCommentsArray.length; i++) {
String classComments = classCommentsArray[i];
//classComments = "The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.";
classComments = StringUtil.wrap(classComments, 76, "\n * ");
if (classComments.startsWith("\n")) {
classComments = classComments.substring(
1, classComments.length());
}
classMask += " * <p>\n" + classComments + "\n * </p>\n *\n";
}
}
classMask +=
" * @author $author$\n" +
" *\n";
String[] seeArray = (String[])jalopySettings.get("see");
if ((classCommentsArray != null) && (classCommentsArray.length > 0)) {
for (int i = 0; i < seeArray.length; i++) {
String see = seeArray[i];
classMask += " * @see " + see + "\n";
}
classMask += " *\n";
}
classMask += " */";
convention.put(
ConventionKeys.COMMENT_JAVADOC_TEMPLATE_CLASS,
env.interpolate(classMask));
convention.put(
ConventionKeys.COMMENT_JAVADOC_TEMPLATE_INTERFACE,
env.interpolate(classMask));
jalopy.format();
String newContent = sb.toString();
/*
// Remove blank lines after try {
newContent = StringUtil.replace(newContent, "try {\n\n", "try {\n");
// Remove blank lines after ) {
newContent = StringUtil.replace(newContent, ") {\n\n", ") {\n");
// Remove blank lines empty braces { }
newContent = StringUtil.replace(newContent, "\n\n\t}", "\n\t}");
// Add space to last }
newContent = newContent.substring(0, newContent.length() - 2) + "\n\n}";
*/
// Write file if and only if the file has changed
String oldContent = null;
if (file.exists()) {
// Read file
oldContent = FileUtil.read(file);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -