package com.annotationtodaotoservice;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
/**
* @see 生成dao 和service 文件和文件夹
* @author liuqing
* @since 2011-5-1
* @version 1.0
*/
public class DaoServiceImpl {
private Logger log = Logger.getLogger(DaoServiceImpl.class.getName());
private String entityDir;
public static void main(String args[]) throws Exception {
DaoServiceImpl dao = new DaoServiceImpl();
dao.entityDir = "D:\\cache\\entity";
dao.packageToFile("dao.impl");
dao.packageToFile("service.impl");
Map<String,List<File>> fileMap = dao.entityFileToDaoFile();
List<File> daoFile = fileMap.get("dao");
List<File> daoImplFile = fileMap.get("daoImpl");
List<File> serviceFile = fileMap.get("service");
List<File> serviceFileImpl = fileMap.get("serviceImpl");
OutputStream out = null;
dao.outFileDaoAndService(daoFile,out,1);
dao.outFileDaoAndService(daoImplFile,out,2);
dao.outFileDaoAndService(serviceFile,out,3);
dao.outFileDaoAndService(serviceFileImpl,out,4);
if (out != null) {
out.close();
}
}
public void outFileDaoAndService(List<File> files,OutputStream out,int type)
throws FileNotFoundException {
for (File fileName:files) {
out = new FileOutputStream(fileName);
this.print(out, type, fileName.getName());
}
}
public String toLowerFirst(String str) {
if (str != null && !"".equals(str)) {
char ch[] = str.toCharArray();
if (ch.length > 0) {
if (ch[0] < 'a') {
ch[0] = (char) (ch[0] + 32);
}
}
return (new String(ch));
}
return str;
}
public String toUpFirst(String str) {
if (str != null && !"".equals(str)) {
char ch[] = str.toCharArray();
if (ch.length > 0) {
if (ch[0] > 'Z') {
ch[0] = (char) (ch[0] - 32);
}
}
return (new String(ch));
}
return str;
}
/**
*
* @param out
* @param typeInfo 1:为IDao 2 DaoImpl 3 IService 4 ServiceImpl
*/
public void print(OutputStream output,int typeInfo,String clazzName) {
PrintWriter out = new PrintWriter(output);
if (typeInfo == 1) {
this.fileToDao(this.javaFileToClassName(clazzName), out, " com.bs.phs.dao.jkjy");
}
else if (typeInfo == 2) {
this.fileToDaoImpl(this.javaFileToClassName(clazzName), out, " com.bs.phs.dao.jkjy.impl");
}
else if (typeInfo == 3) {
this.fileToService(this.javaFileToClassName(clazzName), out, " com.bs.phs.service.jkjy");
}
else {
this.fileToServiceImpl(this.javaFileToClassName(clazzName), out, " com.bs.phs.service.jkjy.impl");
}
out.flush();
}
public void fileToDao(String clazzName,PrintWriter out,String packageInfo) {
out.println("package " + packageInfo + ";");
out.println("");
// out.println("import " + packageInfo +"." + clazzName + ";");
this.toLogger(clazzName, out, packageInfo);
out.println("public interface " + clazzName +
" extends IBaseDao<" + this.daoService(clazzName,1) + "> {");
out.println();
out.println("}");
out.flush();
}
/**
* 文件头部信息日志
* @param clazzName
* @param out
* @param packageInfo
*/
public void toLogger(String clazzName,PrintWriter out,String packageInfo) {
out.println();
out.println("/**");
out.println(" * @since " + packageInfo + "." + clazzName + ".java");
out.println(" * @see " +
clazzName + " create datetime:" + dateToString()
+ "");
out.println(" * @author liuqing");
out.println(" * @version 1.0");
out.println(" */");
}
public void fileToDaoImpl(String clazzName,PrintWriter out,String packageInfo) {
out.println("package " + packageInfo + ";");
out.println("");
out.println("import " + packageInfo +"." + clazzName + ";");
this.toLogger(clazzName, out, packageInfo);
out.println("@Repository(\"" +
this.toLowerFirst(clazzName).substring(0, clazzName.length() - 4) +
"\")");
out.println("public class " + clazzName +
" extends BaseDaoImpl<" + this.daoService(clazzName,2) + "> implements " +
"I" + this.daoService(clazzName, 2) +
"Dao {");
out.println();
out.println("}");
out.flush();
}
public void fileToService(String clazzName,PrintWriter out,String packageInfo) {
out.println("package " + packageInfo + ";");
out.println("");
out.println("import " + packageInfo +"." + clazzName + ";");
this.toLogger(clazzName, out, packageInfo);
out.println("public interface " + clazzName +
" extends IBaseService<" + this.daoService(clazzName,3) + "> {");
out.println();
out.println("}");
out.flush();
}
/**
* UsbServiceImpl
* @param clazzName
* @param out
* @param packageInfo
*/
public void fileToServiceImpl(String clazzName,PrintWriter out,String packageInfo) {
out.println("package " + packageInfo + ";");
out.println("");
out.println("import " + packageInfo +"." + clazzName + ";");
this.toLogger(clazzName, out, packageInfo);
out.println("@Transactional");
out.println("@Service(\"" + this.toLowerFirst(clazzName).substring(0, clazzName.length() - 4) + "\")");
out.println("public class " + clazzName +
" extends BaseServiceImpl<" + this.daoService(clazzName,4) + "> implements " +
"I" + this.daoService(clazzName,4) + "Service" +
" {");
out.println("");
String annotationName = clazzName.substring(0, clazzName.length() - 4);
out.println("");
String daoName = annotationName.substring(0, annotationName.length() - 7) + "Dao";
out.println("@Resource(name=\"" + this.toLowerFirst(daoName) + "\")");
out.println("private I" + this.toUpFirst(daoName) + " " + this.toLowerFirst(daoName) +";");
out.println("");
out.println("@Override");
out.println("public IBaseDao<" +
this.toUpFirst(daoName.substring(0, daoName.length() - 3)) +
"> getTargetDao() {");
out.println(" return " + this.toLowerFirst(daoName) + ";");
out.println("}");
out.println("");
out.println("}");
out.flush();
}
/**
* 根据文件生成 ClassName
* @param inclassName
* @param typeInfo 1:为IDao 2 DaoImpl 3 IService 4 ServiceImpl
* @return
*/
public String daoService(String inclassName,int typeInfo) {
int classLength = inclassName.length();
if (typeInfo == 1) {
return inclassName.substring(1, classLength - 3);
}
else if (typeInfo == 2){
return inclassName.substring(0, classLength - 7);
}
else if (typeInfo == 3){
return inclassName.substring(1, classLength - 7);
}
else {
return inclassName.substring(0, classLength - 11);
}
}
/**
* 找到entityFile
* @param covertDao
* @param packageInfo
* @throws FileNotFoundException
*/
public File[] entityFileDir ()
throws FileNotFoundException {
List<File> files = new ArrayList<File>();
File entityDirInfo = new File(entityDir);
//新生成File类型
File[] newFiles = new File[]{};
File[] entityFiles = entityDirInfo.listFiles();
entityDirInfo.mkdirs();
for (File f:entityFiles) {
if (f.getName().endsWith(".java")) {
files.add(f);
//System.out.println("---" + f.getName());
}
}
return files.toArray(newFiles);
}
/**
* 通过实体文件生成dao 和 service 文件
* @param entityDir
* @param typeInfo
*/
public Map<String,List<File>> entityFileToDaoFile()
throws FileNotFoundException {
Map<String,List<File>> fileMap = new HashMap<String,List<File>>();
List<File> dao = new ArrayList<File>();
List<File> daoImpl = new ArrayList<File>();
List<File> service = new ArrayList<File>();
List<File> serviceImpl = new ArrayList<File>();
File[] entityFiles = this.entityFileDir();
for (File enFile:entityFiles) {
int pos = enFile.getName().indexOf(".");
String fileName = enFile.getName();
String daoFileName = "I" + fileName.substring(0, pos) + "Dao.java";
String daoImplFileName = fileName.substring(0, pos) + "DaoImpl.java";
dao.add(new File(this.basePath() + File.separator +
"dao" + File.separator + daoFileName));
daoImpl.add(new File(this.basePath() +
File.separator + "dao" + File.separator + "impl" +
File.separator + daoImplFileName));
String serviceFileName = "I" + fileName.substring(0, pos) + "Service.java";
String serviceImplFileName = fileName.substring(0, pos) + "ServiceImpl.java";
service.add(new File(this.basePath() + "" +
File.separator + "service" + File.separator +serviceFileName));
serviceImpl.add(new File(this.basePath() +
File.separator + "service" + File.separator + "impl" +
File.separator + serviceImplFileName));
}
fileMap.put("dao", dao);
fileMap.put("daoImpl", daoImpl);
fileMap.put("service", service);
fileMap.put("serviceImpl", serviceImpl);
return fileMap;
}
/**
* 返加文件夹操作权限
* @param directoryFile
* @param packageInfo 创建文件夹
* @return File
*/
public File packageToFile(String packageInfo) {
StringBuffer strBuff = new StringBuffer(basePath());
strBuff.append(File.separator + packageInfo.replace(".", File.separator));
File file = new File(strBuff.toString());
file.mkdirs();
return file;
}
/**
* 基础信息
* @return String
*/
public String basePath(){
int i = this.entityDir.lastIndexOf(File.separator);
System.out.println("");
System.out.println(this.entityDir.substring(0, i));
String basePath = this.entityDir.substring(0, i);
log.info(basePath);
return basePath;
}
public String javaFileToClassName(String javaFileName) {
int i = javaFileName.indexOf(".");
return javaFileName.substring(0, i);
}
public String dateToString() {
SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return simp.format(new Date());
}
public String getEntityDir() {
return entityDir;
}
public void setEntityDir(String entityDir) {
this.entityDir = entityDir;
}
}
spring2.5之前片本
package com.annotationtodaotoservice;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
/**
* @see 生成Spring bean 文件
* @author liuqing
*/
public class SpringBeanFileImpl extends DaoServiceImpl {
private String packeInformation;
private String outFilePath;
public static void main(String args[]) throws FileNotFoundException {
SpringBeanFileImpl imp =
new SpringBeanFileImpl("com.hd.digitalxcampus","f:\\beaninfo");
imp.setEntityDir("E:\\liuqing\\workspace\\phs\\workspace\\phs\\src\\com\bs\\phs\\domain\\report");
imp.toSpringBeanFile();
}
public SpringBeanFileImpl() {
}
public SpringBeanFileImpl(String packeInformation, String outFilePath) {
this.packeInformation = packeInformation;
this.outFilePath = outFilePath;
}
public void toSpringBeanFile() throws FileNotFoundException {
System.out.println("---" + this.outFilePath);
OutputStream outputDao = new FileOutputStream(this.outFilePath + File.separator + "spring-dao.xml");
OutputStream outputService = new FileOutputStream(this.outFilePath + File.separator + "spring-service.xml");
PrintWriter outDao = new PrintWriter(outputDao);
PrintWriter outService = new PrintWriter(outputService);
for (String clazzName:this.getClazzName()) {
bean(clazzName,outDao,outService);
}
if (outputDao != null) {
try {
outputDao.close();
}
catch (IOException ex) {
}
}
if (outputService != null) {
try {
outputService.close();
}
catch (IOException ex) {
}
}
}
public List<String> getClazzName() throws FileNotFoundException {
List<String> classNames = new ArrayList<String>();
File entityFiles[] = this.entityFileDir();
for (File en:entityFiles) {
classNames.add(this.javaFileToClassName(en.getName()));
}
return classNames;
}
public void bean(String clazzName,PrintWriter outDao
,PrintWriter serviceDao) {
this.toIdInfo(clazzName, 1);
outDao.println("<bean id=\"" + this.firstLower(clazzName) + "Dao" +
"\" parent=\"adminInfoDao\" class=\"" + this.daoClassName(clazzName) +
"\"> ");
outDao.println("</bean>");
serviceDao.println("<bean id=\"" + this.firstLower(clazzName) + "Service" +
"\" class=\"" + this.serviceClassName(clazzName) +
"\"> ");
// <property name="baseDao" ref="foodTypeDao" />
serviceDao.println(" <property name=\"baseDao\" ref=\"" +
this.firstLower(clazzName) + "Dao" +
"\" />");
serviceDao.println("</bean>");
outDao.flush();
serviceDao.flush();
}
/**
*
* @param clazzName
* @param type 1: dao; 2: service;
* @return
*/
public String toIdInfo(String clazzName,int type) {
if (type == 1) {
return this.packeInformation + ".dao.impl." + clazzName + "DaoImpl";
}
else if (type == 2) {
return this.packeInformation + ".service.impl." + clazzName + "ServiceImpl";
}
else {
return null;
}
}
/**
*
* @param clazzName
* @return
*/
public String daoClassName(String clazzName) {
return this.toIdInfo(clazzName, 1);
}
/**
*
* @param clazzName
* @return
*/
public String serviceClassName(String clazzName) {
return this.toIdInfo(clazzName, 2);
}
/**
*
* @param clazzName
* @return String
*/
public String firstLower(String clazzName) {
char ch[] = clazzName.toCharArray();
if (ch[0] <= ((char)'z') && ch[0] >= ((char)'A')) {
ch[0] = (char)(ch[0] + 32);
}
return new String(ch);
}
public String getPackeInformation() {
return packeInformation;
}
public void setPackeInformation(String packeInformation) {
this.packeInformation = packeInformation;
}
public String getOutFilePath() {
return outFilePath;
}
public void setOutFilePath(String outFilePath) {
this.outFilePath = outFilePath;
}
}