java通過實體類生成serivce文件

package generate;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;

import org.apache.log4j.Logger;



/**
 * 
* @projectName:testttt     
* @author:tangwzh   
* @createTime:2014-5-19 上午11:21:03     
* @function:   利用反射自動生成service.java和serviceImpl.java
* @version:
 */
public class GenerateService {
	private static final Logger LOGGER = Logger.getLogger(Thread
			.currentThread().getStackTrace()[1].getClassName());
	/**
	 * 
	 * @param ServiceFilePath
	 * @param tableName
	 * @param modelQualityName
	 * @throws ClassNotFoundException 
	 */
	public static void generateServiceFile(String serviceFilePath, String tableName, String modelQualifiedName) throws ClassNotFoundException{
		String lowerCaseName = tableName.toLowerCase();
		String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
		String name = fistLetter + lowerCaseName.substring(1);
		String fileName = serviceFilePath + "/" + name + "Service.java";
		File file = new File(fileName);
		if(!file.exists()){
			try {
				boolean isSuccess = file.createNewFile();
				if(!isSuccess){
					LOGGER.error("創建Service文件失敗");
					return;
				}
			} catch (IOException e) {
				e.printStackTrace();
				LOGGER.error("create Service file error:", e);
			}
		}
		FileWriter fileWriter = null;
		String commonFields = getFields(modelQualifiedName);
		try {
			fileWriter = new FileWriter(file);
			fileWriter.write("\n");
			fileWriter.write("public interface " + name + "Service {");
			//get方法,支持排序
			printTab(fileWriter, 1);
			fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields +
					", String sort, String order);");
			fileWriter.write("\n");
			//get方法,支持排序和分頁
			printTab(fileWriter, 1);
			fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields + 
					", String sort, String order, int startrow, int pagesize);");
			fileWriter.write("\n");
			//getCount方法
			printTab(fileWriter, 1);
			fileWriter.write("public int get" + name + "sCount(" + commonFields +");");
			fileWriter.write("\n");
			//add方法
			printTab(fileWriter, 1);
			fileWriter.write("public void add" + name + "(" + commonFields + ");");
			fileWriter.write("\n");
			//mod方法
			printTab(fileWriter, 1);
			fileWriter.write("public void mod" + name + "(" + commonFields + ");");
			fileWriter.write("\n");
			//mod方法
			printTab(fileWriter, 1);
			fileWriter.write("public void del" + name + "(String " + name + "Id);");
			fileWriter.write("\n");
			//結束
			fileWriter.write("}");
			
		} catch (Exception e) {
			e.printStackTrace();
			LOGGER.error(e);
		}finally{
			try {
				if(fileWriter != null){
					fileWriter.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}
	public static void generateServiceImplFile(String serviceFilePath, String tableName, String modelQualifiedName) throws ClassNotFoundException{
		String lowerCaseName = tableName.toLowerCase();
		String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
		String name = fistLetter + lowerCaseName.substring(1);
		String fileName = serviceFilePath + "/" + name + "ServiceImpl.java";
		File file = new File(fileName);
		if(!file.exists()){
			try {
				boolean isSuccess = file.createNewFile();
				if(!isSuccess){
					LOGGER.error("創建ServiceImpl文件失敗");
					return;
				}
			} catch (IOException e) {
				e.printStackTrace();
				LOGGER.error("create ServiceImpl file error:", e);
			}
		}
		FileWriter fileWriter = null;
		String commonFields = getFields(modelQualifiedName);
		try {
			fileWriter = new FileWriter(file);
			//開始
			implStart(name, fileWriter);
			
			//get方法,支持排序
			selectOrder(modelQualifiedName, name, fileWriter, commonFields);
			
			//get方法,支持排序和分頁
			selectOrderAndPage(modelQualifiedName, name, fileWriter, commonFields);
			
			//getCount方法
			selectCount(modelQualifiedName, name, fileWriter, commonFields);
			
			//add方法
			insert(modelQualifiedName, name, fileWriter, commonFields);
			
			//mod方法
			update(modelQualifiedName, name, fileWriter, commonFields);
			
			//delete方法
			delete(name, fileWriter);
			
			//結束
			fileWriter.write("}");
			
		} catch (Exception e) {
			e.printStackTrace();
			LOGGER.error(e);
		}finally{
			try {
				if(fileWriter != null){
					fileWriter.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}
	private static void delete(String name, FileWriter fileWriter)
			throws IOException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public void del" + name + "(String " + name.toLowerCase() + "Id){");
		printTab(fileWriter, 2);
		fileWriter.write("Map<String, Object> index = new HashMap<String, Object>();");
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_STRING_NULL != " + name.toLowerCase() + "Id){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"" + name.toLowerCase() + "Id\", " + name.toLowerCase() + "Id);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		printTab(fileWriter, 1);
		printTab(fileWriter, 2);
		fileWriter.write(name.toLowerCase() + "Dao.delete" + name + "(index);");
		printTab(fileWriter, 1);
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static void update(String modelQualifiedName, String name,
			FileWriter fileWriter, String commonFields) throws IOException,
			ClassNotFoundException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public void mod" + name + "(" + commonFields + "){");
		printTab(fileWriter, 0);
		fileWriter.write(generateValid(modelQualifiedName));
		printTab(fileWriter, 1);
		printTab(fileWriter, 2);
		fileWriter.write(name.toLowerCase() + "Dao.update" + name + "(index);");
		printTab(fileWriter, 1);
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static void insert(String modelQualifiedName, String name,
			FileWriter fileWriter, String commonFields) throws IOException,
			ClassNotFoundException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public void add" + name + "(" + commonFields + "){");
		printTab(fileWriter, 0);
		fileWriter.write(generateInstance(name, modelQualifiedName));
		fileWriter.write("\n");
		printTab(fileWriter, 2);
		fileWriter.write(name.toLowerCase() + "Dao.insert" + name + "(instance);");
		//結束
		printTab(fileWriter, 1);
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static String generateInstance(String name, String modelQualifiedName) throws ClassNotFoundException {
		Class<?> c = Class.forName(modelQualifiedName);    
		Field[] fields = c.getDeclaredFields();  
		String fieldName = null;
		StringBuilder sb = new StringBuilder();
		sb.append("\t").append("\t").append( name + " instance = new " + name + "();");
		for(Field field: fields){   
			fieldName = field.getName();
			sb.append("\n").append("\t").append("\t").append("instance.set" + firstLetterUpper(fieldName) + "(" + fieldName + ");");
		}
		return sb.toString();
	}
	private static void selectCount(String modelQualifiedName, String name,
			FileWriter fileWriter, String commonFields) throws IOException,
			ClassNotFoundException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public int get" + name + "sCount(" + commonFields +"){");
		printTab(fileWriter, 0);
		fileWriter.write(generateValid(modelQualifiedName));
		//return語句
		fileWriter.write("\n");
		printTab(fileWriter, 2);
		fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "sCount(index);");
		//結束
		printTab(fileWriter, 1);
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static void selectOrderAndPage(String modelQualifiedName,
			String name, FileWriter fileWriter, String commonFields)
			throws IOException, ClassNotFoundException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields + 
				", String sort, String order, int startRow, int pageSize){");
		printTab(fileWriter, 0);
		fileWriter.write(generateValid(modelQualifiedName));
		//sort
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_STRING_NULL != sort){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"sort\", sort);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//order
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_STRING_NULL != order){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"order\", order);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//startRow
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_INT_NULL != startRow){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"startRow\", startRow);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//pageSize
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_INT_NULL != pageSize){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"pageSize\", pageSize);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//return語句
		fileWriter.write("\n");
		printTab(fileWriter, 2);
		fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "s(index);");
		printTab(fileWriter, 1);
		//結束
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static void selectOrder(String modelQualifiedName,
			String name, FileWriter fileWriter, String commonFields)
			throws IOException, ClassNotFoundException {
		printTab(fileWriter, 1);
		fileWriter.write("@Override");
		printTab(fileWriter, 1);
		fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields + 
				", String sort, String order){");
		printTab(fileWriter, 0);
		fileWriter.write(generateValid(modelQualifiedName));
		//sort
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_STRING_NULL != sort){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"sort\", sort);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//order
		printTab(fileWriter, 2);
		fileWriter.write("if(Constants.DEF_STRING_NULL != order){");
		printTab(fileWriter, 3);
		fileWriter.write("index.put(\"order\", order);");
		printTab(fileWriter, 2);
		fileWriter.write("}");
		//return語句
		fileWriter.write("\n");
		printTab(fileWriter, 2);
		fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "s(index);");
		printTab(fileWriter, 1);
		//結束
		fileWriter.write("}");
		fileWriter.write("\n");
	}
	private static void implStart(String name, FileWriter fileWriter)
			throws IOException {
		//註解
		fileWriter.write("\n");
		fileWriter.write("@Service(\"" + name + "ServiceImpl\")");
		//開始
		fileWriter.write("\n");
		fileWriter.write("public class " + name + "ServiceImpl implements " + name + "Service {");
		fileWriter.write("\n");
		printTab(fileWriter, 1);
		fileWriter.write("@Resource(name = \"" + name + "DaoImpl\")");
		printTab(fileWriter, 1);
		fileWriter.write("private " + name + "Dao " + name.toLowerCase() + "Dao;");
		fileWriter.write("\n");
	}
	
	public static String getFields(String modelQualifiedName) throws ClassNotFoundException{
		Class<?> c = Class.forName(modelQualifiedName);    
		Field[] fields = c.getDeclaredFields();  
		String fieldName = null;
		Class<?> type = null;
		String fieldType = null;
		StringBuilder sb = new StringBuilder();
		for(Field field: fields){   
			fieldName = field.getName();
			type = field.getType();
			fieldType = type.getSimpleName();
			sb.append(fieldType + " " + fieldName + ", ");
		}
		sb.deleteCharAt(sb.length() - 2);
		return sb.toString();
	}
	
	private static void printTab(FileWriter fileWriter, int count) throws IOException {
		fileWriter.write("\n");
		for(int i = 0 ; i < count; i++){
			fileWriter.write("\t");
		}
	}
	
	private static String generateValid(String modelQualifiedName) throws ClassNotFoundException{
		Class<?> c = Class.forName(modelQualifiedName);    
		Field[] fields = c.getDeclaredFields();  
		String fieldName = null;
		Class<?> type = null;
		String fieldType = null;
		StringBuilder sb = new StringBuilder();
		sb.append("\t").append("\t").append("Map<String, Object> index = new HashMap<String, Object>();");
		String defaultNull = null;
		for(Field field: fields){   
			fieldName = field.getName();
			type = field.getType();
			fieldType = type.getSimpleName();
			if("String".equals(fieldType)){
				defaultNull = "Constants.Constants.DEF_STRING_NULL";
			}else if("int".equals(fieldType)){
				defaultNull = "Constants.DEF_INT_NULL";
			}else{
				defaultNull = "null";
			}
			sb.append("\n");
			sb.append("\t").append("\t");
			sb.append("if(" + defaultNull + " != " + fieldName +"){");
			sb.append("\n");
			sb.append("\t").append("\t").append("\t");
			sb.append("index.put(\"" + fieldName + "\", " + fieldName + ");");
			sb.append("\n");
			sb.append("\t").append("\t").append("}");
		}
		return sb.toString();
	}
	
	public static String firstLetterUpper(String str){
		String s = str.substring(0, 1).toUpperCase();
		return s + str.substring(1);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章