⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servicebuilder.java

📁 自动生成java代码,包括service
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/**
 * 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 + -