代码生成工具类

package org.java;

import java.io.File;
import java.io.FileWriter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import de.hunsicker.jalopy.Jalopy;

public class GenerateColumns {
	
	public static void main(String[] args) throws Exception {
		String configPath = GenerateColumns.class.getResource("/").toString().replace("file:/", "");
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(new File(configPath+"config.xml"));
		List<Node> nodes = document.selectNodes("//HibCool/BatchFile");
		for(Node node : nodes) {
			String status = node.valueOf("@Status");
			if(status != null && status.equals("InActive")) continue;
			generate(Template.TEMPLATEPATH.getContent()+node.getStringValue());
		}
		System.out.println("===========done===========");
	}

	/**
	 * 生成colum,condition,query
	 * @param xmlPath
	 * @throws Exception
	 */
	public static void generate(String xmlPath) throws Exception{
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(new File(xmlPath));
		String packageName = document.selectSingleNode("//Batch/Java").valueOf("@Package");
		List<Node> nodes = document.selectNodes("//Batch/PageQuery");
		for(Node node : nodes) {
			String columnTemplate = Template.COLUMNS.getContent();
			String name = toUpperCaseFirst(node.valueOf("@Name"));
			String columnName = name+"Columns";
			String select = node.valueOf("@Select");
			String from = node.valueOf("@From");
			String where = node.valueOf("@Where");
			String orderby = node.valueOf("@Orderby");
			String groupby = node.valueOf("@Groupby");
			String[] fieldArr = select.split(",");
			StringBuilder strFieldParam = new StringBuilder();
			StringBuilder strSetFun = new StringBuilder();
			StringBuilder strGetSet = new StringBuilder();
			int fieldSize = fieldArr.length;
			String columnSize = String.valueOf(fieldSize);
			for(int i = 0; i < fieldSize; i++) {
				String field = fieldArr[i];
				Matcher matcher = Pattern.compile("\\.\\w").matcher(field);
				matcher.find();
				String upper = matcher.group(0);
				String realField = field.replace(upper, upper.toUpperCase()).replace(".", "");
				
				strFieldParam.append("String "+realField);
				if(i != fieldSize-1) strFieldParam.append(",");

				String setGetName = toUpperCaseFirst(realField.toLowerCase());
				strSetFun.append("set"+setGetName+"("+realField+");");
			
				strGetSet.append("public void set"+setGetName+"(String "+realField+") {this.setField("+i+", "+realField+");} ")
				.append(" public String get"+setGetName+"() {return this.getField("+i+");}");
			}
			
			//生成columns
			String columns = columnTemplate.replace("#PackageName#", packageName)
					.replaceAll("#ColumnName#", columnName)
					.replaceAll("#ColumnSize#", columnSize)
					.replaceAll("#FieldParam#", strFieldParam.toString())
					.replaceAll("#SetFun#", strSetFun.toString())
					.replaceAll("#GetSet#", strGetSet.toString());
			writeStringToFile(packageName.replace(".", "/")+"/"+columnName+".java",columns);
	        
	        String conditionTemplate = Template.CONDITION.getContent();
	        String conditonName = name+"Condition";
			List<Node> conditions = node.selectNodes("./Condition");
			int conditionSize = conditions.size();
			StringBuilder conditionGetSet = new StringBuilder();
			StringBuilder strConditionWords = new StringBuilder();
			StringBuilder strConditionCount = new StringBuilder();
			for(int i = 0; i < conditionSize; i++) {
				Node conditionNode = conditions.get(i);
				String condition = conditionNode.getStringValue();
				String conditonField = condition.split("=")[1].replaceAll("('\\$|\\$'|\\s)", "");
				String setGetName = toUpperCaseFirst(conditonField.toLowerCase());
				conditionGetSet.append("public void set"+setGetName+"(String "+conditonField+") {this.setField("+i+", "+conditonField+");} ")
				.append(" public String get"+setGetName+"() {return this.getField("+i+");}");
				
				strConditionWords.append("\""+condition.replaceAll("\\$\\w*\\$", "~~")+"\"");
				strConditionCount.append("1");
				if(i != conditionSize-1) {
					strConditionWords.append(",");
					strConditionCount.append(",");
				}
			}
			
			//生成condition
			String condition = conditionTemplate.replace("#PackageName#", packageName)
					.replaceAll("#ConditionName#", conditonName)
					.replaceAll("#ConditionSize#", String.valueOf(conditionSize+1))
					.replaceAll("#GetSet#", conditionGetSet.toString());
			writeStringToFile(packageName.replace(".", "/")+"/"+conditonName+".java",condition);
			
			//生成query
			String queryTemplate = Template.QUERY.getContent();
			String query = queryTemplate.replace("#PackageName#", packageName)
					.replaceAll("#QueryName#", name)
					.replaceAll("#Select#", select)
					.replaceAll("#From#", from)
					.replaceAll("#Where#", where)
					.replaceAll("#Orderby#", orderby)
					.replaceAll("#Groupby#", groupby)
					.replaceAll("#ConditionWords#", strConditionWords.toString())
					.replaceAll("#ConditionCount#", strConditionCount.toString())
					.replaceAll("#GetSet#", conditionGetSet.toString());
			writeStringToFile(packageName.replace(".", "/")+"/"+name+"Query.java",query);
		}
	}
	
	/**
	 * 首字母转大写
	 * @param str
	 * @return
	 */
	public static String toUpperCaseFirst(String str){
	    return (new StringBuilder()).append(Character.toUpperCase(str.charAt(0))).append(str.substring(1).toLowerCase()).toString();
	}
	
	/**
	 * 将字符串写入文件
	 * @param filePath
	 * @param str
	 * @throws Exception
	 */
	public static void writeStringToFile(String filePath, String str) throws Exception{
		StringBuffer output = new StringBuffer();
        Jalopy jalopy = new Jalopy();
        jalopy.setEncoding("UTF-8");
        jalopy.setInput(str, "Generate.java");
        jalopy.setOutput(output);
        jalopy.format();
        String path = Template.GENERATEPATH.getContent();
        String columnPath = path+filePath;
        File packagePath = new File(columnPath).getParentFile();
        if(!packagePath.exists()) packagePath.mkdirs();
        FileWriter fileWriter = new FileWriter(columnPath);
        fileWriter.write(output.toString());
        fileWriter.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值